@@ -37,6 +37,7 @@ struct ValueTest : JsonTest::TestCase
3737 Json::Value true_;
3838 Json::Value false_;
3939
40+
4041 ValueTest ()
4142 : emptyArray_( Json::arrayValue )
4243 , emptyObject_( Json::objectValue )
@@ -77,6 +78,10 @@ struct ValueTest : JsonTest::TestCase
7778 void checkMemberCount ( Json::Value &value, unsigned int expectedCount );
7879
7980 void checkIs ( const Json::Value &value, const IsCheck &check );
81+
82+ void checkIsLess ( const Json::Value &x, const Json::Value &y );
83+
84+ void checkIsEqual ( const Json::Value &x, const Json::Value &y );
8085};
8186
8287
@@ -251,6 +256,128 @@ ValueTest::checkIs( const Json::Value &value, const IsCheck &check )
251256}
252257
253258
259+ JSONTEST_FIXTURE ( ValueTest, compareInt )
260+ {
261+ JSONTEST_ASSERT_PRED ( checkIsLess ( 0 , 10 ) );
262+ JSONTEST_ASSERT_PRED ( checkIsEqual ( 10 , 10 ) );
263+ JSONTEST_ASSERT_PRED ( checkIsEqual ( -10 , -10 ) );
264+ JSONTEST_ASSERT_PRED ( checkIsLess ( -10 , 0 ) );
265+ }
266+
267+
268+ JSONTEST_FIXTURE ( ValueTest, compareUInt )
269+ {
270+ JSONTEST_ASSERT_PRED ( checkIsLess ( 0u , 10u ) );
271+ JSONTEST_ASSERT_PRED ( checkIsLess ( 0u , Json::Value::maxUInt ) );
272+ JSONTEST_ASSERT_PRED ( checkIsEqual ( 10u , 10u ) );
273+ }
274+
275+
276+ JSONTEST_FIXTURE ( ValueTest, compareDouble )
277+ {
278+ JSONTEST_ASSERT_PRED ( checkIsLess ( 0.0 , 10.0 ) );
279+ JSONTEST_ASSERT_PRED ( checkIsEqual ( 10.0 , 10.0 ) );
280+ JSONTEST_ASSERT_PRED ( checkIsEqual ( -10.0 , -10.0 ) );
281+ JSONTEST_ASSERT_PRED ( checkIsLess ( -10.0 , 0.0 ) );
282+ }
283+
284+
285+ JSONTEST_FIXTURE ( ValueTest, compareString )
286+ {
287+ JSONTEST_ASSERT_PRED ( checkIsLess ( " " , " " ) );
288+ JSONTEST_ASSERT_PRED ( checkIsLess ( " " , " a" ) );
289+ JSONTEST_ASSERT_PRED ( checkIsLess ( " abcd" , " zyui" ) );
290+ JSONTEST_ASSERT_PRED ( checkIsLess ( " abc" , " abcd" ) );
291+ JSONTEST_ASSERT_PRED ( checkIsEqual ( " abcd" , " abcd" ) );
292+ JSONTEST_ASSERT_PRED ( checkIsEqual ( " " , " " ) );
293+ JSONTEST_ASSERT_PRED ( checkIsLess ( " ABCD" , " abcd" ) );
294+ JSONTEST_ASSERT_PRED ( checkIsEqual ( " ABCD" , " ABCD" ) );
295+ }
296+
297+
298+ JSONTEST_FIXTURE ( ValueTest, compareBoolean )
299+ {
300+ JSONTEST_ASSERT_PRED ( checkIsLess ( false , true ) );
301+ JSONTEST_ASSERT_PRED ( checkIsEqual ( false , false ) );
302+ JSONTEST_ASSERT_PRED ( checkIsEqual ( true , true ) );
303+ }
304+
305+
306+ JSONTEST_FIXTURE ( ValueTest, compareArray )
307+ {
308+ // array compare size then content
309+ Json::Value emptyArray (Json::arrayValue);
310+ Json::Value l1aArray;
311+ l1aArray.append ( 0 );
312+ Json::Value l1bArray;
313+ l1bArray.append ( 10 );
314+ Json::Value l2aArray;
315+ l2aArray.append ( 0 );
316+ l2aArray.append ( 0 );
317+ Json::Value l2bArray;
318+ l2bArray.append ( 0 );
319+ l2bArray.append ( 10 );
320+ JSONTEST_ASSERT_PRED ( checkIsLess ( emptyArray, l1aArray ) );
321+ JSONTEST_ASSERT_PRED ( checkIsLess ( emptyArray, l2aArray ) );
322+ JSONTEST_ASSERT_PRED ( checkIsLess ( l1aArray, l2aArray ) );
323+ JSONTEST_ASSERT_PRED ( checkIsLess ( l2aArray, l2bArray ) );
324+ JSONTEST_ASSERT_PRED ( checkIsEqual ( emptyArray, Json::Value ( emptyArray ) ) );
325+ JSONTEST_ASSERT_PRED ( checkIsEqual ( l1aArray, Json::Value ( l1aArray) ) );
326+ JSONTEST_ASSERT_PRED ( checkIsEqual ( l2bArray, Json::Value ( l2bArray) ) );
327+ }
328+
329+
330+ JSONTEST_FIXTURE ( ValueTest, compareObject )
331+ {
332+ // object compare size then content
333+ Json::Value emptyObject (Json::objectValue);
334+ Json::Value l1aObject;
335+ l1aObject[" key1" ] = 0 ;
336+ Json::Value l1bObject;
337+ l1aObject[" key1" ] = 10 ;
338+ Json::Value l2aObject;
339+ l2aObject[" key1" ] = 0 ;
340+ l2aObject[" key2" ] = 0 ;
341+ JSONTEST_ASSERT_PRED ( checkIsLess ( emptyObject, l1aObject ) );
342+ JSONTEST_ASSERT_PRED ( checkIsLess ( emptyObject, l2aObject ) );
343+ JSONTEST_ASSERT_PRED ( checkIsLess ( l1aObject, l2aObject ) );
344+ JSONTEST_ASSERT_PRED ( checkIsEqual ( emptyObject, Json::Value ( emptyObject ) ) );
345+ JSONTEST_ASSERT_PRED ( checkIsEqual ( l1aObject, Json::Value ( l1aObject ) ) );
346+ JSONTEST_ASSERT_PRED ( checkIsEqual ( l2aObject, Json::Value ( l2aObject ) ) );
347+ }
348+
349+
350+ void
351+ ValueTest::checkIsLess ( const Json::Value &x, const Json::Value &y )
352+ {
353+ JSONTEST_ASSERT ( x < y );
354+ JSONTEST_ASSERT ( y > x );
355+ JSONTEST_ASSERT ( x <= y );
356+ JSONTEST_ASSERT ( y >= x );
357+ JSONTEST_ASSERT ( !(x == y) );
358+ JSONTEST_ASSERT ( !(y == x) );
359+ JSONTEST_ASSERT ( !(x >= y) );
360+ JSONTEST_ASSERT ( !(y <= x) );
361+ JSONTEST_ASSERT ( !(x > y) );
362+ JSONTEST_ASSERT ( !(y < x) );
363+ }
364+
365+
366+ void
367+ ValueTest::checkIsEqual ( const Json::Value &x, const Json::Value &y )
368+ {
369+ JSONTEST_ASSERT ( x == y );
370+ JSONTEST_ASSERT ( y == x );
371+ JSONTEST_ASSERT ( x <= y );
372+ JSONTEST_ASSERT ( y <= x );
373+ JSONTEST_ASSERT ( x >= y );
374+ JSONTEST_ASSERT ( y >= x );
375+ JSONTEST_ASSERT ( !(x < y) );
376+ JSONTEST_ASSERT ( !(y < x) );
377+ JSONTEST_ASSERT ( !(x > y) );
378+ JSONTEST_ASSERT ( !(y > x) );
379+ }
380+
254381
255382int main ( int argc, const char *argv[] )
256383{
@@ -267,5 +394,12 @@ int main( int argc, const char *argv[] )
267394 JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, isNull );
268395 JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, accessArray );
269396 JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, asFloat );
397+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareInt );
398+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareUInt );
399+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareDouble );
400+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareString );
401+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareBoolean );
402+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareArray );
403+ JSONTEST_REGISTER_FIXTURE ( runner, ValueTest, compareObject );
270404 return runner.runCommandLine ( argc, argv );
271405}
0 commit comments