2021-01-18 15:20:06 +03:00
|
|
|
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
|
2020-05-17 12:00:29 +03:00
|
|
|
// Use of this source code is governed by an MIT license
|
|
|
|
// that can be found in the LICENSE file.
|
2020-12-22 17:38:17 +03:00
|
|
|
import math.fractions
|
2020-05-17 12:00:29 +03:00
|
|
|
import math
|
|
|
|
|
|
|
|
fn test_half() {
|
|
|
|
float_val := 0.5
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(1, 2))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_third() {
|
|
|
|
float_val := 1.0 / 3.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(1, 3))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_minus_one_twelfth() {
|
|
|
|
float_val := -1.0 / 12.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(-1, 12))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_zero() {
|
|
|
|
float_val := 0.0
|
|
|
|
println('Pre')
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
println('Post')
|
|
|
|
assert fract_val.equals(fractions.fraction(0, 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_minus_one() {
|
|
|
|
float_val := -1.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(-1, 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_thirty_three() {
|
|
|
|
float_val := 33.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(33, 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_millionth() {
|
|
|
|
float_val := 1.0 / 1000000.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(1, 1000000))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_minus_27_by_57() {
|
|
|
|
float_val := -27.0 / 57.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(-27, 57))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_29_by_104() {
|
|
|
|
float_val := 29.0 / 104.0
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
assert fract_val.equals(fractions.fraction(29, 104))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_140710_232() {
|
|
|
|
float_val := 140710.232
|
|
|
|
fract_val := fractions.approximate(float_val)
|
|
|
|
// Approximation will match perfectly for upto 3 places after the decimal
|
|
|
|
// The result will be within default_eps of original value
|
|
|
|
assert fract_val.f64() == float_val
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_1_digit() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-2).equals(fractions.fraction(22, 7))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_2_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-3).equals(fractions.fraction(22, 7))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_3_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-4).equals(fractions.fraction(333, 106))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_4_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-5).equals(fractions.fraction(355, 113))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_5_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-6).equals(fractions.fraction(355, 113))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_6_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-7).equals(fractions.fraction(355, 113))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_7_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-8).equals(fractions.fraction(103993,
|
|
|
|
33102))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_8_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-9).equals(fractions.fraction(103993,
|
|
|
|
33102))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_9_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-10).equals(fractions.fraction(104348,
|
|
|
|
33215))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_10_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-11).equals(fractions.fraction(312689,
|
|
|
|
99532))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_11_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-12).equals(fractions.fraction(1146408,
|
|
|
|
364913))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_pi_12_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.pi, 5.0e-13).equals(fractions.fraction(4272943,
|
|
|
|
1360120))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_1_digit() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-2).equals(fractions.fraction(5, 3))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_2_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-3).equals(fractions.fraction(21, 13))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_3_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-4).equals(fractions.fraction(55, 34))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_4_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-5).equals(fractions.fraction(233,
|
|
|
|
144))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_5_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-6).equals(fractions.fraction(610,
|
|
|
|
377))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_6_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-7).equals(fractions.fraction(1597,
|
|
|
|
987))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_7_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-8).equals(fractions.fraction(6765,
|
|
|
|
4181))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_8_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-9).equals(fractions.fraction(17711,
|
|
|
|
10946))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_9_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-10).equals(fractions.fraction(75025,
|
|
|
|
46368))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_10_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-11).equals(fractions.fraction(196418,
|
|
|
|
121393))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_11_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-12).equals(fractions.fraction(514229,
|
|
|
|
317811))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_phi_12_digits() {
|
|
|
|
assert fractions.approximate_with_eps(math.phi, 5.0e-13).equals(fractions.fraction(2178309,
|
|
|
|
1346269))
|
2020-06-04 21:26:18 +03:00
|
|
|
}
|