1 /*
2  * Copyright (C) 1998-2018 ALPS Collaboration. See COPYRIGHT.TXT
3  * All rights reserved. Use is subject to license terms. See LICENSE.TXT
4  * For use in publications, see ACKNOWLEDGE.TXT
5  */
6 
7 #include <alps/params.hpp>
8 #include <gtest/gtest.h>
9 
10 class ParamTestCompare : public ::testing::Test {
11   public:
12     alps::params p;
13 
ParamTestCompare()14     ParamTestCompare() {
15         p["1"]=1;
16         p["1.25"]=1.25;
17         p["1.00"]=1.0;
18         p["str"]="1.25";
19     }
20 };
21 
TEST_F(ParamTestCompare,SameTypeLiteralRHS)22 TEST_F(ParamTestCompare,SameTypeLiteralRHS) {
23     // 9 possible comparizons with less-than, equal, and more-than values: ints
24     EXPECT_TRUE( p["1"]> 0);
25     EXPECT_TRUE( p["1"]>=0);
26     EXPECT_TRUE( p["1"]!=0);
27     EXPECT_TRUE( p["1"]>=1);
28     EXPECT_TRUE( p["1"]<=1);
29     EXPECT_TRUE( p["1"]==1);
30     EXPECT_TRUE( p["1"]< 2);
31     EXPECT_TRUE( p["1"]<=2);
32     EXPECT_TRUE( p["1"]!=2);
33 
34     // Negation of the 9 comparizons: ints
35     EXPECT_FALSE(p["1"]<=0);
36     EXPECT_FALSE(p["1"]< 0);
37     EXPECT_FALSE(p["1"]==0);
38     EXPECT_FALSE(p["1"]< 1);
39     EXPECT_FALSE(p["1"]> 1);
40     EXPECT_FALSE(p["1"]!=1);
41     EXPECT_FALSE(p["1"]>=2);
42     EXPECT_FALSE(p["1"]> 2);
43     EXPECT_FALSE(p["1"]==2);
44 
45     // 9 possible comparizons with less-than, equal, and more-than values: doubles
46     EXPECT_TRUE( p["1.25"]> 0.5);
47     EXPECT_TRUE( p["1.25"]>=0.5);
48     EXPECT_TRUE( p["1.25"]!=0.5);
49     EXPECT_TRUE( p["1.25"]>=1.25);
50     EXPECT_TRUE( p["1.25"]<=1.25);
51     EXPECT_TRUE( p["1.25"]==1.25);
52     EXPECT_TRUE( p["1.25"]< 1.50);
53     EXPECT_TRUE( p["1.25"]<=1.50);
54     EXPECT_TRUE( p["1.25"]!=1.50);
55 
56     // Negation of the 9 comparizons: doubles
57     EXPECT_FALSE(p["1.25"]<=0.5);
58     EXPECT_FALSE(p["1.25"]< 0.5);
59     EXPECT_FALSE(p["1.25"]==0.5);
60     EXPECT_FALSE(p["1.25"]< 1.25);
61     EXPECT_FALSE(p["1.25"]> 1.25);
62     EXPECT_FALSE(p["1.25"]!=1.25);
63     EXPECT_FALSE(p["1.25"]>=1.50);
64     EXPECT_FALSE(p["1.25"]> 1.50);
65     EXPECT_FALSE(p["1.25"]==1.50);
66 
67     // There are no std::string literals, see the corresponding test for comparison with char-string literals
68 }
69 
TEST_F(ParamTestCompare,SameTypeLiteralLHS)70 TEST_F(ParamTestCompare,SameTypeLiteralLHS) {
71     // 9 possible comparizons with less-than, equal, and more-than values: ints
72     EXPECT_TRUE( 0< p["1"]);
73     EXPECT_TRUE( 0<=p["1"]);
74     EXPECT_TRUE( 0!=p["1"]);
75     EXPECT_TRUE( 1<=p["1"]);
76     EXPECT_TRUE( 1>=p["1"]);
77     EXPECT_TRUE( 1==p["1"]);
78     EXPECT_TRUE( 2> p["1"]);
79     EXPECT_TRUE( 2>=p["1"]);
80     EXPECT_TRUE( 2!=p["1"]);
81 
82     // Negation of the 9 comparizons: ints
83     EXPECT_FALSE(0>=p["1"]);
84     EXPECT_FALSE(0> p["1"]);
85     EXPECT_FALSE(0==p["1"]);
86     EXPECT_FALSE(1> p["1"]);
87     EXPECT_FALSE(1< p["1"]);
88     EXPECT_FALSE(1!=p["1"]);
89     EXPECT_FALSE(2<=p["1"]);
90     EXPECT_FALSE(2< p["1"]);
91     EXPECT_FALSE(2==p["1"]);
92 
93     // 9 possible comparizons with less-than, equal, and more-than values: doubles
94     EXPECT_TRUE( 0.50< p["1.25"]);
95     EXPECT_TRUE( 0.50<=p["1.25"]);
96     EXPECT_TRUE( 0.50!=p["1.25"]);
97     EXPECT_TRUE( 1.25<=p["1.25"]);
98     EXPECT_TRUE( 1.25>=p["1.25"]);
99     EXPECT_TRUE( 1.25==p["1.25"]);
100     EXPECT_TRUE( 1.50> p["1.25"]);
101     EXPECT_TRUE( 1.50>=p["1.25"]);
102     EXPECT_TRUE( 1.50!=p["1.25"]);
103 
104     // Negation of the 9 comparizons: doubles
105     EXPECT_FALSE(0.50>=p["1.25"]);
106     EXPECT_FALSE(0.50> p["1.25"]);
107     EXPECT_FALSE(0.50==p["1.25"]);
108     EXPECT_FALSE(1.25> p["1.25"]);
109     EXPECT_FALSE(1.25< p["1.25"]);
110     EXPECT_FALSE(1.25!=p["1.25"]);
111     EXPECT_FALSE(1.50<=p["1.25"]);
112     EXPECT_FALSE(1.50< p["1.25"]);
113     EXPECT_FALSE(1.50==p["1.25"]);
114 
115     // There are no std::string literals, see the corresponding test for comparison with char-string literals
116 }
117 
TEST_F(ParamTestCompare,SameTypeVarRHS)118 TEST_F(ParamTestCompare,SameTypeVarRHS) {
119     {
120         // 9 possible comparizons with less-than, equal, and more-than values: ints
121         int less_than=0;
122         int more_than=2;
123         int equal=1;
124         EXPECT_TRUE( p["1"]> less_than);
125         EXPECT_TRUE( p["1"]>=less_than);
126         EXPECT_TRUE( p["1"]!=less_than);
127         EXPECT_TRUE( p["1"]>=equal);
128         EXPECT_TRUE( p["1"]<=equal);
129         EXPECT_TRUE( p["1"]==equal);
130         EXPECT_TRUE( p["1"]< more_than);
131         EXPECT_TRUE( p["1"]<=more_than);
132         EXPECT_TRUE( p["1"]!=more_than);
133 
134         // Negation of the 9 comparizons: ints
135         EXPECT_FALSE(p["1"]<=less_than);
136         EXPECT_FALSE(p["1"]< less_than);
137         EXPECT_FALSE(p["1"]==less_than);
138         EXPECT_FALSE(p["1"]< equal);
139         EXPECT_FALSE(p["1"]> equal);
140         EXPECT_FALSE(p["1"]!=equal);
141         EXPECT_FALSE(p["1"]>=more_than);
142         EXPECT_FALSE(p["1"]> more_than);
143         EXPECT_FALSE(p["1"]==more_than);
144     }
145 
146     {
147         // 9 possible comparizons with less-than, equal, and more-than values: doubles
148         double less_than=0.5;
149         double more_than=1.5;
150         double equal=1.25;
151 
152         EXPECT_TRUE( p["1.25"]> less_than);
153         EXPECT_TRUE( p["1.25"]>=less_than);
154         EXPECT_TRUE( p["1.25"]!=less_than);
155         EXPECT_TRUE( p["1.25"]>=equal);
156         EXPECT_TRUE( p["1.25"]<=equal);
157         EXPECT_TRUE( p["1.25"]==equal);
158         EXPECT_TRUE( p["1.25"]< more_than);
159         EXPECT_TRUE( p["1.25"]<=more_than);
160         EXPECT_TRUE( p["1.25"]!=more_than);
161 
162         // Negation of the 9 comparizons: doubles
163         EXPECT_FALSE(p["1.25"]<=less_than);
164         EXPECT_FALSE(p["1.25"]< less_than);
165         EXPECT_FALSE(p["1.25"]==less_than);
166         EXPECT_FALSE(p["1.25"]< equal);
167         EXPECT_FALSE(p["1.25"]> equal);
168         EXPECT_FALSE(p["1.25"]!=equal);
169         EXPECT_FALSE(p["1.25"]>=more_than);
170         EXPECT_FALSE(p["1.25"]> more_than);
171         EXPECT_FALSE(p["1.25"]==more_than);
172     }
173 
174     {
175         // 9 possible comparizons with less-than, equal, and more-than values: strings
176         std::string less_than="1.2";
177         std::string more_than="2xx";
178         std::string equal="1.25";
179 
180         EXPECT_TRUE( p["str"]> less_than);
181         EXPECT_TRUE( p["str"]>=less_than);
182         EXPECT_TRUE( p["str"]!=less_than);
183         EXPECT_TRUE( p["str"]>=equal);
184         EXPECT_TRUE( p["str"]<=equal);
185         EXPECT_TRUE( p["str"]==equal);
186         EXPECT_TRUE( p["str"]< more_than);
187         EXPECT_TRUE( p["str"]<=more_than);
188         EXPECT_TRUE( p["str"]!=more_than);
189 
190         // Negation of the 9 comparizons: strings
191         EXPECT_FALSE(p["str"]<=less_than);
192         EXPECT_FALSE(p["str"]< less_than);
193         EXPECT_FALSE(p["str"]==less_than);
194         EXPECT_FALSE(p["str"]< equal);
195         EXPECT_FALSE(p["str"]> equal);
196         EXPECT_FALSE(p["str"]!=equal);
197         EXPECT_FALSE(p["str"]>=more_than);
198         EXPECT_FALSE(p["str"]> more_than);
199         EXPECT_FALSE(p["str"]==more_than);
200     }
201 }
202 
TEST_F(ParamTestCompare,SameTypeVarLHS)203 TEST_F(ParamTestCompare,SameTypeVarLHS) {
204     {
205         // 9 possible comparizons with less-than, equal, and more-than values: ints
206         int less_than=0;
207         int more_than=2;
208         int equal=1;
209         EXPECT_TRUE( less_than< p["1"]);
210         EXPECT_TRUE( less_than<=p["1"]);
211         EXPECT_TRUE( less_than!=p["1"]);
212         EXPECT_TRUE( equal    <=p["1"]);
213         EXPECT_TRUE( equal    >=p["1"]);
214         EXPECT_TRUE( equal    ==p["1"]);
215         EXPECT_TRUE( more_than> p["1"]);
216         EXPECT_TRUE( more_than>=p["1"]);
217         EXPECT_TRUE( more_than!=p["1"]);
218 
219         // Negation of the 9 comparizons: ints
220         EXPECT_FALSE(less_than>=p["1"]);
221         EXPECT_FALSE(less_than> p["1"]);
222         EXPECT_FALSE(less_than==p["1"]);
223         EXPECT_FALSE(equal    > p["1"]);
224         EXPECT_FALSE(equal    < p["1"]);
225         EXPECT_FALSE(equal    !=p["1"]);
226         EXPECT_FALSE(more_than<=p["1"]);
227         EXPECT_FALSE(more_than< p["1"]);
228         EXPECT_FALSE(more_than==p["1"]);
229     }
230 
231     {
232         // 9 possible comparizons with less-than, equal, and more-than values: doubles
233         double less_than=0.5;
234         double more_than=1.5;
235         double equal=1.25;
236 
237         EXPECT_TRUE( less_than< p["1.25"]);
238         EXPECT_TRUE( less_than<=p["1.25"]);
239         EXPECT_TRUE( less_than!=p["1.25"]);
240         EXPECT_TRUE( equal    <=p["1.25"]);
241         EXPECT_TRUE( equal    >=p["1.25"]);
242         EXPECT_TRUE( equal    ==p["1.25"]);
243         EXPECT_TRUE( more_than> p["1.25"]);
244         EXPECT_TRUE( more_than>=p["1.25"]);
245         EXPECT_TRUE( more_than!=p["1.25"]);
246 
247         // Negation of the 9 comparizons: doubles
248         EXPECT_FALSE(less_than>=p["1.25"]);
249         EXPECT_FALSE(less_than> p["1.25"]);
250         EXPECT_FALSE(less_than==p["1.25"]);
251         EXPECT_FALSE(equal    > p["1.25"]);
252         EXPECT_FALSE(equal    < p["1.25"]);
253         EXPECT_FALSE(equal    !=p["1.25"]);
254         EXPECT_FALSE(more_than<=p["1.25"]);
255         EXPECT_FALSE(more_than< p["1.25"]);
256         EXPECT_FALSE(more_than==p["1.25"]);
257     }
258 
259     {
260         // 9 possible comparizons with less-than, equal, and more-than values: strings
261         std::string less_than="1.2";
262         std::string more_than="2xx";
263         std::string equal="1.25";
264 
265         EXPECT_TRUE( less_than< p["str"]);
266         EXPECT_TRUE( less_than<=p["str"]);
267         EXPECT_TRUE( less_than!=p["str"]);
268         EXPECT_TRUE( equal    <=p["str"]);
269         EXPECT_TRUE( equal    >=p["str"]);
270         EXPECT_TRUE( equal    ==p["str"]);
271         EXPECT_TRUE( more_than> p["str"]);
272         EXPECT_TRUE( more_than>=p["str"]);
273         EXPECT_TRUE( more_than!=p["str"]);
274 
275         // Negation of the 9 comparizons: strings
276         EXPECT_FALSE(less_than>=p["str"]);
277         EXPECT_FALSE(less_than> p["str"]);
278         EXPECT_FALSE(less_than==p["str"]);
279         EXPECT_FALSE(equal    > p["str"]);
280         EXPECT_FALSE(equal    < p["str"]);
281         EXPECT_FALSE(equal    !=p["str"]);
282         EXPECT_FALSE(more_than<=p["str"]);
283         EXPECT_FALSE(more_than< p["str"]);
284         EXPECT_FALSE(more_than==p["str"]);
285     }
286 }
287 
TEST_F(ParamTestCompare,SimilarTypeLiteralRHS)288 TEST_F(ParamTestCompare,SimilarTypeLiteralRHS) {
289     // 9 possible comparizons with less-than, equal, and more-than values: ints vs doubles
290     EXPECT_TRUE( p["1"]> 0.5);
291     EXPECT_TRUE( p["1"]>=0.5);
292     EXPECT_TRUE( p["1"]!=0.5);
293     EXPECT_TRUE( p["1"]>=1.0);
294     EXPECT_TRUE( p["1"]<=1.0);
295     EXPECT_TRUE( p["1"]==1.0);
296     EXPECT_TRUE( p["1"]< 2.5);
297     EXPECT_TRUE( p["1"]<=2.5);
298     EXPECT_TRUE( p["1"]!=2.5);
299 
300     // Negation of the 9 comparizons: ints vs doubles
301     EXPECT_FALSE(p["1"]<=0.5);
302     EXPECT_FALSE(p["1"]< 0.5);
303     EXPECT_FALSE(p["1"]==0.5);
304     EXPECT_FALSE(p["1"]< 1.0);
305     EXPECT_FALSE(p["1"]> 1.0);
306     EXPECT_FALSE(p["1"]!=1.0);
307     EXPECT_FALSE(p["1"]>=2.5);
308     EXPECT_FALSE(p["1"]> 2.5);
309     EXPECT_FALSE(p["1"]==2.5);
310 
311     // 9 possible comparizons with less-than, equal, and more-than values: doubles vs ints
312     EXPECT_THROW(p["1.25"]> 0, alps::params::type_mismatch);
313     EXPECT_THROW(p["1.25"]>=0, alps::params::type_mismatch);
314     EXPECT_THROW(p["1.25"]!=0, alps::params::type_mismatch);
315     EXPECT_THROW(p["1.00"]>=1, alps::params::type_mismatch);
316     EXPECT_THROW(p["1.00"]<=1, alps::params::type_mismatch);
317     EXPECT_THROW(p["1.00"]==1, alps::params::type_mismatch);
318     EXPECT_THROW(p["1.25"]< 2, alps::params::type_mismatch);
319     EXPECT_THROW(p["1.25"]<=2, alps::params::type_mismatch);
320     EXPECT_THROW(p["1.25"]!=2, alps::params::type_mismatch);
321 
322     // Negation of the 9 comparizons: doubles vs ints
323     EXPECT_THROW(p["1.25"]<=0, alps::params::type_mismatch);
324     EXPECT_THROW(p["1.25"]< 0, alps::params::type_mismatch);
325     EXPECT_THROW(p["1.25"]==0, alps::params::type_mismatch);
326     EXPECT_THROW(p["1.00"]< 1, alps::params::type_mismatch);
327     EXPECT_THROW(p["1.00"]> 1, alps::params::type_mismatch);
328     EXPECT_THROW(p["1.00"]!=1, alps::params::type_mismatch);
329     EXPECT_THROW(p["1.25"]>=2, alps::params::type_mismatch);
330     EXPECT_THROW(p["1.25"]> 2, alps::params::type_mismatch);
331     EXPECT_THROW(p["1.25"]==2, alps::params::type_mismatch);
332 
333     // 9 possible comparizons with less-than, equal, and more-than values: std::strings vs "char-strings"
334     EXPECT_TRUE( p["str"]> "1.2");
335     EXPECT_TRUE( p["str"]>="1.2");
336     EXPECT_TRUE( p["str"]!="1.2");
337     EXPECT_TRUE( p["str"]>="1.25");
338     EXPECT_TRUE( p["str"]<="1.25");
339     EXPECT_TRUE( p["str"]=="1.25");
340     EXPECT_TRUE( p["str"]< "2xx");
341     EXPECT_TRUE( p["str"]<="2xx");
342     EXPECT_TRUE( p["str"]!="2xx");
343 
344     // Negation of the 9 comparizons: std::strings vs "char-strings"
345     EXPECT_FALSE(p["str"]<="1.2");
346     EXPECT_FALSE(p["str"]< "1.2");
347     EXPECT_FALSE(p["str"]=="1.2");
348     EXPECT_FALSE(p["str"]< "1.25");
349     EXPECT_FALSE(p["str"]> "1.25");
350     EXPECT_FALSE(p["str"]!="1.25");
351     EXPECT_FALSE(p["str"]>="2xx");
352     EXPECT_FALSE(p["str"]> "2xx");
353     EXPECT_FALSE(p["str"]=="2xx");
354 }
355 
TEST_F(ParamTestCompare,SimilarTypeLiteralLHS)356 TEST_F(ParamTestCompare,SimilarTypeLiteralLHS) {
357     // 9 possible comparizons with less-than, equal, and more-than values: ints vs doubles
358     EXPECT_TRUE( 0.5< p["1"]);
359     EXPECT_TRUE( 0.5<=p["1"]);
360     EXPECT_TRUE( 0.5!=p["1"]);
361     EXPECT_TRUE( 1.0<=p["1"]);
362     EXPECT_TRUE( 1.0>=p["1"]);
363     EXPECT_TRUE( 1.0==p["1"]);
364     EXPECT_TRUE( 2.5> p["1"]);
365     EXPECT_TRUE( 2.5>=p["1"]);
366     EXPECT_TRUE( 2.5!=p["1"]);
367 
368     // Negation of the 9 comparizons: ints vs doubles
369     EXPECT_FALSE(0.5>=p["1"]);
370     EXPECT_FALSE(0.5> p["1"]);
371     EXPECT_FALSE(0.5==p["1"]);
372     EXPECT_FALSE(1.0> p["1"]);
373     EXPECT_FALSE(1.0< p["1"]);
374     EXPECT_FALSE(1.0!=p["1"]);
375     EXPECT_FALSE(2.5<=p["1"]);
376     EXPECT_FALSE(2.5< p["1"]);
377     EXPECT_FALSE(2.5==p["1"]);
378 
379     // 9 possible comparizons with less-than, equal, and more-than values: doubles vs ints
380     EXPECT_THROW( 0< p["1.25"], alps::params::type_mismatch);
381     EXPECT_THROW( 0<=p["1.25"], alps::params::type_mismatch);
382     EXPECT_THROW( 0!=p["1.25"], alps::params::type_mismatch);
383     EXPECT_THROW( 1<=p["1.00"], alps::params::type_mismatch);
384     EXPECT_THROW( 1>=p["1.00"], alps::params::type_mismatch);
385     EXPECT_THROW( 1==p["1.00"], alps::params::type_mismatch);
386     EXPECT_THROW( 2> p["1.25"], alps::params::type_mismatch);
387     EXPECT_THROW( 2>=p["1.25"], alps::params::type_mismatch);
388     EXPECT_THROW( 2!=p["1.25"], alps::params::type_mismatch);
389 
390     // Negation of the 9 comparizons: doubles vs ints
391     EXPECT_THROW(0>=p["1.25"], alps::params::type_mismatch);
392     EXPECT_THROW(0> p["1.25"], alps::params::type_mismatch);
393     EXPECT_THROW(0==p["1.25"], alps::params::type_mismatch);
394     EXPECT_THROW(1> p["1.00"], alps::params::type_mismatch);
395     EXPECT_THROW(1< p["1.00"], alps::params::type_mismatch);
396     EXPECT_THROW(1!=p["1.00"], alps::params::type_mismatch);
397     EXPECT_THROW(2<=p["1.25"], alps::params::type_mismatch);
398     EXPECT_THROW(2< p["1.25"], alps::params::type_mismatch);
399     EXPECT_THROW(2==p["1.25"], alps::params::type_mismatch);
400 
401     // 9 possible comparizons with less-than, equal, and more-than values: std::strings vs "char-strings"
402     EXPECT_TRUE( "1.2" < p["str"]);
403     EXPECT_TRUE( "1.2" <=p["str"]);
404     EXPECT_TRUE( "1.2" !=p["str"]);
405     EXPECT_TRUE( "1.25"<=p["str"]);
406     EXPECT_TRUE( "1.25">=p["str"]);
407     EXPECT_TRUE( "1.25"==p["str"]);
408     EXPECT_TRUE( "2xx" > p["str"]);
409     EXPECT_TRUE( "2xx" >=p["str"]);
410     EXPECT_TRUE( "2xx" !=p["str"]);
411 
412     // Negation of the 9 comparizons: std::strings vs "char-strings"
413     EXPECT_FALSE("1.2" >=p["str"]);
414     EXPECT_FALSE("1.2" > p["str"]);
415     EXPECT_FALSE("1.2" ==p["str"]);
416     EXPECT_FALSE("1.25"> p["str"]);
417     EXPECT_FALSE("1.25"< p["str"]);
418     EXPECT_FALSE("1.25"!=p["str"]);
419     EXPECT_FALSE("2xx" <=p["str"]);
420     EXPECT_FALSE("2xx" < p["str"]);
421     EXPECT_FALSE("2xx" ==p["str"]);
422 }
423 
TEST_F(ParamTestCompare,SimilarTypeVarRHS)424 TEST_F(ParamTestCompare,SimilarTypeVarRHS) {
425     {
426         // 9 possible comparizons with less-than, equal, and more-than values: ints vs doubles
427         double less_than=0.5;
428         double more_than=2.5;
429         double equal=1.0;
430         EXPECT_TRUE( p["1"]> less_than);
431         EXPECT_TRUE( p["1"]>=less_than);
432         EXPECT_TRUE( p["1"]!=less_than);
433         EXPECT_TRUE( p["1"]>=equal);
434         EXPECT_TRUE( p["1"]<=equal);
435         EXPECT_TRUE( p["1"]==equal);
436         EXPECT_TRUE( p["1"]< more_than);
437         EXPECT_TRUE( p["1"]<=more_than);
438         EXPECT_TRUE( p["1"]!=more_than);
439 
440         // Negation of the 9 comparizons: ints vs doubles
441         EXPECT_FALSE(p["1"]<=less_than);
442         EXPECT_FALSE(p["1"]< less_than);
443         EXPECT_FALSE(p["1"]==less_than);
444         EXPECT_FALSE(p["1"]< equal);
445         EXPECT_FALSE(p["1"]> equal);
446         EXPECT_FALSE(p["1"]!=equal);
447         EXPECT_FALSE(p["1"]>=more_than);
448         EXPECT_FALSE(p["1"]> more_than);
449         EXPECT_FALSE(p["1"]==more_than);
450     }
451 
452     {
453         // 9 possible comparizons with less-than, equal, and more-than values: doubles vs ints
454         int less_than=0;
455         int more_than=2;
456         int equal=1;
457 
458         EXPECT_THROW( p["1.25"]> less_than, alps::params::type_mismatch);
459         EXPECT_THROW( p["1.25"]>=less_than, alps::params::type_mismatch);
460         EXPECT_THROW( p["1.25"]!=less_than, alps::params::type_mismatch);
461         EXPECT_THROW( p["1.00"]>=equal    , alps::params::type_mismatch);
462         EXPECT_THROW( p["1.00"]<=equal    , alps::params::type_mismatch);
463         EXPECT_THROW( p["1.00"]==equal    , alps::params::type_mismatch);
464         EXPECT_THROW( p["1.25"]< more_than, alps::params::type_mismatch);
465         EXPECT_THROW( p["1.25"]<=more_than, alps::params::type_mismatch);
466         EXPECT_THROW( p["1.25"]!=more_than, alps::params::type_mismatch);
467 
468         // Negation of the 9 comparizons: doubles
469         EXPECT_THROW(p["1.25"]<=less_than, alps::params::type_mismatch);
470         EXPECT_THROW(p["1.25"]< less_than, alps::params::type_mismatch);
471         EXPECT_THROW(p["1.25"]==less_than, alps::params::type_mismatch);
472         EXPECT_THROW(p["1.00"]< equal    , alps::params::type_mismatch);
473         EXPECT_THROW(p["1.00"]> equal    , alps::params::type_mismatch);
474         EXPECT_THROW(p["1.00"]!=equal    , alps::params::type_mismatch);
475         EXPECT_THROW(p["1.25"]>=more_than, alps::params::type_mismatch);
476         EXPECT_THROW(p["1.25"]> more_than, alps::params::type_mismatch);
477         EXPECT_THROW(p["1.25"]==more_than, alps::params::type_mismatch);
478     }
479 
480     {
481         // 9 possible comparizons with less-than, equal, and more-than values: std::strings vs "char-strings"
482         const char* less_than="1.2";
483         const char* more_than="2xx";
484         const char* equal="1.25";
485 
486         EXPECT_TRUE( p["str"]> less_than);
487         EXPECT_TRUE( p["str"]>=less_than);
488         EXPECT_TRUE( p["str"]!=less_than);
489         EXPECT_TRUE( p["str"]>=equal);
490         EXPECT_TRUE( p["str"]<=equal);
491         EXPECT_TRUE( p["str"]==equal);
492         EXPECT_TRUE( p["str"]< more_than);
493         EXPECT_TRUE( p["str"]<=more_than);
494         EXPECT_TRUE( p["str"]!=more_than);
495 
496         // Negation of the 9 comparizons: std::strings vs "char-strings"
497         EXPECT_FALSE(p["str"]<=less_than);
498         EXPECT_FALSE(p["str"]< less_than);
499         EXPECT_FALSE(p["str"]==less_than);
500         EXPECT_FALSE(p["str"]< equal);
501         EXPECT_FALSE(p["str"]> equal);
502         EXPECT_FALSE(p["str"]!=equal);
503         EXPECT_FALSE(p["str"]>=more_than);
504         EXPECT_FALSE(p["str"]> more_than);
505         EXPECT_FALSE(p["str"]==more_than);
506     }
507 }
508 
TEST_F(ParamTestCompare,SimilarTypeVarLHS)509 TEST_F(ParamTestCompare,SimilarTypeVarLHS) {
510     {
511         // 9 possible comparizons with less-than, equal, and more-than values: ints vs doubles
512         double less_than=0.5;
513         double more_than=2.5;
514         double equal=1.0;
515         EXPECT_TRUE( less_than< p["1"]);
516         EXPECT_TRUE( less_than<=p["1"]);
517         EXPECT_TRUE( less_than!=p["1"]);
518         EXPECT_TRUE( equal    <=p["1"]);
519         EXPECT_TRUE( equal    >=p["1"]);
520         EXPECT_TRUE( equal    ==p["1"]);
521         EXPECT_TRUE( more_than> p["1"]);
522         EXPECT_TRUE( more_than>=p["1"]);
523         EXPECT_TRUE( more_than!=p["1"]);
524 
525         // Negation of the 9 comparizons: ints vs doubles
526         EXPECT_FALSE(less_than>=p["1"]);
527         EXPECT_FALSE(less_than> p["1"]);
528         EXPECT_FALSE(less_than==p["1"]);
529         EXPECT_FALSE(equal    > p["1"]);
530         EXPECT_FALSE(equal    < p["1"]);
531         EXPECT_FALSE(equal    !=p["1"]);
532         EXPECT_FALSE(more_than<=p["1"]);
533         EXPECT_FALSE(more_than< p["1"]);
534         EXPECT_FALSE(more_than==p["1"]);
535     }
536 
537     {
538         // 9 possible comparizons with less-than, equal, and more-than values: doubles vs ints
539         int less_than=0;
540         int more_than=2;
541         int equal=1;
542 
543         EXPECT_THROW( less_than< p["1.25"], alps::params::type_mismatch);
544         EXPECT_THROW( less_than<=p["1.25"], alps::params::type_mismatch);
545         EXPECT_THROW( less_than!=p["1.25"], alps::params::type_mismatch);
546         EXPECT_THROW( equal    <=p["1.00"], alps::params::type_mismatch);
547         EXPECT_THROW( equal    >=p["1.00"], alps::params::type_mismatch);
548         EXPECT_THROW( equal    ==p["1.00"], alps::params::type_mismatch);
549         EXPECT_THROW( more_than> p["1.25"], alps::params::type_mismatch);
550         EXPECT_THROW( more_than>=p["1.25"], alps::params::type_mismatch);
551         EXPECT_THROW( more_than!=p["1.25"], alps::params::type_mismatch);
552 
553         // Negation of the 9 comparizons: doubles vs ints
554         EXPECT_THROW(less_than>=p["1.25"], alps::params::type_mismatch);
555         EXPECT_THROW(less_than> p["1.25"], alps::params::type_mismatch);
556         EXPECT_THROW(less_than==p["1.25"], alps::params::type_mismatch);
557         EXPECT_THROW(equal    > p["1.00"], alps::params::type_mismatch);
558         EXPECT_THROW(equal    < p["1.00"], alps::params::type_mismatch);
559         EXPECT_THROW(equal    !=p["1.00"], alps::params::type_mismatch);
560         EXPECT_THROW(more_than<=p["1.25"], alps::params::type_mismatch);
561         EXPECT_THROW(more_than< p["1.25"], alps::params::type_mismatch);
562         EXPECT_THROW(more_than==p["1.25"], alps::params::type_mismatch);
563     }
564 
565     {
566         // 9 possible comparizons with less-than, equal, and more-than values: std::strings vs "char-strings"
567         const char* less_than="1.2";
568         const char* more_than="2xx";
569         const char* equal="1.25";
570 
571         EXPECT_TRUE( less_than< p["str"]);
572         EXPECT_TRUE( less_than<=p["str"]);
573         EXPECT_TRUE( less_than!=p["str"]);
574         EXPECT_TRUE( equal    <=p["str"]);
575         EXPECT_TRUE( equal    >=p["str"]);
576         EXPECT_TRUE( equal    ==p["str"]);
577         EXPECT_TRUE( more_than> p["str"]);
578         EXPECT_TRUE( more_than>=p["str"]);
579         EXPECT_TRUE( more_than!=p["str"]);
580 
581         // Negation of the 9 comparizons: std::strings vs "char-strings"
582         EXPECT_FALSE(less_than>=p["str"]);
583         EXPECT_FALSE(less_than> p["str"]);
584         EXPECT_FALSE(less_than==p["str"]);
585         EXPECT_FALSE(equal    > p["str"]);
586         EXPECT_FALSE(equal    < p["str"]);
587         EXPECT_FALSE(equal    !=p["str"]);
588         EXPECT_FALSE(more_than<=p["str"]);
589         EXPECT_FALSE(more_than< p["str"]);
590         EXPECT_FALSE(more_than==p["str"]);
591     }
592 }
593 
TEST_F(ParamTestCompare,IncompatTypeRHS)594 TEST_F(ParamTestCompare,IncompatTypeRHS) {
595     // 6 possible comparizons with a value: ints vs strings
596     EXPECT_THROW( p["1"]> "0", alps::params::type_mismatch);
597     EXPECT_THROW( p["1"]>="0", alps::params::type_mismatch);
598     EXPECT_THROW( p["1"]< "2", alps::params::type_mismatch);
599     EXPECT_THROW( p["1"]<="2", alps::params::type_mismatch);
600     EXPECT_THROW( p["1"]=="1", alps::params::type_mismatch);
601     EXPECT_THROW( p["1"]!="2", alps::params::type_mismatch);
602 
603     // 6 possible comparizons with a value: doubles vs strings
604     EXPECT_THROW( p["1.25"]> "0",    alps::params::type_mismatch);
605     EXPECT_THROW( p["1.25"]>="0",    alps::params::type_mismatch);
606     EXPECT_THROW( p["1.25"]< "2",    alps::params::type_mismatch);
607     EXPECT_THROW( p["1.25"]<="2",    alps::params::type_mismatch);
608     EXPECT_THROW( p["1.25"]=="1.25", alps::params::type_mismatch);
609     EXPECT_THROW( p["1.25"]!="2",    alps::params::type_mismatch);
610 
611     // 6 possible comparizons with a value: strings vs doubles
612     EXPECT_THROW( p["str"]> 0.5,  alps::params::type_mismatch);
613     EXPECT_THROW( p["str"]>=0.5,  alps::params::type_mismatch);
614     EXPECT_THROW( p["str"]< 1.5,  alps::params::type_mismatch);
615     EXPECT_THROW( p["str"]<=1.5,  alps::params::type_mismatch);
616     EXPECT_THROW( p["str"]==1.25, alps::params::type_mismatch);
617     EXPECT_THROW( p["str"]!=1.5,  alps::params::type_mismatch);
618 }
619 
TEST_F(ParamTestCompare,IncompatTypeLHS)620 TEST_F(ParamTestCompare,IncompatTypeLHS) {
621     // 6 possible comparizons with a value: ints vs strings
622     EXPECT_THROW("0"< p["1"], alps::params::type_mismatch);
623     EXPECT_THROW("0"<=p["1"], alps::params::type_mismatch);
624     EXPECT_THROW("2"> p["1"], alps::params::type_mismatch);
625     EXPECT_THROW("2">=p["1"], alps::params::type_mismatch);
626     EXPECT_THROW("1"==p["1"], alps::params::type_mismatch);
627     EXPECT_THROW("2"!=p["1"], alps::params::type_mismatch);
628 
629     // 6 possible comparizons with a value: doubles vs strings
630     EXPECT_THROW("0"   < p["1.25"], alps::params::type_mismatch);
631     EXPECT_THROW("0"   <=p["1.25"], alps::params::type_mismatch);
632     EXPECT_THROW("2"   > p["1.25"], alps::params::type_mismatch);
633     EXPECT_THROW("2"   >=p["1.25"], alps::params::type_mismatch);
634     EXPECT_THROW("1.25"==p["1.25"], alps::params::type_mismatch);
635     EXPECT_THROW("2"   !=p["1.25"], alps::params::type_mismatch);
636 
637     // 6 possible comparizons with a value: strings vs doubles
638     EXPECT_THROW(0.5 < p["str"], alps::params::type_mismatch);
639     EXPECT_THROW(0.5 <=p["str"], alps::params::type_mismatch);
640     EXPECT_THROW(1.5 > p["str"], alps::params::type_mismatch);
641     EXPECT_THROW(1.5 >=p["str"], alps::params::type_mismatch);
642     EXPECT_THROW(1.25==p["str"], alps::params::type_mismatch);
643     EXPECT_THROW(1.5 !=p["str"], alps::params::type_mismatch);
644 }
645 
646