http://d.puremagic.com/issues/show_bug.cgi?id=10322
Summary: std.random.RandomSample.index() returns wrong value if called before front() Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: nob...@puremagic.com ReportedBy: joseph.wakel...@webdrake.net --- Comment #0 from Joseph Rushton Wakeling <joseph.wakel...@webdrake.net> 2013-06-10 05:26:46 PDT --- RandomSample contains an index() property which returns the index value of the currently selected item. So, if the currently-selected item is the 4th item from the input range, index() should return 4. However, if index() is called before the first call to front(), index returns 0. The attached example code shows this bug in action: the index value _should_ in this example be identical to the value returned by front(). This bug is a regression caused by the fix to Issue #7936. Prior to that fix, the first value of front() was determined in the constructor, so index() could be guaranteed to be initialized: however, front(), and hence also index(), cannot be initialized in the constructor because this would bias the statistical independence of the sample. The correct solution is therefore to ensure that front() and index() are both initialized with the first call to either of them. Probably the simplest solution is to ensure that index() calls front() internally, either always or conditional on the private boolean variable _first. So, either index() { this.front; return _index; } or, index() { if(!_first) this.front; return _index; } Either will work, the question is which is preferable. :-) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------