address a bug where Vector.sub (keys, ~1) was used, solving subscript error, but revealing another error in a subsequent test case
This commit is contained in:
@@ -538,6 +538,7 @@ struct
|
|||||||
* - otherwise, just remove the key and child at this idx from parent
|
* - otherwise, just remove the key and child at this idx from parent
|
||||||
* *)
|
* *)
|
||||||
if Vector.length keys > 1 then
|
if Vector.length keys > 1 then
|
||||||
|
if idx > 0 then
|
||||||
let
|
let
|
||||||
val newKeys = Vector.tabulate (Vector.length keys - 1, fn keyIdx =>
|
val newKeys = Vector.tabulate (Vector.length keys - 1, fn keyIdx =>
|
||||||
Vector.sub (keys, if keyIdx >= idx then keyIdx - 1 else keyIdx))
|
Vector.sub (keys, if keyIdx >= idx then keyIdx - 1 else keyIdx))
|
||||||
@@ -547,7 +548,24 @@ struct
|
|||||||
Vector.sub
|
Vector.sub
|
||||||
(children, if childIdx >= idx then childIdx - 1 else childIdx))
|
(children, if childIdx >= idx then childIdx - 1 else childIdx))
|
||||||
|
|
||||||
val newNode = parentConstructor {keys = newKeys, children = newChildren}
|
val newNode =
|
||||||
|
parentConstructor {keys = newKeys, children = newChildren}
|
||||||
|
in
|
||||||
|
CHANGED newNode
|
||||||
|
end
|
||||||
|
else
|
||||||
|
(* if idx = 0, then have to slice first element off from vector *)
|
||||||
|
let
|
||||||
|
val keySlice = VectorSlice.slice (keys, 1, SOME
|
||||||
|
(Vector.length keys - 1))
|
||||||
|
val newKeys = VectorSlice.vector keySlice
|
||||||
|
|
||||||
|
val childrenSlice = VectorSlice.slice (children, 1, SOME
|
||||||
|
(Vector.length children - 1))
|
||||||
|
val newChildren = VectorSlice.vector childrenSlice
|
||||||
|
|
||||||
|
val newNode =
|
||||||
|
parentConstructor {keys = newKeys, children = newChildren}
|
||||||
in
|
in
|
||||||
CHANGED newNode
|
CHANGED newNode
|
||||||
end
|
end
|
||||||
|
|||||||
Binary file not shown.
@@ -118,18 +118,19 @@ struct
|
|||||||
val trie3 = StringSet.remove ("abcd", trie)
|
val trie3 = StringSet.remove ("abcd", trie)
|
||||||
val _ = assertTrue (trie = trie3, "removing key (abcd) which doesn't exist in trie returns same trie")
|
val _ = assertTrue (trie = trie3, "removing key (abcd) which doesn't exist in trie returns same trie")
|
||||||
|
|
||||||
(* ERROR: Removing "abcde" causes a subscript error. Need to fix. *)
|
|
||||||
val _ = assertTrue (StringSet.exists ("abcde", trie), "abcde exists before remove in remove5")
|
val _ = assertTrue (StringSet.exists ("abcde", trie), "abcde exists before remove in remove5")
|
||||||
val trie = StringSet.remove ("abcde", trie)
|
val trie = StringSet.remove ("abcde", trie)
|
||||||
val _ = assertFalse (StringSet.exists ("abcde", trie), "abcde does not exist after remove in remove5")
|
val _ = assertFalse (StringSet.exists ("abcde", trie), "abcde does not exist after remove in remove5")
|
||||||
|
|
||||||
val _ = assertTrue (StringSet.exists ("x", trie), "x exists before remove in remove5")
|
val _ = assertTrue (StringSet.exists ("x", trie), "x exists before remove in remove5")
|
||||||
val trie = StringSet.remove ("x", trie)
|
val trie = StringSet.remove ("x", trie)
|
||||||
val _ = assertTrue (StringSet.exists ("x", trie), "x does not exist after remove in remove5")
|
val _ = assertFalse (StringSet.exists ("x", trie), "x does not exist after remove in remove5")
|
||||||
|
|
||||||
|
(* error: "abc" should exist at this point, but it seems not to.
|
||||||
|
* find out why and fix. *)
|
||||||
val _ = assertTrue (StringSet.exists ("abc", trie), "abc exists before remove in remove5")
|
val _ = assertTrue (StringSet.exists ("abc", trie), "abc exists before remove in remove5")
|
||||||
val trie = StringSet.remove ("abc", trie)
|
val trie = StringSet.remove ("abc", trie)
|
||||||
val _ = assertTrue (StringSet.exists ("abc", trie), "abc does not exist after remove in remove5")
|
val _ = assertFalse (StringSet.exists ("abc", trie), "abc does not exist after remove in remove5")
|
||||||
|
|
||||||
val _ = assertTrue (StringSet.exists ("ab", trie), "trie still contains ab after removals in remove5")
|
val _ = assertTrue (StringSet.exists ("ab", trie), "trie still contains ab after removals in remove5")
|
||||||
val _ = assertTrue (StringSet.exists ("ade", trie), "trie still contains ade after removals in remove5")
|
val _ = assertTrue (StringSet.exists ("ade", trie), "trie still contains ade after removals in remove5")
|
||||||
|
|||||||
Reference in New Issue
Block a user