aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/xyz/driver/core/generators.scala29
-rw-r--r--src/test/scala/xyz/driver/core/GeneratorsTest.scala6
2 files changed, 19 insertions, 16 deletions
diff --git a/src/main/scala/xyz/driver/core/generators.scala b/src/main/scala/xyz/driver/core/generators.scala
index 8f3ff13..9242fd9 100644
--- a/src/main/scala/xyz/driver/core/generators.scala
+++ b/src/main/scala/xyz/driver/core/generators.scala
@@ -19,7 +19,7 @@ object generators {
def nextToken(length: Int): String = List.fill(length)(oneOf(NonAmbigiousCharacters)).mkString
- def nextInt(maxValue: Int): Int = random.nextInt(maxValue)
+ def nextInt(maxValue: Int, minValue: Int = 0): Int = random.nextInt(maxValue - minValue) + minValue
def nextBoolean(): Boolean = random.nextBoolean()
@@ -67,21 +67,24 @@ object generators {
def oneOf[T](items: Set[T]): T = items.toSeq(nextInt(items.size))
- def arrayOf[T: ClassTag](generator: => T, maxLength: Int = DefaultMaxLength): Array[T] =
- Array.fill(nextInt(maxLength))(generator)
+ def arrayOf[T: ClassTag](generator: => T, maxLength: Int = DefaultMaxLength, minLength: Int = 0): Array[T] =
+ Array.fill(nextInt(maxLength, minLength))(generator)
- def seqOf[T](generator: => T, maxLength: Int = DefaultMaxLength): Seq[T] =
- Seq.fill(nextInt(maxLength))(generator)
+ def seqOf[T](generator: => T, maxLength: Int = DefaultMaxLength, minLength: Int = 0): Seq[T] =
+ Seq.fill(nextInt(maxLength, minLength))(generator)
- def vectorOf[T](generator: => T, maxLength: Int = DefaultMaxLength): Vector[T] =
- Vector.fill(nextInt(maxLength))(generator)
+ def vectorOf[T](generator: => T, maxLength: Int = DefaultMaxLength, minLength: Int = 0): Vector[T] =
+ Vector.fill(nextInt(maxLength, minLength))(generator)
- def listOf[T](generator: => T, maxLength: Int = DefaultMaxLength): List[T] =
- List.fill(nextInt(maxLength))(generator)
+ def listOf[T](generator: => T, maxLength: Int = DefaultMaxLength, minLength: Int = 0): List[T] =
+ List.fill(nextInt(maxLength, minLength))(generator)
- def setOf[T](generator: => T, maxLength: Int = DefaultMaxLength): Set[T] =
- seqOf(generator, maxLength).toSet
+ def setOf[T](generator: => T, maxLength: Int = DefaultMaxLength, minLength: Int = 0): Set[T] =
+ seqOf(generator, maxLength, minLength).toSet
- def mapOf[K, V](maxLength: Int, keyGenerator: => K, valueGenerator: => V): Map[K, V] =
- seqOf(nextPair(keyGenerator, valueGenerator), maxLength).toMap
+ def mapOf[K, V](keyGenerator: => K,
+ valueGenerator: => V,
+ maxLength: Int = DefaultMaxLength,
+ minLength: Int = 0): Map[K, V] =
+ seqOf(nextPair(keyGenerator, valueGenerator), maxLength, minLength).toMap
}
diff --git a/src/test/scala/xyz/driver/core/GeneratorsTest.scala b/src/test/scala/xyz/driver/core/GeneratorsTest.scala
index 4ec73ec..737cbcb 100644
--- a/src/test/scala/xyz/driver/core/GeneratorsTest.scala
+++ b/src/test/scala/xyz/driver/core/GeneratorsTest.scala
@@ -212,19 +212,19 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions {
it should "be able to generate maps with keys and values generated by generators" in {
- val generatedConstantMap = mapOf(10, "key", 123)
+ val generatedConstantMap = mapOf("key", 123, 10)
generatedConstantMap.size should be <= 1
assert(generatedConstantMap.keys.forall(_ == "key"))
assert(generatedConstantMap.values.forall(_ == 123))
- val generatedMap = mapOf(10, nextString(10), nextBigDecimal())
+ val generatedMap = mapOf(nextString(10), nextBigDecimal(), 10)
assert(generatedMap.keys.forall(_.length <= 10))
assert(generatedMap.values.forall(_ >= BigDecimal(0.00)))
}
it should "compose deeply" in {
- val generatedNestedMap = mapOf(10, nextString(10), nextPair(nextBigDecimal(), nextOption(123)))
+ val generatedNestedMap = mapOf(nextString(10), nextPair(nextBigDecimal(), nextOption(123)), 10)
generatedNestedMap.size should be <= 10
generatedNestedMap.keySet.size should be <= 10