summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorGULPF <oscarnihlgard@gmail.com>2017-12-13 02:52:35 +0100
committerAndreas Rumpf <rumpf_a@web.de>2017-12-13 02:52:35 +0100
commit542d45f8826ec3566108ce6e2c3b456c7798af58 (patch)
tree3f4b092f27fd12158d01e88b10c13dff808dd412 /lib
parentd550417f8b6dd9703f48f5dbd12c35b9037a7d02 (diff)
downloadNim-542d45f8826ec3566108ce6e2c3b456c7798af58.tar.gz
Fix counttable smallest (#6912)
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/collections/tables.nim9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim
index 48f8eed67..28fbaa632 100644
--- a/lib/pure/collections/tables.nim
+++ b/lib/pure/collections/tables.nim
@@ -993,9 +993,10 @@ proc inc*[A](t: var CountTable[A], key: A, val = 1) =
 proc smallest*[A](t: CountTable[A]): tuple[key: A, val: int] =
   ## returns the (key,val)-pair with the smallest `val`. Efficiency: O(n)
   assert t.len > 0
-  var minIdx = 0
+  var minIdx = -1
   for h in 1..high(t.data):
-    if t.data[h].val > 0 and t.data[minIdx].val > t.data[h].val: minIdx = h
+    if t.data[h].val > 0 and (minIdx == -1 or t.data[minIdx].val > t.data[h].val):
+      minIdx = h
   result.key = t.data[minIdx].key
   result.val = t.data[minIdx].val
 
@@ -1329,3 +1330,7 @@ when isMainModule:
     assert((a == b) == true)
     assert((b == a) == true)
 
+  block: # CountTable.smallest
+    var t = initCountTable[int]()
+    for v in items([4, 4, 5, 5, 5]): t.inc(v)
+    doAssert t.smallest == (4, 2)
mit/index.php?id=136f4b8dc94222c0fca154c00e38b2fd9f9449c8'>136f4b8 ^
e59ebae ^






ff1d2bd ^
e59ebae ^
136f4b8 ^


e59ebae ^
03982fd ^





ff1d2bd ^
c3cca82 ^
277bde9 ^
c3cca82 ^
277bde9 ^

c3cca82 ^



277bde9 ^
c3cca82 ^

277bde9 ^

c3cca82 ^
277bde9 ^
c3cca82 ^
e59ebae ^
277bde9 ^






b21023d ^
c3cca82 ^



277bde9 ^
f352c93 ^
c3cca82 ^

277bde9 ^
c3cca82 ^

277bde9 ^
c3cca82 ^

277bde9 ^
c3cca82 ^

277bde9 ^



f352c93 ^
c3cca82 ^

ff1d2bd ^
c3cca82 ^










c3cca82 ^










ff1d2bd ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127