From be49752855a1a6997d4112eeff351e1c119a8a93 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Fri, 11 Mar 2011 12:13:58 +0000 Subject: A patch for views. Most relevant change: Almost all view classes now list parents like trait Appended[B >: A] extends super.Appended[B] with Transformed[B] instead of the former trait Appended[B >: A] extends Transformed[B] with super.Appended[B] because as it was, the implementation of foreach in TraversableViewLike#Transformed was repeatedly trumping overrides found in e.g. IterableLike. This change was not without its own consequences, and much of the rest of the patch is dealing with that. A more general issue is clearly revealed here: there is no straightforward way to deal with trait composition and overrides when some methods should prefer B over A and some the reverse. (It's more like A through Z in this case.) That closes #4279, with some views being five orders of magnitude slower than necessary. There is a test that confirms they'll stay performance neighbors. In the view classes (Zipped, Mapped, etc.) I attended to them with comb and brush until they were reasonably consistent. I only use "override" where necessary and throw in some "final" in the interests of trying to anchor the composition outcome. I also switched the newSliced, newZipped, etc. methods to use early init syntax since a number have abstract vals and I found at least one bug originating with uninitialized access. There was a piece of a parallel collections scalacheck test failing, which I disabled out of expedience - am emailing prokopec. There is plenty of work left to do but paulp must get back to other 2.9 issues. This is the Zurich->SF airplane patch. No review. --- test/files/run/view-iterator-stream.check | 112 ++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 test/files/run/view-iterator-stream.check (limited to 'test/files/run/view-iterator-stream.check') diff --git a/test/files/run/view-iterator-stream.check b/test/files/run/view-iterator-stream.check new file mode 100644 index 0000000000..2da02c865c --- /dev/null +++ b/test/files/run/view-iterator-stream.check @@ -0,0 +1,112 @@ + +** drop 20 -> take 10 -> slice(1, 5) ** + +------------------- +toIndexedSeq -> toIterator -> toStream Stream(22, ?) 22 23 24 25 +toIndexedSeq -> toIterator -> view StreamView(...) 22 23 24 25 +toIndexedSeq -> toStream -> toIterator non-empty iterator 22 23 24 25 +toIndexedSeq -> toStream -> view StreamView(...) 22 23 24 25 +toIndexedSeq -> view -> toIterator non-empty iterator 22 23 24 25 +toIndexedSeq -> view -> toStream Stream(22, ?) 22 23 24 25 +toIterator -> toIndexedSeq -> toStream Stream(22, ?) 22 23 24 25 +toIterator -> toIndexedSeq -> view SeqView(...) 22 23 24 25 +toIterator -> toStream -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +toIterator -> toStream -> view StreamView(...) 22 23 24 25 +toIterator -> view -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +toIterator -> view -> toStream Stream(22, ?) 22 23 24 25 +toStream -> toIndexedSeq -> toIterator non-empty iterator 22 23 24 25 +toStream -> toIndexedSeq -> view SeqView(...) 22 23 24 25 +toStream -> toIterator -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +toStream -> toIterator -> view StreamView(...) 22 23 24 25 +toStream -> view -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +toStream -> view -> toIterator non-empty iterator 22 23 24 25 +view -> toIndexedSeq -> toIterator non-empty iterator 22 23 24 25 +view -> toIndexedSeq -> toStream Stream(22, ?) 22 23 24 25 +view -> toIterator -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +view -> toIterator -> toStream Stream(22, ?) 22 23 24 25 +view -> toStream -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25 +view -> toStream -> toIterator non-empty iterator 22 23 24 25 + +** take 20 -> drop 10 -> slice(1, 5) ** + +------------------- +toIndexedSeq -> toIterator -> toStream Stream(12, ?) 12 13 14 15 +toIndexedSeq -> toIterator -> view StreamView(...) 12 13 14 15 +toIndexedSeq -> toStream -> toIterator non-empty iterator 12 13 14 15 +toIndexedSeq -> toStream -> view StreamView(...) 12 13 14 15 +toIndexedSeq -> view -> toIterator non-empty iterator 12 13 14 15 +toIndexedSeq -> view -> toStream Stream(12, ?) 12 13 14 15 +toIterator -> toIndexedSeq -> toStream Stream(12, ?) 12 13 14 15 +toIterator -> toIndexedSeq -> view SeqView(...) 12 13 14 15 +toIterator -> toStream -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +toIterator -> toStream -> view StreamView(...) 12 13 14 15 +toIterator -> view -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +toIterator -> view -> toStream Stream(12, ?) 12 13 14 15 +toStream -> toIndexedSeq -> toIterator non-empty iterator 12 13 14 15 +toStream -> toIndexedSeq -> view SeqView(...) 12 13 14 15 +toStream -> toIterator -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +toStream -> toIterator -> view StreamView(...) 12 13 14 15 +toStream -> view -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +toStream -> view -> toIterator non-empty iterator 12 13 14 15 +view -> toIndexedSeq -> toIterator non-empty iterator 12 13 14 15 +view -> toIndexedSeq -> toStream Stream(12, ?) 12 13 14 15 +view -> toIterator -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +view -> toIterator -> toStream Stream(12, ?) 12 13 14 15 +view -> toStream -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15 +view -> toStream -> toIterator non-empty iterator 12 13 14 15 + +** slice(20, 40) -> drop 10 -> take 5 ** + +------------------- +toIndexedSeq -> toIterator -> toStream Stream(31, ?) 31 32 33 34 35 +toIndexedSeq -> toIterator -> view StreamView(...) 31 32 33 34 35 +toIndexedSeq -> toStream -> toIterator non-empty iterator 31 32 33 34 35 +toIndexedSeq -> toStream -> view StreamView(...) 31 32 33 34 35 +toIndexedSeq -> view -> toIterator non-empty iterator 31 32 33 34 35 +toIndexedSeq -> view -> toStream Stream(31, ?) 31 32 33 34 35 +toIterator -> toIndexedSeq -> toStream Stream(31, ?) 31 32 33 34 35 +toIterator -> toIndexedSeq -> view SeqView(...) 31 32 33 34 35 +toIterator -> toStream -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +toIterator -> toStream -> view StreamView(...) 31 32 33 34 35 +toIterator -> view -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +toIterator -> view -> toStream Stream(31, ?) 31 32 33 34 35 +toStream -> toIndexedSeq -> toIterator non-empty iterator 31 32 33 34 35 +toStream -> toIndexedSeq -> view SeqView(...) 31 32 33 34 35 +toStream -> toIterator -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +toStream -> toIterator -> view StreamView(...) 31 32 33 34 35 +toStream -> view -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +toStream -> view -> toIterator non-empty iterator 31 32 33 34 35 +view -> toIndexedSeq -> toIterator non-empty iterator 31 32 33 34 35 +view -> toIndexedSeq -> toStream Stream(31, ?) 31 32 33 34 35 +view -> toIterator -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +view -> toIterator -> toStream Stream(31, ?) 31 32 33 34 35 +view -> toStream -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35 +view -> toStream -> toIterator non-empty iterator 31 32 33 34 35 + +** slice(20, 40) -> take 10 -> drop 5 ** + +------------------- +toIndexedSeq -> toIterator -> toStream Stream(26, ?) 26 27 28 29 30 +toIndexedSeq -> toIterator -> view StreamView(...) 26 27 28 29 30 +toIndexedSeq -> toStream -> toIterator non-empty iterator 26 27 28 29 30 +toIndexedSeq -> toStream -> view StreamView(...) 26 27 28 29 30 +toIndexedSeq -> view -> toIterator non-empty iterator 26 27 28 29 30 +toIndexedSeq -> view -> toStream Stream(26, ?) 26 27 28 29 30 +toIterator -> toIndexedSeq -> toStream Stream(26, ?) 26 27 28 29 30 +toIterator -> toIndexedSeq -> view SeqView(...) 26 27 28 29 30 +toIterator -> toStream -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +toIterator -> toStream -> view StreamView(...) 26 27 28 29 30 +toIterator -> view -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +toIterator -> view -> toStream Stream(26, ?) 26 27 28 29 30 +toStream -> toIndexedSeq -> toIterator non-empty iterator 26 27 28 29 30 +toStream -> toIndexedSeq -> view SeqView(...) 26 27 28 29 30 +toStream -> toIterator -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +toStream -> toIterator -> view StreamView(...) 26 27 28 29 30 +toStream -> view -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +toStream -> view -> toIterator non-empty iterator 26 27 28 29 30 +view -> toIndexedSeq -> toIterator non-empty iterator 26 27 28 29 30 +view -> toIndexedSeq -> toStream Stream(26, ?) 26 27 28 29 30 +view -> toIterator -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +view -> toIterator -> toStream Stream(26, ?) 26 27 28 29 30 +view -> toStream -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30 +view -> toStream -> toIterator non-empty iterator 26 27 28 29 30 -- cgit v1.2.3