All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.iteratee.testing.EqInstances.scala Maven / Gradle / Ivy

The newest version!
package io.iteratee.testing

import cats.Monad
import cats.kernel.Eq
import io.iteratee.{Enumeratee, Enumerator, Iteratee}
import org.scalacheck.Arbitrary
import scala.Predef._

trait EqInstances {
  implicit def eqThrowable: Eq[Throwable] = Eq.fromUniversalEquals

  implicit def eqEnumerator[F[_]: Monad, A: Eq](implicit eqFVA: Eq[F[Vector[A]]]): Eq[Enumerator[F, A]] =
    Eq.by(_.toVector)

  implicit def eqIteratee[F[_]: Monad, A: Eq: Arbitrary, B: Eq: Arbitrary](implicit
    eqFB: Eq[F[B]]
  ): Eq[Iteratee[F, A, B]] = {
    val e0 = Enumerator.empty[F, A]
    val e1 = Enumerator.enumList[F, A](Arbitrary.arbitrary[List[A]].sample.get)
    val e2 = Enumerator.enumStream[F, A](Arbitrary.arbitrary[Stream[A]].sample.get)
    val e3 = Enumerator.enumVector[F, A](Arbitrary.arbitrary[Vector[A]].sample.get)

    Eq.instance { (i, j) =>
      eqFB.eqv(e0.into(i), e0.into(j)) &&
      eqFB.eqv(e1.into(i), e1.into(j)) &&
      eqFB.eqv(e2.into(i), e2.into(j)) &&
      eqFB.eqv(e3.into(i), e3.into(j))
    }
  }

  implicit def eqEnumeratee[F[_]: Monad, A: Eq: Arbitrary, B: Eq: Arbitrary](implicit
    eqFVB: Eq[F[Vector[B]]]
  ): Eq[Enumeratee[F, A, B]] = {
    val e0 = Enumerator.empty[F, A]
    val e1 = Enumerator.enumList[F, A](Arbitrary.arbitrary[List[A]].sample.get)
    val e2 = Enumerator.enumStream[F, A](Arbitrary.arbitrary[Stream[A]].sample.get)
    val e3 = Enumerator.enumVector[F, A](Arbitrary.arbitrary[Vector[A]].sample.get)

    Eq.instance { (i, j) =>
      eqFVB.eqv(e0.through(i).toVector, e0.through(j).toVector) &&
      eqFVB.eqv(e1.through(i).toVector, e1.through(j).toVector) &&
      eqFVB.eqv(e2.through(i).toVector, e2.through(j).toVector) &&
      eqFVB.eqv(e3.through(i).toVector, e3.through(j).toVector)
    }
  }
}

object EqInstances extends EqInstances




© 2015 - 2025 Weber Informatics LLC | Privacy Policy