summaryrefslogtreecommitdiff
path: root/core/src/test/scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-16 23:20:22 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-16 23:20:22 -0800
commit5d03f4390f110d87ca4578259fb86405b7febab8 (patch)
tree04e455bf95157c2ca12b3cee3bd7c8be2acee2cf /core/src/test/scala
parenteaba6c7ed4b1dc29c3b0d05be58f1bfd122f369d (diff)
downloadmill-5d03f4390f110d87ca4578259fb86405b7febab8.tar.gz
mill-5d03f4390f110d87ca4578259fb86405b7febab8.tar.bz2
mill-5d03f4390f110d87ca4578259fb86405b7febab8.zip
Flesh out a principled implementation of the cross-build monad
Diffstat (limited to 'core/src/test/scala')
-rw-r--r--core/src/test/scala/mill/CrossTests.scala165
1 files changed, 128 insertions, 37 deletions
diff --git a/core/src/test/scala/mill/CrossTests.scala b/core/src/test/scala/mill/CrossTests.scala
index d39072c5..76cde1e9 100644
--- a/core/src/test/scala/mill/CrossTests.scala
+++ b/core/src/test/scala/mill/CrossTests.scala
@@ -6,45 +6,136 @@ import utest._
object CrossTests extends TestSuite{
val tests = Tests{
- 'test - {
- Cross.test()
+
+ def assertEquals[T](value: Cross[T], value1: Cross[T]) = {
+ assert(value == value1)
}
-// def assertEquals[T](value: Cross[T], value1: Cross[T]) = {
-// assert(value == value1)
-// }
-// 'map - assertEquals(
-// for(a <- Cross(1, 2, 3)) yield a.toString,
-// Cross(1 -> "1", 2 -> "2", 3 -> "3")
-// )
-// 'flatMapFilter - assertEquals(
-// for{
-// a <- Cross(1, 2)
-// b <- Cross("A", "B")
-// if !(a == 2 && b == "B")
-// } yield b * a,
-// Cross(
-// (1 -> ("A" -> "A")),
-// (1 -> ("B" -> "B")),
-// (2 -> ("A" -> "AA"))
-// )
-// )
-// 'reuse - {
-// val matrix = for{
-// a <- Cross(1, 2)
-// b <- Cross("A", "B")
-// if !(a == 2 && b == "B")
-// } yield ()
-// assertEquals(
-// for((a, (b, _)) <- matrix)
-// yield b * a,
-// Cross(
-// (1 -> ("A" -> "A")),
-// (1 -> ("B" -> "B")),
-// (2 -> ("A" -> "AA"))
-// )
-// )
-// }
+ 'single - assertEquals(
+ for(a <- Cross(1, 2, 3)) yield a.toString,
+ Cross(List((List(1), "1"), (List(2), "2"), (List(3), "3")))
+ )
+
+
+
+ 'double - assertEquals(
+ for{
+ a <- Cross(1, 2, 3)
+ b <- Cross("A", "B", "C")
+ } yield b * a,
+ Cross(
+ List(
+ (List("A", 1), "A"),
+ (List("B", 1), "B"),
+ (List("C", 1), "C"),
+ (List("A", 2), "AA"),
+ (List("B", 2), "BB"),
+ (List("C", 2), "CC"),
+ (List("A", 3), "AAA"),
+ (List("B", 3), "BBB"),
+ (List("C", 3), "CCC")
+ )
+ )
+ )
+
+
+ 'triple - assertEquals(
+ for{
+ a <- Cross(1, 2)
+ b <- Cross("A", "B")
+ c <- Cross(true, false)
+ } yield b * a + c,
+ Cross(
+ List(
+ (List(true, "A", 1), "Atrue"),
+ (List(false, "A", 1), "Afalse"),
+ (List(true, "B", 1), "Btrue"),
+ (List(false, "B", 1), "Bfalse"),
+ (List(true, "A", 2), "AAtrue"),
+ (List(false, "A", 2), "AAfalse"),
+ (List(true, "B", 2), "BBtrue"),
+ (List(false, "B", 2), "BBfalse")
+ )
+ )
+ )
+
+
+ 'filter - assertEquals(
+ for{
+ a <- Cross(1, 2, 3)
+ b <- Cross("A", "B", "C")
+ if !(a == 2 && b == "B")
+ } yield b * a,
+ Cross(
+ List(
+ (List("A", 1), "A"),
+ (List("B", 1), "B"),
+ (List("C", 1), "C"),
+ (List("A", 2), "AA"),
+ (List("C", 2), "CC"),
+ (List("A", 3), "AAA"),
+ (List("B", 3), "BBB"),
+ (List("C", 3), "CCC")
+ )
+ )
+ )
+
+
+ 'middleFilter- assertEquals(
+ for{
+ a <- Cross(1, 2, 3)
+ if a != 2
+ b <- Cross("A", "B", "C")
+ } yield b * a,
+ Cross(
+ List(
+ (List("A", 1), "A"),
+ (List("B", 1), "B"),
+ (List("C", 1), "C"),
+ (List("A", 3), "AAA"),
+ (List("B", 3), "BBB"),
+ (List("C", 3), "CCC")
+ )
+ )
+ )
+
+
+ 'nestedComprehension1 - assertEquals(
+ for{
+ (a, b) <- for(a <- Cross(1, 2); b <- Cross("A", "B")) yield (a, b)
+ c <- Cross(true, false)
+ } yield b * a + c,
+ Cross(
+ List(
+ (List(true, "A", 1), "Atrue"),
+ (List(false, "A", 1), "Afalse"),
+ (List(true, "B", 1), "Btrue"),
+ (List(false, "B", 1), "Bfalse"),
+ (List(true, "A", 2), "AAtrue"),
+ (List(false, "A", 2), "AAfalse"),
+ (List(true, "B", 2), "BBtrue"),
+ (List(false, "B", 2), "BBfalse")
+ )
+ )
+ )
+ 'nestedComprehension2 - assertEquals(
+ for{
+ a <- Cross(1, 2)
+ (b, c) <- for(b <- Cross("A", "B"); c <- Cross(true, false)) yield (b, c)
+ } yield b * a + c,
+ Cross(
+ List(
+ (List(true, "A", 1), "Atrue"),
+ (List(false, "A", 1), "Afalse"),
+ (List(true, "B", 1), "Btrue"),
+ (List(false, "B", 1), "Bfalse"),
+ (List(true, "A", 2), "AAtrue"),
+ (List(false, "A", 2), "AAfalse"),
+ (List(true, "B", 2), "BBtrue"),
+ (List(false, "B", 2), "BBfalse")
+ )
+ )
+ )
}
}