func TestIntersectionWith(t *testing.T) { // Edge cases: the pairs (1,1), (1000,2000), (8000,4000) // exercise the <, >, == cases in IntersectionWith that the // TestSetOperations data is too dense to cover. var X, Y intsets.Sparse X.Insert(1) X.Insert(1000) X.Insert(8000) Y.Insert(1) Y.Insert(2000) Y.Insert(4000) X.IntersectionWith(&Y) if got, want := X.String(), "{1}"; got != want { t.Errorf("IntersectionWith: got %s, want %s", got, want) } }
func TestBitString(t *testing.T) { for _, test := range []struct { input []int want string }{ {nil, "0"}, {[]int{0}, "1"}, {[]int{0, 4, 5}, "110001"}, {[]int{0, 7, 177}, "1" + strings.Repeat("0", 169) + "10000001"}, {[]int{-3, 0, 4, 5}, "110001.001"}, {[]int{-3}, "0.001"}, } { var set intsets.Sparse for _, x := range test.input { set.Insert(x) } if got := set.BitString(); got != test.want { t.Errorf("BitString(%s) = %s, want %s", set.String(), got, test.want) } } }
func ArrayPairSum2(array []int, sum int) []IntPair { if len(array) < 2 { return nil } seen := intsets.Sparse{} result := make([]IntPair, 0, 100) for _, n := range array { target := sum - n if !seen.Has(target) { fmt.Printf("Insert: target=%d, n=%d, seen=%v\n", target, n, seen.String()) seen.Insert(n) } else { fmt.Printf("Has: target=%d, n=%d, seen=%v\n", target, n, seen.String()) result = append(result, IntPair{ int(math.Min(float64(n), float64(target))), int(math.Max(float64(n), float64(target))), }) } } return result }
func TestBasics(t *testing.T) { var s intsets.Sparse if len := s.Len(); len != 0 { t.Errorf("Len({}): got %d, want 0", len) } if s := s.String(); s != "{}" { t.Errorf("String({}): got %q, want \"{}\"", s) } if s.Has(3) { t.Errorf("Has(3): got true, want false") } if err := s.Check(); err != nil { t.Error(err) } if !s.Insert(3) { t.Errorf("Insert(3): got false, want true") } if max := s.Max(); max != 3 { t.Errorf("Max: got %d, want 3", max) } if !s.Insert(435) { t.Errorf("Insert(435): got false, want true") } if s := s.String(); s != "{3 435}" { t.Errorf("String({3 435}): got %q, want \"{3 435}\"", s) } if max := s.Max(); max != 435 { t.Errorf("Max: got %d, want 435", max) } if len := s.Len(); len != 2 { t.Errorf("Len: got %d, want 2", len) } if !s.Remove(435) { t.Errorf("Remove(435): got false, want true") } if s := s.String(); s != "{3}" { t.Errorf("String({3}): got %q, want \"{3}\"", s) } }