From 1c7499655d3df684024c34a411e39082c0fa8427 Mon Sep 17 00:00:00 2001 From: Doug Torrance Date: Thu, 19 Dec 2024 21:31:15 -0500 Subject: [PATCH] Add support for sequence arguments to hashTable --- M2/Macaulay2/d/hashtables.dd | 18 +++++++++--------- M2/Macaulay2/tests/normal/hashtables.m2 | 2 ++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/M2/Macaulay2/d/hashtables.dd b/M2/Macaulay2/d/hashtables.dd index ca3018f8be..0628e53e09 100644 --- a/M2/Macaulay2/d/hashtables.dd +++ b/M2/Macaulay2/d/hashtables.dd @@ -257,15 +257,15 @@ toHashTable(e:Expr):Expr := ( when e is w:List do toHashTable(w.v) is s:Sequence do ( - if length(s) != 2 then return WrongNumArgs(1,2); - when s.0 - is FunctionClosure do nothing - is CompiledFunction do nothing - is CompiledFunctionClosure do nothing - else return WrongArg(1,"a function"); - when s.1 is w:List do toHashTableWithCollisionHandler(w.v,s.0) - else WrongArg(2,"a list")) - else WrongArg("a list")); + if length(s) == 2 then ( + if isFunction(s.0) then ( + when s.1 + is w:Sequence do toHashTableWithCollisionHandler(w, s.0) + is w:List do toHashTableWithCollisionHandler(w.v, s.0) + else WrongArg(2, "a list or sequence")) + else toHashTable(s)) + else toHashTable(s)) + else WrongArg("a list or sequence")); setupfun("hashTable",toHashTable); copy(table:array(KeyValuePair)):array(KeyValuePair) := ( diff --git a/M2/Macaulay2/tests/normal/hashtables.m2 b/M2/Macaulay2/tests/normal/hashtables.m2 index b194be50b4..d3e29d3b98 100644 --- a/M2/Macaulay2/tests/normal/hashtables.m2 +++ b/M2/Macaulay2/tests/normal/hashtables.m2 @@ -40,6 +40,8 @@ x = set(1..10) assert(select(x, odd) === set {1, 3, 5, 7, 9}) assert(select(2, x, odd) == set {1, 3}) +assert(hashTable ((0, 1), (1, 2)) === hashTable {(0, 1), (1, 2)}) + -- Local Variables: -- compile-command: "make -C $M2BUILDDIR/Macaulay2/packages/Macaulay2Doc/test hashtables.out" -- End: