// Building the table. tw := NewWriter(buf, o) kv.Iterate(func(i int, key, value []byte) { tw.Append(key, value) }) tw.Close() // Opening the table. tr := NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len()), nil, nil, o) return tableWrapper{tr} } Test := func(kv *testutil.KeyValue, body func(r *Reader)) func() { return func() { db := Build(*kv) if body != nil { body(db.(tableWrapper).Reader) } testutil.KeyValueTesting(nil, db, *kv) } } testutil.AllKeyValueTesting(nil, Build) Describe("with one key per block", Test(testutil.KeyValue_Generate(nil, 9, 1, 10, 512, 512), func(r *Reader) { It("should have correct blocks number", func() { Expect(r.indexBlock.restartsLen).Should(Equal(9)) }) })) }) }) })
} } Describe("read test", func() { for restartInterval := 1; restartInterval <= 5; restartInterval++ { Describe(fmt.Sprintf("with restart interval of %d", restartInterval), func() { kv := &testutil.KeyValue{} Text := func() string { return fmt.Sprintf("and %d keys", kv.Len()) } Test := func() { // Make block. br := Build(kv, restartInterval) // Do testing. testutil.KeyValueTesting(nil, br, kv.Clone()) } Describe(Text(), Test) kv.PutString("", "empty") Describe(Text(), Test) kv.PutString("a1", "foo") Describe(Text(), Test) kv.PutString("a2", "v") Describe(Text(), Test) kv.PutString("a3qqwrkks", "hello") Describe(Text(), Test)