You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
956 B
30 lines
956 B
package green.thisfieldwas.embracingnondeterminism.stdlib
|
|
|
|
import green.thisfieldwas.embracingnondeterminism.data.{Monoid, MonoidLaws, SemigroupLaws}
|
|
import green.thisfieldwas.embracingnondeterminism.util.Laws
|
|
import org.scalacheck.{Arbitrary, Gen}
|
|
|
|
/** Proves that Scala's String conforms to a Semigroup and Monoid.
|
|
*/
|
|
class StringSpec extends Laws with SemigroupLaws with MonoidLaws {
|
|
|
|
implicit val arbitraryString: Arbitrary[String] = Arbitrary {
|
|
for {
|
|
length <- Gen.sized(Gen.choose(0, _))
|
|
string <- Gen.stringOfN(length, Gen.asciiChar)
|
|
} yield string
|
|
}
|
|
|
|
/** String forms a Semigroup under concatenation and a Monoid with an identity
|
|
* value of an empty string "".
|
|
*/
|
|
implicit val stringMonoid: Monoid[String] = new Monoid[String] {
|
|
|
|
override def empty: String = ""
|
|
|
|
override def combine(left: String, right: String): String = left + right
|
|
}
|
|
|
|
checkSemigroupLaws[String]()
|
|
checkMonoidLaws[String]()
|
|
}
|
|
|