www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - std.algorithm.map + std.algorithm.joiner = broken forward range

reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
Code:
	import std.algorithm;
	import std.range;
	import std.stdio;

	void main() {
	    auto x = [[1],[2],[3]];
	    auto yy = x.map!"a".joiner;

	    assert(isForwardRange!(typeof(yy)));
	    writeln(yy.save);
	    writeln(yy);
	}

Output:

	[]
	[1, 2, 3]

:-(

That is to say, yy.save didn't save the range at all!


T
-- 
"The number you have dialed is imaginary. Please rotate your phone 90
degrees and try again."
Oct 09 2012
parent reply "jerro" <a a.com> writes:
On Wednesday, 10 October 2012 at 02:11:49 UTC, H. S. Teoh wrote:
 Code:
 	import std.algorithm;
 	import std.range;
 	import std.stdio;

 	void main() {
 	    auto x = [[1],[2],[3]];
 	    auto yy = x.map!"a".joiner;

 	    assert(isForwardRange!(typeof(yy)));
 	    writeln(yy.save);
 	    writeln(yy);
 	}

 Output:

 	[]
 	[1, 2, 3]

 :-(

 That is to say, yy.save didn't save the range at all!


 T
It happens without map too.
Oct 09 2012
parent "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Wed, Oct 10, 2012 at 05:00:00AM +0200, jerro wrote:
 On Wednesday, 10 October 2012 at 02:11:49 UTC, H. S. Teoh wrote:
Code:
	import std.algorithm;
	import std.range;
	import std.stdio;

	void main() {
	    auto x = [[1],[2],[3]];
	    auto yy = x.map!"a".joiner;

	    assert(isForwardRange!(typeof(yy)));
	    writeln(yy.save);
	    writeln(yy);
	}

Output:

	[]
	[1, 2, 3]

:-(

That is to say, yy.save didn't save the range at all!


T
It happens without map too.
You're right, it's a joiner bug, nothing to do with map. Filed new issue: http://d.puremagic.com/issues/show_bug.cgi?id=8792 T -- "Uhh, I'm still not here." -- KD, while "away" on ICQ.
Oct 09 2012