extend json compare test

Sat, 13 Dec 2025 16:27:24 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 13 Dec 2025 16:27:24 +0100
changeset 1588
5c4ee11417c1
parent 1587
7156d6699410
child 1589
7ab8b302d187

extend json compare test

tests/test_json.c file | annotate | diff | comparison | revisions
--- a/tests/test_json.c	Sat Dec 13 16:27:16 2025 +0100
+++ b/tests/test_json.c	Sat Dec 13 16:27:24 2025 +0100
@@ -1313,10 +1313,11 @@
 }
 
 CX_TEST(test_json_compare_objects) {
-    CxJsonValue *json[7];
+    CxJsonValue *json[10];
     cxJsonFromString(NULL, "{ }", &json[0]);
     cxJsonFromString(NULL, "{ }", &json[1]);
     cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[2]);
+    cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[7]);
     cxJsonFromString(NULL, "{ \"key0\": \"value0\", \"key1\": \"value1\", \"key2\":null }", &json[3]);
     cxJsonFromString(NULL, "{ \"key1\": \"value1\", \"key2\":null, \"key0\": \"value0\" }", &json[4]);
     
@@ -1339,33 +1340,77 @@
         "}\n";
     cxJsonFromString(NULL, json_complex_object, &json[5]);
     cxJsonFromString(NULL, json_complex_object, &json[6]);
+    const char *json_complex_object_int_array_mismatch =
+        "{\n"
+        "  \"bool\": false,\n"
+        "  \"int\": 47,\n"
+        "  \"strings\": [ \"hello\", \"world\" ],\n"
+        "  \"nested\": {\n"
+        "        \"string\": \"test\",\n"
+        "        \"floats\": [ 3.1415, 47.11, 8.15 ],\n"
+        "        \"ints\": [ 4, 8, 16, 15, 23, 42 ],\n"
+        "        \"literals\": [ true, null, false ],\n"
+        "        \"objects\": [\n"
+        "          {},\n"
+        "          { \"unicode\": \"\\u03a3\\u29b0\" },\n"
+        "          { \"array\": [ 1,2,3] }\n"
+        "        ]\n"
+        "  }\n"
+        "}\n";
+    cxJsonFromString(NULL, json_complex_object_int_array_mismatch, &json[8]);
+    const char *json_complex_object_different_order =
+        "{\n"
+        "  \"bool\": false,\n"
+        "  \"nested\": {\n"
+        "        \"string\": \"test\",\n"
+        "        \"ints\": [ 4, 8, 15, 16, 23, 42 ],\n"
+        "        \"floats\": [ 3.1415, 47.11, 8.15 ],\n"
+        "        \"objects\": [\n"
+        "          {},\n"
+        "          { \"unicode\": \"\\u03a3\\u29b0\" },\n"
+        "          { \"array\": [ 1,2,3] }\n"
+        "        ],\n"
+        "        \"literals\": [ true, null, false ]\n"
+        "  },\n"
+        "  \"int\": 47,\n"
+        "  \"strings\": [ \"hello\", \"world\" ]\n"
+        "}\n";
+    cxJsonFromString(NULL, json_complex_object_different_order, &json[9]);
     
     CX_TEST_DO {
-        for(int i=0;i<7;i++) {
+        for (unsigned i = 0; i < cx_nmemb(json); i++) {
             CX_TEST_ASSERT(cxJsonIsObject(json[i]));
         }
         
         CX_TEST_ASSERT(cxJsonCompare(json[0], json[0]) == 0);
         CX_TEST_ASSERT(cxJsonCompare(json[0], json[1]) == 0);
-        CX_TEST_ASSERT(cxJsonCompare(json[2], json[2]) == 0); // <-- fail
-        
-        // compare empty object with all other objects
-        for(int i=2;i<6;i++) {
-            CX_TEST_ASSERT(cxJsonCompare(json[0], json[i]) != 0);
-        }
+        CX_TEST_ASSERT(cxJsonCompare(json[1], json[0]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[2], json[7]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[7], json[2]) == 0);
         
         // compare different objects
         CX_TEST_ASSERT(cxJsonCompare(json[2], json[3]) != 0);
         CX_TEST_ASSERT(cxJsonCompare(json[2], json[5]) != 0);
         
         // compare equal objects with different orders
-        CX_TEST_ASSERT(cxJsonCompare(json[3], json[4]) == 0); // <-- fail
+        CX_TEST_ASSERT(cxJsonCompare(json[3], json[4]) == 0);
         
         // test the same complex object
-        CX_TEST_ASSERT(cxJsonCompare(json[6], json[7])); // <-- fail, even with hashmap
+        CX_TEST_ASSERT(cxJsonCompare(json[5], json[6]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[6], json[5]) == 0);
+
+        // object has a deep difference
+        CX_TEST_ASSERT(cxJsonCompare(json[5], json[8]) != 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[8], json[5]) != 0);
+
+        // equal except for the member order
+        CX_TEST_ASSERT(cxJsonCompare(json[5], json[9]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[6], json[9]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[9], json[5]) == 0);
+        CX_TEST_ASSERT(cxJsonCompare(json[9], json[6]) == 0);
     }
     
-    for(int i=0;i<7;i++) {
+    for(unsigned i=0;i<cx_nmemb(json);i++) {
         cxJsonValueFree(json[i]);
     }
 }

mercurial