diff options
author | def <dennis@felsin9.de> | 2015-01-13 01:33:26 +0100 |
---|---|---|
committer | def <dennis@felsin9.de> | 2015-02-16 20:44:24 +0100 |
commit | 444beab5dd65aee8590c46ad4d3d2389d5791727 (patch) | |
tree | c7255e2d186dc229ed3a3c4a38f7db77bbf3136c | |
parent | a85b6fd3fe29ab51f3acd89bda9a034604069a82 (diff) | |
download | Nim-444beab5dd65aee8590c46ad4d3d2389d5791727.tar.gz |
Fix division and add tests
-rw-r--r-- | lib/pure/rationals.nim | 57 |
1 files changed, 42 insertions, 15 deletions
diff --git a/lib/pure/rationals.nim b/lib/pure/rationals.nim index 659f9c918..eae0bd55b 100644 --- a/lib/pure/rationals.nim +++ b/lib/pure/rationals.nim @@ -157,17 +157,17 @@ proc `/`*(x: Rational, y: int): Rational = proc `/`*(x: int, y: Rational): Rational = ## Divide int `x` by Rational `y`. - result.num = y.num - result.den = x * y.den + result.num = x * y.den + result.den = y.num reduce(result) -proc `/=`*(x: var Rational, y: Rational): Rational = +proc `/=`*(x: var Rational, y: Rational) = ## Divide rationals `x` by `y` in place. x.num *= y.den x.den *= y.num reduce(x) -proc `/=`*(x: var Rational, y: int): Rational = +proc `/=`*(x: var Rational, y: int) = ## Divide rational `x` by int `y` in place. x.den *= y reduce(x) @@ -190,18 +190,23 @@ proc abs*(x: Rational): Rational = result.den = abs x.den when isMainModule: - var z = (0, 1) - var o = (1, 1) - var a = (1, 2) - var b = (-1, -2) - var m1 = (-1, 1) - var tt = (10, 2) + var + z = (0, 1) + o = (1, 1) + a = (1, 2) + b = (-1, -2) + m1 = (-1, 1) + tt = (10, 2) assert( a == a ) assert( (a-a) == z ) assert( (a+b) == o ) assert( (a/b) == o ) assert( (a*b) == (1, 4) ) + assert( (3/a) == (6,1) ) + assert( (a/3) == (1,6) ) + assert( a*b == (1,4) ) + assert( tt*z == z ) assert( 10*a == tt ) assert( a*10 == tt ) assert( tt/10 == a ) @@ -213,16 +218,38 @@ when isMainModule: assert( z < o ) assert( z <= o ) assert( z == z ) - assert( cmp(z, o) < 0) - assert( cmp(o, z) > 0) + assert( cmp(z, o) < 0 ) + assert( cmp(o, z) > 0 ) assert( o == o ) assert( o >= o ) assert( not(o > o) ) - assert( cmp(o, o) == 0) - assert( cmp(z, z) == 0) + assert( cmp(o, o) == 0 ) + assert( cmp(z, z) == 0 ) assert( a == b ) assert( a >= b ) assert( not(b > a) ) - assert( cmp(a, b) == 0) + assert( cmp(a, b) == 0 ) + + var x = (1,3) + + x *= (5,1) + assert( x == (5,3) ) + x += (2,9) + assert( x == (17,9) ) + x -= (9,18) + assert( x == (25,18) ) + x /= (1,2) + assert( x == (50,18) ) + + var y = (1,3) + + y *= 4 + assert( y == (4,3) ) + y += 5 + assert( y == (19,3) ) + y -= 2 + assert( y == (13,3) ) + y /= 9 + assert( y == (13,27) ) |