github.com/moontrade/nogc@v0.1.7/collections/tree/art_test.go (about) 1 package tree 2 3 //func TestLock(t *testing.T) { 4 // //SleepUnsafe(time.Minute) 5 // l := synchronization.NewLock() 6 // //l.Lock() 7 // l.LockUnsafe() 8 // l.UnlockUnsafe() 9 // 10 // wg := &sync.WaitGroup{} 11 // wg.Add(2) 12 // go func() { 13 // defer wg.Done() 14 // println("go 1 before") 15 // l.LockUnsafe() 16 // println("go 1 after. waiting 2 seconds...") 17 // synchronization.SleepUnsafe(time.Second * 2) 18 // l.UnlockUnsafe() 19 // }() 20 // 21 // go func() { 22 // defer wg.Done() 23 // println("go 2 before. waiting 2 seconds...") 24 // synchronization.SleepUnsafe(time.Second * 2) 25 // //time.Sleep(time.Second*2) 26 // l.Unlock() 27 // synchronization.SleepUnsafe(time.Second) 28 // l.LockUnsafe() 29 // println("go 2 after") 30 // l.UnlockUnsafe() 31 // }() 32 // 33 // wg.Wait() 34 //} 35 // 36 //func BenchmarkRWLock_Lock(b *testing.B) { 37 // l := synchronization.NewLock() 38 // b.Run("Unsafe", func(b *testing.B) { 39 // for i := 0; i < b.N; i++ { 40 // l.LockUnsafe() 41 // l.UnlockUnsafe() 42 // } 43 // }) 44 // 45 // b.Run("Shared Unsafe", func(b *testing.B) { 46 // for i := 0; i < b.N; i++ { 47 // l.LockSharedUnsafe() 48 // l.UnlockSharedUnsafe() 49 // } 50 // }) 51 // b.Run("Shared Safe", func(b *testing.B) { 52 // for i := 0; i < b.N; i++ { 53 // l.LockShared() 54 // l.UnlockShared() 55 // } 56 // }) 57 // mut := &sync.Mutex{} 58 // b.Run("Go Mutex", func(b *testing.B) { 59 // for i := 0; i < b.N; i++ { 60 // mut.Lock() 61 // mut.Unlock() 62 // } 63 // }) 64 // 65 // rw := &sync.RWMutex{} 66 // b.Run("Go RWMutex Lock/Unlock", func(b *testing.B) { 67 // for i := 0; i < b.N; i++ { 68 // rw.Lock() 69 // rw.Unlock() 70 // } 71 // }) 72 // 73 // b.Run("Go RWMutex RLock/RUnlock", func(b *testing.B) { 74 // for i := 0; i < b.N; i++ { 75 // rw.RLock() 76 // rw.RUnlock() 77 // } 78 // }) 79 //} 80 81 //func TestNew2(t *testing.T) { 82 // println("sizeof Leaf", unsafe.Sizeof(Leaf{})) 83 // art, _ := NewART() 84 // art.InsertBytes(nogc.BytesOfString("hello"), Value{ 85 // Data: 3, 86 // }) 87 // art.InsertBytes(nogc.BytesOfString("below"), Value{ 88 // Data: 3, 89 // }) 90 // art.InsertString("hello01", Value{ 91 // Data: 3, 92 // }) 93 // found := art.FindBytes(nogc.BytesOfString("hello")) 94 // fmt.Println("found", found) 95 // println("size", art.Size()) 96 // min := art.Minimum() 97 // println("min", uint(min.Data()), "key", min.Key().String()) 98 // max := art.Maximum() 99 // println("max", uint(max.Data()), "key", max.Key().String()) 100 // art.Free() 101 //} 102 // 103 //func TestBytes(t *testing.T) { 104 // art, _ := NewART() 105 // key := nogc.AllocBytes(8) 106 // 107 // //println(art.String()) 108 // for i := 0; i < 1000; i++ { 109 // key.SetInt64BE(0, int64(i)) 110 // art.InsertBytes(key, Value{ 111 // Data: 3, 112 // }) 113 // } 114 // fmt.Println("1000: ", art.Bytes()) 115 // for i := 1000; i < 10000; i++ { 116 // key.SetInt64BE(0, int64(i)) 117 // art.InsertBytes(key, Value{ 118 // Data: 3, 119 // }) 120 // } 121 // fmt.Println("10000: ", art.Bytes()) 122 // for i := 10000; i < 100000; i++ { 123 // key.SetInt64BE(0, int64(i)) 124 // art.InsertBytes(key, Value{ 125 // Data: 3, 126 // }) 127 // } 128 // fmt.Println("100000: ", art.Bytes()) 129 // for i := 100000; i < 1000000; i++ { 130 // key.SetInt64BE(0, int64(i)) 131 // art.InsertBytes(key, Value{ 132 // Data: 3, 133 // }) 134 // } 135 // fmt.Println("10000: ", art.Bytes()) 136 //} 137 // 138 //func BenchmarkTree_Insert2(b *testing.B) { 139 // b.Run("insert int32BE", func(b *testing.B) { 140 // art, _ := NewART() 141 // key := nogc.AllocBytes(4) 142 // 143 // //println(art.String()) 144 // b.ResetTimer() 145 // b.ReportAllocs() 146 // for i := 0; i < b.N; i++ { 147 // key.SetInt32BE(0, int32(i)) 148 // art.InsertBytes(key, Value{ 149 // Data: 3, 150 // }) 151 // } 152 // b.StopTimer() 153 // art.Free() 154 // key.Free() 155 // }) 156 // b.Run("insert int32LE", func(b *testing.B) { 157 // art, _ := NewART() 158 // key := nogc.AllocBytes(4) 159 // 160 // //println(art.String()) 161 // b.ResetTimer() 162 // b.ReportAllocs() 163 // for i := 0; i < b.N; i++ { 164 // key.SetInt32LE(0, int32(i)) 165 // art.InsertBytes(key, Value{ 166 // Data: 3, 167 // }) 168 // } 169 // b.StopTimer() 170 // fmt.Println("art bytes", art.Bytes()) 171 // fmt.Println("art size", art.Size()) 172 // art.Free() 173 // key.Free() 174 // }) 175 // b.Run("insert int64BE", func(b *testing.B) { 176 // art, _ := NewART() 177 // key := nogc.AllocBytes(8) 178 // 179 // //println(art.String()) 180 // b.ResetTimer() 181 // b.ReportAllocs() 182 // for i := 0; i < b.N; i++ { 183 // key.SetInt64BE(0, int64(i)) 184 // art.InsertBytes(key, Value{ 185 // Data: 3, 186 // }) 187 // } 188 // b.StopTimer() 189 // fmt.Println("art bytes", art.Bytes()) 190 // fmt.Println("art size", art.Size()) 191 // art.Free() 192 // key.Free() 193 // }) 194 // b.Run("insert int64LE", func(b *testing.B) { 195 // art, _ := NewART() 196 // key := nogc.AllocBytes(8) 197 // 198 // //println(art.String()) 199 // b.ResetTimer() 200 // b.ReportAllocs() 201 // for i := 0; i < b.N; i++ { 202 // key.SetInt64LE(0, int64(i)) 203 // art.InsertBytes(key, Value{ 204 // Data: 3, 205 // }) 206 // } 207 // b.StopTimer() 208 // art.Free() 209 // key.Free() 210 // }) 211 // b.Run("insert int64 PointerSet", func(b *testing.B) { 212 // m := nogc.NewPointerSet(uintptr(b.N * 2)) 213 // key := nogc.AllocBytes(8) 214 // 215 // var mu sync.Mutex 216 // //println(art.String()) 217 // b.ResetTimer() 218 // b.ReportAllocs() 219 // for i := 0; i < b.N; i++ { 220 // key.SetInt64BE(0, int64(i)) 221 // mu.Lock() 222 // m.Put(uintptr(i)) 223 // mu.Unlock() 224 // } 225 // b.StopTimer() 226 // key.Free() 227 // _ = m.Close() 228 // }) 229 // b.Run("insert int64 gomap", func(b *testing.B) { 230 // m := make(map[int64]struct{}, b.N*2) 231 // key := nogc.AllocBytes(8) 232 // 233 // var mu sync.Mutex 234 // b.ResetTimer() 235 // b.ReportAllocs() 236 // for i := 0; i < b.N; i++ { 237 // mu.Lock() 238 // m[int64(i)] = struct{}{} 239 // mu.Unlock() 240 // } 241 // b.StopTimer() 242 // key.Free() 243 // }) 244 // //b.Run("insert int64 BTree HINT", func(b *testing.B) { 245 // // m := NewBTree(unsafe.Sizeof(BTreeRecordInt64{}), 64, BTreeInt64Compare(), 0) 246 // // key := nogc.AllocBytes(8) 247 // // 248 // // var mu sync.Mutex 249 // // hint := uint64(0) 250 // // b.ResetTimer() 251 // // b.ReportAllocs() 252 // // for i := 0; i < b.N; i++ { 253 // // mu.Lock() 254 // // m.SetHint(int64(i), 101, &hint) 255 // // mu.Unlock() 256 // // } 257 // // b.StopTimer() 258 // // key.Free() 259 // //}) 260 //} 261 // 262 //func BenchmarkTree_Find2(b *testing.B) { 263 // runInt64BE := func(entries int) { 264 // b.Run("int64BE "+strconv.Itoa(entries)+" entries", func(b *testing.B) { 265 // art, _ := NewART() 266 // defer art.Free() 267 // key := nogc.AllocBytes(8) 268 // defer key.Free() 269 // 270 // for i := 0; i < entries; i++ { 271 // key.SetInt64BE(0, int64(i)) 272 // art.InsertBytes(key, Value{ 273 // Data: 3, 274 // }) 275 // } 276 // //key.SetInt64BE(0, int64(entries/2)) 277 // b.ResetTimer() 278 // b.ReportAllocs() 279 // for i := 0; i < b.N; i++ { 280 // key.SetInt64BE(0, int64(i)) 281 // art.FindBytes(key) 282 // } 283 // b.StopTimer() 284 // }) 285 // } 286 // runInt64BE(10) 287 // runInt64BE(100) 288 // runInt64BE(1000) 289 // runInt64BE(10000) 290 // runInt64BE(100000) 291 // runInt64BE(1000000) 292 // //runInt64BE(10000000) 293 //}