angular-cn/modules/benchmarks/src/compiler/selector_benchmark.ts
Jason Choi 3fcd6fd93f chore(benchpress): make benchpress compile
Also adds compiling benchpress to the build scripts to verify that.
2016-08-04 10:08:37 -07:00

83 lines
2.2 KiB
TypeScript

import {SelectorMatcher} from '@angular/compiler/src/selector';
import {CssSelector} from '@angular/compiler/src/selector';
import {StringWrapper, Math} from '@angular/facade/lang';
import {getIntParameter, bindAction} from '@angular/testing/src/benchmark_util';
import {BrowserDomAdapter} from '@angular/platform-browser/src/browser/browser_adapter';
export function main() {
BrowserDomAdapter.makeCurrent();
var count = getIntParameter('selectors');
var fixedMatcher;
var fixedSelectorStrings = [];
var fixedSelectors = [];
for (var i = 0; i < count; i++) {
fixedSelectorStrings.push(randomSelector());
}
for (var i = 0; i < count; i++) {
fixedSelectors.push(CssSelector.parse(fixedSelectorStrings[i]));
}
fixedMatcher = new SelectorMatcher();
for (var i = 0; i < count; i++) {
fixedMatcher.addSelectables(fixedSelectors[i], i);
}
function parse() {
var result = [];
for (var i = 0; i < count; i++) {
result.push(CssSelector.parse(fixedSelectorStrings[i]));
}
return result;
}
function addSelectable() {
var matcher = new SelectorMatcher();
for (var i = 0; i < count; i++) {
matcher.addSelectables(fixedSelectors[i], i);
}
return matcher;
}
function match() {
var matchCount = 0;
for (var i = 0; i < count; i++) {
fixedMatcher.match(fixedSelectors[i][0], (selector, selected) => { matchCount += selected; });
}
return matchCount;
}
bindAction('#parse', parse);
bindAction('#addSelectable', addSelectable);
bindAction('#match', match);
}
function randomSelector() {
var res = randomStr(5);
for (var i = 0; i < 3; i++) {
res += '.' + randomStr(5);
}
for (var i = 0; i < 3; i++) {
res += '[' + randomStr(3) + '=' + randomStr(6) + ']';
}
return res;
}
function randomStr(len) {
var s = '';
while (s.length < len) {
s += randomChar();
}
return s;
}
function randomChar() {
var n = randomNum(62);
if (n < 10) return n.toString(); // 1-10
if (n < 36) return StringWrapper.fromCharCode(n + 55); // A-Z
return StringWrapper.fromCharCode(n + 61); // a-z
}
function randomNum(max) {
return Math.floor(Math.random() * max);
}