diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-12-17 17:56:25 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-12-17 17:56:25 +0000 |
commit | 78980c30429d4aee2c77dbbb068bfe0d153d32ad (patch) | |
tree | f07eab731d4348b7240cf1976d12f9fd09807b6d /test | |
parent | 86c25554fca51fe485ba9ca436374854c06d64c0 (diff) | |
download | gleam_stdlib-78980c30429d4aee2c77dbbb068bfe0d153d32ad.tar.gz gleam_stdlib-78980c30429d4aee2c77dbbb068bfe0d153d32ad.zip |
Simplify random
Diffstat (limited to 'test')
-rw-r--r-- | test/gleam/float_test.gleam | 66 | ||||
-rw-r--r-- | test/gleam/int_test.gleam | 38 |
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() { |