Skip to content

Commit c566c89

Browse files
authored
Merge pull request #307 from tegonal/lazyZip
move conversion for lazyZip into implicit conversion method
2 parents a628464 + be2acc2 commit c566c89

File tree

4 files changed

+64
-61
lines changed

4 files changed

+64
-61
lines changed

compat/src/main/scala-2.11/scala/collection/compat/package.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ package object compat extends compat.PackageShared {
3232
// `CanBuildFrom` parameters are used as type constraints, they are not used
3333
// at run-time, hence the dummy builder implementations
3434
def apply(from: IterableView[(K, V), CC[K, V]]) = new TraversableView.NoBuilder
35-
def apply() = new TraversableView.NoBuilder
35+
def apply() = new TraversableView.NoBuilder
3636
}
3737

3838
implicit def toTraversableLikeExtensionMethods[Repr](self: Repr)(
@@ -43,14 +43,16 @@ package object compat extends compat.PackageShared {
4343
implicit def toSeqExtensionMethods[A](self: c.Seq[A]): SeqExtensionMethods[A] =
4444
new SeqExtensionMethods[A](self)
4545

46-
implicit def toTrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self: T1)(
47-
implicit w1: T1 => TraversableLike[El1, Repr1])
48-
: TrulyTraversableLikeExtensionMethods[T1, El1, Repr1] =
49-
new TrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self)
46+
implicit def toTrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self: T1)(
47+
implicit w1: T1 => TraversableLike[El1, Repr1]
48+
): TrulyTraversableLikeExtensionMethods[El1, Repr1] =
49+
new TrulyTraversableLikeExtensionMethods[El1, Repr1](w1(self))
50+
51+
implicit def toTuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](
52+
self: Tuple2Zipped[El1, Repr1, El2, Repr2]
53+
): Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2] =
54+
new Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self)
5055

51-
implicit def toTuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self: Tuple2Zipped[El1, Repr1, El2, Repr2])
52-
: Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2] =
53-
new Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self)
5456
implicit def toImmutableQueueExtensionMethods[A](
5557
self: i.Queue[A]): ImmutableQueueExtensionMethods[A] =
5658
new ImmutableQueueExtensionMethods[A](self)

compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -371,20 +371,21 @@ class TraversableLikeExtensionMethods[A, Repr](private val self: c.GenTraversabl
371371
}
372372
}
373373

374-
class TrulyTraversableLikeExtensionMethods[T1, El1, Repr1](private val self: T1) extends AnyVal {
375-
def lazyZip[El2, Repr2, T2](t2: T2)(
376-
implicit w: T1 => TraversableLike[El1, Repr1],
377-
w2: T2 => IterableLike[El2, Repr2]): Tuple2Zipped[El1, Repr1, El2, Repr2] =
378-
new Tuple2Zipped((w(self), t2))
374+
class TrulyTraversableLikeExtensionMethods[El1, Repr1](
375+
private val self: TraversableLike[El1, Repr1])
376+
extends AnyVal {
379377

378+
def lazyZip[El2, Repr2, T2](t2: T2)(
379+
implicit w2: T2 => IterableLike[El2, Repr2]
380+
): Tuple2Zipped[El1, Repr1, El2, Repr2] = new Tuple2Zipped((self, t2))
380381
}
381382

382-
class Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](private val self: Tuple2Zipped[El1, Repr1, El2, Repr2]) {
383-
def lazyZip[El3, Repr3, T3](t3: T3)(implicit w3: T3 => IterableLike[El3, Repr3])
384-
: Tuple3Zipped[El1, Repr1, El2, Repr2, El3, Repr3] = {
383+
class Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](
384+
private val self: Tuple2Zipped[El1, Repr1, El2, Repr2]) {
385385

386-
new Tuple3Zipped((self.colls._1, self.colls._2, t3))
387-
}
386+
def lazyZip[El3, Repr3, T3](t3: T3)(implicit w3: T3 => IterableLike[El3, Repr3])
387+
: Tuple3Zipped[El1, Repr1, El2, Repr2, El3, Repr3] =
388+
new Tuple3Zipped((self.colls._1, self.colls._2, t3))
388389
}
389390

390391
class MapViewExtensionMethods[K, V, C <: scala.collection.Map[K, V]](

compat/src/main/scala-2.12/scala/collection/compat/package.scala

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import scala.collection.{mutable => m}
1818
import scala.runtime.Tuple2Zipped
1919
import scala.collection.{immutable => i, mutable => m}
2020

21-
2221
package object compat extends compat.PackageShared {
2322
implicit class MutableTreeMapExtensions2(private val fact: m.TreeMap.type) extends AnyVal {
2423
def from[K: Ordering, V](source: TraversableOnce[(K, V)]): m.TreeMap[K, V] =
@@ -38,12 +37,13 @@ package object compat extends compat.PackageShared {
3837
// CanBuildFrom instances for `IterableView[(K, V), Map[K, V]]` that preserve
3938
// the strict type of the view to be `Map` instead of `Iterable`
4039
// Instances produced by this method are used to chain `filterKeys` after `mapValues`
41-
implicit def canBuildFromIterableViewMapLike[K, V, L, W, CC[X, Y] <: Map[X, Y]]: CanBuildFrom[IterableView[(K, V), CC[K, V]], (L, W), IterableView[(L, W), CC[L, W]]] =
40+
implicit def canBuildFromIterableViewMapLike[K, V, L, W, CC[X, Y] <: Map[X, Y]]
41+
: CanBuildFrom[IterableView[(K, V), CC[K, V]], (L, W), IterableView[(L, W), CC[L, W]]] =
4242
new CanBuildFrom[IterableView[(K, V), CC[K, V]], (L, W), IterableView[(L, W), CC[L, W]]] {
4343
// `CanBuildFrom` parameters are used as type constraints, they are not used
4444
// at run-time, hence the dummy builder implementations
4545
def apply(from: IterableView[(K, V), CC[K, V]]) = new TraversableView.NoBuilder
46-
def apply() = new TraversableView.NoBuilder
46+
def apply() = new TraversableView.NoBuilder
4747
}
4848

4949
implicit def toTraversableLikeExtensionMethods[Repr](self: Repr)(
@@ -54,17 +54,17 @@ package object compat extends compat.PackageShared {
5454
implicit def toSeqExtensionMethods[A](self: c.Seq[A]): SeqExtensionMethods[A] =
5555
new SeqExtensionMethods[A](self)
5656

57-
implicit def toTrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self: T1)(
58-
implicit w1: T1 => TraversableLike[El1, Repr1])
59-
: TrulyTraversableLikeExtensionMethods[T1, El1, Repr1] =
60-
new TrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self)
57+
implicit def toTrulyTraversableLikeExtensionMethods[T1, El1, Repr1](self: T1)(
58+
implicit w1: T1 => TraversableLike[El1, Repr1]
59+
): TrulyTraversableLikeExtensionMethods[El1, Repr1] =
60+
new TrulyTraversableLikeExtensionMethods[El1, Repr1](w1(self))
6161

62-
implicit def toTuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self: Tuple2Zipped[El1, Repr1, El2, Repr2])
63-
: Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2] =
64-
new Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self)
62+
implicit def toTuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](
63+
self: Tuple2Zipped[El1, Repr1, El2, Repr2])
64+
: Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2] =
65+
new Tuple2ZippedExtensionMethods[El1, Repr1, El2, Repr2](self)
6566

6667
implicit def toImmutableQueueExtensionMethods[A](
6768
self: i.Queue[A]): ImmutableQueueExtensionMethods[A] =
6869
new ImmutableQueueExtensionMethods[A](self)
6970
}
70-

compat/src/test/scala/test/scala/collection/LazyZipTest.scala

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ import scala.collection.compat._
77

88
class LazyZipTest {
99

10-
private val ws = List(1, 2, 3)
11-
private val xs = List(1, 2, 3, 4, 5, 6)
12-
private val ys = List("a", "b", "c", "d", "e", "f")
13-
private val zs = List(true, false, true, false, true, false)
14-
private val zipped2 = ws lazyZip xs
15-
private val zipped3 = ws lazyZip xs lazyZip ys
16-
private val zipped4 = ws lazyZip xs lazyZip ys lazyZip zs
17-
private val map = Map(1 -> "foo" , 2 -> "bar")
18-
19-
@Test
20-
def lazyZipTest(): Unit = {
21-
val res: List[(Int, Int)] = zipped2.map((a, b) => (a, b))
22-
assertEquals(List((1, 1), (2, 2), (3, 3)), res)
23-
}
24-
25-
@Test
26-
def lazyZip3_map(): Unit = {
27-
val res: List[(Int, Int, String)] = zipped3.map((a: Int, b: Int, c: String) => (a, b, c))
28-
assertEquals(List((1, 1, "a"), (2, 2, "b"), (3, 3, "c")), res)
29-
}
30-
31-
@Test
32-
def collectionValueIsNotEvaluated(): Unit = {
33-
val st = Stream.cons(1, throw new AssertionError("should not be evaluated"))
34-
ws.lazyZip(st)
35-
}
36-
37-
@Test
38-
def zip3collectionValueIsNotEvaluated(): Unit = {
39-
val st = Stream.cons(1, throw new AssertionError("should not be evaluated"))
40-
ws.lazyZip(st).lazyZip(st)
41-
}
10+
private val ws = List(1, 2, 3)
11+
private val xs = List(1, 2, 3, 4, 5, 6)
12+
private val ys = List("a", "b", "c", "d", "e", "f")
13+
private val zs = List(true, false, true, false, true, false)
14+
private val zipped2 = ws lazyZip xs
15+
private val zipped3 = ws lazyZip xs lazyZip ys
16+
private val zipped4 = ws lazyZip xs lazyZip ys lazyZip zs
17+
private val map = Map(1 -> "foo", 2 -> "bar")
18+
19+
@Test
20+
def lazyZipTest(): Unit = {
21+
val res: List[(Int, Int)] = zipped2.map((a, b) => (a, b))
22+
assertEquals(List((1, 1), (2, 2), (3, 3)), res)
23+
}
24+
25+
@Test
26+
def lazyZip3_map(): Unit = {
27+
val res: List[(Int, Int, String)] = zipped3.map((a: Int, b: Int, c: String) => (a, b, c))
28+
assertEquals(List((1, 1, "a"), (2, 2, "b"), (3, 3, "c")), res)
29+
}
30+
31+
@Test
32+
def collectionValueIsNotEvaluated(): Unit = {
33+
val st = Stream.cons(1, throw new AssertionError("should not be evaluated"))
34+
ws.lazyZip(st)
35+
}
36+
37+
@Test
38+
def zip3collectionValueIsNotEvaluated(): Unit = {
39+
val st = Stream.cons(1, throw new AssertionError("should not be evaluated"))
40+
ws.lazyZip(st).lazyZip(st)
41+
}
4242

4343
}

0 commit comments

Comments
 (0)