Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(415)

Side by Side Diff: store_test.go

Issue 1409173004: Remove usage of unsafe from gkvlite (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gkvlite.git@master
Patch Set: get locks out of other lock Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « store.go ('k') | tools/slab/slab.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 package gkvlite 1 package gkvlite
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "errors" 5 "errors"
6 "fmt" 6 "fmt"
7 "io" 7 "io"
8 "io/ioutil" 8 "io/ioutil"
9 "math/rand" 9 "math/rand"
10 "os" 10 "os"
(...skipping 1608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 if m != 0 { 1619 if m != 0 {
1620 t.Errorf("expected 0 items, got: %v", m) 1620 t.Errorf("expected 0 items, got: %v", m)
1621 } 1621 }
1622 } 1622 }
1623 1623
1624 func TestItemCopy(t *testing.T) { 1624 func TestItemCopy(t *testing.T) {
1625 i := &Item{ 1625 i := &Item{
1626 Key: []byte("hi"), 1626 Key: []byte("hi"),
1627 Val: []byte("world"), 1627 Val: []byte("world"),
1628 Priority: 1234, 1628 Priority: 1234,
1629 » » Transient: unsafe.Pointer(&node{}), 1629 » » Transient: &node{},
1630 } 1630 }
1631 j := i.Copy() 1631 j := i.Copy()
1632 if !bytes.Equal(j.Key, i.Key) || !bytes.Equal(j.Val, i.Val) || 1632 if !bytes.Equal(j.Key, i.Key) || !bytes.Equal(j.Val, i.Val) ||
1633 j.Priority != i.Priority || j.Transient != i.Transient { 1633 j.Priority != i.Priority || j.Transient != i.Transient {
1634 t.Errorf("expected item copy to work") 1634 t.Errorf("expected item copy to work")
1635 } 1635 }
1636 } 1636 }
1637 1637
1638 func TestCurFreeNodes(t *testing.T) { 1638 func TestCurFreeNodes(t *testing.T) {
1639 s, err := NewStore(nil) 1639 s, err := NewStore(nil)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1682 loadCollection(x, []string{"e", "d", "a", "c", "b", "c", "a"}) 1682 loadCollection(x, []string{"e", "d", "a", "c", "b", "c", "a"})
1683 fmt.Printf("testing dump\n") 1683 fmt.Printf("testing dump\n")
1684 dump(s, x.root.root, 1) 1684 dump(s, x.root.root, 1)
1685 } 1685 }
1686 1686
1687 func TestStoreClose(t *testing.T) { 1687 func TestStoreClose(t *testing.T) {
1688 s, err := NewStore(nil) 1688 s, err := NewStore(nil)
1689 if err != nil || s == nil { 1689 if err != nil || s == nil {
1690 t.Errorf("expected memory-only NewStore to work") 1690 t.Errorf("expected memory-only NewStore to work")
1691 } 1691 }
1692 » if s.coll == unsafe.Pointer(nil) { 1692 » if s.coll == nil {
1693 t.Errorf("expected coll before Close()") 1693 t.Errorf("expected coll before Close()")
1694 } 1694 }
1695 s.Close() 1695 s.Close()
1696 » if s.coll != unsafe.Pointer(nil) { 1696 » if s.coll != nil {
1697 t.Errorf("expected no coll after Close()") 1697 t.Errorf("expected no coll after Close()")
1698 } 1698 }
1699 s.Close() 1699 s.Close()
1700 » if s.coll != unsafe.Pointer(nil) { 1700 » if s.coll != nil {
1701 t.Errorf("expected no coll after re-Close()") 1701 t.Errorf("expected no coll after re-Close()")
1702 } 1702 }
1703 s.Close() 1703 s.Close()
1704 » if s.coll != unsafe.Pointer(nil) { 1704 » if s.coll != nil {
1705 t.Errorf("expected no coll after re-Close()") 1705 t.Errorf("expected no coll after re-Close()")
1706 } 1706 }
1707 1707
1708 // Now, with a collection 1708 // Now, with a collection
1709 s, _ = NewStore(nil) 1709 s, _ = NewStore(nil)
1710 s.SetCollection("x", bytes.Compare) 1710 s.SetCollection("x", bytes.Compare)
1711 » if s.coll == unsafe.Pointer(nil) { 1711 » if s.coll == nil {
1712 t.Errorf("expected coll before Close()") 1712 t.Errorf("expected coll before Close()")
1713 } 1713 }
1714 s.Close() 1714 s.Close()
1715 » if s.coll != unsafe.Pointer(nil) { 1715 » if s.coll != nil {
1716 t.Errorf("expected no coll after Close()") 1716 t.Errorf("expected no coll after Close()")
1717 } 1717 }
1718 s.Close() 1718 s.Close()
1719 » if s.coll != unsafe.Pointer(nil) { 1719 » if s.coll != nil {
1720 t.Errorf("expected no coll after Close()") 1720 t.Errorf("expected no coll after Close()")
1721 } 1721 }
1722 } 1722 }
1723 1723
1724 func TestItemNumValBytes(t *testing.T) { 1724 func TestItemNumValBytes(t *testing.T) {
1725 var x *Collection 1725 var x *Collection
1726 var h *Item 1726 var h *Item
1727 s, err := NewStoreEx(nil, StoreCallbacks{ 1727 s, err := NewStoreEx(nil, StoreCallbacks{
1728 ItemValLength: func(c *Collection, i *Item) int { 1728 ItemValLength: func(c *Collection, i *Item) int {
1729 if c != x { 1729 if c != x {
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
2201 x.SetItem(&Item{ 2201 x.SetItem(&Item{
2202 Key: []byte("a"), 2202 Key: []byte("a"),
2203 Val: []byte("aaa"), 2203 Val: []byte("aaa"),
2204 Priority: 100, 2204 Priority: 100,
2205 }) 2205 })
2206 s.Flush() 2206 s.Flush()
2207 2207
2208 readShouldErr = true 2208 readShouldErr = true
2209 2209
2210 rnl := x.rootAddRef() 2210 rnl := x.rootAddRef()
2211 » rnl.root.node = unsafe.Pointer(nil) // Evict node from memory to force r eading. 2211 » rnl.root.node = nil // Evict node from memory to force reading.
2212 2212
2213 _, _, _, _, err = numInfo(s, rnl.root, empty_nodeLoc) 2213 _, _, _, _, err = numInfo(s, rnl.root, empty_nodeLoc)
2214 if err == nil { 2214 if err == nil {
2215 t.Errorf("expected numInfo to error") 2215 t.Errorf("expected numInfo to error")
2216 } 2216 }
2217 _, _, _, _, err = numInfo(s, empty_nodeLoc, rnl.root) 2217 _, _, _, _, err = numInfo(s, empty_nodeLoc, rnl.root)
2218 if err == nil { 2218 if err == nil {
2219 t.Errorf("expected numInfo to error") 2219 t.Errorf("expected numInfo to error")
2220 } 2220 }
2221 } 2221 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
2343 Priority: 100, 2343 Priority: 100,
2344 }) 2344 })
2345 rnl := x.rootAddRef() 2345 rnl := x.rootAddRef()
2346 2346
2347 writeShouldErr = true 2347 writeShouldErr = true
2348 if rnl.root.write(s) == nil { 2348 if rnl.root.write(s) == nil {
2349 t.Errorf("expected write node to fail") 2349 t.Errorf("expected write node to fail")
2350 } 2350 }
2351 writeShouldErr = false 2351 writeShouldErr = false
2352 2352
2353 » rnl.root.node = unsafe.Pointer(nil) // Force a nil node. 2353 » rnl.root.node = nil // Force a nil node.
2354 if rnl.root.write(s) != nil { 2354 if rnl.root.write(s) != nil {
2355 t.Errorf("expected write node on nil node to work") 2355 t.Errorf("expected write node on nil node to work")
2356 } 2356 }
2357 } 2357 }
2358 2358
2359 func TestStoreRefCount(t *testing.T) { 2359 func TestStoreRefCount(t *testing.T) {
2360 counts := map[string]int{} 2360 counts := map[string]int{}
2361 nadds := 0 2361 nadds := 0
2362 ndecs := 0 2362 ndecs := 0
2363 s, err := NewStoreEx(nil, StoreCallbacks{ 2363 s, err := NewStoreEx(nil, StoreCallbacks{
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
2800 if err != nil { 2800 if err != nil {
2801 t.Fatalf("expected nil error, got: %v", err) 2801 t.Fatalf("expected nil error, got: %v", err)
2802 } 2802 }
2803 } 2803 }
2804 mustJustOneRef(fmt.Sprintf("i: %d", i)) 2804 mustJustOneRef(fmt.Sprintf("i: %d", i))
2805 } 2805 }
2806 } 2806 }
2807 2807
2808 // perm returns a random permutation of n Int items in the range [0, n). 2808 // perm returns a random permutation of n Int items in the range [0, n).
2809 func perm(n int) (out [][]byte) { 2809 func perm(n int) (out [][]byte) {
2810 for _, v := range rand.Perm(n) { 2810 » for _, v := range rand.Perm(n) {
2811 out = append(out, []byte(strconv.Itoa(v))) 2811 » » out = append(out, []byte(strconv.Itoa(v)))
2812 } 2812 » }
2813 return out 2813 » return out
2814 } 2814 }
2815 2815
2816 const benchmarkSize = 10000 2816 const benchmarkSize = 10000
2817 2817
2818 func BenchmarkRandInsert(b *testing.B) { 2818 func BenchmarkRandInsert(b *testing.B) {
2819 b.StopTimer() 2819 b.StopTimer()
2820 insertP := perm(benchmarkSize) 2820 insertP := perm(benchmarkSize)
2821 i := 0 2821 i := 0
2822 b.StartTimer() 2822 b.StartTimer()
2823 for i < b.N { 2823 for i < b.N {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2875 b.StartTimer() 2875 b.StartTimer()
2876 for _, item := range removeP { 2876 for _, item := range removeP {
2877 x.Get(item) 2877 x.Get(item)
2878 i++ 2878 i++
2879 if i >= b.N { 2879 if i >= b.N {
2880 return 2880 return
2881 } 2881 }
2882 } 2882 }
2883 } 2883 }
2884 } 2884 }
OLDNEW
« no previous file with comments | « store.go ('k') | tools/slab/slab.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698