@@ -133,3 +133,110 @@ SCENARIO("Loading JSON files")
133133 }
134134 }
135135}
136+
137+ TEST_CASE (" json equality" , " [core][util][json]" )
138+ {
139+ SECTION (" null" )
140+ {
141+ REQUIRE (jsont::null_json_object == jsont::null_json_object);
142+ }
143+
144+ SECTION (" boolean" )
145+ {
146+ REQUIRE (jsont::json_boolean (false ) == jsont::json_boolean (false ));
147+ REQUIRE (jsont::json_boolean (true ) == jsont::json_boolean (true ));
148+ REQUIRE_FALSE (jsont::json_boolean (true ) == jsont::json_boolean (false ));
149+ REQUIRE_FALSE (jsont::json_boolean (false ) == jsont::null_json_object);
150+ }
151+
152+ SECTION (" number" )
153+ {
154+ REQUIRE (json_numbert (" 0" ) == json_numbert (" 0" ));
155+ REQUIRE (json_numbert (" 1" ) == json_numbert (" 1" ));
156+ REQUIRE (json_numbert (" -1" ) == json_numbert (" -1" ));
157+ REQUIRE (json_numbert (" 1.578" ) == json_numbert (" 1.578" ));
158+ REQUIRE_FALSE (json_numbert (" 0" ) == json_numbert (" 1" ));
159+ REQUIRE_FALSE (json_numbert (" 1" ) == json_numbert (" -1" ));
160+ REQUIRE_FALSE (json_numbert (" -1" ) == json_numbert (" 1" ));
161+ REQUIRE_FALSE (json_numbert (" 1.578" ) == json_numbert (" 1.5789" ));
162+ REQUIRE_FALSE (json_numbert (" 0" ) == jsont::json_boolean (false ));
163+ REQUIRE_FALSE (jsont::json_boolean (false ) == json_numbert (" 0" ));
164+ REQUIRE_FALSE (json_numbert (" 0" ) == jsont::null_json_object);
165+ REQUIRE_FALSE (jsont::null_json_object == json_numbert (" 0" ));
166+ }
167+
168+ SECTION (" string" )
169+ {
170+ REQUIRE (json_stringt (" " ) == json_stringt (" " ));
171+ REQUIRE (json_stringt (" foo" ) == json_stringt (" foo" ));
172+ REQUIRE (json_stringt (" bar" ) == json_stringt (" bar" ));
173+ REQUIRE_FALSE (json_stringt (" foo" ) == json_stringt (" bar" ));
174+ REQUIRE_FALSE (json_stringt (" bar" ) == json_stringt (" baz" ));
175+ REQUIRE_FALSE (json_stringt (" foo" ) == json_stringt (" food" ));
176+ REQUIRE_FALSE (json_stringt (" 1" ) == json_numbert (" 1" ));
177+ REQUIRE_FALSE (json_stringt (" true" ) == jsont::json_boolean (" true" ));
178+ REQUIRE_FALSE (json_stringt (" " ) == jsont::json_boolean (" false" ));
179+ REQUIRE_FALSE (json_stringt (" " ) == jsont::null_json_object);
180+ }
181+
182+ SECTION (" array" )
183+ {
184+ REQUIRE (json_arrayt{} == json_arrayt{});
185+ REQUIRE (
186+ json_arrayt{jsont::null_json_object} ==
187+ json_arrayt{jsont::null_json_object});
188+ REQUIRE (
189+ json_arrayt{json_numbert{" 9" }, json_numbert{" 6" }} ==
190+ json_arrayt{json_numbert{" 9" }, json_numbert{" 6" }});
191+ REQUIRE (
192+ json_arrayt{
193+ json_stringt{" foo" }, json_stringt{" bar" }, json_stringt{" baz" }} ==
194+ json_arrayt{
195+ json_stringt{" foo" }, json_stringt{" bar" }, json_stringt{" baz" }});
196+
197+ // different lengths
198+ REQUIRE_FALSE (
199+ json_arrayt{json_stringt{" foo" }, json_stringt{" bar" }} ==
200+ json_arrayt{
201+ json_stringt{" foo" }, json_stringt{" bar" }, json_stringt{" baz" }});
202+ // different elements
203+ REQUIRE_FALSE (
204+ json_arrayt{
205+ json_stringt{" foo" }, json_stringt{" bar" }, json_stringt{" foo" }} ==
206+ json_arrayt{
207+ json_stringt{" foo" }, json_stringt{" bar" }, json_stringt{" baz" }});
208+ // different kind
209+ REQUIRE_FALSE (json_arrayt{} == jsont::json_boolean (false ));
210+ REQUIRE_FALSE (json_arrayt{} == jsont::null_json_object);
211+ }
212+
213+ SECTION (" object" )
214+ {
215+ REQUIRE (json_objectt{} == json_objectt{});
216+ REQUIRE (
217+ json_objectt{{" key" , json_stringt{" value" }}} ==
218+ json_objectt{{" key" , json_stringt{" value" }}});
219+ REQUIRE (
220+ json_objectt{{" key1" , json_stringt{" value1" }},
221+ {" key2" , json_stringt{" value2" }}} ==
222+ json_objectt{{" key1" , json_stringt{" value1" }},
223+ {" key2" , json_stringt{" value2" }}});
224+
225+ // Extra property
226+ REQUIRE_FALSE (
227+ json_objectt{{" key1" , json_stringt{" value1" }},
228+ {" key2" , json_stringt{" value2" }},
229+ {" key3" , json_stringt{" value3" }}} ==
230+ json_objectt{{" key1" , json_stringt{" value1" }},
231+ {" key2" , json_stringt{" value2" }}});
232+ // different field values
233+ REQUIRE_FALSE (
234+ json_objectt{{" key1" , json_stringt{" foo" }},
235+ {" key2" , json_stringt{" bar" }}} ==
236+ json_objectt{{" key1" , json_stringt{" foo" }},
237+ {" key2" , json_stringt{" baz" }}});
238+ // different kind
239+ REQUIRE_FALSE (json_objectt{} == json_arrayt{});
240+ REQUIRE_FALSE (json_objectt{} == jsont::null_json_object);
241+ }
242+ }
0 commit comments