/*
* Copyright ( C ) 2014 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
// This file is compiled against both glibc and bionic, and our complex.h
// depends on bionic-specific macros, so hack around that.
#include <sys/cdefs.h>
#if !
defined (__INTRODUCED_IN)
#define __INTRODUCED_IN(x)
#endif
#if !
defined (__BIONIC_AVAILABILITY_GUARD)
#define __BIONIC_AVAILABILITY_GUARD(x)
1
#endif
// libc++ actively gets in the way of including <complex.h> from C++, so we
// have to be naughty.
#include "../libc/include/complex.h"
// Ensure that libc++'s complex.h and __fwd/complex.h headers are no-ops.
#define _LIBCPP_COMPLEX_H
#define _LIBCPP___FWD_COMPLEX_H
// (libc++ also seems to have really bad implementations of its own that ignore
// the intricacies of floating point math.)
// http://llvm.org/bugs/show_bug.cgi?id=21504
#include <math.h>
// For M_PI_2/M_PI_2l.
// Prettify gtest Complex printing.
// Macro 'complex' defined in complex.h conflicts with iostream.
#pragma push_macro(
"complex" )
#undef complex
#include <iostream>
#pragma pop_macro(
"complex" )
namespace testing {
namespace internal {
inline void PrintTo(
const double _Complex& c, std::ostream* os) {
*os <<
"(" << creal(c) <<
"," << cimag(c) <<
"i)" ;
}
inline void PrintTo(
const float _Complex& c, std::ostream* os) {
*os <<
"(" << crealf(c) <<
"," << cimagf(c) <<
"i)" ;
}
inline void PrintTo(
const long double _Complex& c, std::ostream* os) {
*os <<
"(" << creall(c) <<
"," << cimagl(c) <<
"i)" ;
}
}
}
// Macro 'I' defined in complex.h conflicts with gtest.h.
#pragma push_macro(
"I" )
#undef I
#include <gtest/gtest.h>
#pragma pop_macro(
"I" )
TEST(complex_h, cabs) {
ASSERT_EQ(
0 .
0 , cabs(
0 ));
}
TEST(complex_h, cabsf) {
ASSERT_EQ(
0 .
0 , cabsf(
0 ));
}
TEST(complex_h, cabsl) {
ASSERT_EQ(
0 .
0 , cabsl(
0 ));
}
TEST(complex_h, cacos) {
ASSERT_EQ(M_PI_2, cacos(
0 .
0 ));
}
TEST(complex_h, cacosf) {
ASSERT_EQ(
static_cast <
float >(M_PI_2), cacosf(
0 .
0 ));
}
TEST(complex_h, cacosl) {
ASSERT_EQ(M_PI_2l, cacosl(
0 .
0 ));
}
TEST(complex_h, cacosh) {
ASSERT_EQ(
0 .
0 , cacosh(
1 .
0 ));
}
TEST(complex_h, cacoshl) {
ASSERT_EQ(
0 .
0 , cacoshl(
1 .
0 ));
}
TEST(complex_h, cacoshf) {
ASSERT_EQ(
0 .
0 , cacoshf(
1 .
0 ));
}
TEST(complex_h, carg) {
ASSERT_EQ(
0 .
0 , carg(
0 ));
}
TEST(complex_h, cargf) {
ASSERT_EQ(
0 .
0 , cargf(
0 ));
}
TEST(complex_h, cargl) {
ASSERT_EQ(
0 .
0 , cargl(
0 ));
}
TEST(complex_h, casin) {
ASSERT_EQ(
0 .
0 , casin(
0 ));
}
TEST(complex_h, casinf) {
ASSERT_EQ(
0 .
0 , casinf(
0 ));
}
TEST(complex_h, casinl) {
ASSERT_EQ(
0 .
0 , casinl(
0 ));
}
TEST(complex_h, casinh) {
ASSERT_EQ(
0 .
0 , casinh(
0 ));
}
TEST(complex_h, casinhf) {
ASSERT_EQ(
0 .
0 , casinhf(
0 ));
}
TEST(complex_h, casinhl) {
ASSERT_EQ(
0 .
0 , casinhl(
0 ));
}
TEST(complex_h, catan) {
ASSERT_EQ(
0 .
0 , catan(
0 ));
}
TEST(complex_h, catanf) {
ASSERT_EQ(
0 .
0 , catanf(
0 ));
}
TEST(complex_h, catanl) {
ASSERT_EQ(
0 .
0 , catanl(
0 ));
}
TEST(complex_h, catanh) {
ASSERT_EQ(
0 .
0 , catanh(
0 ));
}
TEST(complex_h, catanhf) {
ASSERT_EQ(
0 .
0 , catanhf(
0 ));
}
TEST(complex_h, catanhl) {
ASSERT_EQ(
0 .
0 , catanhl(
0 ));
}
TEST(complex_h, ccos) {
ASSERT_EQ(
1 .
0 , ccos(
0 ));
}
TEST(complex_h, ccosf) {
ASSERT_EQ(
1 .
0 , ccosf(
0 ));
}
TEST(complex_h, ccosl) {
ASSERT_EQ(
1 .
0 , ccosl(
0 ));
}
TEST(complex_h, ccosh) {
ASSERT_EQ(
1 .
0 , ccosh(
0 ));
}
TEST(complex_h, ccoshf) {
ASSERT_EQ(
1 .
0 , ccoshf(
0 ));
}
TEST(complex_h, ccoshl) {
ASSERT_EQ(
1 .
0 , ccoshl(
0 ));
}
TEST(complex_h, cexp) {
ASSERT_EQ(
1 .
0 , cexp(
0 ));
}
TEST(complex_h, cexpf) {
ASSERT_EQ(
1 .
0 , cexpf(
0 ));
}
TEST(complex_h, cexpl) {
ASSERT_EQ(
1 .
0 , cexpl(
0 ));
}
TEST(complex_h, cimag) {
ASSERT_EQ(
0 .
0 , cimag(
0 ));
}
TEST(complex_h, cimagf) {
ASSERT_EQ(
0 .
0 f, cimagf(
0 ));
}
TEST(complex_h, cimagl) {
ASSERT_EQ(
0 .
0 , cimagl(
0 ));
}
TEST(complex_h, clog) {
ASSERT_EQ(
0 .
0 , clog(
1 .
0 ));
}
TEST(complex_h, clogf) {
ASSERT_EQ(
0 .
0 f, clogf(
1 .
0 f));
}
TEST(complex_h, clogl) {
ASSERT_EQ(
0 .
0 L, clogl(
1 .
0 L));
}
TEST(complex_h, conj) {
ASSERT_EQ(
0 .
0 , conj(
0 ));
}
TEST(complex_h, conjf) {
ASSERT_EQ(
0 .
0 f, conjf(
0 ));
}
TEST(complex_h, conjl) {
ASSERT_EQ(
0 .
0 , conjl(
0 ));
}
TEST(complex_h, cpow) {
ASSERT_EQ(
8 .
0 , cpow(
2 .
0 ,
3 .
0 ));
}
TEST(complex_h, cpowf) {
ASSERT_EQ(
8 .
0 f, cpowf(
2 .
0 f,
3 .
0 f));
}
TEST(complex_h, cpowl) {
ASSERT_EQ(
8 .
0 L, cpowl(
2 .
0 L,
3 .
0 L));
}
TEST(complex_h, cpow_zero) {
// https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289447
complex
double z =
0 .
0 +
0 .
0 * I;
complex
double r = cpow(z, z);
EXPECT_EQ(
1 .
0 , creal(r));
EXPECT_EQ(
0 .
0 , cimag(r));
complex
float zf =
0 .
0 f +
0 .
0 f * I;
complex
float rf = cpowf(zf, zf);
EXPECT_EQ(
1 .
0 f, crealf(rf));
EXPECT_EQ(
0 .
0 f, cimagf(rf));
complex
long double zld =
0 .
0 L +
0 .L * I;
complex
float rld = cpowf(zld, zld);
EXPECT_EQ(
1 .
0 L, crealf(rld));
EXPECT_EQ(
0 .
0 L, cimagf(rld));
}
TEST(complex_h, cproj) {
ASSERT_EQ(
0 .
0 , cproj(
0 ));
}
TEST(complex_h, cprojf) {
ASSERT_EQ(
0 .
0 f, cprojf(
0 ));
}
TEST(complex_h, cprojl) {
ASSERT_EQ(
0 .
0 , cprojl(
0 ));
}
TEST(complex_h, creal) {
ASSERT_EQ(
2 .
0 , creal(
2 .
0 +
3 .
0 I));
}
TEST(complex_h, crealf) {
ASSERT_EQ(
2 .
0 f, crealf(
2 .
0 f +
3 .
0 fI));
}
TEST(complex_h, creall) {
ASSERT_EQ(
2 .
0 , creall(
2 .
0 L +
3 .
0 LI));
}
TEST(complex_h, csin) {
ASSERT_EQ(
0 .
0 , csin(
0 ));
}
TEST(complex_h, csinf) {
ASSERT_EQ(
0 .
0 , csinf(
0 ));
}
TEST(complex_h, csinl) {
ASSERT_EQ(
0 .
0 , csinl(
0 ));
}
TEST(complex_h, csinh) {
ASSERT_EQ(
0 .
0 , csinh(
0 ));
}
TEST(complex_h, csinhf) {
ASSERT_EQ(
0 .
0 , csinhf(
0 ));
}
TEST(complex_h, csinhl) {
ASSERT_EQ(
0 .
0 , csinhl(
0 ));
}
TEST(complex_h, csqrt) {
ASSERT_EQ(
0 .
0 , csqrt(
0 ));
}
TEST(complex_h, csqrtf) {
ASSERT_EQ(
0 .
0 f, csqrtf(
0 ));
}
TEST(complex_h, csqrtl) {
ASSERT_EQ(
0 .
0 , csqrtl(
0 ));
}
TEST(complex_h, ctan) {
ASSERT_EQ(
0 .
0 , ctan(
0 ));
}
TEST(complex_h, ctanf) {
ASSERT_EQ(
0 .
0 , ctanf(
0 ));
}
TEST(complex_h, ctanl) {
ASSERT_EQ(
0 .
0 , ctanl(
0 ));
}
TEST(complex_h, ctanh) {
ASSERT_EQ(
0 .
0 , ctanh(
0 ));
double complex z;
// If z is NaN+0i, the result is NaN+0i.
z = ctanh(nan(
"" ) +
0 i);
ASSERT_TRUE(isnan(creal(z)));
ASSERT_EQ(
0 .
0 , cimag(z));
// If z is NaN+yi, the result is NaN+NaNi.
z = ctanh(nan(
"" ) +
2 .
0 i);
ASSERT_TRUE(isnan(creal(z)));
ASSERT_TRUE(isnan(cimag(z)));
// If z is NaN+NaNi, the result is NaN+NaNi.
z = ctanh(nan(
"" ) + nan(
"" ) * I);
ASSERT_TRUE(isnan(creal(z)));
ASSERT_TRUE(isnan(cimag(z)));
}
TEST(complex_h, ctanhf) {
ASSERT_EQ(
0 .
0 f, ctanhf(
0 .
0 f));
float complex z;
// If z is NaN+0i, the result is NaN+0i.
z = ctanhf(nanf(
"" ) +
0 .
0 fi);
ASSERT_TRUE(isnan(crealf(z)));
ASSERT_EQ(
0 .
0 f, cimagf(z));
// If z is NaN+yi, the result is NaN+NaNi.
z = ctanhf(nanf(
"" ) +
2 .
0 fi);
ASSERT_TRUE(isnan(crealf(z)));
ASSERT_TRUE(isnan(cimagf(z)));
// If z is NaN+NaNi, the result is NaN+NaNi.
z = ctanhf(nanf(
"" ) + nanf(
"" ) * I);
ASSERT_TRUE(isnan(crealf(z)));
ASSERT_TRUE(isnan(cimagf(z)));
}
TEST(complex_h, ctanhl) {
ASSERT_EQ(
0 .
0 L, ctanhl(
0 .
0 L));
long double complex z;
// If z is NaN+0i, the result is NaN+0i.
z = ctanhl(nanl(
"" ) +
0 .
0 Li);
ASSERT_TRUE(isnan(creall(z)));
// TODO: this case is currently broken in the netbsd ctanhl.
// ASSERT_EQ(0.0L, cimagl(z));
// If z is NaN+yi, the result is NaN+NaNi.
z = ctanhl(nanl(
"" ) +
2 .
0 Li);
ASSERT_TRUE(isnan(creall(z)));
ASSERT_TRUE(isnan(cimagl(z)));
// If z is NaN+NaNi, the result is NaN+NaNi.
z = ctanhl(nanl(
"" ) + nanl(
"" ) * I);
ASSERT_TRUE(isnan(creall(z)));
ASSERT_TRUE(isnan(cimagl(z)));
}
Messung V0.5 in Prozent C=93 H=93 G=92
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-28)
¤
*© Formatika GbR, Deutschland