Zoltan2
Loading...
Searching...
No Matches
test
core
unit
input
InputTraitsBad.cpp
Go to the documentation of this file.
1
// @HEADER
2
//
3
// ***********************************************************************
4
//
5
// Zoltan2: A package of combinatorial algorithms for scientific computing
6
// Copyright 2012 Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Karen Devine (kddevin@sandia.gov)
39
// Erik Boman (egboman@sandia.gov)
40
// Siva Rajamanickam (srajama@sandia.gov)
41
//
42
// ***********************************************************************
43
//
44
// @HEADER
45
//
46
// Test for Zoltan2::InputTraitsBad
47
48
// This should only be used for this test - verifies bad forms do not compile
49
#define Z2_INVERT_STATIC_ASSERT_FOR_UNIT_TESTING
50
51
#include <
Zoltan2_InputTraits.hpp
>
52
53
using
Zoltan2::InputTraits
;
54
55
#define BEGIN_CHECK if( InputTraits<
56
#define END_CHECK >::name() == "unused string" ) \
57
{ std::cout << "Unused - Just make sure it compiles." << std::endl; }
58
59
template
<
class
A,
class
B,
class
C >
60
class
SomeBadType
{
61
public
:
SomeBadType
() {}
62
};
63
64
int
main
(
int
argc,
char
*argv[])
65
{
66
// makes a general list of 'bad' types - generally just check these all
67
// would fail - the #define above inverts the status of the static_asserts
68
// that means these should all compile but only in this test and nowhere else
69
70
// scalar ordinal (first slot) must be float, double, int, or long long
71
// this validates we would fail for any
72
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned int, int, long>
END_CHECK
73
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long, int, long>
END_CHECK
74
BEGIN_CHECK
Zoltan2::BasicUserTypes<uint32_t, int, long>
END_CHECK
75
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long long, int, long>
END_CHECK
76
BEGIN_CHECK
Zoltan2::BasicUserTypes<uint64_t, int, long>
END_CHECK
77
BEGIN_CHECK
Zoltan2::BasicUserTypes<size_t, int, long>
END_CHECK
78
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<int>
, int,
long
>
END_CHECK
79
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<double>
, int,
long
>
END_CHECK
80
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<float>
, int,
long
>
END_CHECK
81
BEGIN_CHECK
Zoltan2::BasicUserTypes<SomeBadType<int,long, int>
, int,
long
>
END_CHECK
82
83
// local ordinal (second slot) must always be signed
84
// this validates that we would fail for any unsigned setting
85
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned int, long>
END_CHECK
86
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned long, long>
END_CHECK
87
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, uint32_t, long>
END_CHECK
88
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, unsigned long long, long>
END_CHECK
89
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, uint64_t, long>
END_CHECK
90
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, size_t, long>
END_CHECK
91
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, float, long>
END_CHECK
92
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, double, long>
END_CHECK
93
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<int>
,
long
>
END_CHECK
94
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<float>
,
long
>
END_CHECK
95
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, std::complex<double>
,
long
>
END_CHECK
96
BEGIN_CHECK
Zoltan2::BasicUserTypes<float, SomeBadType<int,long, int>
,
long
>
END_CHECK
97
98
// global ordinal (third slot) must be int, long, long long, ssize_t,
99
// unsigned int, unsigned long, unsigned long long, size_t
100
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<int>
>
END_CHECK
101
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<float>
>
END_CHECK
102
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, std::complex<double>
>
END_CHECK
103
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, SomeBadType<int,long, int>
>
END_CHECK
104
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, float>
END_CHECK
105
BEGIN_CHECK
Zoltan2::BasicUserTypes<int, int, double>
END_CHECK
106
107
// we also want to make sure that user typedefs will work just fine
108
// lots of redundancy here to make sure std::is_same is working as we think
109
typedef
signed
int
user_int_t;
110
typedef
unsigned
int
user_unsigned_int_t;
111
typedef
float
user_float_t;
112
typedef
double
user_double_t;
113
typedef
uint32_t user_uint32_t;
114
typedef
uint64_t user_uint64_t;
115
typedef
signed
long
user_long_t;
116
typedef
unsigned
long
user_unsigned_long_t;
117
typedef
unsigned
long
long
user_unsigned_long_long_t;
118
typedef
size_t
user_size_t;
119
typedef
SomeBadType<int,int, int> user_some_bad_t;
120
121
// scalar ordinal (first slot) must be float, double, or int
122
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_int_t, user_int_t, user_long_t>
END_CHECK
123
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_long_t, user_int_t, user_long_t>
END_CHECK
124
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint32_t, user_int_t, user_long_t>
END_CHECK
125
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_unsigned_long_long_t, user_int_t, user_long_t>
END_CHECK
126
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint64_t, user_int_t, user_long_t>
END_CHECK
127
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_size_t, user_int_t, user_long_t>
END_CHECK
128
BEGIN_CHECK
Zoltan2::BasicUserTypes<std::complex<user_int_t>
, user_int_t, user_long_t>
END_CHECK
129
BEGIN_CHECK
Zoltan2::BasicUserTypes<SomeBadType<user_int_t,user_long_t, user_int_t>
, user_int_t, user_long_t>
END_CHECK
130
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_uint32_t, user_int_t, user_long_t>
END_CHECK
131
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_some_bad_t, user_int_t, user_long_t>
END_CHECK
132
133
// local ordinal (second slot) must always be signed
134
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_int_t, user_long_t>
END_CHECK
135
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_long_t, user_long_t>
END_CHECK
136
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_uint32_t, user_long_t>
END_CHECK
137
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_unsigned_long_long_t, user_long_t>
END_CHECK
138
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_uint64_t, user_long_t>
END_CHECK
139
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_size_t, user_long_t>
END_CHECK
140
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_float_t, user_long_t>
END_CHECK
141
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, user_double_t, user_long_t>
END_CHECK
142
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, std::complex<user_int_t>
, user_long_t>
END_CHECK
143
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, SomeBadType<user_int_t,user_long_t, user_int_t>
, user_long_t>
END_CHECK
144
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_float_t, size_t, user_long_t>
END_CHECK
145
146
// global ordinal (third slot) must be int, long, long long, ssize_t,
147
// unsigned int, unsigned long, unsigned long long, size_t
148
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, std::complex<user_int_t>
>
END_CHECK
149
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, SomeBadType<user_int_t,user_long_t, user_int_t>
>
END_CHECK
150
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, user_float_t>
END_CHECK
151
BEGIN_CHECK
Zoltan2::BasicUserTypes<user_int_t, user_int_t, user_double_t>
END_CHECK
152
153
154
// some more checks that should all fail - this doesn't check all
155
// combinations but just tries a bunch of things on different class types
156
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned int, unsigned int, unsigned long>
END_CHECK
157
BEGIN_CHECK
Zoltan2::BasicUserTypes<unsigned long, unsigned long, long>
END_CHECK
158
BEGIN_CHECK
Xpetra::CrsMatrix<double, float, long long>
END_CHECK
159
BEGIN_CHECK
Xpetra::CrsMatrix<float, long, float>
END_CHECK
160
BEGIN_CHECK
Xpetra::CrsMatrix<float, double, unsigned long>
END_CHECK
161
BEGIN_CHECK
Xpetra::CrsMatrix<float, unsigned long, double>
END_CHECK
162
BEGIN_CHECK
Tpetra::CrsMatrix<SomeBadType<int, int, int>, int,
long
long
>
END_CHECK
163
BEGIN_CHECK
Xpetra::CrsGraph<int, SomeBadType<int, double, float>>
END_CHECK
164
BEGIN_CHECK
Xpetra::CrsGraph<SomeBadType<int, long long, int>,
unsigned
int
>
END_CHECK
165
BEGIN_CHECK
Xpetra::CrsGraph<int, double>
END_CHECK
166
167
// set the PASS keyword
168
std::cout <<
"Validated bad InputTraits - The test PASSED because it "
169
"compiled with the static_assert checks inverted."
<< std::endl;
170
return
0;
171
}
172
END_CHECK
#define END_CHECK
Definition
InputTraitsBad.cpp:56
BEGIN_CHECK
#define BEGIN_CHECK
Definition
InputTraitsBad.cpp:55
Zoltan2_InputTraits.hpp
Traits for application input objects.
main
int main()
Definition
absdefinitiontest.cpp:6
SomeBadType
Definition
InputTraitsBad.cpp:60
SomeBadType::SomeBadType
SomeBadType()
Definition
InputTraitsBad.cpp:61
Zoltan2::BasicUserTypes
A simple class that can be the User template argument for an InputAdapter.
Definition
Zoltan2_InputTraits.hpp:140
Zoltan2::InputTraits
The traits required of User input classes or structures.
Definition
Zoltan2_InputTraits.hpp:178
Generated by
1.10.0