Skip to content

Commit

Permalink
Close #106 - Add nonZero to Monoid
Browse files Browse the repository at this point in the history
  • Loading branch information
kevin-lee committed Oct 15, 2019
1 parent cf04fab commit 3390110
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/scala/just/fp/Monoid.scala
Expand Up @@ -11,6 +11,8 @@ trait Monoid[A] extends SemiGroup[A] {

def isZero(a: A)(implicit E: Equal[A]): Boolean = Equal[A].equal(a, zero)

def nonZero(a: A)(implicit E: Equal[A]): Boolean = !isZero(a)

@SuppressWarnings(Array("org.wartremover.warts.ImplicitParameter"))
trait MonoidLaw {
/*
Expand Down
98 changes: 98 additions & 0 deletions src/test/scala/just/fp/MonoidSpec.scala
Expand Up @@ -21,6 +21,15 @@ object MonoidSpec extends Properties {
"test OptionMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genIntFromMinToMax.map(_.some))(!_.isZero(_))
)
, example(
"test OptionMonoid.nonZero zero case"
, testMonoidFunction("nonZero", none[Int])(!_.nonZero(_))
)
, property(
"test OptionMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genIntFromMinToMax.map(_.some))(_.nonZero(_))
)

, property("testListMonoidLaw", ListMonoidLaws.laws)
, example(
"test ListMonoid.isZero zero case"
Expand All @@ -30,6 +39,15 @@ object MonoidSpec extends Properties {
"test ListMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genList(Gens.genIntFromMinToMax, 1, 10))(!_.isZero(_))
)
, example(
"test ListMonoid.nonZero zero case"
, testMonoidFunction("nonZero", List.empty[Int])(!_.nonZero(_))
)
, property(
"test ListMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genList(Gens.genIntFromMinToMax, 1, 10))(_.nonZero(_))
)

, property("testVectorMonoidLaw", VectorMonoidLaws.laws)
, example(
"test VectorMonoid.isZero zero case"
Expand All @@ -39,6 +57,15 @@ object MonoidSpec extends Properties {
"test VectorMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genVector(Gens.genIntFromMinToMax, 1, 10))(!_.isZero(_))
)
, example(
"test VectorMonoid.nonZero zero case"
, testMonoidFunction("nonZero", Vector.empty[Int])(!_.nonZero(_))
)
, property(
"test VectorMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genVector(Gens.genIntFromMinToMax, 1, 10))(_.nonZero(_))
)

, property("testStringMonoidLaw", StringMonoidLaws.laws)
, example(
"test StringMonoid.isZero zero case"
Expand All @@ -48,6 +75,15 @@ object MonoidSpec extends Properties {
"test StringMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gen.constant("a").flatMap(c => Gens.genUnicodeString.map(c + _)))(!_.isZero(_))
)
, example(
"test StringMonoid.nonZero zero case"
, testMonoidFunction("nonZero", "")(!_.nonZero(_))
)
, property(
"test StringMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gen.constant("a").flatMap(c => Gens.genUnicodeString.map(c + _)))(_.nonZero(_))
)

, property("testByteMonoidLaw", ByteMonoidLaws.laws)
, example(
"test ByteMonoid.isZero zero case"
Expand All @@ -57,6 +93,15 @@ object MonoidSpec extends Properties {
"test ByteMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genByte(1, Byte.MaxValue))(!_.isZero(_))
)
, example(
"test ByteMonoid.nonZero zero case"
, testMonoidFunction("nonZero", 0.toByte)(!_.nonZero(_))
)
, property(
"test ByteMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genByte(1, Byte.MaxValue))(_.nonZero(_))
)

, property("testShortMonoidLaw", ShortMonoidLaws.laws)
, example(
"test ShortMonoid.isZero zero case"
Expand All @@ -66,6 +111,15 @@ object MonoidSpec extends Properties {
"test ShortMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genShort(1, Short.MaxValue))(!_.isZero(_))
)
, example(
"test ShortMonoid.nonZero zero case"
, testMonoidFunction("nonZero", 0.toShort)(!_.nonZero(_))
)
, property(
"test ShortMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genShort(1, Short.MaxValue))(_.nonZero(_))
)

, property("testCharMonoidLaw", CharMonoidLaws.laws)
, example(
"test CharMonoid.isZero zero case"
Expand All @@ -75,6 +129,15 @@ object MonoidSpec extends Properties {
"test CharMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genChar(1, Char.MaxValue))(!_.isZero(_))
)
, example(
"test CharMonoid.nonZero zero case"
, testMonoidFunction("nonZero", 0.toChar)(!_.nonZero(_))
)
, property(
"test CharMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genChar(1, Char.MaxValue))(_.nonZero(_))
)

, property("testIntMonoidLaw", IntMonoidLaws.laws)
, example(
"test IntMonoid.isZero zero case"
Expand All @@ -84,6 +147,15 @@ object MonoidSpec extends Properties {
"test IntMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genInt(1, Int.MaxValue))(!_.isZero(_))
)
, example(
"test IntMonoid.nonZero zero case"
, testMonoidFunction("nonZero", 0)(!_.nonZero(_))
)
, property(
"test IntMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genInt(1, Int.MaxValue))(_.nonZero(_))
)

, property("testLongMonoidLaw", LongMonoidLaws.laws)
, example(
"test LongMonoid.isZero zero case"
Expand All @@ -93,6 +165,15 @@ object MonoidSpec extends Properties {
"test LongMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genLong(1L, Long.MaxValue))(!_.isZero(_))
)
, example(
"test LongMonoid.nonZero zero case"
, testMonoidFunction("nonZero", 0L)(!_.nonZero(_))
)
, property(
"test LongMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genLong(1L, Long.MaxValue))(_.nonZero(_))
)

, property("testBigIntMonoidLaw", BigIntMonoidLaws.laws)
, example(
"test BigIntMonoid.isZero zero case"
Expand All @@ -102,6 +183,15 @@ object MonoidSpec extends Properties {
"test BigIntMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genBigInt(1L, Long.MaxValue))(!_.isZero(_))
)
, example(
"test BigIntMonoid.nonZero zero case"
, testMonoidFunction("nonZero", BigInt(0))(!_.nonZero(_))
)
, property(
"test BigIntMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genBigInt(1L, Long.MaxValue))(_.nonZero(_))
)

, property("testBigDecimalMonoidLaw", BigDecimalMonoidLaws.laws)
, example(
"test BigDecimalMonoid.isZero zero case"
Expand All @@ -111,6 +201,14 @@ object MonoidSpec extends Properties {
"test BigDecimalMonoid.isZero non-zero case"
, propertyTestMonoidFunction("isZero", Gens.genBigDecimal(1F, Float.MaxValue, 1L, Long.MaxValue))(!_.isZero(_))
)
, example(
"test BigDecimalMonoid.nonZero zero case"
, testMonoidFunction("nonZero", BigDecimal(0))(!_.nonZero(_))
)
, property(
"test BigDecimalMonoid.nonZero non-zero case"
, propertyTestMonoidFunction("nonZero", Gens.genBigDecimal(1F, Float.MaxValue, 1L, Long.MaxValue))(_.nonZero(_))
)
)

def testMonoidFunction[A : Monoid : Equal](name: String, monoid: A)(f: (Monoid[A], A) => Boolean): Result = {
Expand Down

0 comments on commit 3390110

Please sign in to comment.