From 8630ae7523362e00efe9cc914cf05dcef09c3500 Mon Sep 17 00:00:00 2001 From: Walter Mays Date: Tue, 26 May 2020 16:17:15 -0500 Subject: [PATCH] Remove reliance on hashing algorithm for iterator reset test. --- lib/std/hash_map.zig | 53 +++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/lib/std/hash_map.zig b/lib/std/hash_map.zig index e2addb9b38..c3ffa94c78 100644 --- a/lib/std/hash_map.zig +++ b/lib/std/hash_map.zig @@ -473,46 +473,53 @@ test "iterator hash map" { var reset_map = AutoHashMap(i32, i32).init(std.testing.allocator); defer reset_map.deinit(); - try reset_map.putNoClobber(1, 11); - try reset_map.putNoClobber(2, 22); - try reset_map.putNoClobber(3, 33); + try reset_map.putNoClobber(0, 11); + try reset_map.putNoClobber(1, 22); + try reset_map.putNoClobber(2, 33); - // TODO this test depends on the hashing algorithm, because it assumes the - // order of the elements in the hashmap. This should not be the case. var keys = [_]i32{ - 1, - 3, - 2, + 0, 2, 1, }; + var values = [_]i32{ - 11, - 33, - 22, + 11, 33, 22, + }; + + var buffer = [_]i32{ + 0, 0, 0, }; var it = reset_map.iterator(); - var count: usize = 0; - while (it.next()) |next| { - testing.expect(next.key == keys[count]); - testing.expect(next.value == values[count]); - count += 1; - } + const first_entry = it.next().?; + it.reset(); + var count: usize = 0; + while (it.next()) |kv| : (count += 1) { + buffer[@intCast(usize, kv.key)] = kv.value; + } testing.expect(count == 3); testing.expect(it.next() == null); + + for (buffer) |v, i| { + testing.expect(buffer[@intCast(usize, keys[i])] == values[i]); + } + it.reset(); count = 0; - while (it.next()) |next| { - testing.expect(next.key == keys[count]); - testing.expect(next.value == values[count]); + while (it.next()) |kv| { + buffer[@intCast(usize, kv.key)] = kv.value; count += 1; - if (count == 2) break; + if (count >= 2) break; + } + + for (buffer[0..2]) |v, i| { + testing.expect(buffer[@intCast(usize, keys[i])] == values[i]); } it.reset(); var entry = it.next().?; - testing.expect(entry.key == keys[0]); - testing.expect(entry.value == values[0]); + testing.expect(entry.key == first_entry.key); + testing.expect(entry.value == first_entry.value); } test "ensure capacity" {