| <!DOCTYPE html> |
| <html> |
| <!-- |
| Copyright 2009 The Closure Library Authors. All Rights Reserved. |
| |
| Use of this source code is governed by the Apache License, Version 2.0. |
| See the COPYING file for details. |
| --> |
| <!-- |
| --> |
| <head> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <title>Closure Performance Tests - goog.ui.Set vs goog.ui.StringSet</title> |
| <link rel="stylesheet" type="text/css" href="../testing/performancetable.css"/> |
| <script src="../base.js"></script> |
| <script> |
| goog.require('goog.functions'); |
| goog.require('goog.string'); |
| goog.require('goog.structs.Set'); |
| goog.require('goog.structs.StringSet'); |
| goog.require('goog.testing.PerformanceTable'); |
| goog.require('goog.testing.PropertyReplacer'); |
| goog.require('goog.testing.jsunit'); |
| </script> |
| </head> |
| <body> |
| <h1>goog.ui.Set and goog.ui.StringSet Performance Tests</h1> |
| <p> |
| <strong>User-agent:</strong> |
| <script>document.write(navigator.userAgent);</script> |
| </p> |
| <div id="perfTable"></div> |
| <hr> |
| |
| <script> |
| var table = new goog.testing.PerformanceTable( |
| goog.dom.getElement('perfTable')); |
| |
| // Number of operations to measure in each table line. |
| var OPS_COUNT = 100000; |
| |
| var stubs = new goog.testing.PropertyReplacer(); |
| |
| function tearDown() { |
| stubs.reset(); |
| } |
| |
| function testCreateSetFromArrayWithoutRepetition() { |
| var values = [] |
| for (var i = 0; i < OPS_COUNT; i++) { |
| values.push(i); |
| } |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(values); |
| }, 'Create string set from number array without repetition'); |
| |
| values = [] |
| for (var i = 0; i < OPS_COUNT; i++) { |
| values.push(String(i)); |
| } |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(values); |
| }, 'Create string set from string array without repetition'); |
| } |
| |
| function testCreateSetWithoutRepetition() { |
| table.run(function() { |
| var s = new goog.structs.Set(); |
| for (var i = 0; i < OPS_COUNT; i++) { |
| s.add(i); |
| } |
| }, 'Add elements to set without repetition'); |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(); |
| for (var i = 0; i < OPS_COUNT; i++) { |
| s.add(i); |
| } |
| }, 'Add elements to string set without repetition'); |
| |
| stubs.replace(goog.structs.StringSet, 'encode_', goog.functions.identity); |
| stubs.replace(goog.structs.StringSet, 'decode_', goog.functions.identity); |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(); |
| for (var i = 0; i < OPS_COUNT; i++) { |
| s.add(i); |
| } |
| }, 'Add elements to string set without repetition and escaping'); |
| } |
| |
| function testCreateSetWithRepetition() { |
| table.run(function() { |
| var s = new goog.structs.Set(); |
| for (var n = 0; n < 10 ; n++) { |
| for (var i = 0; i < OPS_COUNT / 10; i++) { |
| s.add(i); |
| } |
| } |
| }, 'Add elements to set with repetition'); |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(); |
| for (var n = 0; n < 10; n++) { |
| for (var i = 0; i < OPS_COUNT / 10; i++) { |
| s.add(i); |
| } |
| } |
| }, 'Add elements to string set with repetition'); |
| } |
| |
| function testGetCount() { |
| var bigSet = new goog.structs.Set; |
| var bigStringSet = new goog.structs.StringSet; |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigSet.add(i); |
| bigStringSet.add(i); |
| } |
| |
| table.run(function() { |
| bigSet.getCount(); |
| }, 'Count the number of elements in a set'); |
| |
| table.run(function() { |
| bigStringSet.getCount(); |
| }, 'Count the number of elements in a string set'); |
| } |
| |
| function testGetValues() { |
| var bigSet = new goog.structs.Set; |
| var bigStringSet = new goog.structs.StringSet; |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigSet.add(i); |
| bigStringSet.add(i); |
| } |
| |
| table.run(function() { |
| bigSet.getValues(); |
| }, 'Convert a set to array'); |
| |
| table.run(function() { |
| bigStringSet.getValues(); |
| }, 'Convert a string set to array'); |
| } |
| |
| function testForEach() { |
| var bigSet = new goog.structs.Set; |
| var bigStringSet = new goog.structs.StringSet; |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigSet.add(i); |
| bigStringSet.add(i); |
| } |
| |
| table.run(function() { |
| goog.structs.forEach(bigSet, goog.nullFunction); |
| }, 'Iterate over set with forEach'); |
| |
| table.run(function() { |
| goog.structs.forEach(bigStringSet, goog.nullFunction); |
| }, 'Iterate over string set with forEach'); |
| } |
| |
| function testForEachWithLargeKeys() { |
| var bigSet = new goog.structs.Set; |
| var bigStringSet = new goog.structs.StringSet; |
| for (var i = 0; i < OPS_COUNT / 100; i++) { |
| bigSet.add(goog.string.repeat(String(i), 1000)); |
| bigStringSet.add(goog.string.repeat(String(i), 1000)); |
| } |
| |
| table.run(function() { |
| for (var i = 0; i < 100; i++) { |
| goog.structs.forEach(bigSet, goog.nullFunction); |
| } |
| }, 'Iterate over set of large strings with forEach'); |
| |
| table.run(function() { |
| for (var i = 0; i < 100; i++) { |
| goog.structs.forEach(bigStringSet, goog.nullFunction); |
| } |
| }, 'Iterate over string set of large strings with forEach'); |
| } |
| |
| function testAddRemove() { |
| table.run(function() { |
| var s = new goog.structs.Set(); |
| for (var i = 0; i < OPS_COUNT / 2; i++) { |
| s.add(i); |
| } |
| for (var i = 0; i < OPS_COUNT / 2; i++) { |
| s.remove(i); |
| } |
| }, 'Add then remove elements from set'); |
| |
| table.run(function() { |
| var s = new goog.structs.StringSet(); |
| for (var i = 0; i < OPS_COUNT / 2; i++) { |
| s.add(i); |
| } |
| for (var i = 0; i < OPS_COUNT / 2; i++) { |
| s.remove(i); |
| } |
| }, 'Add then remove elements from string set'); |
| } |
| |
| function testContains() { |
| var bigSet = new goog.structs.Set; |
| var bigStringSet = new goog.structs.StringSet; |
| var arr = []; |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigSet.add(i); |
| bigStringSet.add(i); |
| arr.push(i); |
| } |
| |
| table.run(function() { |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigSet.contains(i); |
| } |
| }, 'Membership check for each element of set'); |
| |
| table.run(function() { |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigStringSet.contains(i); |
| } |
| }, 'Membership check for each element of string set with contains'); |
| |
| table.run(function() { |
| bigStringSet.containsArray(arr); |
| }, 'Membership check for each element of string set with containsArray'); |
| |
| stubs.replace(goog.structs.StringSet, 'encode_', goog.functions.identity); |
| stubs.replace(goog.structs.StringSet, 'decode_', goog.functions.identity); |
| |
| table.run(function() { |
| for (var i = 0; i < OPS_COUNT; i++) { |
| bigStringSet.contains(i); |
| } |
| }, 'Membership check for each element of string set without escaping'); |
| } |
| |
| function testEquals() { |
| table.run(function() { |
| var s1 = new goog.structs.Set(); |
| var s2 = new goog.structs.Set(); |
| for (var i = 0; i < OPS_COUNT / 4; i++) { |
| s1.add(i); |
| s2.add(i); |
| } |
| s1.equals(s2); |
| }, 'Create then compare two sets'); |
| |
| table.run(function() { |
| var s1 = new goog.structs.StringSet(); |
| var s2 = new goog.structs.StringSet(); |
| for (var i = 0; i < OPS_COUNT / 4; i++) { |
| s1.add(i); |
| s2.add(i); |
| } |
| s1.equals(s2); |
| }, 'Create then compare two string sets'); |
| } |
| </script> |
| </body> |
| </html> |