summary refs log tree commit diff stats
path: root/tests/collections
Commit message (Collapse)AuthorAgeFilesLines
* fix mapIt issues #12625 & #12639 (#14041)Judd2020-04-211-0/+3
| | | | | | | | | | | | * fix mapIt issues #12625 & #12639: 1. fallback to call `map` when the result of `op` is a closure; 2. use `items(s)` in the for loop. * fix test errors. * add comments and InType is moved. * fix ident.
* forward type alignment information to seqs (#12430)Arne Döring2020-04-191-0/+17
|
* Add `hashWangYi1` (#13823)c-blake2020-04-152-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Unwind just the "pseudorandom probing" (whole hash-code-keyed variable stride double hashing) part of recent sets & tables changes (which has still been causing bugs over a month later (e.g., two days ago https://github.com/nim-lang/Nim/issues/13794) as well as still having several "figure this out" implementation question comments in them (see just diffs of this PR). This topic has been discussed in many places: https://github.com/nim-lang/Nim/issues/13393 https://github.com/nim-lang/Nim/pull/13418 https://github.com/nim-lang/Nim/pull/13440 https://github.com/nim-lang/Nim/issues/13794 Alternative/non-mandatory stronger integer hashes (or vice-versa opt-in identity hashes) are a better solution that is more general (no illusion of one hard-coded sequence solving all problems) while retaining the virtues of linear probing such as cache obliviousness and age-less tables under delete-heavy workloads (still untested after a month of this change). The only real solution for truly adversarial keys is a hash keyed off of data unobservable to attackers. That all fits better with a few families of user-pluggable/define-switchable hashes which can be provided in a separate PR more about `hashes.nim`. This PR carefully preserves the better (but still hard coded!) probing of the `intsets` and other recent fixes like `move` annotations, hash order invariant tests, `intsets.missingOrExcl` fixing, and the move of `rightSize` into `hashcommon.nim`. * Fix `data.len` -> `dataLen` problem. * This is an alternate resolution to https://github.com/nim-lang/Nim/issues/13393 (which arguably could be resolved outside the stdlib). Add version1 of Wang Yi's hash specialized to 8 byte integers. This gives simple help to users having trouble with overly colliding hash(key)s. I.e., A) `import hashes; proc hash(x: myInt): Hash = hashWangYi1(int(x))` in the instantiation context of a `HashSet` or `Table` or B) more globally, compile with `nim c -d:hashWangYi1`. No hash can be all things to all use cases, but this one is A) vetted to scramble well by the SMHasher test suite (a necessarily limited but far more thorough test than prior proposals here), B) only a few ALU ops on many common CPUs, and C) possesses an easy via "grade school multi-digit multiplication" fall back for weaker deployment contexts. Some people might want to stampede ahead unbridled, but my view is that a good plan is to A) include this in the stdlib for a release or three to let people try it on various key sets nim-core could realistically never access/test (maybe mentioning it in the changelog so people actually try it out), B) have them report problems (if any), C) if all seems good, make the stdlib more novice friendly by adding `hashIdentity(x)=x` and changing the default `hash() = hashWangYi1` with some `when defined` rearranging so users can `-d:hashIdentity` if they want the old behavior back. This plan is compatible with any number of competing integer hashes if people want to add them. I would strongly recommend they all *at least* pass the SMHasher suite since the idea here is to become more friendly to novices who do not generally understand hashing failure modes. * Re-organize to work around `when nimvm` limitations; Add some tests; Add a changelog.md entry. * Add less than 64-bit CPU when fork. * Fix decl instead of call typo. * First attempt at fixing range error on 32-bit platforms; Still do the arithmetic in doubled up 64-bit, but truncate the hash to the lower 32-bits, but then still return `uint64` to be the same. So, type correct but truncated hash value. Update `thashes.nim` as well. * A second try at making 32-bit mode CI work. * Use a more systematic identifier convention than Wang Yi's code. * Fix test that was wrong for as long as `toHashSet` used `rightSize` (a very long time, I think). `$a`/`$b` depend on iteration order which varies with table range reduced hash order which varies with range for some `hash()`. With 3 elements, 3!=6 is small and we've just gotten lucky with past experimental `hash()` changes. An alternate fix here would be to not stringify but use the HashSet operators, but it is not clear that doesn't alter the "spirit" of the test. * Fix another stringified test depending upon hash order. * Oops - revert the string-keyed test. * Fix another stringify test depending on hash order. * Add a better than always zero `defined(js)` branch. * It turns out to be easy to just work all in `BigInt` inside JS and thus guarantee the same low order bits of output hashes (for `isSafeInteger` input numbers). Since `hashWangYi1` output bits are equally random in all their bits, this means that tables will be safely scrambled for table sizes up to 2**32 or 4 gigaentries which is probably fine, as long as the integer keys are all < 2**53 (also likely fine). (I'm unsure why the infidelity with C/C++ back ends cut off is 32, not 53 bits.) Since HashSet & Table only use the low order bits, a quick corollary of this is that `$` on most int-keyed sets/tables will be the same in all the various back ends which seems a nice-to-have trait. * These string hash tests fail for me locally. Maybe this is what causes the CI hang for testament pcat collections? * Oops. That failure was from me manually patching string hash in hashes. Revert. * Import more test improvements from https://github.com/nim-lang/Nim/pull/13410 * Fix bug where I swapped order when reverting the test. Ack. * Oh, just accept either order like more and more hash tests. * Iterate in the same order. * `return` inside `emit` made us skip `popFrame` causing weird troubles. * Oops - do Windows branch also. * `nimV1hash` -> multiply-mnemonic, type-scoped `nimIntHash1` (mnemonic resolutions are "1 == identity", 1 for Nim Version 1, 1 for first/simplest/fastest in a series of possibilities. Should be very easy to remember.) * Re-organize `when nimvm` logic to be a strict `when`-`else`. * Merge other changes. * Lift constants to a common area. * Fall back to identity hash when `BigInt` is unavailable. * Increase timeout slightly (probably just real-time perturbation of CI system performance).
* Hrm, the new errors highlighted some code that seems to be brokenZahary Karadjov2020-04-011-1/+1
| | | | | | New issue: since `Table[A, B]` allocates its backing storage with `newSeq[KeyValuePair[A, B]]`, it's no longer legal to create a table with `not nil` types used as either keys or values.
* faster CIs (#13803)Miran2020-03-303-8/+316
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * ttables: smaller table, 5x speedup * thavlak: less iterations, less loops; 30% speedup * tasyncclosestall: shorter timeout; 35% speedup * gcleak4: less iterations, 2x speedup * ttimes: remove deprecated stuff * tdangerisrelease: remove cpp backend, 3x speedup * tfrexp1: smaller range, 2x speedup * trtree: fix warnings, less iterations, 6x speedup * tasyncawait_cyclebreaker: smaller swarm size; 2x speedup * trealloc: smaller number of iterations; 10x speedup * towned_binary_tree: less iterations, 4x speedup * tclosure: remove unused code, less iterations; 2x speedup * twaitany: less durations; 1.4x speedup * tasync_misc: less iterations, 2x speedup * t8535: smaller sleep, 1.5x speedup * tmanyjoin: smaller sleep, 2x speedup * t12221: shorter sleeps, removed two slower tests; 1.6x speedup * tfuturestream: smaller sleep; 1.5x speedup * growobjcrash: less iterations; 2x speedup * ttryrecv: smaller sleep; 1.5x speedup * treusetvar: less threads; 2x speedup * delete tthreadanalysis2, basically a duplicate of tthreadanalysis * t7758: less iterations, 1.5x speedup * tasyncawait: smaller swarm, less messages; 1.5x speedup * tjsandnativeasync: smaller sleep, 1.5x speedup * tpendingcheck: smaller sleep, 1.5x speedup * remove rodfiles test category * move tseq from its own category to 'collections' category * remove unneeded tests and helpers from 'assert' category * stdlib: merge tbitops2 into tbitops * remove 'trepr2' from 'stdlib' cat * merge 'tstreams' into one file * remove 'tinefficient_const_table' from 'ccbugs' cat * merge 'tcollections_to_string' into 'tcollections' * tblocking_channel: smaller sleep, small speedup * tconvexhull: less iterartions; 1.2x speedup * merge 'tdeepcopy2' into 'tdeepcopy' * merge 'tdisjoint_slice2' into 'tdisjoint_slice1' * tmissing_deepcopy: smaller sequence * tsendtwice: smaller arrays; 5x speedup * remove 'tindexerrorformatbounds' * disable multimethod tests * remove 'gc:none' and 'refc' without 'd:useRealtimeGC' from gc tests * koch.nim: bootstrap just with '-d:release', no need for 'csource' * add github workflow for documentation * testament: no need for 8 sub-second decimals
* fix deprecations and other warnings (#13748)Miran2020-03-252-10/+10
|
* tables/sharedtables/intsets/etc: fix #13496, #13504, #13505; add lots of ↵Timothee Cour2020-02-261-2/+43
| | | | | | | | | | | tests (#13498) [backport] * fix #13496 handle tombstones * add test * more tests * fix #13504; add SharedTable tests * fix #https://github.com/nim-lang/Nim/issues/13505 intsets.missingOrExcl silently gave wrong results sometimes * add test for tintsets
* Remove testutils (#13435) [backport]Clyybber2020-02-192-2/+7
|
* [backport] pseudorandom probing for hash collision (#13418)Timothee Cour2020-02-192-7/+29
|
* fixes #11764, faster hashing of (u)int (#12407)Miran2019-10-152-3/+3
|
* faster CountTable sort(), optional SortOrder (#11010)Andy Davidoff2019-04-161-15/+30
| | | | | | | | | * use existing sort for CountTable, and add SortOrder options to CountTable, OrderedTable sort(s) * add some tests, runnables, etc. * fix runnable imports
* add `isNamedTuple`; make $(1, 2) be (1, 2) instead of (Field0: 1, Field1: 2) ↵Timothee Cour2019-01-081-3/+3
| | | | | | | | | | | | | which leaked implementation detail (#10070) * add `isNamedTuple`; make $(1, 2) be (1, 2) instead of leaking implementation detail (Field0: 1, Field1: 2) fixes this: #8670 (comment) /cc @alehander42 @Vindaar @mratsim * Note: isNamedTuple is useful in other places, eg #10010 (comment) * move isNamedTuple to helpers.nim to avoid exposing new symbol to system.nim * remove workaround in tests/vm/tissues.nim failing test now that #10218 was makes it work
* testament: joinable is now an explicit concept of a test specAndreas Rumpf2018-12-111-1/+2
|
* lots of small changesArne Döring2018-12-111-2/+2
|
* megatest can be executedArne Döring2018-12-111-0/+0
|
* require errormsg to be specified before file.Arne Döring2018-12-112-6/+3
|
* make some tests faster (#9413)Miran2018-10-171-25/+6
| | | | | | | | | | | | * remove duplicated slow test * smaller `convex hull` * smaller sleep * faster `trtree` * smaller sleep in `tfuturestream`
* Merge tests into a larger file (part 1 of ∞) (#9318)Miran2018-10-1215-716/+704
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * merge actiontable tests * merge arithm tests * merge array tests * merge assign tests * merge bind tests * merge casestmt tests * merge closure tests * merge cnt seq tests * merge collections tests * merge concept issues tests * merge concept tests * fix failing tests * smaller outputs Use `doAssert` where possible. * fix wrong output * split `tcomputedgoto` * revert merging concepts * fix failing test
* Updated tests for CritBitTree $data-man2018-06-071-3/+3
|
* Modify hash for HashSet to use `xor` to mix hash of items.Lolo Iccl2018-05-091-4/+0
|
* Modify previous commit and add testsLolo Iccl2018-05-091-4/+52
|
* make tests greenAndreas Rumpf2018-05-051-2/+2
|
* Don't escape multibyte characters (#7570)Oscar Nihlgård2018-04-231-2/+8
|
* Fixed mutex usage in SharedList and SharedTable. Closes #6988 (#6990)Yuriy Glukhov2017-12-311-1/+2
|
* Improved collection-to-string behavior (#6825)Fabian Keller2017-12-143-3/+109
|
* Remove expr/stmt (#5857)Arne Döring2017-07-251-1/+1
|
* Implement 'take' for Table and TableRef (#5773)Ruslan Mustakov2017-05-041-0/+15
|
* Deques compilation error fix (#5591)Dmitriy Fomichev2017-03-241-0/+17
|
* Added clear() function for OrderedSet and HashSet. (#5545)GrundleTrundle2017-03-161-0/+42
|
* Add compute proc for SharedTable (#5385)Ruslan Mustakov2017-03-021-1/+25
|
* added hash for uints (#5435)Fabian Keller2017-02-261-0/+15
|
* reenabled clear test, made clear working (#5323)Arne Döring2017-02-021-22/+20
|
* Fixes #5035Felix Krause2016-11-181-1/+24
|
* Table fixes. fixes #4901Felix Krause2016-10-231-0/+33
| | | | | | | | * added `==` for OrderedTable, CountTable and the *Ref types * added missing documentation to all `==` procs * fixed clear() for OrderedTables, which did not work because `var` does not work well with `|` * added tests
* fixes a critical tables bug that caused 'enlarge' to crash after 'add'Andreas Rumpf2016-09-051-0/+13
|
* Disable failing tests for tables.clear()Kier Davis2016-07-091-20/+22
| | | | | The tests for tables.clear() in tests/collections/ttables.nim currently fail as a result of #4448, so I've wrapped them in a 'when false' to disable them until the bug is fixed.
* Add tests for tables.clear()Kier Davis2016-07-092-0/+46
| | | | This should reduce the chance of regressions.
* Merge branch 'mget' of https://github.com/def-/Nim into def--mgetAraq2015-10-132-3/+9
|\ | | | | | | | | | | | | | | | | | | Conflicts: lib/pure/collections/critbits.nim lib/pure/collections/tables.nim lib/pure/xmltree.nim lib/system/sets.nim tests/collections/ttables.nim tests/collections/ttablesref.nim
| * Rename mget to `[]`def2015-03-312-17/+23
| | | | | | | | | | | | | | | | | | - In sets, tables, strtabs, critbits, xmltree - This uses the new var parameter overloading - mget variants still exist, but are deprecated in favor of `[]` - Includes tests and fixed tests and usages of mget - The non-var `[]` now throws an exception instead of returning binary 0 or an empty string
* | improves new testsAraq2015-10-122-3/+12
| |
* | sequtils related changesPeter Mora2015-10-052-0/+35
| |
* | tests: Trim .nim files trailing whitespaceAdam Strzelecki2015-09-042-3/+3
| | | | | | | | via OSX: find . -name '*.nim' -exec sed -i '' -E 's/[[:space:]]+$//' {} +
* | added hash function for ordinal typesFabian Keller2015-07-031-0/+75
| |
* | Merge pull request #2660 from MrJohz/contains-tablesAndreas Rumpf2015-05-082-15/+19
|\ \ | | | | | | Add contains proc for tables to allow usage of `in`
| * | Add contains proc for tables to allow usage of `in`Jonathan2015-05-052-15/+19
| | |
* | | Merge pull request #2596 from Nycto/develVarriount2015-05-071-14/+34
|\ \ \ | |/ / |/| | Fix floats in tuples in HashSets
| * | Fix floats in tuples in HashSetsNycto2015-04-241-14/+34
| |/ | | | | | | | | Previously, the added tests would fail to compile with errors complaining that 'hash(float)' didn't exist
* / fixes #2625Araq2015-05-031-0/+19
|/
* Added Test for zip() with anonymous tuples.Hans Raaf2015-03-171-2/+7
|
* Fix unknown symbol in tables mpairs iterator.Hans Raaf2015-02-211-0/+16
| | | | Fixes an error with mpairs iterator which was introduced with 5fbcf93860. This is used by nimforum thats why I found it. I also added a testcase for the mpairs iterator.