123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Copyright 2012 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- /**
- * @fileoverview JSON performance tests.
- */
- goog.provide('goog.jsonPerf');
- goog.require('goog.dom');
- goog.require('goog.json');
- goog.require('goog.math');
- goog.require('goog.string');
- goog.require('goog.testing.PerformanceTable');
- goog.require('goog.testing.PropertyReplacer');
- goog.require('goog.testing.jsunit');
- goog.setTestOnly('goog.jsonPerf');
- var table = new goog.testing.PerformanceTable(goog.dom.getElement('perfTable'));
- var stubs = new goog.testing.PropertyReplacer();
- function tearDown() {
- stubs.reset();
- }
- function testSerialize() {
- var obj = populateObject({}, 50, 4);
- table.run(function() {
- var s = JSON.stringify(obj);
- }, 'Stringify using JSON.stringify');
- table.run(function() {
- var s = goog.json.serialize(obj);
- }, 'Stringify using goog.json.serialize');
- }
- function testParse() {
- var obj = populateObject({}, 50, 4);
- var s = JSON.stringify(obj);
- table.run(function() { var o = JSON.parse(s); }, 'Parse using JSON.parse');
- table.run(function() {
- var o = goog.json.parse(s);
- }, 'Parse using goog.json.parse');
- table.run(function() {
- var o = goog.json.unsafeParse(s);
- }, 'Parse using goog.json.unsafeParse');
- }
- /**
- * @param {!Object} obj The object to add properties to.
- * @param {number} numProperties The number of properties to add.
- * @param {number} depth The depth at which to recursively add properties.
- * @return {!Object} The object given in obj (for convenience).
- */
- function populateObject(obj, numProperties, depth) {
- if (depth == 0) {
- return randomLiteral();
- }
- // Make an object with a mix of strings, numbers, arrays, objects, booleans
- // nulls as children.
- for (var i = 0; i < numProperties; i++) {
- var bucket = goog.math.randomInt(3);
- switch (bucket) {
- case 0:
- obj[i] = randomLiteral();
- break;
- case 1:
- obj[i] = populateObject({}, numProperties, depth - 1);
- break;
- case 2:
- obj[i] = populateObject([], numProperties, depth - 1);
- break;
- }
- }
- return obj;
- }
- function randomLiteral() {
- var bucket = goog.math.randomInt(3);
- switch (bucket) {
- case 0:
- return goog.string.getRandomString();
- case 1:
- return Math.random();
- case 2:
- return Math.random() >= .5;
- }
- return null;
- }
|