1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <complex> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 120e20cae1a5be18fba591cd884aa2a389b66a3f49Howard Hinnant// template<class T> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// complex<T> 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// operator*(const complex<T>& lhs, const complex<T>& rhs); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <complex> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../cases.h" 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class T> 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(const std::complex<T>& lhs, const std::complex<T>& rhs, std::complex<T> x) 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(lhs * rhs == x); 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class T> 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest() 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::complex<T> lhs(1.5, 2.5); 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::complex<T> rhs(1.5, 2.5); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::complex<T> x(-4.0, 7.5); 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(lhs, rhs, x); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// test edges 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid test_edges() 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned N = sizeof(x) / sizeof(x[0]); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (unsigned i = 0; i < N; ++i) 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (unsigned j = 0; j < N; ++j) 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::complex<double> r = x[i] * x[j]; 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[i])) 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[j])) 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == zero); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == zero); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[j])) 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == zero); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == non_zero); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == inf); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[j])) 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == inf); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == inf); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == inf); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[j])) 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant switch (classify(x[j])) 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case zero: 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero: 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case inf: 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == inf); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case NaN: 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant case non_zero_nan: 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(classify(r) == NaN); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<float>(); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<double>(); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<long double>(); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test_edges(); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 162