func validate( d *llrb.Dict, rb llrb.MemStore, cmd []interface{}, stats map[string]int) map[string]int { var ref, val interface{} name := cmd[0].(string) switch name { case "get": ref = d.Get(&llrb.KeyInt{int64(cmd[1].(float64)), -1}) val = rb.Get(&llrb.KeyInt{int64(cmd[1].(float64)), -1}) case "min": ref = d.Min() val = rb.Min() case "max": ref = d.Max() val = rb.Max() case "delmin": ref = d.DeleteMin() val = rb.DeleteMin() case "delmax": ref = d.DeleteMax() val = rb.DeleteMax() case "upsert": now := time.Now().UnixNano() k := &llrb.KeyInt{int64(cmd[1].(float64)), now} ref = d.Upsert(k) val = rb.Upsert(k) case "insert": now := time.Now().UnixNano() k := &llrb.KeyInt{int64(cmd[1].(float64)), now} if rb.Get(k) == nil { d.Insert(k) rb.Insert(k) } else { cmd[0] = "upsert" ref = d.Upsert(k) val = rb.Upsert(k) } case "delete": ref = d.Delete(&llrb.KeyInt{int64(cmd[1].(float64)), -1}) val = rb.Delete(&llrb.KeyInt{int64(cmd[1].(float64)), -1}) default: log.Fatalf("unknown command %v\n", cmd) return stats } if reflect.DeepEqual(ref, val) == false { log.Fatalf("expected %v got %v\n", ref, val) } stats = compute_stats(cmd, stats) return stats }
func benchDelete(s llrb.MemStore) { for _, key := range delInts { s.Delete(key) } }