diff --git a/primes.cpp b/primes.cpp index 21510d4..8a44449 100644 --- a/primes.cpp +++ b/primes.cpp @@ -61,11 +61,18 @@ void get_primes7(int n, vector &res) { } int main() { - for (int i = 0; i < 30; i++) { + std::time_t startTime = std::time(NULL); + char *periodTimeStr = std::getenv("RUN_TIME"); + std::time_t periodTime = (std::time_t)(periodTimeStr ? atoi(periodTimeStr) : 3); + int iterations = 0; + while ((std::time(NULL) - startTime) < periodTime || iterations < 3) { vector res; get_primes7(10000000, res); printf("Found %d prime numbers.\n", (int)res.size()); + iterations++; } - + double time = (std::time(NULL) - startTime); + printf("C++: %d iterations in %.02f seconds = %.02f seconds per 30 iterations\n", + iterations, time, time/iterations*30); return 0; } diff --git a/primes.java b/primes.java index b6bc88c..3463731 100644 --- a/primes.java +++ b/primes.java @@ -44,13 +44,24 @@ class PrimeNumbersGenerator { class PrimeNumbersBenchmarkApp { public static void main(String[] args) { long startTime = System.currentTimeMillis(); - long periodTime = Long.parseLong(System.getenv("RUN_TIME"), 10) * 1000; + String periodTimeStr = System.getenv("RUN_TIME"); + if (periodTimeStr == null) + periodTimeStr = "5"; + long periodTime = Long.parseLong(periodTimeStr, 10) * 1000; ArrayList res; - while ((System.currentTimeMillis() - startTime) < periodTime) { + int iterations = 0; + while ((System.currentTimeMillis() - startTime) < periodTime || iterations < 3) { res = (new PrimeNumbersGenerator()).get_primes7(10000000); System.out.format("Found %d prime numbers.\n", res.size()); + iterations++; } + long time = (System.currentTimeMillis() - startTime); + double per30 = time / 1000.0 / iterations * 30; + System.out.println( + "Java: "+iterations+" iterations in "+(Math.round(time/10.0)/100.0)+ + " seconds = "+(Math.round(per30*100)/100.0)+" seconds per 30 iterations" + ); } } diff --git a/primes.js b/primes.js index 8894422..abdbcad 100644 --- a/primes.js +++ b/primes.js @@ -39,9 +39,13 @@ function get_primes7(n) { } var startTime = Date.now(); -var periodTime = parseInt(process.env.RUN_TIME, 10) * 1000 - -for (var i = 0; i < 30; i++) { +var periodTime = parseInt(process.env.RUN_TIME || '5', 10) * 1000; +var iterations = 0; +while ((Date.now() - startTime) < periodTime || iterations < 3) { var res = get_primes7(10000000); console.log("Found " + res.length + " prime numbers."); + iterations++; } +var time = Date.now() - startTime; +var per30 = time / 1000 / iterations * 30; +console.log(iterations + " iterations in "+(Math.round(time/10)/100)+" seconds = "+(Math.round(per30*100)/100)+" seconds per 30 iterations"); diff --git a/primes.lua b/primes.lua index 4e70ac3..d1bd520 100644 --- a/primes.lua +++ b/primes.lua @@ -36,9 +36,6 @@ function get_primes7(n) return res end -startTime = os.time(os.date("!*t")) -periodTime = os.getenv('RUN_TIME') - for i = 1, 30 do local res = get_primes7(10000000) print("Found " .. #res .. " prime numbers.") diff --git a/primes.php b/primes.php index 7b74bc3..2bc75e5 100644 --- a/primes.php +++ b/primes.php @@ -32,11 +32,19 @@ function get_primes7($n) { } $startTime = time(); -$periodTime = getenv('RUN_TIME'); +$periodTime = getenv('RUN_TIME') ?: 5; $res = array(); -for ($i = 0; $i < 30; $i++) { +$iterations = 0; +$start = microtime(true); +while ((microtime(true) - $start) < $periodTime || $iterations < 3) { $res = get_primes7(10000000); print "Found ".count($res)." prime numbers.\n"; + $iterations++; } +$time = microtime(true) - $start; +printf( + "PHP: %d iterations in %.02f seconds = %.02f seconds per 30 iterations\n", + $iterations, $time, $time/$iterations*30 +); diff --git a/primes.py b/primes.py index 8e669ba..a9aad38 100644 --- a/primes.py +++ b/primes.py @@ -1,6 +1,7 @@ import os import sys import time +import platform def get_primes7(n): """ @@ -32,6 +33,17 @@ def get_primes7(n): m = 2 * i + 3 return [2] + [x for x in s if x] -for i in range(0, 30): +start_time = time.time() +period_time = int(os.environ.get('RUN_TIME', '5')) +iterations = 0 + +while (time.time() - start_time) < period_time or iterations < 3: res = get_primes7(10000000) print("Found {} prime numbers.".format(len(res))) + iterations = iterations + 1 + +result_time = time.time() - start_time + +print("%s %d.%d.%d: %d iterations in %.02f sec = %.02f sec per 30 iterations" % ( + platform.python_implementation(), sys.version_info.major, sys.version_info.minor, sys.version_info.micro, + iterations, result_time, result_time/iterations*30)) diff --git a/primes.rs b/primes.rs index bc794ef..8555809 100644 --- a/primes.rs +++ b/primes.rs @@ -43,19 +43,25 @@ fn get_primes7(count: u32) -> Vec { } fn main() { -// let run_time_secs = match env::var("RUN_TIME") { -// Ok(v) => match v.parse::() { -// Ok(i) => i, -// Err(err) => panic!("RUN_TIME environment variable error: {}", err), -// }, -// Err(err) => panic!("RUN_TIME environment variable error: {}", err), -// }; + let run_time_secs = match env::var("RUN_TIME") { + Ok(v) => match v.parse::() { + Ok(i) => i, + Err(err) => panic!("RUN_TIME environment variable error: {}", err), + }, + Err(_err) => 5, + }; -// let run_time = Duration::new(run_time_secs as u64, 0); -// let start = Instant::now(); + let run_time = Duration::new(run_time_secs as u64, 0); + let start = Instant::now(); - for x in 0..29 { + let mut iterations = 3; + while start.elapsed() < run_time || iterations < 3 { let primes = get_primes7(PRIMES_COUNT); println!("Found {} prime numbers.", primes.len()); + iterations += 1; } + let dur = start.elapsed(); + let result_time = dur.as_secs() as f64 + (dur.subsec_millis() as f64) / 1000.0; + println!("Rust: {} iterations in {:.2} sec = {:.2} sec per 30 iterations", + iterations, result_time, result_time / (iterations as f64) * 30.0); }