Rassal is a random value generator.
Right now, Rassal is not a published project. If you want to use the library, you should clone the project first and publish it locally as on the following command:
# on interactive sbt shell
sbt:rassal> publishLocal
...
[info] published ivy to /home/USER/.ivy2/local/io.github.lamdalib/rassal_3/0.1.0-SNAPSHOT
[info] published ivy to /home/USER/.ivy2/local/io.github.lamdalib/rassal-core_3/0.1.0-SNAPSHOT
# on bash
$ sbt publishLocal
...
[info] published ivy to /home/USER/.ivy2/local/io.github.lamdalib/rassal_3/0.1.0-SNAPSHOT
[info] published ivy to /home/USER/.ivy2/local/io.github.lamdalib/rasasl-core_3/0.1.0-SNAPSHOT
Then you can add the library in the library dependencies as others.
libraryDependencies += "io.github.lamdalib" %% "rassal" % "0.1.0-SNAPSHOT"
You can run all tests as on the following command:
# on interactive sbt shell
sbt:rassal> tests/test
# on bash
$ sbt tests/test
import rassal.Gen
import rassal.syntax.all.*
import rassal.instances.all.given
scala> Gen.nextInt.run(Gen.seed(1))
val res0: (rassal.Seed, Int) = (Seed(25214903928),384748)
scala> Gen.nextInt.withBounds(5, 25).run(Gen.seed(1))
val res1: (rassal.Seed, Int) = (Seed(25214903928),12)
scala> Gen.nextInt.withBounds(5, 25).asList(3).run(Gen.seed(1))
val res2: (rassal.Seed, List[Int]) = (Seed(245470556921330),List(14, 6, 12))
scala> Gen.nextDouble.withBounds(1.5, 4.2).toFixed(2).run(Gen.seed(1))
val res3: (rassal.Seed, Double) = (Seed(25214903928),1.5)
scala> Gen.nextDouble.withBounds(1.5, 4.2).toFixed(2).asList(3).run(Gen.seed(1))
val res4: (rassal.Seed, List[Double]) = (Seed(245470556921330),List(2.19, 2.94, 1.5))
Let's generate random string values
import rassal.Gen
import rassal.syntax.all.*
import rassal.instances.all.given
val (_, stringList) = Gen.nextString.alpha.length(16).asList(10).run(Gen.seed(1))
println(stringList)
// output
List(
mhuyKRzHUshsnalU,
IjUSLepdmlzqMscw,
SnjDFhbtRjqZodhl,
fLVOxnCJIpKgoPkS,
NjNgBWcgiOVLlqIi,
sZDRoxAnOxYIotPA,
idOfiTZWQdNSaPJn,
PlsjtDzHBVPUGCxe,
qscWotfqFElCdBJg,
dKCkfnSpMoZKhVJY
)
Or we can use LazyList instead of List for better performance
val (_, stringLazyList) = Gen.nextString.alpha.length(16).asLazy.run(Gen.seed(1))
for i <- stringLazyList.take(5) do {
println(i)
}
// output
dKCkfnSpMoZKhVJY
qscWotfqFElCdBJg
PlsjtDzHBVPUGCxe
idOfiTZWQdNSaPJn
sZDRoxAnOxYIotPA
or we can generate a string by template:
val (_, emailStr) = Gen.nextString
.asLike(
"$userName@$domain.$tld",
Map(
"$userName" -> Gen.nextString.alphanumeric.toLower.length(6),
"$domain" -> Gen.nextString.alpha.toLower.length(4),
"$tld" -> Gen.nextString.alpha.toLower.length(3)
)
)
.run(Gen.seed(1))
// output
hifnjc@spmo.kfn