Zoltan2
Loading...
Searching...
No Matches
test
core
unit
input
InputTraitsBad.cpp
Go to the documentation of this file.
1
// @HEADER
2
// *****************************************************************************
3
// Zoltan2: A package of combinatorial algorithms for scientific computing
4
//
5
// Copyright 2012 NTESS and the Zoltan2 contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
10
//
11
// Test for Zoltan2::InputTraitsBad
12
13
// This should only be used for this test - verifies bad forms do not compile
14
#define Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING
15
16
#include <
Zoltan2_InputTraits.hpp
>
17
18
using
Zoltan2::InputTraits
;
19
20
#define BEGIN_CHECK if( InputTraits<
21
#define END_CHECK >::name() == "unused string" ) \
22
{ std::cout << "Unused - Just make sure it compiles." << std::endl; }
23
24
template
<
class
A,
class
B,
class
C >
25
class
SomeBadType
{
26
public
:
SomeBadType
() {}
27
};
28
29
int
main
(
int
argc,
char
*argv[])
30
{
31
// makes a general list of 'bad' types - generally just check these all
32
// would fail - the #define above inverts the status of the static_asserts
33
// that means these should all compile but only in this test and nowhere else
34
35
// scalar ordinal (first slot) must be float, double, int, or long long
36
// this validates we would fail for any
37
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned int, int, long>
END_CHECK
38
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long, int, long>
END_CHECK
39
BEGIN_CHECK
Zoltan2::BasicUserTypes<uint32_t, int, long>
END_CHECK
40
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long long, int, long>
END_CHECK
41
BEGIN_CHECK
Zoltan2::BasicUserTypes<uint64_t, int, long>
END_CHECK
42
BEGIN_CHECK
Zoltan2::BasicUserTypes<size_t, int, long>
END_CHECK
43
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<int>
, int,
long
>
END_CHECK
44
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<double>
, int,
long
>
END_CHECK
45
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<float>
, int,
long
>
END_CHECK
46
BEGIN_CHECK
Zoltan2::BasicUserTypes<SomeBadType<int,long, int>
, int,
long
>
END_CHECK
47
48
// local ordinal (second slot) must always be signed
49
// this validates that we would fail for any unsigned setting
50
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned int, long>
END_CHECK
51
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned long, long>
END_CHECK
52
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, uint32_t, long>
END_CHECK
53
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned long long, long>
END_CHECK
54
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, uint64_t, long>
END_CHECK
55
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, size_t, long>
END_CHECK
56
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, float, long>
END_CHECK
57
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, double, long>
END_CHECK
58
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<int>
,
long
>
END_CHECK
59
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<float>
,
long
>
END_CHECK
60
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<double>
,
long
>
END_CHECK
61
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, SomeBadType<int,long, int>
,
long
>
END_CHECK
62
63
// global ordinal (third slot) must be int, long, long long, ssize_t,
64
// unsigned int, unsigned long, unsigned long long, size_t
65
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<int>
>
END_CHECK
66
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<float>
>
END_CHECK
67
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<double>
>
END_CHECK
68
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, SomeBadType<int,long, int>
>
END_CHECK
69
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, float>
END_CHECK
70
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, double>
END_CHECK
71
72
// we also want to make sure that user typedefs will work just fine
73
// lots of redundancy here to make sure std::is_same is working as we think
74
typedef
signed
int
user_int_t;
75
typedef
unsigned
int
user_unsigned_int_t;
76
typedef
float
user_float_t;
77
typedef
double
user_double_t;
78
typedef
uint32_t user_uint32_t;
79
typedef
uint64_t user_uint64_t;
80
typedef
signed
long
user_long_t;
81
typedef
unsigned
long
user_unsigned_long_t;
82
typedef
unsigned
long
long
user_unsigned_long_long_t;
83
typedef
size_t
user_size_t;
84
typedef
SomeBadType<int,int, int>
user_some_bad_t;
85
86
// scalar ordinal (first slot) must be float, double, or int
87
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_int_t, user_int_t, user_long_t>
END_CHECK
88
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_long_t, user_int_t, user_long_t>
END_CHECK
89
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint32_t, user_int_t, user_long_t>
END_CHECK
90
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_long_long_t, user_int_t, user_long_t>
END_CHECK
91
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint64_t, user_int_t, user_long_t>
END_CHECK
92
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_size_t, user_int_t, user_long_t>
END_CHECK
93
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<user_int_t>
, user_int_t, user_long_t>
END_CHECK
94
BEGIN_CHECK
Zoltan2::BasicUserTypes<SomeBadType<user_int_t,user_long_t, user_int_t>
, user_int_t, user_long_t>
END_CHECK
95
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint32_t, user_int_t, user_long_t>
END_CHECK
96
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_some_bad_t, user_int_t, user_long_t>
END_CHECK
97
98
// local ordinal (second slot) must always be signed
99
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_int_t, user_long_t>
END_CHECK
100
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_long_t, user_long_t>
END_CHECK
101
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_uint32_t, user_long_t>
END_CHECK
102
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_long_long_t, user_long_t>
END_CHECK
103
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_uint64_t, user_long_t>
END_CHECK
104
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_size_t, user_long_t>
END_CHECK
105
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_float_t, user_long_t>
END_CHECK
106
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_double_t, user_long_t>
END_CHECK
107
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, std::complex<user_int_t>
, user_long_t>
END_CHECK
108
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, SomeBadType<user_int_t,user_long_t, user_int_t>
, user_long_t>
END_CHECK
109
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, size_t, user_long_t>
END_CHECK
110
111
// global ordinal (third slot) must be int, long, long long, ssize_t,
112
// unsigned int, unsigned long, unsigned long long, size_t
113
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, std::complex<user_int_t>
>
END_CHECK
114
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, SomeBadType<user_int_t,user_long_t, user_int_t>
>
END_CHECK
115
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, user_float_t>
END_CHECK
116
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, user_double_t>
END_CHECK
117
118
119
// some more checks that should all fail - this doesn't check all
120
// combinations but just tries a bunch of things on different class types
121
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned int, unsigned int, unsigned long>
END_CHECK
122
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long, unsigned long, long>
END_CHECK
123
BEGIN_CHECK
Xpetra::CrsMatrix<double, float, long long>
END_CHECK
124
BEGIN_CHECK
Xpetra::CrsMatrix<float, long, float>
END_CHECK
125
BEGIN_CHECK
Xpetra::CrsMatrix<float, double, unsigned long>
END_CHECK
126
BEGIN_CHECK
Xpetra::CrsMatrix<float, unsigned long, double>
END_CHECK
127
BEGIN_CHECK
Tpetra::CrsMatrix<SomeBadType<int, int, int>, int,
long
long
>
END_CHECK
128
BEGIN_CHECK
Xpetra::CrsGraph<int, SomeBadType<int, double, float>>
END_CHECK
129
BEGIN_CHECK
Xpetra::CrsGraph<SomeBadType<int, long long, int>,
unsigned
int
>
END_CHECK
130
BEGIN_CHECK
Xpetra::CrsGraph<int, double>
END_CHECK
131
132
// set the PASS keyword
133
std::cout <<
"Validated bad InputTraits - The test PASSED because it "
134
"compiled with the static_assert checks inverted."
<< std::endl;
135
return
0;
136
}
137
END_CHECK
#define END_CHECK
Definition
InputTraitsBad.cpp:21
BEGIN_CHECK
#define BEGIN_CHECK
Definition
InputTraitsBad.cpp:20
Zoltan2_InputTraits.hpp
Traits for application input objects.
main
int main()
Definition
absdefinitiontest.cpp:15
SomeBadType
Definition
InputTraitsBad.cpp:25
SomeBadType::SomeBadType
SomeBadType()
Definition
InputTraitsBad.cpp:26
Zoltan2::BasicUserTypes
A simple class that can be the User template argument for an InputAdapter.
Definition
Zoltan2_InputTraits.hpp:108
Zoltan2::InputTraits
The traits required of User input classes or structures.
Definition
Zoltan2_InputTraits.hpp:146
Generated by
1.9.8