diff --git a/exercises/practice/word-count/tests/word_count.cairo b/exercises/practice/word-count/tests/word_count.cairo index 3f3f4333..920a19bd 100644 --- a/exercises/practice/word-count/tests/word_count.cairo +++ b/exercises/practice/word-count/tests/word_count.cairo @@ -6,7 +6,7 @@ fn count_one_word() { let mut output = count_words(input); let expected = array![WordResult { word: "word", count: 1 }].span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -21,7 +21,7 @@ fn count_one_of_each_word() { WordResult { word: "one", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -38,7 +38,7 @@ fn multiple_occurrences_of_a_word() { WordResult { word: "fish", count: 4 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -53,7 +53,7 @@ fn handles_cramped_lists() { WordResult { word: "three", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -68,7 +68,7 @@ fn handles_expanded_lists() { WordResult { word: "three", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -85,7 +85,7 @@ fn ignore_punctuation() { WordResult { word: "javascript", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -101,7 +101,7 @@ fn include_numbers() { ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -114,7 +114,7 @@ fn normalize_case() { WordResult { word: "go", count: 3 }, WordResult { word: "stop", count: 2 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -134,7 +134,7 @@ fn with_apostrophes() { WordResult { word: "it", count: 1 }, ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -152,7 +152,7 @@ fn with_quotations() { WordResult { word: "large", count: 2 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -172,7 +172,7 @@ fn substrings_from_the_beginning() { WordResult { word: "a", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -185,7 +185,7 @@ fn multiple_spaces_not_detected_as_a_word() { WordResult { word: "multiple", count: 1 }, WordResult { word: "whitespaces", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -200,7 +200,7 @@ fn alternating_word_separators_not_detected_as_a_word() { WordResult { word: "three", count: 1 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } #[test] @@ -213,12 +213,13 @@ fn quotation_for_word_with_apostrophe() { WordResult { word: "can", count: 1 }, WordResult { word: "can't", count: 2 } ] .span(); - assert_unordered(output, expected); + assert_unordered_eq(output, expected); } // helper function. -fn assert_unordered(span1: Span, span2: Span) { +fn assert_unordered_eq(span1: Span, span2: Span) { + // `span1` should be subset of `span2` for item in span1 { let mut found = false; for other_item in span2 { @@ -233,5 +234,21 @@ fn assert_unordered(span1: Span, span2: Span) { span1, span2 ); + }; + // and `span2` should be subset of `span1` + for item in span2 { + let mut found = false; + for other_item in span1 { + if item == other_item { + found = true; + break; + } + }; + assert!( + found, + "assertion failed: `(left == right)`\n left: `{:?}`,\n right `{:?}`", + span1, + span2 + ); } }