brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · a395f6d Raw
69 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>    complex<T>           proj(const complex<T>&);12//                      complex<long double> proj(long double);13//                      complex<double>      proj(double);14// template<Integral T> complex<double>      proj(T);15//                      complex<float>       proj(float);16 17#include <complex>18#include <type_traits>19#include <cassert>20 21#include "test_macros.h"22#include "../cases.h"23 24template <class T>25void26test(T x, typename std::enable_if<std::is_integral<T>::value>::type* = 0)27{28    static_assert((std::is_same<decltype(std::proj(x)), std::complex<double> >::value), "");29    assert(std::proj(x) == proj(std::complex<double>(x, 0)));30}31 32template <class T>33void34test(T x, typename std::enable_if<std::is_floating_point<T>::value>::type* = 0)35{36    static_assert((std::is_same<decltype(std::proj(x)), std::complex<T> >::value), "");37    assert(std::proj(x) == proj(std::complex<T>(x, 0)));38}39 40template <class T>41void42test(T x, typename std::enable_if<!std::is_integral<T>::value &&43                                  !std::is_floating_point<T>::value>::type* = 0)44{45    static_assert((std::is_same<decltype(std::proj(x)), std::complex<T> >::value), "");46    assert(std::proj(x) == proj(std::complex<T>(x, 0)));47}48 49template <class T>50void51test()52{53    test<T>(0);54    test<T>(1);55    test<T>(10);56}57 58int main(int, char**)59{60    test<float>();61    test<double>();62    test<long double>();63    test<int>();64    test<unsigned>();65    test<long long>();66 67  return 0;68}69