summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Piechotka <uzytkownik2@gmail.com>2014-08-17 01:45:01 +0200
committerMaciej Piechotka <uzytkownik2@gmail.com>2014-08-17 01:45:40 +0200
commit4e9a18fb2db0e275c00a80970d05f398875f3ba2 (patch)
tree089ffcbde455d6ef1c06fee039d5e0a3697c57f1
parent4098723e7be2af32e97d87a1734ca22d0caeb3ec (diff)
downloadlibgee-4e9a18fb2db0e275c00a80970d05f398875f3ba2.tar.gz
Add benchmark suite for sets
-rw-r--r--benchmark/collections.vala87
1 files changed, 87 insertions, 0 deletions
diff --git a/benchmark/collections.vala b/benchmark/collections.vala
index 401bf7f..2e45289 100644
--- a/benchmark/collections.vala
+++ b/benchmark/collections.vala
@@ -143,6 +143,92 @@ internal void run_list_uint_tests(FileStream output, bool verbose, size_t size,
}, size, tries);
}
+internal void run_set_uint_tests(FileStream output, bool verbose, size_t size, size_t tries) {
+ CollectionTest<uint>[] cols = new CollectionTest<uint>[2];
+ cols[0] = CollectionTest<uint>("HashSet", () => {return new Gee.HashSet<uint>();});
+ cols[1] = CollectionTest<uint>("TreeSet", () => {return new Gee.TreeSet<uint>();});
+ test<uint>(output, verbose, "Sequential uint add", cols, (col) => {}, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Reverse uint add", cols, (col) => {}, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)(size - i));
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Layered uint add", cols, (col) => {}, (col) => {
+ for (size_t i = 2; i < size; i *= 2) {
+ for (size_t j = size/i; j < size; j += 2*(size/i)) {
+ col.add((uint)j);
+ }
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Sequential uint remove", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.remove((uint)i);
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Reverse uint remove", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.remove((uint)(size - i));
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Layered uint remove", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ for (size_t i = size; i >= 2; i /= 2) {
+ for (size_t j = size/i; j < size; j += (2*size/i)) {
+ col.remove((uint)j);
+ }
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Lookup", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.contains((uint)i);
+ }
+ }, size, tries);
+ test<uint>(output, verbose, "Iterator", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ var iter = col.iterator();
+ while (iter.next ()) {}
+ }, size, tries);
+ test<uint>(output, verbose, "Foreach", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ col.foreach ((val) => {return true;});
+ }, size, tries);
+ test<uint>(output, verbose, "Iterator remove", cols, (col) => {
+ for (size_t i = 0; i < size; i++) {
+ col.add((uint)i);
+ }
+ }, (col) => {
+ var iter = col.iterator();
+ while (iter.next ()) {
+ iter.remove ();
+ }
+ }, size, tries);
+}
+
internal uint tries = 100;
internal uint[]? sizes;
[CCode (array_length = false, array_null_terminated = true)]
@@ -163,6 +249,7 @@ internal const GLib.OptionEntry[] options = {
int main(string[] args) {
var all_tests = new Gee.HashMap<unowned string, RunTestWrap>();
all_tests["lists"] = new RunTestWrap(run_list_uint_tests);
+ all_tests["sets"] = new RunTestWrap(run_set_uint_tests);
sizes = new uint[]{32, 64, 128, 256, 512, 1024, 2048};
{
var tmp = all_tests.keys.to_array ();