brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 933ff71 Raw
120 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <complex>10 11// template<class T>12//   complex<T>13//   sinh(const complex<T>& x);14 15#include <complex>16#include <cassert>17 18#include "test_macros.h"19#include "../cases.h"20 21template <class T>22void23test(const std::complex<T>& c, std::complex<T> x)24{25    assert(sinh(c) == x);26}27 28template <class T>29void30test()31{32    test(std::complex<T>(0, 0), std::complex<T>(0, 0));33}34 35void test_edges()36{37    const unsigned N = sizeof(testcases) / sizeof(testcases[0]);38    for (unsigned i = 0; i < N; ++i)39    {40        std::complex<double> r = sinh(testcases[i]);41        if (testcases[i].real() == 0 && testcases[i].imag() == 0)42        {43            assert(r.real() == 0);44            assert(std::signbit(r.real()) == std::signbit(testcases[i].real()));45            assert(r.imag() == 0);46            assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag()));47        }48        else if (testcases[i].real() == 0 && std::isinf(testcases[i].imag()))49        {50            assert(r.real() == 0);51            assert(std::isnan(r.imag()));52        }53        else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag()))54        {55            assert(std::isnan(r.real()));56            assert(std::isnan(r.imag()));57        }58        else if (testcases[i].real() == 0 && std::isnan(testcases[i].imag()))59        {60            assert(r.real() == 0);61            assert(std::isnan(r.imag()));62        }63        else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag()))64        {65            assert(std::isnan(r.real()));66            assert(std::isnan(r.imag()));67        }68        else if (std::isinf(testcases[i].real()) && testcases[i].imag() == 0)69        {70            assert(std::isinf(r.real()));71            assert(std::signbit(r.real()) == std::signbit(testcases[i].real()));72            assert(r.imag() == 0);73            assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag()));74        }75        else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag()))76        {77            assert(std::isinf(r.real()));78            assert(std::signbit(r.real()) == std::signbit(testcases[i].real() * cos(testcases[i].imag())));79            assert(std::isinf(r.imag()));80            assert(std::signbit(r.imag()) == std::signbit(sin(testcases[i].imag())));81        }82        else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag()))83        {84            assert(std::isinf(r.real()));85            assert(std::isnan(r.imag()));86        }87        else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag()))88        {89            assert(std::isinf(r.real()));90            assert(std::isnan(r.imag()));91        }92        else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0)93        {94            assert(std::isnan(r.real()));95            assert(r.imag() == 0);96            assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag()));97        }98        else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag()))99        {100            assert(std::isnan(r.real()));101            assert(std::isnan(r.imag()));102        }103        else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag()))104        {105            assert(std::isnan(r.real()));106            assert(std::isnan(r.imag()));107        }108    }109}110 111int main(int, char**)112{113    test<float>();114    test<double>();115    test<long double>();116    test_edges();117 118  return 0;119}120