Home | History | Annotate | Download | only in Unit
      1 //===-- powidf2_test.cpp - Test __powidf2 ---------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file tests __powidf2 for the compiler_rt library.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "int_lib.h"
     15 #include <stdio.h>
     16 #include <math.h>
     17 
     18 // Returns: a ^ b
     19 
     20 double __powidf2(double a, si_int b);
     21 
     22 int test__powidf2(double a, si_int b, double expected)
     23 {
     24     double x = __powidf2(a, b);
     25     int correct = (x == expected) && (signbit(x) == signbit(expected));
     26     if (!correct)
     27         printf("error in __powidf2(%f, %d) = %f, expected %f\n",
     28                a, b, x, expected);
     29     return !correct;
     30 }
     31 
     32 int main()
     33 {
     34     if (test__powidf2(0, 0, 1))
     35         return 1;
     36     if (test__powidf2(1, 0, 1))
     37         return 1;
     38     if (test__powidf2(1.5, 0, 1))
     39         return 1;
     40     if (test__powidf2(2, 0, 1))
     41         return 1;
     42     if (test__powidf2(INFINITY, 0, 1))
     43         return 1;
     44 
     45     if (test__powidf2(-0., 0, 1))
     46         return 1;
     47     if (test__powidf2(-1, 0, 1))
     48         return 1;
     49     if (test__powidf2(-1.5, 0, 1))
     50         return 1;
     51     if (test__powidf2(-2, 0, 1))
     52         return 1;
     53     if (test__powidf2(-INFINITY, 0, 1))
     54         return 1;
     55 
     56     if (test__powidf2(0, 1, 0))
     57         return 1;
     58     if (test__powidf2(0, 2, 0))
     59         return 1;
     60     if (test__powidf2(0, 3, 0))
     61         return 1;
     62     if (test__powidf2(0, 4, 0))
     63         return 1;
     64     if (test__powidf2(0, 0x7FFFFFFE, 0))
     65         return 1;
     66     if (test__powidf2(0, 0x7FFFFFFF, 0))
     67         return 1;
     68 
     69     if (test__powidf2(-0., 1, -0.))
     70         return 1;
     71     if (test__powidf2(-0., 2, 0))
     72         return 1;
     73     if (test__powidf2(-0., 3, -0.))
     74         return 1;
     75     if (test__powidf2(-0., 4, 0))
     76         return 1;
     77     if (test__powidf2(-0., 0x7FFFFFFE, 0))
     78         return 1;
     79     if (test__powidf2(-0., 0x7FFFFFFF, -0.))
     80         return 1;
     81 
     82     if (test__powidf2(1, 1, 1))
     83         return 1;
     84     if (test__powidf2(1, 2, 1))
     85         return 1;
     86     if (test__powidf2(1, 3, 1))
     87         return 1;
     88     if (test__powidf2(1, 4, 1))
     89         return 1;
     90     if (test__powidf2(1, 0x7FFFFFFE, 1))
     91         return 1;
     92     if (test__powidf2(1, 0x7FFFFFFF, 1))
     93         return 1;
     94 
     95     if (test__powidf2(INFINITY, 1, INFINITY))
     96         return 1;
     97     if (test__powidf2(INFINITY, 2, INFINITY))
     98         return 1;
     99     if (test__powidf2(INFINITY, 3, INFINITY))
    100         return 1;
    101     if (test__powidf2(INFINITY, 4, INFINITY))
    102         return 1;
    103     if (test__powidf2(INFINITY, 0x7FFFFFFE, INFINITY))
    104         return 1;
    105     if (test__powidf2(INFINITY, 0x7FFFFFFF, INFINITY))
    106         return 1;
    107 
    108     if (test__powidf2(-INFINITY, 1, -INFINITY))
    109         return 1;
    110     if (test__powidf2(-INFINITY, 2, INFINITY))
    111         return 1;
    112     if (test__powidf2(-INFINITY, 3, -INFINITY))
    113         return 1;
    114     if (test__powidf2(-INFINITY, 4, INFINITY))
    115         return 1;
    116     if (test__powidf2(-INFINITY, 0x7FFFFFFE, INFINITY))
    117         return 1;
    118     if (test__powidf2(-INFINITY, 0x7FFFFFFF, -INFINITY))
    119         return 1;
    120 
    121     if (test__powidf2(0, -1, INFINITY))
    122         return 1;
    123     if (test__powidf2(0, -2, INFINITY))
    124         return 1;
    125     if (test__powidf2(0, -3, INFINITY))
    126         return 1;
    127     if (test__powidf2(0, -4, INFINITY))
    128         return 1;
    129     if (test__powidf2(0, 0x80000002, INFINITY))
    130         return 1;
    131     if (test__powidf2(0, 0x80000001, INFINITY))
    132         return 1;
    133     if (test__powidf2(0, 0x80000000, INFINITY))
    134         return 1;
    135 
    136     if (test__powidf2(-0., -1, -INFINITY))
    137         return 1;
    138     if (test__powidf2(-0., -2, INFINITY))
    139         return 1;
    140     if (test__powidf2(-0., -3, -INFINITY))
    141         return 1;
    142     if (test__powidf2(-0., -4, INFINITY))
    143         return 1;
    144     if (test__powidf2(-0., 0x80000002, INFINITY))
    145         return 1;
    146     if (test__powidf2(-0., 0x80000001, -INFINITY))
    147         return 1;
    148     if (test__powidf2(-0., 0x80000000, INFINITY))
    149         return 1;
    150 
    151     if (test__powidf2(1, -1, 1))
    152         return 1;
    153     if (test__powidf2(1, -2, 1))
    154         return 1;
    155     if (test__powidf2(1, -3, 1))
    156         return 1;
    157     if (test__powidf2(1, -4, 1))
    158         return 1;
    159     if (test__powidf2(1, 0x80000002, 1))
    160         return 1;
    161     if (test__powidf2(1, 0x80000001, 1))
    162         return 1;
    163     if (test__powidf2(1, 0x80000000, 1))
    164         return 1;
    165 
    166     if (test__powidf2(INFINITY, -1, 0))
    167         return 1;
    168     if (test__powidf2(INFINITY, -2, 0))
    169         return 1;
    170     if (test__powidf2(INFINITY, -3, 0))
    171         return 1;
    172     if (test__powidf2(INFINITY, -4, 0))
    173         return 1;
    174     if (test__powidf2(INFINITY, 0x80000002, 0))
    175         return 1;
    176     if (test__powidf2(INFINITY, 0x80000001, 0))
    177         return 1;
    178     if (test__powidf2(INFINITY, 0x80000000, 0))
    179         return 1;
    180 
    181     if (test__powidf2(-INFINITY, -1, -0.))
    182         return 1;
    183     if (test__powidf2(-INFINITY, -2, 0))
    184         return 1;
    185     if (test__powidf2(-INFINITY, -3, -0.))
    186         return 1;
    187     if (test__powidf2(-INFINITY, -4, 0))
    188         return 1;
    189     if (test__powidf2(-INFINITY, 0x80000002, 0))
    190         return 1;
    191     if (test__powidf2(-INFINITY, 0x80000001, -0.))
    192         return 1;
    193     if (test__powidf2(-INFINITY, 0x80000000, 0))
    194         return 1;
    195 
    196     if (test__powidf2(2, 10, 1024.))
    197         return 1;
    198     if (test__powidf2(-2, 10, 1024.))
    199         return 1;
    200     if (test__powidf2(2, -10, 1/1024.))
    201         return 1;
    202     if (test__powidf2(-2, -10, 1/1024.))
    203         return 1;
    204 
    205     if (test__powidf2(2, 19, 524288.))
    206         return 1;
    207     if (test__powidf2(-2, 19, -524288.))
    208         return 1;
    209     if (test__powidf2(2, -19, 1/524288.))
    210         return 1;
    211     if (test__powidf2(-2, -19, -1/524288.))
    212         return 1;
    213 
    214     if (test__powidf2(2, 31, 2147483648.))
    215         return 1;
    216     if (test__powidf2(-2, 31, -2147483648.))
    217         return 1;
    218     if (test__powidf2(2, -31, 1/2147483648.))
    219         return 1;
    220     if (test__powidf2(-2, -31, -1/2147483648.))
    221         return 1;
    222 
    223     return 0;
    224 }
    225