123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- <!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>
|