11.1Sjoerg//===-- powidf2_test.cpp - Test __powidf2 ---------------------------------===//
21.1Sjoerg//
31.1Sjoerg//                     The LLVM Compiler Infrastructure
41.1Sjoerg//
51.1Sjoerg// This file is dual licensed under the MIT and the University of Illinois Open
61.1Sjoerg// Source Licenses. See LICENSE.TXT for details.
71.1Sjoerg//
81.1Sjoerg//===----------------------------------------------------------------------===//
91.1Sjoerg//
101.1Sjoerg// This file tests __powidf2 for the compiler_rt library.
111.1Sjoerg//
121.1Sjoerg//===----------------------------------------------------------------------===//
131.1Sjoerg
141.1Sjoerg#include "int_lib.h"
151.1Sjoerg#include <stdio.h>
161.1Sjoerg#include <math.h>
171.1Sjoerg
181.1Sjoerg// Returns: a ^ b
191.1Sjoerg
201.1Sjoergdouble __powidf2(double a, si_int b);
211.1Sjoerg
221.1Sjoergint test__powidf2(double a, si_int b, double expected)
231.1Sjoerg{
241.1Sjoerg    double x = __powidf2(a, b);
251.1Sjoerg    int correct = (x == expected) && (signbit(x) == signbit(expected));
261.1Sjoerg    if (!correct)
271.1Sjoerg        printf("error in __powidf2(%f, %d) = %f, expected %f\n",
281.1Sjoerg               a, b, x, expected);
291.1Sjoerg    return !correct;
301.1Sjoerg}
311.1Sjoerg
321.1Sjoergint main()
331.1Sjoerg{
341.1Sjoerg    if (test__powidf2(0, 0, 1))
351.1Sjoerg        return 1;
361.1Sjoerg    if (test__powidf2(1, 0, 1))
371.1Sjoerg        return 1;
381.1Sjoerg    if (test__powidf2(1.5, 0, 1))
391.1Sjoerg        return 1;
401.1Sjoerg    if (test__powidf2(2, 0, 1))
411.1Sjoerg        return 1;
421.1Sjoerg    if (test__powidf2(INFINITY, 0, 1))
431.1Sjoerg        return 1;
441.1Sjoerg
451.1Sjoerg    if (test__powidf2(-0., 0, 1))
461.1Sjoerg        return 1;
471.1Sjoerg    if (test__powidf2(-1, 0, 1))
481.1Sjoerg        return 1;
491.1Sjoerg    if (test__powidf2(-1.5, 0, 1))
501.1Sjoerg        return 1;
511.1Sjoerg    if (test__powidf2(-2, 0, 1))
521.1Sjoerg        return 1;
531.1Sjoerg    if (test__powidf2(-INFINITY, 0, 1))
541.1Sjoerg        return 1;
551.1Sjoerg
561.1Sjoerg    if (test__powidf2(0, 1, 0))
571.1Sjoerg        return 1;
581.1Sjoerg    if (test__powidf2(0, 2, 0))
591.1Sjoerg        return 1;
601.1Sjoerg    if (test__powidf2(0, 3, 0))
611.1Sjoerg        return 1;
621.1Sjoerg    if (test__powidf2(0, 4, 0))
631.1Sjoerg        return 1;
641.1Sjoerg    if (test__powidf2(0, 0x7FFFFFFE, 0))
651.1Sjoerg        return 1;
661.1Sjoerg    if (test__powidf2(0, 0x7FFFFFFF, 0))
671.1Sjoerg        return 1;
681.1Sjoerg
691.1Sjoerg    if (test__powidf2(-0., 1, -0.))
701.1Sjoerg        return 1;
711.1Sjoerg    if (test__powidf2(-0., 2, 0))
721.1Sjoerg        return 1;
731.1Sjoerg    if (test__powidf2(-0., 3, -0.))
741.1Sjoerg        return 1;
751.1Sjoerg    if (test__powidf2(-0., 4, 0))
761.1Sjoerg        return 1;
771.1Sjoerg    if (test__powidf2(-0., 0x7FFFFFFE, 0))
781.1Sjoerg        return 1;
791.1Sjoerg    if (test__powidf2(-0., 0x7FFFFFFF, -0.))
801.1Sjoerg        return 1;
811.1Sjoerg
821.1Sjoerg    if (test__powidf2(1, 1, 1))
831.1Sjoerg        return 1;
841.1Sjoerg    if (test__powidf2(1, 2, 1))
851.1Sjoerg        return 1;
861.1Sjoerg    if (test__powidf2(1, 3, 1))
871.1Sjoerg        return 1;
881.1Sjoerg    if (test__powidf2(1, 4, 1))
891.1Sjoerg        return 1;
901.1Sjoerg    if (test__powidf2(1, 0x7FFFFFFE, 1))
911.1Sjoerg        return 1;
921.1Sjoerg    if (test__powidf2(1, 0x7FFFFFFF, 1))
931.1Sjoerg        return 1;
941.1Sjoerg
951.1Sjoerg    if (test__powidf2(INFINITY, 1, INFINITY))
961.1Sjoerg        return 1;
971.1Sjoerg    if (test__powidf2(INFINITY, 2, INFINITY))
981.1Sjoerg        return 1;
991.1Sjoerg    if (test__powidf2(INFINITY, 3, INFINITY))
1001.1Sjoerg        return 1;
1011.1Sjoerg    if (test__powidf2(INFINITY, 4, INFINITY))
1021.1Sjoerg        return 1;
1031.1Sjoerg    if (test__powidf2(INFINITY, 0x7FFFFFFE, INFINITY))
1041.1Sjoerg        return 1;
1051.1Sjoerg    if (test__powidf2(INFINITY, 0x7FFFFFFF, INFINITY))
1061.1Sjoerg        return 1;
1071.1Sjoerg
1081.1Sjoerg    if (test__powidf2(-INFINITY, 1, -INFINITY))
1091.1Sjoerg        return 1;
1101.1Sjoerg    if (test__powidf2(-INFINITY, 2, INFINITY))
1111.1Sjoerg        return 1;
1121.1Sjoerg    if (test__powidf2(-INFINITY, 3, -INFINITY))
1131.1Sjoerg        return 1;
1141.1Sjoerg    if (test__powidf2(-INFINITY, 4, INFINITY))
1151.1Sjoerg        return 1;
1161.1Sjoerg    if (test__powidf2(-INFINITY, 0x7FFFFFFE, INFINITY))
1171.1Sjoerg        return 1;
1181.1Sjoerg    if (test__powidf2(-INFINITY, 0x7FFFFFFF, -INFINITY))
1191.1Sjoerg        return 1;
1201.1Sjoerg
1211.1Sjoerg    if (test__powidf2(0, -1, INFINITY))
1221.1Sjoerg        return 1;
1231.1Sjoerg    if (test__powidf2(0, -2, INFINITY))
1241.1Sjoerg        return 1;
1251.1Sjoerg    if (test__powidf2(0, -3, INFINITY))
1261.1Sjoerg        return 1;
1271.1Sjoerg    if (test__powidf2(0, -4, INFINITY))
1281.1Sjoerg        return 1;
1291.1Sjoerg    if (test__powidf2(0, 0x80000002, INFINITY))
1301.1Sjoerg        return 1;
1311.1Sjoerg    if (test__powidf2(0, 0x80000001, INFINITY))
1321.1Sjoerg        return 1;
1331.1Sjoerg    if (test__powidf2(0, 0x80000000, INFINITY))
1341.1Sjoerg        return 1;
1351.1Sjoerg
1361.1Sjoerg    if (test__powidf2(-0., -1, -INFINITY))
1371.1Sjoerg        return 1;
1381.1Sjoerg    if (test__powidf2(-0., -2, INFINITY))
1391.1Sjoerg        return 1;
1401.1Sjoerg    if (test__powidf2(-0., -3, -INFINITY))
1411.1Sjoerg        return 1;
1421.1Sjoerg    if (test__powidf2(-0., -4, INFINITY))
1431.1Sjoerg        return 1;
1441.1Sjoerg    if (test__powidf2(-0., 0x80000002, INFINITY))
1451.1Sjoerg        return 1;
1461.1Sjoerg    if (test__powidf2(-0., 0x80000001, -INFINITY))
1471.1Sjoerg        return 1;
1481.1Sjoerg    if (test__powidf2(-0., 0x80000000, INFINITY))
1491.1Sjoerg        return 1;
1501.1Sjoerg
1511.1Sjoerg    if (test__powidf2(1, -1, 1))
1521.1Sjoerg        return 1;
1531.1Sjoerg    if (test__powidf2(1, -2, 1))
1541.1Sjoerg        return 1;
1551.1Sjoerg    if (test__powidf2(1, -3, 1))
1561.1Sjoerg        return 1;
1571.1Sjoerg    if (test__powidf2(1, -4, 1))
1581.1Sjoerg        return 1;
1591.1Sjoerg    if (test__powidf2(1, 0x80000002, 1))
1601.1Sjoerg        return 1;
1611.1Sjoerg    if (test__powidf2(1, 0x80000001, 1))
1621.1Sjoerg        return 1;
1631.1Sjoerg    if (test__powidf2(1, 0x80000000, 1))
1641.1Sjoerg        return 1;
1651.1Sjoerg
1661.1Sjoerg    if (test__powidf2(INFINITY, -1, 0))
1671.1Sjoerg        return 1;
1681.1Sjoerg    if (test__powidf2(INFINITY, -2, 0))
1691.1Sjoerg        return 1;
1701.1Sjoerg    if (test__powidf2(INFINITY, -3, 0))
1711.1Sjoerg        return 1;
1721.1Sjoerg    if (test__powidf2(INFINITY, -4, 0))
1731.1Sjoerg        return 1;
1741.1Sjoerg    if (test__powidf2(INFINITY, 0x80000002, 0))
1751.1Sjoerg        return 1;
1761.1Sjoerg    if (test__powidf2(INFINITY, 0x80000001, 0))
1771.1Sjoerg        return 1;
1781.1Sjoerg    if (test__powidf2(INFINITY, 0x80000000, 0))
1791.1Sjoerg        return 1;
1801.1Sjoerg
1811.1Sjoerg    if (test__powidf2(-INFINITY, -1, -0.))
1821.1Sjoerg        return 1;
1831.1Sjoerg    if (test__powidf2(-INFINITY, -2, 0))
1841.1Sjoerg        return 1;
1851.1Sjoerg    if (test__powidf2(-INFINITY, -3, -0.))
1861.1Sjoerg        return 1;
1871.1Sjoerg    if (test__powidf2(-INFINITY, -4, 0))
1881.1Sjoerg        return 1;
1891.1Sjoerg    if (test__powidf2(-INFINITY, 0x80000002, 0))
1901.1Sjoerg        return 1;
1911.1Sjoerg    if (test__powidf2(-INFINITY, 0x80000001, -0.))
1921.1Sjoerg        return 1;
1931.1Sjoerg    if (test__powidf2(-INFINITY, 0x80000000, 0))
1941.1Sjoerg        return 1;
1951.1Sjoerg
1961.1Sjoerg    if (test__powidf2(2, 10, 1024.))
1971.1Sjoerg        return 1;
1981.1Sjoerg    if (test__powidf2(-2, 10, 1024.))
1991.1Sjoerg        return 1;
2001.1Sjoerg    if (test__powidf2(2, -10, 1/1024.))
2011.1Sjoerg        return 1;
2021.1Sjoerg    if (test__powidf2(-2, -10, 1/1024.))
2031.1Sjoerg        return 1;
2041.1Sjoerg
2051.1Sjoerg    if (test__powidf2(2, 19, 524288.))
2061.1Sjoerg        return 1;
2071.1Sjoerg    if (test__powidf2(-2, 19, -524288.))
2081.1Sjoerg        return 1;
2091.1Sjoerg    if (test__powidf2(2, -19, 1/524288.))
2101.1Sjoerg        return 1;
2111.1Sjoerg    if (test__powidf2(-2, -19, -1/524288.))
2121.1Sjoerg        return 1;
2131.1Sjoerg
2141.1Sjoerg    if (test__powidf2(2, 31, 2147483648.))
2151.1Sjoerg        return 1;
2161.1Sjoerg    if (test__powidf2(-2, 31, -2147483648.))
2171.1Sjoerg        return 1;
2181.1Sjoerg    if (test__powidf2(2, -31, 1/2147483648.))
2191.1Sjoerg        return 1;
2201.1Sjoerg    if (test__powidf2(-2, -31, -1/2147483648.))
2211.1Sjoerg        return 1;
2221.1Sjoerg
2231.1Sjoerg    return 0;
2241.1Sjoerg}
225