diff --git a/exercises/practice/custom-set/.docs/instructions.md b/exercises/practice/custom-set/.docs/instructions.md index e4931b058..33b90e28d 100644 --- a/exercises/practice/custom-set/.docs/instructions.md +++ b/exercises/practice/custom-set/.docs/instructions.md @@ -2,7 +2,6 @@ Create a custom set type. -Sometimes it is necessary to define a custom data structure of some -type, like a set. In this exercise you will define your own set. How it -works internally doesn't matter, as long as it behaves like a set of -unique elements. +Sometimes it is necessary to define a custom data structure of some type, like a set. +In this exercise you will define your own set. +How it works internally doesn't matter, as long as it behaves like a set of unique elements. diff --git a/exercises/practice/custom-set/.meta/test_template.tera b/exercises/practice/custom-set/.meta/test_template.tera new file mode 100644 index 000000000..c6fc07bb5 --- /dev/null +++ b/exercises/practice/custom-set/.meta/test_template.tera @@ -0,0 +1,60 @@ +use custom_set::CustomSet; +{% for test in cases %} +#[test] +{% if loop.index != 1 -%} +#[ignore] +{% endif -%} +fn {{ test.description | slugify | replace(from="-", to="_") }}() { +{%- if test.property == "empty" %} + let set = CustomSet::::new(&{{ test.input.set | json_encode() }}); + assert!( + {%- if not test.expected -%} ! {%- endif -%} + set.is_empty()); +{%- elif test.property == "contains" %} + let set = CustomSet::::new(&{{ test.input.set | json_encode() }}); + assert!( + {%- if not test.expected -%} ! {%- endif -%} + set.contains(&{{ test.input.element }})); +{%- elif test.property == "subset" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + assert!( + {%- if not test.expected -%} ! {%- endif -%} + set_1.is_subset(&set_2)); +{%- elif test.property == "disjoint" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + assert!( + {%- if not test.expected -%} ! {%- endif -%} + set_1.is_disjoint(&set_2)); +{%- elif test.property == "equal" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + {% if test.expected -%} + assert_eq!(set_1, set_2); + {%- else -%} + assert_ne!(set_1, set_2); + {%- endif %} +{%- elif test.property == "add" %} + let mut set = CustomSet::::new(&{{ test.input.set | json_encode() }}); + set.add({{ test.input.element }}); + let expected = CustomSet::::new(&{{ test.expected | json_encode() }}); + assert_eq!(set, expected); +{%- elif test.property == "intersection" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + let expected = CustomSet::::new(&{{ test.expected | json_encode() }}); + assert_eq!(set_1.intersection(&set_2), expected); +{%- elif test.property == "difference" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + let expected = CustomSet::::new(&{{ test.expected | json_encode() }}); + assert_eq!(set_1.difference(&set_2), expected); +{%- elif test.property == "union" %} + let set_1 = CustomSet::::new(&{{ test.input.set1 | json_encode() }}); + let set_2 = CustomSet::::new(&{{ test.input.set2 | json_encode() }}); + let expected = CustomSet::::new(&{{ test.expected | json_encode() }}); + assert_eq!(set_1.union(&set_2), expected); +{%- endif %} +} +{% endfor -%} diff --git a/exercises/practice/custom-set/.meta/tests.toml b/exercises/practice/custom-set/.meta/tests.toml index 1f3929e49..8c450e0ba 100644 --- a/exercises/practice/custom-set/.meta/tests.toml +++ b/exercises/practice/custom-set/.meta/tests.toml @@ -1,30 +1,127 @@ -# This is an auto-generated file. Regular comments will be removed when this -# file is regenerated. Regenerating will not touch any manually added keys, -# so comments can be added in a "comment" key. +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. [20c5f855-f83a-44a7-abdd-fe75c6cf022b] -description = "sets with no elements are empty" +description = "Returns true if the set contains no elements -> sets with no elements are empty" [d506485d-5706-40db-b7d8-5ceb5acf88d2] -description = "sets with elements are not empty" +description = "Returns true if the set contains no elements -> sets with elements are not empty" [759b9740-3417-44c3-8ca3-262b3c281043] -description = "nothing is contained in an empty set" +description = "Sets can report if they contain an element -> nothing is contained in an empty set" + +[f83cd2d1-2a85-41bc-b6be-80adbff4be49] +description = "Sets can report if they contain an element -> when the element is in the set" + +[93423fc0-44d0-4bc0-a2ac-376de8d7af34] +description = "Sets can report if they contain an element -> when the element is not in the set" + +[c392923a-637b-4495-b28e-34742cd6157a] +description = "A set is a subset if all of its elements are contained in the other set -> empty set is a subset of another empty set" + +[5635b113-be8c-4c6f-b9a9-23c485193917] +description = "A set is a subset if all of its elements are contained in the other set -> empty set is a subset of non-empty set" + +[832eda58-6d6e-44e2-92c2-be8cf0173cee] +description = "A set is a subset if all of its elements are contained in the other set -> non-empty set is not a subset of empty set" + +[c830c578-8f97-4036-b082-89feda876131] +description = "A set is a subset if all of its elements are contained in the other set -> set is a subset of set with exact same elements" + +[476a4a1c-0fd1-430f-aa65-5b70cbc810c5] +description = "A set is a subset if all of its elements are contained in the other set -> set is a subset of larger set with same elements" + +[d2498999-3e46-48e4-9660-1e20c3329d3d] +description = "A set is a subset if all of its elements are contained in the other set -> set is not a subset of set that does not contain its elements" + +[7d38155e-f472-4a7e-9ad8-5c1f8f95e4cc] +description = "Sets are disjoint if they share no elements -> the empty set is disjoint with itself" + +[7a2b3938-64b6-4b32-901a-fe16891998a6] +description = "Sets are disjoint if they share no elements -> empty set is disjoint with non-empty set" + +[589574a0-8b48-48ea-88b0-b652c5fe476f] +description = "Sets are disjoint if they share no elements -> non-empty set is disjoint with empty set" + +[febeaf4f-f180-4499-91fa-59165955a523] +description = "Sets are disjoint if they share no elements -> sets are not disjoint if they share an element" + +[0de20d2f-c952-468a-88c8-5e056740f020] +description = "Sets are disjoint if they share no elements -> sets are disjoint if they share no elements" [4bd24adb-45da-4320-9ff6-38c044e9dff8] -description = "empty sets are equal" +description = "Sets with the same elements are equal -> empty sets are equal" + +[f65c0a0e-6632-4b2d-b82c-b7c6da2ec224] +description = "Sets with the same elements are equal -> empty set is not equal to non-empty set" + +[81e53307-7683-4b1e-a30c-7e49155fe3ca] +description = "Sets with the same elements are equal -> non-empty set is not equal to empty set" [d57c5d7c-a7f3-48cc-a162-6b488c0fbbd0] -description = "sets with the same elements are equal" +description = "Sets with the same elements are equal -> sets with the same elements are equal" [dd61bafc-6653-42cc-961a-ab071ee0ee85] -description = "sets with different elements are not equal" +description = "Sets with the same elements are equal -> sets with different elements are not equal" + +[06059caf-9bf4-425e-aaff-88966cb3ea14] +description = "Sets with the same elements are equal -> set is not equal to larger set with same elements" + +[d4a1142f-09aa-4df9-8b83-4437dcf7ec24] +description = "Sets with the same elements are equal -> set is equal to a set constructed from an array with duplicates" [8a677c3c-a658-4d39-bb88-5b5b1a9659f4] -description = "add to empty set" +description = "Unique elements can be added to a set -> add to empty set" + +[0903dd45-904d-4cf2-bddd-0905e1a8d125] +description = "Unique elements can be added to a set -> add to non-empty set" + +[b0eb7bb7-5e5d-4733-b582-af771476cb99] +description = "Unique elements can be added to a set -> adding an existing element does not change the set" + +[893d5333-33b8-4151-a3d4-8f273358208a] +description = "Intersection returns a set of all shared elements -> intersection of two empty sets is an empty set" + +[d739940e-def2-41ab-a7bb-aaf60f7d782c] +description = "Intersection returns a set of all shared elements -> intersection of an empty set and non-empty set is an empty set" + +[3607d9d8-c895-4d6f-ac16-a14956e0a4b7] +description = "Intersection returns a set of all shared elements -> intersection of a non-empty set and an empty set is an empty set" [b5120abf-5b5e-41ab-aede-4de2ad85c34e] -description = "intersection of two sets with no shared elements is an empty set" +description = "Intersection returns a set of all shared elements -> intersection of two sets with no shared elements is an empty set" [af21ca1b-fac9-499c-81c0-92a591653d49] -description = "intersection of two sets with shared elements is a set of the shared elements" +description = "Intersection returns a set of all shared elements -> intersection of two sets with shared elements is a set of the shared elements" + +[c5e6e2e4-50e9-4bc2-b89f-c518f015b57e] +description = "Difference (or Complement) of a set is a set of all elements that are only in the first set -> difference of two empty sets is an empty set" + +[2024cc92-5c26-44ed-aafd-e6ca27d6fcd2] +description = "Difference (or Complement) of a set is a set of all elements that are only in the first set -> difference of empty set and non-empty set is an empty set" + +[e79edee7-08aa-4c19-9382-f6820974b43e] +description = "Difference (or Complement) of a set is a set of all elements that are only in the first set -> difference of a non-empty set and an empty set is the non-empty set" + +[c5ac673e-d707-4db5-8d69-7082c3a5437e] +description = "Difference (or Complement) of a set is a set of all elements that are only in the first set -> difference of two non-empty sets is a set of elements that are only in the first set" + +[c45aed16-5494-455a-9033-5d4c93589dc6] +description = "Union returns a set of all elements in either set -> union of empty sets is an empty set" + +[9d258545-33c2-4fcb-a340-9f8aa69e7a41] +description = "Union returns a set of all elements in either set -> union of an empty set and non-empty set is the non-empty set" + +[3aade50c-80c7-4db8-853d-75bac5818b83] +description = "Union returns a set of all elements in either set -> union of a non-empty set and empty set is the non-empty set" + +[a00bb91f-c4b4-4844-8f77-c73e2e9df77c] +description = "Union returns a set of all elements in either set -> union of non-empty sets contains all unique elements" diff --git a/exercises/practice/custom-set/tests/custom-set.rs b/exercises/practice/custom-set/tests/custom-set.rs index 10d384f22..6730dadb5 100644 --- a/exercises/practice/custom-set/tests/custom-set.rs +++ b/exercises/practice/custom-set/tests/custom-set.rs @@ -1,298 +1,323 @@ -use custom_set::*; +use custom_set::CustomSet; #[test] fn sets_with_no_elements_are_empty() { - let set: CustomSet<()> = CustomSet::new(&[]); + let set = CustomSet::::new(&[]); assert!(set.is_empty()); } #[test] #[ignore] fn sets_with_elements_are_not_empty() { - let set = CustomSet::new(&[1]); + let set = CustomSet::::new(&[1]); assert!(!set.is_empty()); } #[test] #[ignore] fn nothing_is_contained_in_an_empty_set() { - let set = CustomSet::new(&[]); + let set = CustomSet::::new(&[]); assert!(!set.contains(&1)); } #[test] #[ignore] -fn true_when_the_element_is_in_the_set() { - let set = CustomSet::new(&[1, 2, 3]); +fn when_the_element_is_in_the_set() { + let set = CustomSet::::new(&[1, 2, 3]); assert!(set.contains(&1)); } #[test] #[ignore] -fn false_when_the_element_is_not_in_the_set() { - let set = CustomSet::new(&[1, 2, 3]); +fn when_the_element_is_not_in_the_set() { + let set = CustomSet::::new(&[1, 2, 3]); assert!(!set.contains(&4)); } #[test] #[ignore] -fn empty_sets_are_subsets_of_each_other() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert!(set1.is_subset(&set2)); - assert!(set2.is_subset(&set1)); +fn empty_set_is_a_subset_of_another_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + assert!(set_1.is_subset(&set_2)); } #[test] #[ignore] -fn empty_set_is_subset_of_non_empty_set() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[1]); - assert!(set1.is_subset(&set2)); +fn empty_set_is_a_subset_of_non_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[1]); + assert!(set_1.is_subset(&set_2)); } #[test] #[ignore] -fn non_empty_set_is_not_subset_of_empty_set() { - let set1 = CustomSet::new(&[1]); - let set2 = CustomSet::new(&[]); - assert!(!set1.is_subset(&set2)); +fn non_empty_set_is_not_a_subset_of_empty_set() { + let set_1 = CustomSet::::new(&[1]); + let set_2 = CustomSet::::new(&[]); + assert!(!set_1.is_subset(&set_2)); } #[test] #[ignore] -fn sets_with_same_elements_are_subsets() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[1, 2, 3]); - assert!(set1.is_subset(&set2)); - assert!(set2.is_subset(&set1)); +fn set_is_a_subset_of_set_with_exact_same_elements() { + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[1, 2, 3]); + assert!(set_1.is_subset(&set_2)); } #[test] #[ignore] -fn set_contained_in_other_set_is_a_subset() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[4, 1, 2, 3]); - assert!(set1.is_subset(&set2)); +fn set_is_a_subset_of_larger_set_with_same_elements() { + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[4, 1, 2, 3]); + assert!(set_1.is_subset(&set_2)); } #[test] #[ignore] -fn set_not_contained_in_other_set_is_not_a_subset_one() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[4, 1, 3]); - assert!(!set1.is_subset(&set2)); +fn set_is_not_a_subset_of_set_that_does_not_contain_its_elements() { + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[4, 1, 3]); + assert!(!set_1.is_subset(&set_2)); } #[test] #[ignore] -fn empty_sets_are_disjoint_with_each_other() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert!(set1.is_disjoint(&set2)); - assert!(set2.is_disjoint(&set1)); +fn the_empty_set_is_disjoint_with_itself() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + assert!(set_1.is_disjoint(&set_2)); } #[test] #[ignore] -fn empty_set_disjoint_with_non_empty_set() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[1]); - assert!(set1.is_disjoint(&set2)); +fn empty_set_is_disjoint_with_non_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[1]); + assert!(set_1.is_disjoint(&set_2)); } #[test] #[ignore] -fn non_empty_set_disjoint_with_empty_set() { - let set1 = CustomSet::new(&[1]); - let set2 = CustomSet::new(&[]); - assert!(set1.is_disjoint(&set2)); +fn non_empty_set_is_disjoint_with_empty_set() { + let set_1 = CustomSet::::new(&[1]); + let set_2 = CustomSet::::new(&[]); + assert!(set_1.is_disjoint(&set_2)); } #[test] #[ignore] -fn sets_with_one_element_in_common_are_not_disjoint() { - let set1 = CustomSet::new(&[1, 2]); - let set2 = CustomSet::new(&[2, 3]); - assert!(!set1.is_disjoint(&set2)); - assert!(!set2.is_disjoint(&set1)); +fn sets_are_not_disjoint_if_they_share_an_element() { + let set_1 = CustomSet::::new(&[1, 2]); + let set_2 = CustomSet::::new(&[2, 3]); + assert!(!set_1.is_disjoint(&set_2)); } #[test] #[ignore] -fn sets_with_no_elements_in_common_are_disjoint() { - let set1 = CustomSet::new(&[1, 2]); - let set2 = CustomSet::new(&[3, 4]); - assert!(set1.is_disjoint(&set2)); - assert!(set2.is_disjoint(&set1)); +fn sets_are_disjoint_if_they_share_no_elements() { + let set_1 = CustomSet::::new(&[1, 2]); + let set_2 = CustomSet::::new(&[3, 4]); + assert!(set_1.is_disjoint(&set_2)); } #[test] #[ignore] fn empty_sets_are_equal() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert_eq!(set1, set2); + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + assert_eq!(set_1, set_2); } #[test] #[ignore] -fn empty_set_is_not_equal_to_a_non_empty_set() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[1, 2, 3]); - assert_ne!(set1, set2); +fn empty_set_is_not_equal_to_non_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[1, 2, 3]); + assert_ne!(set_1, set_2); } #[test] #[ignore] -fn non_empty_set_is_not_equal_to_an_empty_set() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[]); - assert_ne!(set1, set2); +fn non_empty_set_is_not_equal_to_empty_set() { + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[]); + assert_ne!(set_1, set_2); } #[test] #[ignore] fn sets_with_the_same_elements_are_equal() { - let set1 = CustomSet::new(&[1, 2]); - let set2 = CustomSet::new(&[2, 1]); - assert_eq!(set1, set2); + let set_1 = CustomSet::::new(&[1, 2]); + let set_2 = CustomSet::::new(&[2, 1]); + assert_eq!(set_1, set_2); } #[test] #[ignore] fn sets_with_different_elements_are_not_equal() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[2, 1, 4]); - assert_ne!(set1, set2); + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[1, 2, 4]); + assert_ne!(set_1, set_2); +} + +#[test] +#[ignore] +fn set_is_not_equal_to_larger_set_with_same_elements() { + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[1, 2, 3, 4]); + assert_ne!(set_1, set_2); +} + +#[test] +#[ignore] +fn set_is_equal_to_a_set_constructed_from_an_array_with_duplicates() { + let set_1 = CustomSet::::new(&[1]); + let set_2 = CustomSet::::new(&[1, 1]); + assert_eq!(set_1, set_2); } #[test] #[ignore] fn add_to_empty_set() { - let mut set = CustomSet::new(&[]); + let mut set = CustomSet::::new(&[]); set.add(3); - assert_eq!(set, CustomSet::new(&[3])); + let expected = CustomSet::::new(&[3]); + assert_eq!(set, expected); } #[test] #[ignore] fn add_to_non_empty_set() { - let mut set = CustomSet::new(&[1, 2, 4]); + let mut set = CustomSet::::new(&[1, 2, 4]); set.add(3); - assert_eq!(set, CustomSet::new(&[1, 2, 3, 4])); + let expected = CustomSet::::new(&[1, 2, 3, 4]); + assert_eq!(set, expected); } #[test] #[ignore] -fn add_existing_element() { - let mut set = CustomSet::new(&[1, 2, 3]); +fn adding_an_existing_element_does_not_change_the_set() { + let mut set = CustomSet::::new(&[1, 2, 3]); set.add(3); - assert_eq!(set, CustomSet::new(&[1, 2, 3])); + let expected = CustomSet::::new(&[1, 2, 3]); + assert_eq!(set, expected); } #[test] #[ignore] -fn intersecting_empty_sets_return_empty_set() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert_eq!(set1.intersection(&set2), CustomSet::new(&[])); +fn intersection_of_two_empty_sets_is_an_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.intersection(&set_2), expected); } #[test] #[ignore] -fn intersecting_empty_set_with_non_empty_returns_empty_set() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[3, 2, 5]); - assert_eq!(set1.intersection(&set2), CustomSet::new(&[])); +fn intersection_of_an_empty_set_and_non_empty_set_is_an_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[3, 2, 5]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.intersection(&set_2), expected); } #[test] #[ignore] -fn intersecting_non_empty_set_with_empty_returns_empty_set() { - let set1 = CustomSet::new(&[1, 2, 3, 4]); - let set2 = CustomSet::new(&[]); - assert_eq!(set1.intersection(&set2), CustomSet::new(&[])); +fn intersection_of_a_non_empty_set_and_an_empty_set_is_an_empty_set() { + let set_1 = CustomSet::::new(&[1, 2, 3, 4]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.intersection(&set_2), expected); } #[test] #[ignore] fn intersection_of_two_sets_with_no_shared_elements_is_an_empty_set() { - let set1 = CustomSet::new(&[1, 2, 3]); - let set2 = CustomSet::new(&[4, 5, 6]); - assert_eq!(set1.intersection(&set2), CustomSet::new(&[])); - assert_eq!(set2.intersection(&set1), CustomSet::new(&[])); + let set_1 = CustomSet::::new(&[1, 2, 3]); + let set_2 = CustomSet::::new(&[4, 5, 6]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.intersection(&set_2), expected); } #[test] #[ignore] fn intersection_of_two_sets_with_shared_elements_is_a_set_of_the_shared_elements() { - let set1 = CustomSet::new(&[1, 2, 3, 4]); - let set2 = CustomSet::new(&[3, 2, 5]); - assert_eq!(set1.intersection(&set2), CustomSet::new(&[2, 3])); - assert_eq!(set2.intersection(&set1), CustomSet::new(&[2, 3])); + let set_1 = CustomSet::::new(&[1, 2, 3, 4]); + let set_2 = CustomSet::::new(&[3, 2, 5]); + let expected = CustomSet::::new(&[2, 3]); + assert_eq!(set_1.intersection(&set_2), expected); } #[test] #[ignore] -fn difference_of_two_empty_sets_is_empty_set() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert_eq!(set1.difference(&set2), CustomSet::new(&[])); +fn difference_of_two_empty_sets_is_an_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.difference(&set_2), expected); } #[test] #[ignore] -fn difference_of_an_empty_and_non_empty_set_is_an_empty_set() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[3, 2, 5]); - assert_eq!(set1.difference(&set2), CustomSet::new(&[])); +fn difference_of_empty_set_and_non_empty_set_is_an_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[3, 2, 5]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.difference(&set_2), expected); } #[test] #[ignore] -fn difference_of_a_non_empty_set_and_empty_set_is_the_non_empty_set() { - let set1 = CustomSet::new(&[1, 2, 3, 4]); - let set2 = CustomSet::new(&[]); - assert_eq!(set1.difference(&set2), CustomSet::new(&[1, 2, 3, 4])); +fn difference_of_a_non_empty_set_and_an_empty_set_is_the_non_empty_set() { + let set_1 = CustomSet::::new(&[1, 2, 3, 4]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[1, 2, 3, 4]); + assert_eq!(set_1.difference(&set_2), expected); } #[test] #[ignore] -fn difference_of_two_non_empty_sets_is_elements_only_in_first_set_one() { - let set1 = CustomSet::new(&[3, 2, 1]); - let set2 = CustomSet::new(&[2, 4]); - assert_eq!(set1.difference(&set2), CustomSet::new(&[1, 3])); +fn difference_of_two_non_empty_sets_is_a_set_of_elements_that_are_only_in_the_first_set() { + let set_1 = CustomSet::::new(&[3, 2, 1]); + let set_2 = CustomSet::::new(&[2, 4]); + let expected = CustomSet::::new(&[1, 3]); + assert_eq!(set_1.difference(&set_2), expected); } #[test] #[ignore] -fn union_of_two_empty_sets_is_empty_set() { - let set1: CustomSet<()> = CustomSet::new(&[]); - let set2: CustomSet<()> = CustomSet::new(&[]); - assert_eq!(set1.union(&set2), CustomSet::new(&[])); +fn union_of_empty_sets_is_an_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[]); + assert_eq!(set_1.union(&set_2), expected); } #[test] #[ignore] -fn union_of_empty_set_and_non_empty_set_is_all_elements() { - let set1 = CustomSet::new(&[]); - let set2 = CustomSet::new(&[2]); - assert_eq!(set1.union(&set2), CustomSet::new(&[2])); +fn union_of_an_empty_set_and_non_empty_set_is_the_non_empty_set() { + let set_1 = CustomSet::::new(&[]); + let set_2 = CustomSet::::new(&[2]); + let expected = CustomSet::::new(&[2]); + assert_eq!(set_1.union(&set_2), expected); } #[test] #[ignore] -fn union_of_non_empty_set_and_empty_set_is_the_non_empty_set() { - let set1 = CustomSet::new(&[1, 3]); - let set2 = CustomSet::new(&[]); - assert_eq!(set1.union(&set2), CustomSet::new(&[1, 3])); +fn union_of_a_non_empty_set_and_empty_set_is_the_non_empty_set() { + let set_1 = CustomSet::::new(&[1, 3]); + let set_2 = CustomSet::::new(&[]); + let expected = CustomSet::::new(&[1, 3]); + assert_eq!(set_1.union(&set_2), expected); } #[test] #[ignore] fn union_of_non_empty_sets_contains_all_unique_elements() { - let set1 = CustomSet::new(&[1, 3]); - let set2 = CustomSet::new(&[2, 3]); - assert_eq!(set1.union(&set2), CustomSet::new(&[3, 2, 1])); + let set_1 = CustomSet::::new(&[1, 3]); + let set_2 = CustomSet::::new(&[2, 3]); + let expected = CustomSet::::new(&[3, 2, 1]); + assert_eq!(set_1.union(&set_2), expected); } diff --git a/problem-specifications b/problem-specifications index 03220a9ce..988eafc34 160000 --- a/problem-specifications +++ b/problem-specifications @@ -1 +1 @@ -Subproject commit 03220a9ceb507f46cb70e317aaf1620237435144 +Subproject commit 988eafc342c42defd78d1fc87b80d8586bc01ac4