fix #14404 foldr had the classic multiple evaluation bug #14413
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fix #14404
after PR
move test to tests/stdlib/tsequtils.nim like most modules; rationale:
note that
isMainModule
still has its uses, just not for thatcurrent implementation is not efficient: seq copy un-needed
let s = sequence
makes an un-necessary copy;{.evalonce.}
(#13750) would fix that1 redundant copy per iteration
this would save 1 copy per iteration:
use better tests
foldl/foldr were introduced in 2013, since then nim has improved
so I'll rewrite as:
or even use unittest.check, with obvious benefits
there's zero difference between
doAssert foldr(numbers, a + b) == (5+(9+(11)))
anddoAssert foldr(numbers, a * b) == (5*(9*(11)))
; only 1 of these is needed (zero difference = same code path, no corner case); unlike many procs in os.nim which need more testing and more examples because they're full of corner cases that need to be clarified