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

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]()
}