From c899a43d94e98ec7d6facfecdb671fa2f14f6ae2 Mon Sep 17 00:00:00 2001 From: mgstabrani Date: Fri, 22 May 2026 17:37:53 +0700 Subject: [PATCH] feat: introduce function to find gcd of 2 numbers --- DIRECTORY.md | 1 + math/gcd.jule | 18 ++++++++++++++++++ math/gcd_test.jule | 14 ++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 math/gcd.jule create mode 100644 math/gcd_test.jule diff --git a/DIRECTORY.md b/DIRECTORY.md index 48983d6..9a2d177 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -4,6 +4,7 @@ - [Abs](math/abs.jule) - [Fact](math/fact.jule) - [Fib](math/fib.jule) +- [Gcd](math/gcd.jule) - [Max](math/max.jule) - [Median](math/median.jule) - [Min](math/min.jule) diff --git a/math/gcd.jule b/math/gcd.jule new file mode 100644 index 0000000..8e41a26 --- /dev/null +++ b/math/gcd.jule @@ -0,0 +1,18 @@ +fn Gcd(a: int, b: int): int { + let mut x = a + let mut y = b + + if x < 0 { + x = -x + } + if y < 0 { + y = -y + } + + for y != 0 { + let t = x % y + x = y + y = t + } + return x +} \ No newline at end of file diff --git a/math/gcd_test.jule b/math/gcd_test.jule new file mode 100644 index 0000000..bc1fe58 --- /dev/null +++ b/math/gcd_test.jule @@ -0,0 +1,14 @@ +#build test + +use "std/testing" + +#test +fn testGcd(t: &testing::T) { + t.Assert(Gcd(54, 24) == 6, "gcd(54, 24) should be 6") + t.Assert(Gcd(48, 18) == 6, "gcd(48, 18) should be 6") + t.Assert(Gcd(17, 13) == 1, "gcd(17, 13) should be 1") + t.Assert(Gcd(0, 0) == 0, "gcd(0, 0) should be 0") + t.Assert(Gcd(0, 5) == 5, "gcd(0, 5) should be 5") + t.Assert(Gcd(-12, 18) == 6, "gcd(-12, 18) should be 6") + t.Assert(Gcd(12, -18) == 6, "gcd(12, -18) should be 6") +} \ No newline at end of file