sets_2.sf 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/ruby
  2. # Tests for sets
  3. var engineers = Set('John', 'Jane', 'Jack', 'Janice') #=> Set("Janice", "Jack", "John", "Jane")
  4. var programmers = Set('Jack', 'Sam', 'Susan', 'Janice') #=> Set("Janice", "Jack", "Susan", "Sam")
  5. var managers = Set('Jane', 'Jack', 'Susan', 'Zack') #=> Set("Jack", "Zack", "Susan", "Jane")
  6. var employees = (engineers | programmers | managers) #=> Set("Jane", "Jack", "Zack", "Susan", "John", "Sam", "Janice")
  7. assert_eq(employees.sort, ["Jack", "Jane", "Janice", "John", "Sam", "Susan", "Zack"])
  8. var engineering_management = (engineers & managers) #=> Set("Jane", "Jack")
  9. assert_eq(engineering_management.sort, ["Jack", "Jane"])
  10. var fulltime_management = (managers - engineers - programmers) #=> Set("Zack")
  11. assert_eq(fulltime_management.sort, ["Zack"])
  12. assert_eq(fulltime_management, Set("Zack"))
  13. assert_ne(fulltime_management, Set("Foo"))
  14. engineers.add('Marvin') # add "Marvin" to the engineers set
  15. assert_eq(engineers.len, 5)
  16. assert_eq(engineers.sort, ["Jack", "Jane", "Janice", "John", "Marvin"])
  17. assert(!employees.is_superset(engineers), "employees is not a superset of engineers")
  18. employees |= engineers
  19. assert(employees.is_superset(engineers), "employees is not a superset of engineers")
  20. assert_eq(employees, Set("Jack", "Jane", "Janice", "John", "Marvin", "Sam", "Susan", "Zack"))
  21. var tests = [
  22. ["Jack", "Jane", "Janice", "John", "Marvin"],
  23. ["Jack", "Janice", "Sam"],
  24. ["Jack", "Jane", "Zack"],
  25. ["Jack", "Jane", "Janice", "John", "Marvin", "Sam", "Zack"]
  26. ]
  27. for group in [engineers, programmers, managers, employees] {
  28. group.discard("Susan")
  29. say group
  30. assert_eq(group.sort, tests.shift)
  31. }
  32. var a = Set()
  33. for x in (Set("a", "a", "b", "c", 42)) {
  34. a.add(x)
  35. }
  36. assert_eq(a, Set(42, "a", "b", "c"))
  37. assert_eq(a, Set("a", "b", "c", 42))
  38. assert_eq(a.clone, a)
  39. assert_eq(a.dclone, a)
  40. assert_eq(Set(42, 99, 12, 17).map {|n| n+1 }, Set(43, 100, 13, 18))
  41. assert_eq(Set(42, 99, 12, 17).map {|n| n+1 }.sort, [13, 18, 43, 100])
  42. assert_eq(Set(42, 99, 13, 20).grep{.is_even}, Set(42, 20))
  43. assert_eq(Set(42, 99, 13, 20).grep{.is_even}.sort, [20, 42])
  44. assert_eq(Set(12, 3, 4, 2, 4).to_bag, Bag(2, 3, 4, 12))
  45. assert_eq(Set(12, 3, 4, 2, 4).to_bag.to_set, Set(2, 3, 4, 12))
  46. assert_eq(Set(12, 3, 4, 2, 4).to_bag.to_set.sort, [2, 3, 4, 12])
  47. assert_eq(Set(1, 2, 3, 4).map { (_, _**2) }, Set(1, 2, 3, 4, 9, 16))
  48. do {
  49. var a = Set("John", "Serena", "Bob", "Mary", "Serena")
  50. var b = Set("Jim", "Mary", "John", "Jim", "Bob")
  51. assert_eq(a ^ b, Set("Serena", "Jim"))
  52. assert_eq(a ^ b, Set("Jim", "Serena"))
  53. assert_eq((a ^ b).sort, ["Jim", "Serena"])
  54. }
  55. assert(Set(3,4) ≡ Set(3,4))
  56. assert(Set(3,3,4) ≡ Set(4,3))
  57. assert(Set(3,3,4) ≡ Set(4,3,4,4,3,3,3))
  58. assert(!(Set(3,4) ≡ Set(4,3,5)))
  59. assert(!(Set(3,4) ≡ Set(4,3,5)))
  60. assert(!(Set(3,4) ≡ Set(2,3)))