diff options
author | Maciej Piechotka <uzytkownik2@gmail.com> | 2014-08-17 01:45:01 +0200 |
---|---|---|
committer | Maciej Piechotka <uzytkownik2@gmail.com> | 2014-08-17 01:45:40 +0200 |
commit | 4e9a18fb2db0e275c00a80970d05f398875f3ba2 (patch) | |
tree | 089ffcbde455d6ef1c06fee039d5e0a3697c57f1 | |
parent | 4098723e7be2af32e97d87a1734ca22d0caeb3ec (diff) | |
download | libgee-4e9a18fb2db0e275c00a80970d05f398875f3ba2.tar.gz |
Add benchmark suite for sets
-rw-r--r-- | benchmark/collections.vala | 87 |
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 (); |