26 lines
782 B
Scala
26 lines
782 B
Scala
package green.thisfieldwas.embracingnondeterminism.stdlib
|
|
|
|
import green.thisfieldwas.embracingnondeterminism.data.{Semigroup, SemigroupLaws}
|
|
import green.thisfieldwas.embracingnondeterminism.util.Laws
|
|
import org.scalacheck.{Arbitrary, Gen}
|
|
|
|
/** Proves that Scala's String conforms to a Semigroup.
|
|
*/
|
|
class StringSpec extends Laws with SemigroupLaws {
|
|
|
|
/** Non-empty Strings specifically form a Semigroup.
|
|
*/
|
|
implicit val arbitraryNonEmptyString: Arbitrary[String] = Arbitrary {
|
|
for {
|
|
length <- Gen.sized(n => Gen.choose(1, n.max(1)))
|
|
string <- Gen.stringOfN(length, Gen.asciiChar)
|
|
} yield string
|
|
}
|
|
|
|
/** String forms a Semigroup under concatenation.
|
|
*/
|
|
implicit val stringSemigroup: Semigroup[String] = _ + _
|
|
|
|
checkSemigroupLaws[String]()
|
|
}
|