1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-04-20 06:02:05 +02:00

minimum b_numbers is 16

This commit is contained in:
Justin Lin 2021-03-05 22:52:38 +08:00
parent 2a5f39d4c2
commit 4ba7a2ee73
2 changed files with 5 additions and 6 deletions

View File

@ -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) =
let(
leng_lt = len(lt),
lt_undef = is_undef(lt),
leng_lt = lt_undef ? -1 : len(lt),
bucket_numbers_undef = is_undef(bucket_numbers),
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]) []]
)
lt_undef ? buckets : _hashset(lt, leng_lt, buckets, eq, hash);

View File

@ -9,15 +9,14 @@ module test_hashset() {
echo("==== test_hashset ====");
s = hashset([1, 2, 3, 4, 5, 2, 3, 5]);
assert(hashset_list(s) == [3, 1, 4, 2, 5]);
assert(hashset_list(s) == [1, 2, 3, 4, 5]);
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_list(hashset_del(s2, 2)) == [3, 9, 1, 4, 5]);
assert(hashset_list(hashset_del(s2, 2)) == [1, 3, 4, 5, 9]);
}
test_hashset();