mirror of
https://github.com/Ed94/Odin.git
synced 2026-07-31 03:40:08 +00:00
Fix rand in container tests
This commit is contained in:
@@ -21,14 +21,15 @@ test_avl :: proc(t: ^testing.T) {
|
|||||||
testing.expect(t, avl.iterator_get(&iter) == nil, "empty/iterator: first node should be nil")
|
testing.expect(t, avl.iterator_get(&iter) == nil, "empty/iterator: first node should be nil")
|
||||||
|
|
||||||
r: rand.Rand
|
r: rand.Rand
|
||||||
rand.init(&r, t.seed)
|
r := rand.create(t.seed)
|
||||||
|
context.random_generator = rand.default_random_generator(&r)
|
||||||
|
|
||||||
// Test insertion.
|
// Test insertion.
|
||||||
NR_INSERTS :: 32 + 1 // Ensure at least 1 collision.
|
NR_INSERTS :: 32 + 1 // Ensure at least 1 collision.
|
||||||
inserted_map := make(map[int]^avl.Node(int))
|
inserted_map := make(map[int]^avl.Node(int))
|
||||||
defer delete(inserted_map)
|
defer delete(inserted_map)
|
||||||
for i := 0; i < NR_INSERTS; i += 1 {
|
for i := 0; i < NR_INSERTS; i += 1 {
|
||||||
v := int(rand.uint32(&r) & 0x1f)
|
v := int(rand.uint32() & 0x1f)
|
||||||
existing_node, in_map := inserted_map[v]
|
existing_node, in_map := inserted_map[v]
|
||||||
|
|
||||||
n, ok, _ := avl.find_or_insert(&tree, v)
|
n, ok, _ := avl.find_or_insert(&tree, v)
|
||||||
@@ -78,7 +79,7 @@ test_avl :: proc(t: ^testing.T) {
|
|||||||
testing.expect(t, visited == nrEntries, "iterator/backward: visited")
|
testing.expect(t, visited == nrEntries, "iterator/backward: visited")
|
||||||
|
|
||||||
// Test removal.
|
// Test removal.
|
||||||
rand.shuffle(inserted_values[:], &r)
|
rand.shuffle(inserted_values[:])
|
||||||
for v, i in inserted_values {
|
for v, i in inserted_values {
|
||||||
node := avl.find(&tree, v)
|
node := avl.find(&tree, v)
|
||||||
testing.expect(t, node != nil, "remove: find (pre)")
|
testing.expect(t, node != nil, "remove: find (pre)")
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) {
|
|||||||
context.allocator = mem.tracking_allocator(&track)
|
context.allocator = mem.tracking_allocator(&track)
|
||||||
|
|
||||||
r: rand.Rand
|
r: rand.Rand
|
||||||
rand.init(&r, t.seed)
|
r := rand.create(t.seed)
|
||||||
|
context.random_generator = rand.default_random_generator(&r)
|
||||||
|
|
||||||
log.infof("Testing Red-Black Tree($Key=%v,$Value=%v) using random seed %v.", type_info_of(Key), type_info_of(Value), t.seed)
|
log.infof("Testing Red-Black Tree($Key=%v,$Value=%v) using random seed %v.", type_info_of(Key), type_info_of(Value), t.seed)
|
||||||
tree: rb.Tree(Key, Value)
|
tree: rb.Tree(Key, Value)
|
||||||
@@ -35,9 +36,9 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) {
|
|||||||
max_key := min(Key)
|
max_key := min(Key)
|
||||||
|
|
||||||
for i := 0; i < NR_INSERTS; i += 1 {
|
for i := 0; i < NR_INSERTS; i += 1 {
|
||||||
k := Key(rand.uint32(&r)) & 0x1f
|
k := Key(rand.uint32()) & 0x1f
|
||||||
min_key = min(min_key, k); max_key = max(max_key, k)
|
min_key = min(min_key, k); max_key = max(max_key, k)
|
||||||
v := Value(rand.uint32(&r))
|
v := Value(rand.uint32())
|
||||||
|
|
||||||
existing_node, in_map := inserted_map[k]
|
existing_node, in_map := inserted_map[k]
|
||||||
n, inserted, _ := rb.find_or_insert(&tree, k, v)
|
n, inserted, _ := rb.find_or_insert(&tree, k, v)
|
||||||
@@ -92,7 +93,7 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) {
|
|||||||
testing.expect(t, visited == entry_count, "iterator/backward: visited")
|
testing.expect(t, visited == entry_count, "iterator/backward: visited")
|
||||||
|
|
||||||
// Test removal (and on_remove callback)
|
// Test removal (and on_remove callback)
|
||||||
rand.shuffle(inserted_keys[:], &r)
|
rand.shuffle(inserted_keys[:])
|
||||||
callback_count := entry_count
|
callback_count := entry_count
|
||||||
tree.user_data = &callback_count
|
tree.user_data = &callback_count
|
||||||
tree.on_remove = proc(key: Key, value: Value, user_data: rawptr) {
|
tree.on_remove = proc(key: Key, value: Value, user_data: rawptr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user