exercism/go/custom-set/cases_test.go

369 lines
7.0 KiB
Go
Raw Normal View History

2016-08-15 19:08:39 +00:00
package stringset
// Source: exercism/x-common
// Commit: 269f498 Merge pull request #48 from soniakeys/custom-set-json
// Test two sets for equality.
var eqCases = []binBoolCase{
{ // order doesn't matter
[]string{"a", "c"},
[]string{"c", "a"},
true,
},
{ // dupicates don't matter
[]string{"a", "a"},
[]string{"a"},
true,
},
{ // empty sets are equal
[]string{},
[]string{},
true,
},
{ // set with single element is equal to itself
[]string{"a"},
[]string{"a"},
true,
},
{ // different sets are not equal
[]string{"a", "b", "c"},
[]string{"c", "d", "e"},
false,
},
{ // empty set is not equal to non-empty set
[]string{},
[]string{"a", "b", "c"},
false,
},
{ // non-empty set is not equal to empty set
[]string{"a", "b", "c"},
[]string{},
false,
},
{ // having most in common is not good enough
[]string{"a", "b", "c", "d"},
[]string{"b", "c", "d", "e"},
false,
},
}
// Add an element to a set.
var addCases = []eleOpCase{
{ // add to empty set
[]string{},
"c",
[]string{"c"},
},
{ // add to non-empty set
[]string{"a", "b", "d"},
"c",
[]string{"a", "b", "c", "d"},
},
{ // add existing element
[]string{"a", "b", "c"},
"c",
[]string{"a", "b", "c"},
},
}
// Delete an element from a set.
var delCases = []eleOpCase{
{ // delete an element
[]string{"c", "b", "a"},
"b",
[]string{"a", "c"},
},
{ // delete an element not in set
[]string{"c", "b", "a"},
"d",
[]string{"a", "b", "c"},
},
}
// Test if is a set is empty.
var emptyCases = []unaryBoolCase{
{ // empty
[]string{},
true,
},
{ // single element
[]string{"a"},
false,
},
{ // a few elements
[]string{"a", "b", "c", "b"},
false,
},
}
// Return the cardinality of a set.
var lenCases = []unaryIntCase{
{ // empty set
[]string{},
0,
},
{ // non-empty set
[]string{"a", "b", "c"},
3,
},
{ // duplicate element
[]string{"a", "b", "c", "b"},
3,
},
}
// Test if a value is an element of a set.
var hasCases = []eleBoolCase{
{ // nothing is an element of the empty set
[]string{},
"a",
false,
},
{ // 1 is in the set
[]string{"a", "b", "c", "b"},
"a",
true,
},
{ // 2 is in the set
[]string{"a", "b", "c", "b"},
"b",
true,
},
{ // 3 is in the set
[]string{"a", "b", "c", "b"},
"c",
true,
},
{ // 4 not in the set
[]string{"a", "b", "c", "b"},
"d",
false,
},
}
// Test if set1 is a subset of set2.
var subsetCases = []binBoolCase{
{ // empty set is subset of itself
[]string{},
[]string{},
true,
},
{ // empty set is subset of non-empty set
[]string{},
[]string{"a"},
true,
},
{ // non-empty set is not subset of empty set
[]string{"a"},
[]string{},
false,
},
{ // non-empty set is subset of itself
[]string{"a", "b", "c"},
[]string{"a", "b", "c"},
true,
},
{ // proper subset
[]string{"a", "b", "c"},
[]string{"d", "a", "b", "c"},
true,
},
{ // same number of elements
[]string{"a", "b", "c"},
[]string{"d", "a", "c"},
false,
},
{ // superset
[]string{"a", "b", "c", "d", "e"},
[]string{"b", "c", "d"},
false,
},
{ // fewer elements but not a subset
[]string{"a", "b", "c", "k"},
[]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"},
false,
},
}
// Test if two sets are disjoint.
var disjointCases = []binBoolCase{
{ // the empty set is disjoint with itself
[]string{},
[]string{},
true,
},
{ // empty set disjoint with non-empty set
[]string{},
[]string{"a"},
true,
},
{ // non-empty set disjoint with empty set
[]string{"a"},
[]string{},
true,
},
{ // one element in common
[]string{"a", "b"},
[]string{"b", "c"},
false,
},
{ // no elements in common
[]string{"a", "b"},
[]string{"c", "d"},
true,
},
}
// Produce the union of two sets.
var unionCases = []binOpCase{
{ // union of empty sets
[]string{},
[]string{},
[]string{},
},
{ // union of empty set with set of one element
[]string{},
[]string{"b"},
[]string{"b"},
},
{ // union of empty set with non-empty set
[]string{},
[]string{"c", "b", "e"},
[]string{"b", "c", "e"},
},
{ // union of non-empty set with empty set
[]string{"a", "c"},
[]string{},
[]string{"a", "c"},
},
{ // union of a set with itself
[]string{"a", "c"},
[]string{"c", "a"},
[]string{"a", "c"},
},
{ // union with one element
[]string{"a", "c"},
[]string{"b"},
[]string{"a", "b", "c"},
},
{ // one element in common, one different
[]string{"a", "c"},
[]string{"b", "c"},
[]string{"c", "b", "a"},
},
{ // two elements in common
[]string{"a", "b", "c", "d"},
[]string{"c", "b", "e"},
[]string{"a", "b", "c", "d", "e"},
},
}
// Intersect two sets.
var intersectionCases = []binOpCase{
{ // intersect empty sets
[]string{},
[]string{},
[]string{},
},
{ // intersect empty set with non-empty set
[]string{},
[]string{"c", "b", "e"},
[]string{},
},
{ // intersect non-empty set with empty set
[]string{"a", "b", "c", "d"},
[]string{},
[]string{},
},
{ // intersect one element with itself
[]string{"c"},
[]string{"c"},
[]string{"c"},
},
{ // one element in common, extra elements in both sets
[]string{"a", "b", "c"},
[]string{"c", "e", "d"},
[]string{"c"},
},
{ // two elements in common, extras in both sets
[]string{"a", "b", "c", "d"},
[]string{"c", "b", "e"},
[]string{"b", "c"},
},
{ // intersect with subset
[]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"},
[]string{"e", "f", "g", "h", "i", "j"},
[]string{"e", "f", "g", "h", "i", "j"},
},
{ // nothing in common
[]string{"a", "b", "c"},
[]string{"d", "e", "f"},
[]string{},
},
}
// Produce the set difference (set1 - set2)
// or more specifically, (set1 set2)
var differenceCases = []binOpCase{
{ // difference of two empty sets
[]string{},
[]string{},
[]string{},
},
{ // difference of empty set and non-empty set
[]string{},
[]string{"c", "b", "e"},
[]string{},
},
{ // difference of non-empty set and empty set
[]string{"a", "b", "c", "d"},
[]string{},
[]string{"a", "b", "c", "d"},
},
{ // no elements in common
[]string{"a", "b", "c"},
[]string{"d"},
[]string{"a", "b", "c"},
},
{ // one element in common, one extra
[]string{"c", "b", "a"},
[]string{"b", "d"},
[]string{"a", "c"},
},
{ // two elements in common, one extra
[]string{"a", "b", "c", "d"},
[]string{"c", "b", "e"},
[]string{"a", "d"},
},
}
// Produce the symmetric difference of two sets. The symmetric
// difference consists of elements in one or the other but not both.
var symmetricDifferenceCases = []binOpCase{
{ // two empty sets
[]string{},
[]string{},
[]string{},
},
{ // empty set and non-empty set
[]string{},
[]string{"c", "b", "e"},
[]string{"c", "b", "e"},
},
{ // non-empty set and empty set
[]string{"a", "b", "c", "d"},
[]string{},
[]string{"a", "b", "c", "d"},
},
{ // no elements in common
[]string{"a", "b", "c"},
[]string{"d"},
[]string{"a", "b", "c", "d"},
},
{ // one element in common
[]string{"c", "b", "a"},
[]string{"b", "d"},
[]string{"a", "c", "d"},
},
}