@@ -467,10 +467,74 @@ fn array_contains(array: &Vec<Value>, find: &Value) -> bool {
467
467
}
468
468
}
469
469
470
- if find. is_array ( ) && item. is_array ( ) && array_contains ( item. as_array ( ) . unwrap ( ) , find) {
470
+ if find. is_array ( ) && item. is_array ( ) && is_same_array ( item. as_array ( ) . unwrap ( ) , find. as_array ( ) . unwrap ( ) ) {
471
471
return true ;
472
472
}
473
473
}
474
474
475
475
false
476
476
}
477
+
478
+ #[ test]
479
+ fn same_array ( ) {
480
+ use serde_json:: json;
481
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( null) ] ;
482
+ let array_two = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( null) ] ;
483
+ assert_eq ! ( is_same_array( & array_one, & array_two) , true ) ;
484
+ }
485
+
486
+ #[ test]
487
+ fn same_array_out_of_order ( ) {
488
+ use serde_json:: json;
489
+ let array_one = vec ! [ json!( "a" ) , json!( true ) , json!( r#"{"a":"b"}"# ) ] ;
490
+ let array_two = vec ! [ json!( r#"{"a":"b"}"# ) , json!( "a" ) , json!( true ) ] ;
491
+ assert_eq ! ( is_same_array( & array_one, & array_two) , true ) ;
492
+ }
493
+
494
+ #[ test]
495
+ fn different_array ( ) {
496
+ use serde_json:: json;
497
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) ] ;
498
+ let array_two = vec ! [ json!( r#"{"a":"b"}"# ) , json!( "a" ) , json!( 2 ) ] ;
499
+ assert_eq ! ( is_same_array( & array_one, & array_two) , false ) ;
500
+ }
501
+
502
+ #[ test]
503
+ fn different_array_sizes ( ) {
504
+ use serde_json:: json;
505
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) ] ;
506
+ let array_two = vec ! [ json!( r#"{"a":"b"}"# ) , json!( "a" ) ] ;
507
+ assert_eq ! ( is_same_array( & array_one, & array_two) , false ) ;
508
+ }
509
+
510
+ #[ test]
511
+ fn array_with_multiple_objects_with_superset ( ) {
512
+ use serde_json:: json;
513
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( r#"{"c":"d"}"# ) ] ;
514
+ let array_two = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b", "c":"d"}"# ) , json!( r#"{"c":"d"}"# ) ] ;
515
+ assert_eq ! ( is_same_array( & array_one, & array_two) , false ) ;
516
+ }
517
+
518
+ #[ test]
519
+ fn array_with_duplicates_out_of_order ( ) {
520
+ use serde_json:: json;
521
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( r#"{"a":"b"}"# ) ] ;
522
+ let array_two = vec ! [ json!( r#"{"a":"b"}"# ) , json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) ] ;
523
+ assert_eq ! ( is_same_array( & array_one, & array_two) , true ) ;
524
+ }
525
+
526
+ #[ test]
527
+ fn same_array_with_nested_array ( ) {
528
+ use serde_json:: json;
529
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( vec![ json!( "a" ) , json!( 1 ) ] ) ] ;
530
+ let array_two = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( vec![ json!( "a" ) , json!( 1 ) ] ) ] ;
531
+ assert_eq ! ( is_same_array( & array_one, & array_two) , true ) ;
532
+ }
533
+
534
+ #[ test]
535
+ fn different_array_with_nested_array ( ) {
536
+ use serde_json:: json;
537
+ let array_one = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( vec![ json!( "a" ) , json!( 1 ) ] ) ] ;
538
+ let array_two = vec ! [ json!( "a" ) , json!( 1 ) , json!( r#"{"a":"b"}"# ) , json!( vec![ json!( "a" ) , json!( 2 ) ] ) ] ;
539
+ assert_eq ! ( is_same_array( & array_one, & array_two) , false ) ;
540
+ }
0 commit comments