Skip to content

Commit 148139d

Browse files
committed
Merge branch 'master' of https://github.com/typelevel/cats
2 parents ab61a9a + abb97eb commit 148139d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1115
-608
lines changed

build.sbt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
import java.time.LocalDateTime
2+
13
import microsites._
24
import ReleaseTransformations._
5+
import sbt.io.Using
6+
37
import scala.xml.transform.{RewriteRule, RuleTransformer}
48
import sbtcrossproject.CrossProject
59
import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
@@ -18,7 +22,24 @@ lazy val scoverageSettings = Seq(
1822

1923
organization in ThisBuild := "org.typelevel"
2024

25+
val isTravisBuild = settingKey[Boolean]("Flag indicating whether the current build is running under Travis")
26+
val crossScalaVersionsFromTravis = settingKey[Seq[String]]("Scala versions set in .travis.yml as scala_version_XXX")
27+
isTravisBuild in Global := sys.env.get("TRAVIS").isDefined
28+
29+
crossScalaVersionsFromTravis in Global := {
30+
val manifest = (baseDirectory in ThisBuild).value / ".travis.yml"
31+
import collection.JavaConverters._
32+
Using.fileInputStream(manifest) { fis =>
33+
List(new org.yaml.snakeyaml.Yaml().load(fis))
34+
.collect { case map: java.util.Map[_, _] => map.asScala.toList }
35+
.flatMap(_.collect {
36+
case (k: String, v: String) if k.contains("scala_version_") => v
37+
})
38+
}
39+
}
40+
2141
lazy val commonSettings = Seq(
42+
crossScalaVersions := (crossScalaVersionsFromTravis in Global).value,
2243
scalacOptions ++= commonScalacOptions(scalaVersion.value),
2344
Compile / unmanagedSourceDirectories ++= {
2445
val bd = baseDirectory.value
@@ -610,6 +631,7 @@ lazy val binCompatTest = project
610631
.disablePlugins(CoursierPlugin)
611632
.settings(noPublishSettings)
612633
.settings(
634+
crossScalaVersions := (crossScalaVersionsFromTravis in Global).value,
613635
addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.9"),
614636
libraryDependencies ++= List(
615637
{
@@ -743,7 +765,7 @@ addCommandAlias("validateKernelJS", "kernelLawsJS/test")
743765
addCommandAlias("validateFreeJS", "freeJS/test") //separated due to memory constraint on travis
744766
addCommandAlias("validate", ";clean;validateJS;validateKernelJS;validateFreeJS;validateJVM")
745767

746-
addCommandAlias("prePR", ";fmt;++2.11.12;validateBC")
768+
addCommandAlias("prePR", ";fmt;++2.11.12 mimaReportBinaryIssues")
747769

748770
////////////////////////////////////////////////////////////////////////////////////////////////////
749771
// Base Build Settings - Should not need to edit below this line.

free/src/test/scala/cats/free/FreeInvariantMonoidalSuite.scala

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ package tests
33

44
import cats.arrow.FunctionK
55
import cats.free.FreeInvariantMonoidal
6-
import cats.laws.discipline.{InvariantMonoidalTests, SerializableTests}
6+
import cats.laws.discipline.{InvariantMonoidalTests, MiniInt, SerializableTests}
7+
import cats.laws.discipline.arbitrary._
78
import cats.laws.discipline.SemigroupalTests.Isomorphisms
89
import org.scalacheck.{Arbitrary, Gen}
9-
import cats.tests.CsvCodecInvariantMonoidalSuite._
10+
import cats.tests.BinCodecInvariantMonoidalSuite._
1011

1112
class FreeInvariantMonoidalSuite extends CatsSuite {
1213
implicit def freeInvariantMonoidalArbitrary[F[_], A](implicit F: Arbitrary[F[A]],
@@ -25,24 +26,25 @@ class FreeInvariantMonoidalSuite extends CatsSuite {
2526
}
2627
}
2728

28-
implicit val isoFreeCsvCodec = Isomorphisms.invariant[FreeInvariantMonoidal[CsvCodec, ?]]
29+
implicit val isoFreeBinCodec = Isomorphisms.invariant[FreeInvariantMonoidal[BinCodec, ?]]
2930

30-
checkAll("FreeInvariantMonoidal[CsvCodec, ?]",
31-
InvariantMonoidalTests[FreeInvariantMonoidal[CsvCodec, ?]].invariantMonoidal[Int, Int, Int])
32-
checkAll("InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]",
33-
SerializableTests.serializable(InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]))
31+
checkAll("FreeInvariantMonoidal[BinCodec, ?]",
32+
InvariantMonoidalTests[FreeInvariantMonoidal[BinCodec, ?]].invariantMonoidal[MiniInt, Boolean, Boolean])
33+
checkAll("InvariantMonoidal[FreeInvariantMonoidal[BinCodec, ?]]",
34+
SerializableTests.serializable(InvariantMonoidal[FreeInvariantMonoidal[BinCodec, ?]]))
3435

3536
test("FreeInvariantMonoidal#fold") {
36-
val n = 2
37-
val i1 = numericSystemCodec(8)
38-
val i2 = InvariantMonoidal[CsvCodec].point(n)
39-
val iExpr = i1.product(i2.imap(_ * 2)(_ / 2))
37+
forAll { i1: BinCodec[MiniInt] =>
38+
val n = MiniInt.unsafeFromInt(2)
39+
val i2 = InvariantMonoidal[BinCodec].point(n)
40+
val iExpr = i1.product(i2.imap(_ * n)(_ / n))
4041

41-
val f1 = FreeInvariantMonoidal.lift[CsvCodec, Int](i1)
42-
val f2 = FreeInvariantMonoidal.pure[CsvCodec, Int](n)
43-
val fExpr = f1.product(f2.imap(_ * 2)(_ / 2))
42+
val f1 = FreeInvariantMonoidal.lift[BinCodec, MiniInt](i1)
43+
val f2 = FreeInvariantMonoidal.pure[BinCodec, MiniInt](n)
44+
val fExpr = f1.product(f2.imap(_ * n)(_ / n))
4445

45-
fExpr.fold should ===(iExpr)
46+
fExpr.fold should ===(iExpr)
47+
}
4648
}
4749

4850
implicit val idIsInvariantMonoidal: InvariantMonoidal[Id] = new InvariantMonoidal[Id] {

free/src/test/scala/cats/free/FreeTSuite.scala

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import cats._
55
import cats.arrow.FunctionK
66
import cats.data._
77
import cats.laws.discipline._
8-
import cats.laws.discipline.arbitrary._
98
import cats.tests.CatsSuite
109
import cats.instances.option._
1110
import org.scalacheck.{Arbitrary, Cogen, Gen}
@@ -247,7 +246,7 @@ trait FreeTSuiteInstances {
247246
import cats.tests.IndexedStateTSuite._
248247
import SemigroupalTests._
249248

250-
type IntState[A] = State[Int, A]
249+
type IntState[A] = State[MiniInt, A]
251250
type FreeTOption[A] = FreeT[Option, Option, A]
252251
type FreeTState[A] = FreeT[IntState, IntState, A]
253252

@@ -261,16 +260,6 @@ trait FreeTSuiteInstances {
261260
override def map[A, B](fa: JustFunctor[A])(f: A => B): JustFunctor[B] = JustFunctor(f(fa.a))
262261
}
263262

264-
implicit val intEq: Eq[Int] = new Eq[Int] {
265-
def eqv(a: Int, b: Int) = a == b
266-
}
267-
268-
implicit def evalEq[A: Eq]: Eq[Eval[A]] = Eval.catsEqForEval[A]
269-
270-
implicit def intStateEq[A: Eq]: Eq[IntState[A]] = stateEq[Int, A]
271-
272-
implicit def intStateArb[A: Arbitrary]: Arbitrary[IntState[A]] = catsLawArbitraryForState[Int, A]
273-
274263
implicit def freeTOptionEq[A](implicit A: Eq[A], OM: Monad[Option]): Eq[FreeTOption[A]] = new Eq[FreeTOption[A]] {
275264
def eqv(a: FreeTOption[A], b: FreeTOption[A]) = Eq[Option[A]].eqv(a.runM(identity), b.runM(identity))
276265
}

laws/src/main/scala/cats/laws/discipline/Arbitrary.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,11 @@ object arbitrary extends ArbitraryInstances0 {
349349
implicit def catsLawsCogenForChain[A](implicit A: Cogen[A]): Cogen[Chain[A]] =
350350
Cogen[List[A]].contramap(_.toList)
351351

352+
implicit val catsLawsCogenForMiniInt: Cogen[MiniInt] =
353+
Cogen[Int].contramap(_.toInt)
354+
355+
implicit val catsLawsArbitraryForMiniInt: Arbitrary[MiniInt] =
356+
Arbitrary(Gen.oneOf(MiniInt.allValues))
352357
}
353358

354359
sealed private[discipline] trait ArbitraryInstances0 {

0 commit comments

Comments
 (0)