aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2023-12-17 17:56:25 +0000
committerLouis Pilfold <louis@lpil.uk>2023-12-17 17:56:25 +0000
commit78980c30429d4aee2c77dbbb068bfe0d153d32ad (patch)
treef07eab731d4348b7240cf1976d12f9fd09807b6d /test
parent86c25554fca51fe485ba9ca436374854c06d64c0 (diff)
downloadgleam_stdlib-78980c30429d4aee2c77dbbb068bfe0d153d32ad.tar.gz
gleam_stdlib-78980c30429d4aee2c77dbbb068bfe0d153d32ad.zip
Simplify random
Diffstat (limited to 'test')
-rw-r--r--test/gleam/float_test.gleam66
-rw-r--r--test/gleam/int_test.gleam38
2 files changed, 29 insertions, 75 deletions
diff --git a/test/gleam/float_test.gleam b/test/gleam/float_test.gleam
index e3278d5..4e881f1 100644
--- a/test/gleam/float_test.gleam
+++ b/test/gleam/float_test.gleam
@@ -348,55 +348,27 @@ pub fn product_test() {
}
pub fn random_test() {
- let test_boundaries = fn(_accumulator, _element) {
- float.random(0.0, 0.0)
- |> should.equal(0.0)
-
- float.random(0.0, 10.0)
- |> fn(x) { x >=. 0.0 && x <. 10.0 }
- |> should.be_true
-
- float.random(10.0, 0.0)
- |> fn(x) { x >=. 0.0 && x <. 10.0 }
- |> should.be_true
-
- float.random(0.0, -10.0)
- |> fn(x) { x >=. -10.0 && x <. 0.0 }
- |> should.be_true
-
- float.random(-10.0, 0.0)
- |> fn(x) { x >=. -10.0 && x <. 0.0 }
- |> should.be_true
-
- float.random(-10.0, 10.0)
- |> fn(x) { x >=. -10.0 && x <. 10.0 }
- |> should.be_true
-
- float.random(10.0, -10.0)
- |> fn(x) { x >=. -10.0 && x <. 10.0 }
- |> should.be_true
- }
- list.range(0, 100)
- |> iterator.from_list()
- |> iterator.fold(Nil, test_boundaries)
-
- let test_mean = fn(iterations: Int, min: Float, max: Float, tolerance: Float) {
- let expected_average = float.sum([min, max]) /. 2.0
+ let expected_average = 0.5
+ let iterations = 10_000
+ let sum =
list.range(0, iterations)
|> iterator.from_list()
- |> iterator.fold(
- from: 0.0,
- with: fn(accumulator, _element) { accumulator +. float.random(min, max) },
- )
- |> fn(sum) { sum /. int.to_float(iterations) }
- |> float.loosely_equals(expected_average, tolerance)
- |> should.be_true
- }
- test_mean(100, 0.0, 0.0, 5.0)
- test_mean(1000, 0.0, 100.0, 5.0)
- test_mean(1000, -100.0, 100.0, 5.0)
- test_mean(1000, -100.0, 0.0, 5.0)
- test_mean(1000, 0.0, -100.0, 5.0)
+ |> iterator.fold(from: 0.0, with: fn(accumulator, _element) {
+ let i = float.random()
+
+ { i <. 1.0 }
+ |> should.be_true
+ { i >=. 0.0 }
+ |> should.be_true
+
+ accumulator +. i
+ })
+ let average = sum /. int.to_float(iterations)
+
+ { average <. expected_average +. 0.1 }
+ |> should.be_true
+ { average >. expected_average -. 0.1 }
+ |> should.be_true
}
pub fn divide_test() {
diff --git a/test/gleam/int_test.gleam b/test/gleam/int_test.gleam
index b9aac9d..e3ee369 100644
--- a/test/gleam/int_test.gleam
+++ b/test/gleam/int_test.gleam
@@ -394,44 +394,26 @@ pub fn undigits_test() {
pub fn random_test() {
let test_boundaries = fn(_accumulator, _element) {
- int.random(0, 0)
+ int.random(0)
|> should.equal(0)
- int.random(-1, 0)
- |> list.contains([-1, 0], _)
- |> should.be_true
+ int.random(1)
+ |> should.equal(0)
+
+ int.random(-1)
+ |> should.equal(-1)
- int.random(-1, 1)
- |> list.contains([-1, 0], _)
+ int.random(2)
+ |> list.contains([0, 1], _)
|> should.be_true
- int.random(-1, 2)
- |> list.contains([-1, 0, 1], _)
+ int.random(3)
+ |> list.contains([0, 1, 2], _)
|> should.be_true
}
list.range(0, 100)
|> iterator.from_list
|> iterator.fold(Nil, test_boundaries)
-
- let test_average = fn(iterations: Int, min: Int, max: Int, tolerance: Int) {
- let expected_average = int.sum([min, max]) / 2
- list.range(0, iterations)
- |> iterator.from_list
- |> iterator.fold(
- from: 0,
- with: fn(accumulator, _element) { accumulator + int.random(min, max) },
- )
- |> fn(sum) { sum / iterations }
- |> fn(average) {
- average - tolerance <= expected_average || average + tolerance >= expected_average
- }
- |> should.be_true
- }
- test_average(100, 0, 0, 5)
- test_average(1000, 0, 100, 5)
- test_average(1000, -100, 100, 5)
- test_average(1000, -100, 0, 5)
- test_average(1000, 0, -100, 5)
}
pub fn divide_test() {