| package types |
| |
| import ( |
| "testing" |
| |
| "go.skia.org/infra/go/testutils/unittest" |
| "go.skia.org/infra/go/tiling" |
| ) |
| |
| func TestGoldenTrace(t *testing.T) { |
| unittest.SmallTest(t) |
| N := 5 |
| // Test NewGoldenTrace. |
| g := NewGoldenTraceN(N) |
| if got, want := g.Len(), N; got != want { |
| t.Errorf("Wrong Digests Size: Got %v Want %v", got, want) |
| } |
| if got, want := len(g.Keys), 0; got != want { |
| t.Errorf("Wrong Keys initial size: Got %v Want %v", got, want) |
| } |
| |
| g.Digests[0] = "a digest" |
| |
| if got, want := g.IsMissing(1), true; got != want { |
| t.Errorf("All values should start as missing: Got %v Want %v", got, want) |
| } |
| if got, want := g.IsMissing(0), false; got != want { |
| t.Errorf("Set values shouldn't be missing: Got %v Want %v", got, want) |
| } |
| |
| // Test Merge. |
| M := 7 |
| gm := NewGoldenTraceN(M) |
| gm.Digests[1] = "another digest" |
| g2 := g.Merge(gm) |
| if got, want := g2.Len(), N+M; got != want { |
| t.Errorf("Merge length wrong: Got %v Want %v", got, want) |
| } |
| if got, want := g2.(*GoldenTrace).Digests[0], Digest("a digest"); got != want { |
| t.Errorf("Digest not copied correctly: Got %v Want %v", got, want) |
| } |
| if got, want := g2.(*GoldenTrace).Digests[6], Digest("another digest"); got != want { |
| t.Errorf("Digest not copied correctly: Got %v Want %v", got, want) |
| } |
| |
| // Test Grow. |
| g = NewGoldenTraceN(N) |
| g.Digests[0] = "foo" |
| g.Grow(2*N, tiling.FILL_BEFORE) |
| if got, want := g.Digests[N], Digest("foo"); got != want { |
| t.Errorf("Grow didn't FILL_BEFORE correctly: Got %v Want %v", got, want) |
| } |
| |
| g = NewGoldenTraceN(N) |
| g.Digests[0] = "foo" |
| g.Grow(2*N, tiling.FILL_AFTER) |
| if got, want := g.Digests[0], Digest("foo"); got != want { |
| t.Errorf("Grow didn't FILL_AFTER correctly: Got %v Want %v", got, want) |
| } |
| |
| // Test Trim |
| g = NewGoldenTraceN(N) |
| g.Digests[1] = "foo" |
| if err := g.Trim(1, 3); err != nil { |
| t.Fatalf("Trim Failed: %s", err) |
| } |
| if got, want := g.Digests[0], Digest("foo"); got != want { |
| t.Errorf("Trim didn't copy correctly: Got %v Want %v", got, want) |
| } |
| if got, want := g.Len(), 2; got != want { |
| t.Errorf("Trim wrong length: Got %v Want %v", got, want) |
| } |
| |
| if err := g.Trim(-1, 1); err == nil { |
| t.Error("Trim failed to error.") |
| } |
| if err := g.Trim(1, 3); err == nil { |
| t.Error("Trim failed to error.") |
| } |
| if err := g.Trim(2, 1); err == nil { |
| t.Error("Trim failed to error.") |
| } |
| |
| if err := g.Trim(1, 1); err != nil { |
| t.Fatalf("Trim Failed: %s", err) |
| } |
| if got, want := g.Len(), 0; got != want { |
| t.Errorf("Trim wrong length: Got %v Want %v", got, want) |
| } |
| } |
| |
| func TestSetAt(t *testing.T) { |
| unittest.SmallTest(t) |
| testCases := []struct { |
| want Digest |
| }{ |
| { |
| want: "", |
| }, |
| { |
| want: "abcd", |
| }, |
| { |
| want: MISSING_DIGEST, |
| }, |
| } |
| tr := NewGoldenTraceN(len(testCases)) |
| for i, tc := range testCases { |
| if err := tr.SetAt(i, []byte(tc.want)); err != nil { |
| t.Fatalf("SetAt(%d, %#v) failed: %s", i, []byte(tc.want), err) |
| } |
| } |
| for i, tc := range testCases { |
| if got, want := tr.Digests[i], tc.want; got != want { |
| t.Errorf("SetAt(%d, %#v)failed: Got %s Want %s", i, []byte(tc.want), got, want) |
| } |
| } |
| } |