Bug 5506 – StoppingPolicy.longest doesn't work well

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-01-30T04:59:00Z
Last change time
2011-01-30T21:40:53Z
Keywords
wrong-code
Assigned to
andrei
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2011-01-30T04:59:21Z
The purpose of std.range.StoppingPolicy.longest is to change the behaviour of zip to "Stop when the longest range is exhausted". But this code with DMD 2.051 shows it doesn't stop looping (problem found by tsukikage): import std.c.stdio:printf; import std.range: zip, StoppingPolicy; void main() { int[] array = [1, 2]; auto count = 0; foreach (p; zip(StoppingPolicy.longest, array)) if (count++ < 30) printf("%d\n", p[0]); else break; } Output: 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------ Additionally a small enhancement request. Instead of writing: zip(StoppingPolicy.longest, array) I think this is enough, and shorter, but a bit less clear, so I am not sure if this OK: zip(Zip.longest, array)
Comment #1 by code — 2011-01-30T14:42:44Z
Oh, sorry, I didn't notice that you already assigned it to yourself, Andrei – I just submitted a patch via a GitHub pull request: https://github.com/D-Programming-Language/phobos/pull/1
Comment #2 by andrei — 2011-01-30T21:40:53Z
(In reply to comment #1) > Oh, sorry, I didn't notice that you already assigned it to yourself, Andrei – I > just submitted a patch via a GitHub pull request: > > https://github.com/D-Programming-Language/phobos/pull/1 The pull request is a great way. I just followed it. Thanks very much!