xref: /freebsd/contrib/netbsd-tests/lib/libm/t_cabsl.cxx (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
1 /*-
2  * Copyright (c) 2018 The NetBSD Foundation, Inc.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to The NetBSD Foundation
6  * by Maya Rashish
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 /*
31  * Test that C++ "cabsl" is usable. PR lib/50646
32  */
33 
34 #include <atf-c++.hpp>
35 #include <complex>
36 
37 ATF_TEST_CASE(cabsl);
38 ATF_TEST_CASE_HEAD(cabsl)
39 {
40 	set_md_var("descr", "Check that cabsl is usable from C++");
41 }
42 ATF_TEST_CASE_BODY(cabsl)
43 {
44 	int sum = 0;
45 
46 #ifdef __HAVE_LONG_DOUBLE
47 	std::complex<long double> cld(3.0,4.0);
48 	sum += std::abs(cld);
49 #endif
50 	std::complex<double> cd(3.0,4.0);
51 	sum += std::abs(cd);
52 
53 	std::complex<float> cf(3.0,4.0);
54 	sum += std::abs(cf);
55 
56 #ifdef __HAVE_LONG_DOUBLE
57 	ATF_REQUIRE_EQ(sum, 3*5);
58 #else
59 	ATF_REQUIRE_EQ(sum, 2*5);
60 #endif
61 }
62 
63 ATF_INIT_TEST_CASES(tcs)
64 {
65 	ATF_ADD_TEST_CASE(tcs, cabsl);
66 }
67