|
Scala example source code file (MapTest.scala)
The MapTest.scala Scala example source code
package scalaz
package std
import std.AllInstances._
import org.scalacheck.Arbitrary, Arbitrary.arbitrary
import scalaz.scalacheck.ScalazProperties._
import scala.collection.immutable.{Map => SMap, MapLike}
import scala.math.{Ordering => SOrdering}
import org.scalacheck.Prop.forAll
abstract class XMapTest[Map[K, V] <: SMap[K, V] with MapLike[K, V, Map[K, V]], BKC[_]]
(dict: MapSubInstances with MapSubFunctions{
type XMap[A, B] = Map[A, B]
type BuildKeyConstraint[A] = BKC[A]
})(implicit BKCF: Contravariant[BKC], OI: BKC[Int], OS: BKC[String]) extends SpecLite {
import dict._
checkAll(traverse.laws[Map[Int, ?]])
checkAll(FoldableTests.anyAndAllLazy[Map[Int, ?]])
checkAll(isEmpty.laws[Map[Int, ?]])
checkAll(bind.laws[Map[Int, ?]])
checkAll(align.laws[Map[Int, ?]])
checkAll(monoid.laws[Map[Int,String]])
checkAll(order.laws[Map[Int,String]])
checkAll(equal.laws[Map[Int,String]])
"satisfy equals laws when not natural" ! equal.laws[Map[NotNatural, String]]
implicit def mapArb[A: Arbitrary: BKC, B: Arbitrary]: Arbitrary[Map[A, B]] =
Arbitrary(arbitrary[SMap[A, B]] map (m => fromSeq(m.toSeq:_*)))
class NotNatural(val id: Int)
implicit def NotNaturalArbitrary: Arbitrary[NotNatural] =
Arbitrary(arbitrary[Int] map (new NotNatural(_)))
implicit def NotNaturalOrder: Order[NotNatural] =
Order.orderBy[NotNatural, Int](_.id)
implicit def NotNaturalBKC: BKC[NotNatural] = BKCF.contramap(OI)(_.id)
implicit def NotNaturalEqual: Equal[NotNatural] = new Equal[NotNatural] {
def equal(a1: NotNatural, a2: NotNatural): Boolean = a1.id == a2.id
}
"map ordering" ! forAll {
val O = implicitly[Order[Map[String,Int]]]
val O2 = SOrdering.Iterable(implicitly[SOrdering[(String,Int)]])
(kvs: List[(String,Int)], kvs2: List[(String,Int)]) => {
val (m1, m2) = (fromSeq(kvs:_*), fromSeq(kvs2:_*))
((m1.size == kvs.size) && (m2.size == kvs2.size)) ==> {
val l: Boolean = O.lessThan(m1, m2)
val r: Boolean = (if (m1.size < m2.size) true
else if (m1.size > m2.size) false
else O2.lt(kvs.sortBy(_._1), kvs2.sortBy(_._1)))
l == r
}
}
}
"align" ! forAll { (a: Map[Int, String], b: Map[Int, Long]) =>
import std.set._, \&/._
val F = Align[Map[Int, ?]]
val x = F.align(a, b)
val keysA = a.keySet
val keysB = b.keySet
x must_=== F.alignWith[String, Long, String \&/ Long](identity)(a, b)
==>>.fromList(x.toList) must_=== Align[Int ==>> ?].align(==>>.fromList(a.toList), ==>>.fromList(b.toList))
x.keySet must_=== (keysA ++ keysB)
x.filter(_._2.isThis).keySet must_=== (keysA -- keysB)
x.filter(_._2.isThat).keySet must_=== (keysB -- keysA)
x.filter(_._2.isBoth).keySet must_=== (keysA & keysB)
x.filter(_._2.isThis) must_=== F.map(a.filter{case (k, _) => ! keysB(k)})(This(_))
x.filter(_._2.isThat) must_=== F.map(b.filter{case (k, _) => ! keysA(k)})(That(_))
}
"getOrAdd" ! forAll { (m0: Map[Int, Long], k: Int, vOld: Long, vNew: Long) =>
import std.tuple._, std.anyVal._, std.map._
val mWithout = m0 - k
val mWithOld = m0 + (k -> vOld)
val mWithNew = m0 + (k -> vNew)
// not already in map
getOrAdd[Id.Id, Int, Long](mWithout, k)(vNew) must_=== (mWithNew, vNew)
// already in map
getOrAdd[Id.Id, Int, Long](mWithOld, k)(vNew) must_=== (mWithOld, vOld)
// lazy
var evaluated = false
getOrAdd[Id.Id, Int, Long](mWithOld, k)({evaluated = true; vNew}) must_=== (mWithOld, vOld)
evaluated must_=== false
}
}
private object DIContravariant extends Contravariant[λ[α => DummyImplicit]] {
def contramap[A, B](fa: DummyImplicit)(f: B => A) = fa
}
object MapTest extends XMapTest[SMap, λ[α => DummyImplicit]](std.map)(DIContravariant, implicitly, implicitly)
Other Scala examples (source code examples)Here is a short list of links related to this Scala MapTest.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.