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.
25 lines
782 B
25 lines
782 B
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]()
|
|
}
|
|
|