Skip to content

Commit 4153495

Browse files
committed
add gcd
1 parent 6a017ad commit 4153495

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/main/scala/org/codecraftlabs/training/Rational.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package org.codecraftlabs.training
22

3+
import scala.annotation.tailrec
4+
35
class Rational (n: Int, d: Int) {
46
require(d != 0)
57

6-
val numer: Int = n
7-
val denom: Int = d
8+
private val g = gcd (n.abs, d.abs)
9+
val numer: Int = n / g
10+
val denom: Int = d / g
811

912
def this (n: Int) = this(n, 1)
1013

@@ -17,4 +20,9 @@ class Rational (n: Int, d: Int) {
1720
def lessThan(that: Rational): Boolean = {
1821
this.numer * that.denom < that.numer * this.denom
1922
}
23+
24+
@tailrec
25+
private def gcd(a: Int, b: Int): Int = {
26+
if (b == 0) a else gcd (b, a % b)
27+
}
2028
}

src/test/scala/org/codecraftlabs/training/RationalSpec.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,11 @@ class RationalSpec extends AnyFlatSpec with Matchers {
2626
rational.numer shouldEqual 2
2727
rational.denom shouldEqual 1
2828
}
29+
30+
"Initial value 3/6" should "be converted to 1/2" in {
31+
val rational = new Rational(3, 6)
32+
33+
rational.numer shouldEqual 1
34+
rational.denom shouldEqual 2
35+
}
2936
}

0 commit comments

Comments
 (0)