diff --git a/resources/developer-mode.mjs b/resources/developer-mode.mjs index fdd254775..cddc64b0f 100644 --- a/resources/developer-mode.mjs +++ b/resources/developer-mode.mjs @@ -1,5 +1,6 @@ -import { params, LAYOUT_MODES } from "./shared/params.mjs"; +import { params, LAYOUT_MODES, defaultParams } from "./shared/params.mjs"; import { benchmarkConfigurator } from "./benchmark-configurator.mjs"; +import { handleComplexityChange } from "./shared/todomvc-utils.mjs"; const { suites, tags } = benchmarkConfigurator; @@ -24,6 +25,7 @@ export function createDeveloperModeContainer() { settings.append(createUIForWarmupSuite()); settings.append(createUIForWarmupBeforeSync()); settings.append(createUIForSyncStepDelay()); + settings.append(createUIForComplexity()); settings.append(createUIForAsyncSteps()); settings.append(createUIForLayoutMode()); @@ -68,7 +70,7 @@ function createCheckboxUI(labelValue, initialValue, paramsUpdateCallback) { checkbox.checked = !!initialValue; checkbox.onchange = () => { paramsUpdateCallback(checkbox.checked); - updateURL(); + handleParamsChange(); }; const label = document.createElement("label"); @@ -78,23 +80,48 @@ function createCheckboxUI(labelValue, initialValue, paramsUpdateCallback) { } function createUIForIterationCount() { - return createTimeRangeUI("Iterations: ", "iterationCount", "#", 1, 200); + return createLinearRangeUI("Iterations: ", "iterationCount", "#", 1, 200); } function createUIForWarmupBeforeSync() { - return createTimeRangeUI("Warmup time: ", "warmupBeforeSync"); + return createLinearRangeUI("Warmup time: ", "warmupBeforeSync"); } function createUIForSyncStepDelay() { - return createTimeRangeUI("Sync step delay: ", "waitBeforeSync"); + return createLinearRangeUI("Sync step delay: ", "waitBeforeSync"); } -function createTimeRangeUI(labelText, paramKey, unit = "ms", min = 0, max = 1000) { - const range = document.createElement("input"); - range.type = "range"; +function createUIForComplexity() { + return createExpRangeUI("Relative complexity: ", "complexity", "x", 0.01, 100, 0.01); +} + +function createLinearRangeUI(labelText, paramKey, unit = "ms", min = 0, max = 1000, step = 1) { + const linearMap = (value) => value; + const { range, label } = createTimeRangeUI(labelText, paramKey, unit, linearMap, 0); range.min = min; range.max = max; + range.step = step; range.value = params[paramKey]; + return label; +} + +function createExpRangeUI(labelText, paramKey, unit = "ms", min = 0, max = 1000, step = 1) { + const defaultValue = defaultParams[paramKey]; + const initialValue = params[paramKey]; + const b = defaultValue - 1; + const a = -Math.log(min - b); + const logMap = (value) => Math.round((Math.exp(value * a) + b) / step) * step; + const { range, label } = createTimeRangeUI(labelText, paramKey, unit, logMap, 2); + range.min = -1; + range.max = Math.log(max - b) / a; + range.step = 0.01; + range.value = Math.log(initialValue - b) / a; + return label; +} + +function createTimeRangeUI(labelText, paramKey, unit = "ms", map, decimals) { + const range = document.createElement("input"); + range.type = "range"; const rangeValueAndUnit = document.createElement("span"); rangeValueAndUnit.className = "range-label-data"; @@ -107,14 +134,14 @@ function createTimeRangeUI(labelText, paramKey, unit = "ms", min = 0, max = 1000 label.append(span(labelText), range, rangeValueAndUnit); range.oninput = () => { - rangeValue.textContent = range.value; + rangeValue.textContent = map(Number(range.value)).toFixed(decimals); }; range.onchange = () => { - params[paramKey] = parseInt(range.value); - updateURL(); + params[paramKey] = map(Number(range.value)); + handleParamsChange(); }; - return label; + return { range, label }; } function createUIForLayoutMode() { @@ -127,7 +154,7 @@ function createSelectUI(labelValue, initialValue, choices, paramsUpdateCallback) const select = document.createElement("select"); select.onchange = () => { paramsUpdateCallback(select.value); - updateURL(); + handleParamsChange(); }; choices.forEach((choice) => { @@ -162,7 +189,7 @@ function createUIForSuites() { checkbox.checked = suite.enabled; checkbox.onchange = () => { suite.enabled = checkbox.checked; - updateURL(); + handleParamsChange(); }; checkboxes.push(checkbox); @@ -198,7 +225,7 @@ function createSuitesGlobalSelectButtons(setSuiteEnabled) { for (let suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) setSuiteEnabled(suiteIndex, true); - updateURL(); + handleParamsChange(); }; buttons.appendChild(button); @@ -209,7 +236,7 @@ function createSuitesGlobalSelectButtons(setSuiteEnabled) { for (let suiteIndex = 0; suiteIndex < suites.length; suiteIndex++) setSuiteEnabled(suiteIndex, false); - updateURL(); + handleParamsChange(); }; buttons.appendChild(button); return buttons; @@ -245,7 +272,7 @@ function createSuitesTagsButton(setSuiteEnabled) { continue; setSuiteEnabled(suiteIndex, enabled); } - updateURL(); + handleParamsChange(); }; buttons.appendChild(button); } @@ -295,8 +322,9 @@ function updateParamsSuitesAndTags() { params.suites = selectedSuites.map((suite) => suite.name); } -function updateURL() { +function handleParamsChange() { updateParamsSuitesAndTags(); + handleComplexityChange(); const url = new URL(window.location.href); url.search = params.toSearchParams(); diff --git a/resources/shared/params.mjs b/resources/shared/params.mjs index d8830b0d6..4e9e6d68f 100644 --- a/resources/shared/params.mjs +++ b/resources/shared/params.mjs @@ -29,6 +29,10 @@ export class Params { // "generate": generate a random seed // : use the provided integer as a seed shuffleSeed = "off"; + // Param to tweak the relative complexity of all suites. + // The default is 1.0, and for suites supporting this param, the duration + // roughly scales with the complexity. + complexity = 1.0; // Choices: "getBoundingClientRect" or "getBoundingRectAndElementFromPoint" layoutMode = LAYOUT_MODES[0]; // Measure more workload prepare time. @@ -45,8 +49,17 @@ export class Params { } } - _parseInt(value, errorMessage) { + _parseNumber(value, errorMessage, minValue = 0) { const number = Number(value); + if (!Number.isFinite(number) && errorMessage) + throw new Error(`Invalid ${errorMessage} param: '${value}', expected Number.`); + if (number < minValue) + throw new Error(`Invalid ${errorMessage} param: '${value}', value must be >= ${minValue}.`); + return number; + } + + _parseInt(value, errorMessage, minValue = 0) { + const number = this._parseNumber(value, errorMessage, minValue); if (!Number.isInteger(number) && errorMessage) throw new Error(`Invalid ${errorMessage} param: '${value}', expected int.`); return parseInt(number); @@ -65,6 +78,7 @@ export class Params { this.warmupBeforeSync = this._parseIntParam(searchParams, "warmupBeforeSync", 0); this.measurementMethod = this._parseEnumParam(searchParams, "measurementMethod", ["raf"]); this.shuffleSeed = this._parseShuffleSeed(searchParams); + this.complexity = this._parserNumberParam(searchParams, "complexity", 0); this.layoutMode = this._parseEnumParam(searchParams, "layoutMode", LAYOUT_MODES); this.measurePrepare = this._parseBooleanParam(searchParams, "measurePrepare"); this.config = this._parseConfig(searchParams); @@ -83,13 +97,18 @@ export class Params { return true; } - _parseIntParam(searchParams, paramKey, minValue) { + _parserNumberParam(searchParams, paramKey, minValue) { if (!searchParams.has(paramKey)) return defaultParams[paramKey]; + const parsedValue = this._parseNumber(searchParams.get(paramKey), "waitBeforeSync", minValue); + searchParams.delete(paramKey); + return parsedValue; + } - const parsedValue = this._parseInt(searchParams.get(paramKey), "waitBeforeSync"); - if (parsedValue < minValue) - throw new Error(`Invalid ${paramKey} param: '${parsedValue}', value must be >= ${minValue}.`); + _parseIntParam(searchParams, paramKey, minValue) { + if (!searchParams.has(paramKey)) + return defaultParams[paramKey]; + const parsedValue = this._parseInt(searchParams.get(paramKey), "waitBeforeSync", minValue); searchParams.delete(paramKey); return parsedValue; } diff --git a/resources/shared/todomvc-utils.mjs b/resources/shared/todomvc-utils.mjs index dca451575..d10da163d 100644 --- a/resources/shared/todomvc-utils.mjs +++ b/resources/shared/todomvc-utils.mjs @@ -1 +1,12 @@ -export const numberOfItemsToAdd = 100; +import { params } from "./params.mjs"; + +export const defaultNumberOfItemsToAdd = 100; +export let numberOfItemsToAdd = defaultNumberOfItemsToAdd; + +export function getNumberOfItemsToAdd() { + return numberOfItemsToAdd; +} + +export function handleComplexityChange() { + numberOfItemsToAdd = Math.round(defaultNumberOfItemsToAdd * params.complexity); +} diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index 3de20b4dc..4b5305d45 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -1,6 +1,6 @@ import { BenchmarkTestStep } from "../resources/benchmark-runner.mjs"; import { getTodoText } from "../resources/shared/translations.mjs"; -import { numberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs"; +import { getNumberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs"; import { freezeSuites } from "../resources/suites-helper.mjs"; export const ExperimentalSuites = freezeSuites([ @@ -13,7 +13,8 @@ export const ExperimentalSuites = freezeSuites([ page.getLocalStorage().getItem("javascript-es5"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ja", i)); @@ -22,11 +23,13 @@ export const ExperimentalSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -41,7 +44,8 @@ export const ExperimentalSuites = freezeSuites([ await page.waitForElement("todo-app"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const input = page.querySelector(".new-todo-input", ["todo-app", "todo-topbar"]); for (let i = 0; i < numberOfItemsToAdd; i++) { input.setValue(getTodoText("emoji", i)); @@ -50,6 +54,7 @@ export const ExperimentalSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = 0; i < numberOfItemsToAdd; i++) { const item = items[i].querySelectorInShadowRoot(".toggle-todo-input"); @@ -57,6 +62,7 @@ export const ExperimentalSuites = freezeSuites([ } }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { const item = items[i].querySelectorInShadowRoot(".remove-todo-button"); @@ -83,7 +89,8 @@ export const ExperimentalSuites = freezeSuites([ (await page.waitForElement(".new-todo")).focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ja", i)); @@ -92,11 +99,13 @@ export const ExperimentalSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -112,7 +121,8 @@ export const ExperimentalSuites = freezeSuites([ (await page.waitForElement(".new-todo")).focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ja", i)); @@ -121,11 +131,13 @@ export const ExperimentalSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); diff --git a/suites/default-suites.mjs b/suites/default-suites.mjs index 0f3e78b75..54f7f63ce 100644 --- a/suites/default-suites.mjs +++ b/suites/default-suites.mjs @@ -1,6 +1,6 @@ import { BenchmarkTestStep } from "../resources/benchmark-runner.mjs"; import { getTodoText, defaultLanguage } from "../resources/shared/translations.mjs"; -import { numberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs"; +import { getNumberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs"; import { freezeSuites } from "../resources/suites-helper.mjs"; export const DefaultSuites = freezeSuites([ @@ -12,7 +12,8 @@ export const DefaultSuites = freezeSuites([ (await page.waitForElement(".new-todo")).focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ja", i)); @@ -21,11 +22,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -40,7 +43,8 @@ export const DefaultSuites = freezeSuites([ (await page.waitForElement(".new-todo")).focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ja", i)); @@ -49,11 +53,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -69,7 +75,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ru", i)); @@ -78,11 +85,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -98,7 +107,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText("ru", i)); @@ -107,11 +117,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -126,7 +138,8 @@ export const DefaultSuites = freezeSuites([ await page.waitForElement("todo-app"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const input = page.querySelector(".new-todo-input", ["todo-app", "todo-topbar"]); for (let i = 0; i < numberOfItemsToAdd; i++) { input.setValue(getTodoText(defaultLanguage, i)); @@ -135,6 +148,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = 0; i < numberOfItemsToAdd; i++) { const item = items[i].querySelectorInShadowRoot(".toggle-todo-input"); @@ -142,6 +156,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { const item = items[i].querySelectorInShadowRoot(".remove-todo-button"); @@ -158,7 +173,8 @@ export const DefaultSuites = freezeSuites([ await page.waitForElement("todo-app"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const input = page.querySelector(".new-todo-input", ["todo-app", "todo-topbar"]); for (let i = 0; i < numberOfItemsToAdd; i++) { input.setValue(getTodoText(defaultLanguage, i)); @@ -167,6 +183,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = 0; i < numberOfItemsToAdd; i++) { const item = items[i].querySelectorInShadowRoot(".toggle-todo-input"); @@ -174,6 +191,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { const item = items[i].querySelectorInShadowRoot(".remove-todo-button"); @@ -191,7 +209,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -200,11 +219,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -220,7 +241,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -229,11 +251,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -249,7 +273,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -257,11 +282,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -277,7 +304,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -285,11 +313,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -306,7 +336,8 @@ export const DefaultSuites = freezeSuites([ newTodo.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -315,11 +346,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -336,7 +369,8 @@ export const DefaultSuites = freezeSuites([ newTodo.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -345,11 +379,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -365,7 +401,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -374,11 +411,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -394,7 +433,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -403,11 +443,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -423,7 +465,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -432,11 +475,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -452,7 +497,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -461,11 +507,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -482,7 +530,8 @@ export const DefaultSuites = freezeSuites([ newTodo.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -490,10 +539,12 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); for (let i = 1; i <= numberOfItemsToAdd; i++) page.querySelector(`li:nth-child(${i}) .toggle`).click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) page.querySelector(".destroy").click(); }), @@ -509,7 +560,8 @@ export const DefaultSuites = freezeSuites([ newTodo.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -517,10 +569,12 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); for (let i = 1; i <= numberOfItemsToAdd; i++) page.querySelector(`li:nth-child(${i}) .toggle`).click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) page.querySelector(".destroy").click(); }), @@ -535,7 +589,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -543,11 +598,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -563,7 +620,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -571,11 +629,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -591,7 +651,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -599,11 +660,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -619,7 +682,8 @@ export const DefaultSuites = freezeSuites([ element.focus(); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo"); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -627,11 +691,13 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const checkboxes = page.querySelectorAll(".toggle"); for (let i = 0; i < numberOfItemsToAdd; i++) checkboxes[i].click(); }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const deleteButtons = page.querySelectorAll(".destroy"); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) deleteButtons[i].click(); @@ -646,7 +712,8 @@ export const DefaultSuites = freezeSuites([ await page.waitForElement("todo-app"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo", ["todo-app", "todo-form"]); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -654,6 +721,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const todoItems = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = 0; i < numberOfItemsToAdd; i++) { const checkbox = todoItems[i].querySelectorInShadowRoot(".toggle"); @@ -661,6 +729,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const todoItems = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { const deleteButton = todoItems[i].querySelectorInShadowRoot(".destroy"); @@ -677,7 +746,8 @@ export const DefaultSuites = freezeSuites([ await page.waitForElement("todo-app"); }, tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + new BenchmarkTestStep(`Adding${getNumberOfItemsToAdd()}Items`, (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const newTodo = page.querySelector(".new-todo", ["todo-app", "todo-form"]); for (let i = 0; i < numberOfItemsToAdd; i++) { newTodo.setValue(getTodoText(defaultLanguage, i)); @@ -685,6 +755,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("CompletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const todoItems = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = 0; i < numberOfItemsToAdd; i++) { const checkbox = todoItems[i].querySelectorInShadowRoot(".toggle"); @@ -692,6 +763,7 @@ export const DefaultSuites = freezeSuites([ } }), new BenchmarkTestStep("DeletingAllItems", (page) => { + const numberOfItemsToAdd = getNumberOfItemsToAdd(); const todoItems = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { const deleteButton = todoItems[i].querySelectorInShadowRoot(".destroy");