v/vlib/math/fractions/fraction_test.v

154 lines
3.7 KiB
V
Raw Normal View History

2019-07-15 21:16:41 +02:00
import math.fractions as fractions
// Results are verified using https://www.calculatorsoup.com/calculators/math/fractions.php
fn test_fraction_creation() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
assert f1.f64() == 0.5
assert f1.str().eq('4/8')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(10,5)
assert f1.f64() == 2.0
assert f1.str().eq('10/5')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
assert f1.f64() == 3.0
assert f1.str().eq('9/3')
}
fn test_fraction_add() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
mut f2 := fractions.fraction(5,10)
mut sum := f1 + f2
assert sum.f64() == 1.0
assert sum.str().eq('80/80')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,5)
f2 = fractions.fraction(8,8)
sum = f1 + f2
assert sum.f64() == 2.0
assert sum.str().eq('80/40')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
f2 = fractions.fraction(1,3)
sum = f1 + f2
2019-08-20 10:18:12 +02:00
$if debug {
println(sum.f64())
}
assert sum.str().eq('10/3')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(3,7)
f2 = fractions.fraction(1,4)
sum = f1 + f2
2019-08-20 10:18:12 +02:00
$if debug {
println(sum.f64())
}
assert sum.str().eq('19/28')
}
fn test_fraction_subtract() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
mut f2 := fractions.fraction(5,10)
mut diff := f2 - f1
assert diff.f64() == 0
assert diff.str().eq('0/80')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,5)
f2 = fractions.fraction(8,8)
diff = f2 - f1
assert diff.f64() == 0
assert diff.str().eq('0/40')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
f2 = fractions.fraction(1,3)
diff = f1 - f2
2019-08-20 10:18:12 +02:00
$if debug {
println(diff.f64())
}
assert diff.str().eq('8/3')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(3,7)
f2 = fractions.fraction(1,4)
diff = f1 - f2
2019-08-20 10:18:12 +02:00
$if debug {
println(diff.f64())
}
assert diff.str().eq('5/28')
}
fn test_fraction_multiply() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
mut f2 := fractions.fraction(5,10)
mut product := f1.multiply(f2)
assert product.f64() == 0.25
assert product.str().eq('20/80')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,5)
f2 = fractions.fraction(8,8)
product = f1.multiply(f2)
assert product.f64() == 1.0
assert product.str().eq('40/40')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
f2 = fractions.fraction(1,3)
product = f1.multiply(f2)
assert product.f64() == 1.0
assert product.str().eq('9/9')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(3,7)
f2 = fractions.fraction(1,4)
product = f1.multiply(f2)
2019-08-20 10:18:12 +02:00
$if debug {
println(product.f64())
}
assert product.str().eq('3/28')
}
fn test_fraction_divide() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
mut f2 := fractions.fraction(5,10)
mut re := f1.divide(f2)
assert re.f64() == 1.0
assert re.str().eq('40/40')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,5)
f2 = fractions.fraction(8,8)
re = f1.divide(f2)
assert re.f64() == 1.0
assert re.str().eq('40/40')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
f2 = fractions.fraction(1,3)
re = f1.divide(f2)
assert re.f64() == 9.0
assert re.str().eq('27/3')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(3,7)
f2 = fractions.fraction(1,4)
re = f1.divide(f2)
2019-08-20 10:18:12 +02:00
$if debug {
println(re.f64())
}
assert re.str().eq('12/7')
}
fn test_fraction_reciprocal() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
assert f1.reciprocal().str().eq('8/4')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,10)
assert f1.reciprocal().str().eq('10/5')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(5,5)
assert f1.reciprocal().str().eq('5/5')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(8,8)
assert f1.reciprocal().str().eq('8/8')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(9,3)
assert f1.reciprocal().str().eq('3/9')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(1,3)
assert f1.reciprocal().str().eq('3/1')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(3,7)
assert f1.reciprocal().str().eq('7/3')
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(1,4)
assert f1.reciprocal().str().eq('4/1')
}
fn test_fraction_equals() {
2019-07-15 21:16:41 +02:00
mut f1 := fractions.fraction(4,8)
mut f2 := fractions.fraction(5,10)
assert f1.equals(f2)
2019-07-15 21:16:41 +02:00
f1 = fractions.fraction(1,2)
f2 = fractions.fraction(3,4)
assert !f1.equals(f2)
}
fn test_gcd_and_reduce(){
f := fractions.fraction(3, 9)
assert f.gcd() == 3
assert f.reduce().equals(fractions.fraction(1, 3))
2019-07-16 17:59:07 +02:00
}