From 421c6c3c93c4f68c808aaabc6b2d8fac06674321 Mon Sep 17 00:00:00 2001 From: nasr Date: Thu, 20 Nov 2025 18:45:53 +0100 Subject: [PATCH] feature[benchmark]: time measurement benchmark not a good way of testing things, but it's a way and the first way --- src/main/scala/com/nsrddyn/Main.scala | 25 +++++++++---------- .../scala/com/nsrddyn/cpu/ALU/Prime.scala | 17 ++++++++----- .../scala/com/nsrddyn/tools/Benchmark.scala | 14 +++++++++++ .../scala/com/nsrddyn/tools/Measurable.scala | 5 ---- 4 files changed, 37 insertions(+), 24 deletions(-) create mode 100644 src/main/scala/com/nsrddyn/tools/Benchmark.scala delete mode 100644 src/main/scala/com/nsrddyn/tools/Measurable.scala diff --git a/src/main/scala/com/nsrddyn/Main.scala b/src/main/scala/com/nsrddyn/Main.scala index a27597b..aedad3c 100644 --- a/src/main/scala/com/nsrddyn/Main.scala +++ b/src/main/scala/com/nsrddyn/Main.scala @@ -4,24 +4,23 @@ object Torque { import java.time.Instant import com.nsrddyn.alu.* + import com.nsrddyn.tools.Benchmark @main def main(args: String*): Unit = - // ANSI ESCAPE CODE: clear screen - println("\u001b[2J\u001b[H") - println("--- TORQUE STRESS TESTING UTILITY ---") + val pr = new Prime() + val br = new Benchmark() - val now: Instant = Instant.now() - println(now) + // ANSI ESCAPE CODE: clear screen + println("\u001b[2J\u001b[H") + println("--- TORQUE STRESS TESTING UTILITY ---") - val pr = new Prime() + // val value = 2147483647 + val value = 200000 - /* - val intMax = 2147483647 - pr.run(intMax) - */ - - val intMax = 2147483647 - println(pr.measure()) + val time = br.measure(pr.run(value)) + println(time) } + + diff --git a/src/main/scala/com/nsrddyn/cpu/ALU/Prime.scala b/src/main/scala/com/nsrddyn/cpu/ALU/Prime.scala index 47c83f1..effedef 100644 --- a/src/main/scala/com/nsrddyn/cpu/ALU/Prime.scala +++ b/src/main/scala/com/nsrddyn/cpu/ALU/Prime.scala @@ -1,9 +1,9 @@ package com.nsrddyn.alu -import com.nsrddyn.tools.Measurable +import com.nsrddyn.tools.Benchmark -class Prime() extends Measurable: +class Prime() extends Benchmark: /* * Calculate all primes up to limit @@ -24,17 +24,22 @@ class Prime() extends Measurable: * We want the function to be less optimized so that the CPU has more work == more stress */ + def isPrime(n: Int): Boolean = { + val start = measure() if n <= 1 then false else !(2 to math.sqrt(n).toInt).exists(i => n % i == 0) } def run(n: Int): Unit = for i <- 0 to n do isPrime(i) - def measure(): Long = { - - // TODO: implement measure methode to measure the time that it takes to find that prime number + + // TODO: implement measure methode to measure the time that it takes to find that prime number + def measure(): Long ={ + + val start = System.nanoTime() System.nanoTime() - + val end = System.nanoTime() + start - end } diff --git a/src/main/scala/com/nsrddyn/tools/Benchmark.scala b/src/main/scala/com/nsrddyn/tools/Benchmark.scala new file mode 100644 index 0000000..5d7906a --- /dev/null +++ b/src/main/scala/com/nsrddyn/tools/Benchmark.scala @@ -0,0 +1,14 @@ +package com.nsrddyn.tools + +class Benchmark { + + // add a reference to a function + def measure(work: => Unit): Long = { + + val start = System.nanoTime() + work + val end = System.nanoTime() + end - start + } + +} diff --git a/src/main/scala/com/nsrddyn/tools/Measurable.scala b/src/main/scala/com/nsrddyn/tools/Measurable.scala deleted file mode 100644 index 3d0234a..0000000 --- a/src/main/scala/com/nsrddyn/tools/Measurable.scala +++ /dev/null @@ -1,5 +0,0 @@ -package com.nsrddyn.tools - -trait Measurable { - def measure(): Long -}