this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix seek key pattern match (fuzzer W)

garrison 3cdaf909 c5551041

+20 -6
+11 -1
lib/btree/fuzz/model_fuzz.ex
··· 152 152 read_version = Enum.random(max(version - 5000, 0)..version) 153 153 {start_key, end_key} = make_range(opt_key_bits) 154 154 reverse? = false 155 - limit = Enum.random(1..10) 155 + limit = random_limit() 156 + #dbg SimpleKV.dump(simple_kv, read_version), limit: :infinity 157 + #dbg {start_key, end_key, reverse?, limit} 156 158 157 159 btree_result = BTree.Iterator.scan(btree, read_version, start_key, end_key, reverse?, limit) 158 160 skv_result = SimpleKV.scan(simple_kv, read_version, start_key, end_key, reverse?, limit) 159 161 assert btree_result == skv_result 160 162 161 163 state 164 + end 165 + 166 + defp random_limit do 167 + case Enum.random(1..10) do 168 + 1 -> :infinity 169 + 2 -> 1_000_000_000_000 170 + _ -> Enum.random(1..1000) 171 + end 162 172 end 163 173 164 174 defp make_batch(opts) do
+5 -2
lib/btree/fuzz/simple_kv.ex
··· 96 96 end 97 97 98 98 @doc false 99 - def dump(simple_kv) do 100 - Enum.sort_by(simple_kv, fn {k, _v} -> k end) 99 + def dump(simple_kv, version) do 100 + {versions, kvs_by_version} = simple_kv 101 + kv = Map.fetch!(kvs_by_version, find_version(versions, version)) 102 + 103 + Enum.sort_by(kv, fn {k, _v} -> k end) 101 104 end 102 105 end
+3 -2
lib/btree/iterator.ex
··· 43 43 44 44 @spec scan(BTree.t, non_neg_integer, binary, binary, boolean, non_neg_integer) :: [{binary, binary}] 45 45 def scan(%BTree{} = btree, version, start_key, end_key, reverse?, limit) do 46 + assert limit > 0 46 47 merge_it = new_merge_iterator(btree, start_key, reverse?) 47 48 48 49 case reverse? do ··· 193 194 194 195 defp seek_backward(%Iterator{} = it, search_key) do 195 196 it = seek(it, search_key) 196 - {key, _value} = it.current_pair 197 + {[key | _ver], _value} = it.current_pair 197 198 198 199 case key >= search_key do 199 200 true -> next_backward(it) ··· 203 204 204 205 defp seek_forward(%Iterator{} = it, search_key) do 205 206 it = seek(it, search_key) 206 - {key, _value} = it.current_pair 207 + {[key | _ver], _value} = it.current_pair 207 208 208 209 case key >= search_key do 209 210 true -> it
+1 -1
test/btree_test.exs
··· 13 13 14 14 test "fuzz" do 15 15 Hobbes.BTree.Fuzz.ModelFuzz.run(100, [ 16 - iterations: 300, 16 + iterations: 400, 17 17 key_bits: 32, 18 18 ]) 19 19 end