فهرست منبع

add some benchmarks for data structures

Simon Krajewski 8 سال پیش
والد
کامیت
e79b6951d1
2فایلهای تغییر یافته به همراه146 افزوده شده و 0 حذف شده
  1. 143 0
      tests/benchs/ds/src/Main.hx
  2. 3 0
      tests/benchs/ds/tests.hxml

+ 143 - 0
tests/benchs/ds/src/Main.hx

@@ -0,0 +1,143 @@
+import haxe.ds.Vector;
+import thx.benchmark.speed.Suite;
+
+class Main {
+	static function main() {
+		measureCreate();
+		measureRead();
+		measureWrite();
+		measureReadWrite();
+		measureIterate();
+		measureMap();
+		measureJoin();
+		measureCopy();
+	}
+
+	static function measureCreate() {
+		var suite = new Suite();
+		suite.add("Vector create", () -> @:measure new Vector(0));
+		suite.add("Array create", () -> @:measure new Array());
+		suite.add("StringMap create", () -> @:measure new haxe.ds.StringMap());
+		suite.add("IntMap create", () -> @:measure new haxe.ds.IntMap());
+		suite.add("ObjectMap create", () -> @:measure new haxe.ds.ObjectMap());
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	@:analyzer(ignore)
+	static function measureRead() {
+		var suite = new Suite();
+		var a = [1];
+		var v = Vector.fromArrayCopy(a);
+		var sm = new Map();
+		var im = new Map();
+		var om = new Map();
+		var key = { foo: 1 };
+		suite.add("Vector read", () -> @:measure v[0]);
+		suite.add("Array read", () -> @:measure a[0]);
+		suite.add("StringMap read", () -> @:measure sm["foo"]);
+		suite.add("IntMap read", () -> @:measure im[1]);
+		suite.add("ObjectMap read", () -> @:measure om[key]);
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureWrite() {
+		var suite = new Suite();
+		var a = [1];
+		var v = Vector.fromArrayCopy(a);
+		var sm = new Map();
+		var im = new Map();
+		var om = new Map();
+		var key = { foo: 1 };
+		suite.add("Vector write", () -> @:measure v[0] = 1);
+		suite.add("Array write", () -> @:measure a[0] = 1);
+		suite.add("StringMap write", () -> @:measure sm["foo"] = 1);
+		suite.add("IntMap write", () -> @:measure im[1] = 1);
+		suite.add("ObjectMap write", () -> @:measure om[key] = 1);
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureReadWrite() {
+		var suite = new Suite();
+		var a = [1];
+		var v = Vector.fromArrayCopy(a);
+		var sm = new Map();
+		var im = new Map();
+		var om = new Map();
+		var key = { foo: 1 };
+		suite.add("Vector read-write", () -> @:measure v[0] += 1);
+		suite.add("Array read-write", () -> @:measure a[0] += 1);
+		suite.add("StringMap read-write", () -> @:measure sm["foo"] += 1);
+		suite.add("IntMap read-write", () -> @:measure im[1] += 1);
+		suite.add("ObjectMap read-write", () -> @:measure om[key] += 1);
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureIterate() {
+		var suite = new Suite();
+		var a = [];
+		for (i in 0...10000) a[i] = i;
+		var v = Vector.fromArrayCopy(a);
+		var sm = new Map();
+		var im = new Map();
+		var om = new Map();
+		var key = { foo: 1 };
+		suite.add("Vector iterate + write", () -> @:measure for (i in v) { v[i] = i; });
+		suite.add("Array iterate + write", () -> @:measure for (i in a) { a[i] = i; });
+		suite.add("StringMap iterate + write", () -> @:measure for (i in a) { sm["foo"] = i; });
+		suite.add("IntMap iterate + write", () -> @:measure for (i in a) { im[1] = i; });
+		suite.add("ObjectMap iterate + write", () -> @:measure for (i in a) { om[key] = i; });
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureMap() {
+		var suite = new Suite();
+		var a = [];
+		for (i in 0...10000) a[i] = i;
+		var v = Vector.fromArrayCopy(a);
+		function f(x) return x;
+		suite.add("Vector map", () -> @:measure v.map(f));
+		suite.add("Array map", () -> @:measure a.map(f));
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureJoin() {
+		var suite = new Suite();
+		var a = [];
+		for (i in 0...10000) a[i] = i;
+		var v = Vector.fromArrayCopy(a);
+		function f(x) return x;
+		suite.add("Vector join", () -> @:measure v.join(""));
+		suite.add("Array join", () -> @:measure a.join(""));
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+
+	static function measureCopy() {
+		var suite = new Suite();
+		var a = [];
+		var sm = new Map();
+		var im = new Map();
+		var om = new Map();
+		for (i in 0...10000) {
+			sm["" + i] = i;
+			im[i] = i;
+			om[{key: i}] = i;
+			a[i] = i;
+		}
+		var v = Vector.fromArrayCopy(a);
+		function f(x) return x;
+		suite.add("Vector copy", () -> @:measure v.copy());
+		suite.add("Array copy", () -> @:measure a.copy());
+		suite.add("StringMap copy", () -> @:measure sm.copy());
+		suite.add("IntMap copy", () -> @:measure im.copy());
+		suite.add("ObjectMap copy", () -> @:measure om.copy());
+		var stats = suite.run();
+		trace(stats.toString());
+	}
+}

+ 3 - 0
tests/benchs/ds/tests.hxml

@@ -0,0 +1,3 @@
+-cp src
+-main Main
+-lib thx.benchmark