package change import ( "bytes" crand "crypto/rand" "math/rand" "testing" ) func randChange() Change { c := Change{ CollectionID: rand.Uint64(), ItemID: rand.Uint64(), Store: rand.Float32() < 0.5, } if c.Store { data := make([]byte, 1+rand.Intn(100)) crand.Read(data) c.Data = data } c.WritePageIDs = make([]uint64, rand.Intn(10)) for i := range c.WritePageIDs { c.WritePageIDs[i] = rand.Uint64() } c.ClearPageIDs = make([]uint64, rand.Intn(10)) for i := range c.ClearPageIDs { c.ClearPageIDs[i] = rand.Uint64() } return c } func randChangeSlice() []Change { changes := make([]Change, 1+rand.Intn(10)) for i := range changes { changes[i] = randChange() } return changes } func TestWriteRead(t *testing.T) { in := randChangeSlice() var out []Change buf := &bytes.Buffer{} if err := Write(in, buf); err != nil { t.Fatal(err) } out, err := Read(out, buf) if err != nil { t.Fatal(err) } if len(in) != len(out) { t.Fatal(len(in), len(out)) } for i := range in { in[i].AssertEqual(t, out[i]) } }