39 lines
1.3 KiB
Scala
39 lines
1.3 KiB
Scala
|
|
package akka.util
|
||
|
|
|
||
|
|
import org.scalatest.WordSpec
|
||
|
|
import org.scalatest.matchers.MustMatchers
|
||
|
|
import org.scalatest.BeforeAndAfterAll
|
||
|
|
import org.scalatest.prop.Checkers
|
||
|
|
import org.scalacheck._
|
||
|
|
import org.scalacheck.Arbitrary._
|
||
|
|
import org.scalacheck.Prop._
|
||
|
|
import org.scalacheck.Gen._
|
||
|
|
|
||
|
|
class ByteStringSpec extends WordSpec with MustMatchers with Checkers {
|
||
|
|
|
||
|
|
def genSimpleByteString(min: Int, max: Int) = for {
|
||
|
|
n ← choose(min, max)
|
||
|
|
b ← Gen.containerOfN[Array, Byte](n, arbitrary[Byte])
|
||
|
|
} yield ByteString(b)
|
||
|
|
|
||
|
|
implicit val arbitraryByteString: Arbitrary[ByteString] = Arbitrary {
|
||
|
|
Gen.sized { s ⇒
|
||
|
|
for {
|
||
|
|
chunks ← choose(0, s)
|
||
|
|
bytes ← listOfN(chunks, genSimpleByteString(1, s / (chunks max 1)))
|
||
|
|
} yield (ByteString.empty /: bytes)(_ ++ _)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
"A ByteString" must {
|
||
|
|
"have correct size" when {
|
||
|
|
"concatenating" in { check((a: ByteString, b: ByteString) ⇒ (a ++ b).size == a.size + b.size) }
|
||
|
|
"dropping" in { check((a: ByteString, b: ByteString) ⇒ (a ++ b).drop(b.size).size == a.size) }
|
||
|
|
}
|
||
|
|
"be sequential" when {
|
||
|
|
"taking" in { check((a: ByteString, b: ByteString) ⇒ (a ++ b).take(a.size) == a) }
|
||
|
|
"dropping" in { check((a: ByteString, b: ByteString) ⇒ (a ++ b).drop(a.size) == b) }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|