diff options
author | Peter Bex <peter@more-magic.net> | 2025-08-05 10:37:58 +0200 |
---|---|---|
committer | Peter Bex <peter@more-magic.net> | 2025-08-05 10:37:58 +0200 |
commit | 39f3ea56211d4b6904290dd2f257715c901c25bf (patch) | |
tree | 305f907657223817abf2d6576d5005f38057ec58 | |
parent | f2c8f8287fbc975eee1413f39709af8b43d358c2 (diff) | |
download | slsets-39f3ea56211d4b6904290dd2f257715c901c25bf.tar.gz |
Add benchmarks for Ruby, Python and Clojure
Ruby is about the same speed as slets. Clojure (babashka) and Python
are goddamn fast. Python is 10 times as fast. Clojure is twice as
slow as Python but that still outperforms Ruby and slsets.
-rw-r--r-- | benchmarks/benchmark.clj | 11 | ||||
-rw-r--r-- | benchmarks/benchmark.py | 10 | ||||
-rw-r--r-- | benchmarks/benchmark.rb | 8 |
3 files changed, 29 insertions, 0 deletions
diff --git a/benchmarks/benchmark.clj b/benchmarks/benchmark.clj new file mode 100644 index 0000000..96ca968 --- /dev/null +++ b/benchmarks/benchmark.clj @@ -0,0 +1,11 @@ +;; Run as e.g. "bb benchmark.clj 1000" +(ns benchmark + (:require [clojure.set :as set])) + +(def size (Integer/parseInt (first *command-line-args*))) + +(def set1 (set (map (fn [i] (keyword (str "x" i))) (range size)))) +(def set2 (set (map (fn [i] (keyword (str "y" i))) (range size)))) + +(doseq [x (range 10000)] + (set/difference set1 set2)) diff --git a/benchmarks/benchmark.py b/benchmarks/benchmark.py new file mode 100644 index 0000000..eae0e7c --- /dev/null +++ b/benchmarks/benchmark.py @@ -0,0 +1,10 @@ +import sys + +size = int(sys.argv[1]) + +myset1 = {f"x{i*1000}" for i in range(0, size)} +myset2 = {f"x{i*1000+1}" for i in range(0, size)} + +res = None +for i in range(0, 10000): + res = myset1 - myset2 diff --git a/benchmarks/benchmark.rb b/benchmarks/benchmark.rb new file mode 100644 index 0000000..275b7e2 --- /dev/null +++ b/benchmarks/benchmark.rb @@ -0,0 +1,8 @@ +size = ARGV[0].to_i # NOTE: ARGV[0] is _not_ the program/script name.... + +myset1 = Set.new((0..size).map {|i| "x#{i*1000}"} ) +myset2 = Set.new((0..size).map {|i| "x#{i*1000+1}"} ) + +(0..10000).each do + res = myset1 - myset2 +end |