mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-03 21:37:39 +02:00
minimum b_numbers is 16
This commit is contained in:
@@ -4,11 +4,11 @@ use <_impl/_hashset_add_impl.scad>;
|
|||||||
|
|
||||||
function hashset(lt, eq = function(e1, e2) e1 == e2, hash = function(e) _str_hash(e), bucket_numbers) =
|
function hashset(lt, eq = function(e1, e2) e1 == e2, hash = function(e) _str_hash(e), bucket_numbers) =
|
||||||
let(
|
let(
|
||||||
leng_lt = len(lt),
|
|
||||||
lt_undef = is_undef(lt),
|
lt_undef = is_undef(lt),
|
||||||
|
leng_lt = lt_undef ? -1 : len(lt),
|
||||||
bucket_numbers_undef = is_undef(bucket_numbers),
|
bucket_numbers_undef = is_undef(bucket_numbers),
|
||||||
b_numbers = bucket_numbers_undef ?
|
b_numbers = bucket_numbers_undef ?
|
||||||
(lt_undef ? 16 : ceil(sqrt(leng_lt))) : bucket_numbers,
|
(lt_undef || leng_lt < 256 ? 16 : ceil(sqrt(leng_lt))) : bucket_numbers,
|
||||||
buckets = [for(i = [0:b_numbers - 1]) []]
|
buckets = [for(i = [0:b_numbers - 1]) []]
|
||||||
)
|
)
|
||||||
lt_undef ? buckets : _hashset(lt, leng_lt, buckets, eq, hash);
|
lt_undef ? buckets : _hashset(lt, leng_lt, buckets, eq, hash);
|
@@ -9,15 +9,14 @@ module test_hashset() {
|
|||||||
echo("==== test_hashset ====");
|
echo("==== test_hashset ====");
|
||||||
|
|
||||||
s = hashset([1, 2, 3, 4, 5, 2, 3, 5]);
|
s = hashset([1, 2, 3, 4, 5, 2, 3, 5]);
|
||||||
|
assert(hashset_list(s) == [1, 2, 3, 4, 5]);
|
||||||
assert(hashset_list(s) == [3, 1, 4, 2, 5]);
|
|
||||||
|
|
||||||
s2 = hashset_add(s, 9);
|
s2 = hashset_add(s, 9);
|
||||||
assert(hashset_list(s2) == [3, 9, 1, 4, 2, 5]);
|
assert(hashset_list(s2) == [1, 2, 3, 4, 5, 9]);
|
||||||
|
|
||||||
assert(!hashset_has(s2, 13));
|
assert(!hashset_has(s2, 13));
|
||||||
|
|
||||||
assert(hashset_list(hashset_del(s2, 2)) == [3, 9, 1, 4, 5]);
|
assert(hashset_list(hashset_del(s2, 2)) == [1, 3, 4, 5, 9]);
|
||||||
}
|
}
|
||||||
|
|
||||||
test_hashset();
|
test_hashset();
|
Reference in New Issue
Block a user