diff --git a/alphabet-soup/src/test/scala/io/typechecked/alphabetsoup/MixerSpec.scala b/alphabet-soup/src/test/scala/io/typechecked/alphabetsoup/MixerSpec.scala index 5e05083..faef912 100644 --- a/alphabet-soup/src/test/scala/io/typechecked/alphabetsoup/MixerSpec.scala +++ b/alphabet-soup/src/test/scala/io/typechecked/alphabetsoup/MixerSpec.scala @@ -1,6 +1,7 @@ package io.typechecked package alphabetsoup +import io.typechecked.alphabetsoup.macros.Atomic import org.scalatest.FlatSpec import org.scalatest.Matchers import shapeless.:: @@ -36,6 +37,34 @@ class MixerSpec extends FlatSpec with Matchers { Mixer[A1, A1].mix(A1(5, "hello")) shouldBe A1(5, "hello") } + it should "select smaller type from larger for primitives" in { + implicitly[Mixer[(String, Int), Int]] + implicitly[Mixer[(String, Int), String]] + } + + it should "select smaller type from larger for non-primitives" in { + + @Atomic class A + @Atomic class B + + pendingUntilFixed{ + "implicitly[Mixer[(A, B), B]]" should compile + } + + @Atomic trait C + @Atomic trait D + + implicitly[Mixer[(C, D), D]] + implicitly[Mixer[(C, D), C]] + + @Atomic case class E() + @Atomic case class F() + + pendingUntilFixed{ + "implicitly[Mixer[(E, F), F]]" should compile + } + } + it should "not work on mis-matched simple types" in { illTyped("""Mixer[Int, String]""") }