From c0973d1b471644569d3ef459115afc675eb64544 Mon Sep 17 00:00:00 2001 From: Miran Date: Fri, 10 Jan 2020 15:24:33 +0100 Subject: [PATCH] [backport] fix #12813, fix #13079 (#13099) Correctly remove a key from CountTable when it is set to zero. --- lib/pure/collections/tables.nim | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim index d0e0b0886b..20fe12fc8a 100644 --- a/lib/pure/collections/tables.nim +++ b/lib/pure/collections/tables.nim @@ -2320,11 +2320,14 @@ proc `[]=`*[A](t: var CountTable[A], key: A, val: int) = ## value of a key assert(not t.isSorted, "CountTable must not be used after sorting") assert val >= 0 - let h = rawGet(t, key) - if h >= 0: - t.data[h].val = val + if val == 0: + t.remove(key) else: - insertImpl() + let h = rawGet(t, key) + if h >= 0: + t.data[h].val = val + else: + insertImpl() proc inc*[A](t: var CountTable[A], key: A, val: Positive = 1) = ## Increments ``t[key]`` by ``val`` (default: 1). @@ -3113,6 +3116,13 @@ when isMainModule: doAssert t_mut['z'] == 1 doAssert t_mut.hasKey('z') == true + block: #12813 #13079 + var t = toCountTable("abracadabra") + doAssert len(t) == 5 + + t['a'] = 0 # remove a key + doAssert len(t) == 4 + block: var tp: Table[string, string] = initTable[string, string]() doAssert "test1" == tp.getOrDefault("test1", "test1")