aboutsummaryrefslogblamecommitdiff
path: root/tests/run/OrderingTest.scala
blob: 561a3daeb3813df983722d66eca40127ae945fae (plain) (tree)
























                                                                           

                                                                        









                                                                                                                   
object Test extends dotty.runtime.LegacyApp {
  def test[T](t1 : T, t2 : T)(implicit ord : Ordering[T]) = {
    val cmp = ord.compare(t1, t2);
    val cmp2 = ord.compare(t2, t1);

    assert((cmp == 0) == (cmp2 == 0))
    assert((cmp > 0) == (cmp2 < 0))
    assert((cmp < 0) == (cmp2 > 0))
  }

  def testAll[T](t1 : T, t2 : T)(implicit ord : Ordering[T]) = {
    assert(ord.compare(t1, t2) < 0)
    test(t1, t2);
    test(t1, t1);
    test(t2, t2);
  }

  assert(Ordering[String].compare("australopithecus", "brontausaurus") < 0)
  // assert(Ordering[Unit].compare((), ()) == 0)

  testAll("bar", "foo");
  testAll[Byte](0, 1);
  testAll(false, true)
  testAll(1, 2);
  testAll(1.0, 2.0);
 //  testAll(Some(1), Some(2))  // does not work in nsc or dotty
 //  testAll(None, Some(1));     // does not work in dotty with or-types
  testAll[Iterable[Int]](List(1), List(1, 2));
  testAll[Iterable[Int]](List(1, 2), List(2));
  testAll((1, "bar"), (1, "foo"))
  testAll((1, "foo"), (2, "bar"))

  // sortBy
  val words = "The quick brown fox jumped over the lazy dog".split(' ')
  val result = words.sortBy(x => (x.length, x.head))
  assert(result sameElements Array[String]("The", "dog", "fox", "the", "lazy", "over", "brown", "quick", "jumped"))
}