v2
- by mikeecunningham 4/20/202200
Setup HTML - click to add setup HTML
disable setup JavaScript
Setup JavaScript
// Fork of https://jsbench.me/4bkjp85g44/1 by Daniel Brenot

let testSize = 1000;
let checkSuccess = true;
let printOrig = false;
let printNew = false;
let printNewer = false;
let outputOrig = [];
let outputNew = [];
let outputNewer = [];

// Andrew Seguine's implementation
function originalPredicate(data, filter) {
	const dataStr = Object.keys(data).reduce((currentTerm, key) => {
      return currentTerm + data[key] + '◬';
    }, '').toLowerCase();
    
    const transformedFilter = filter.trim().toLowerCase();

    return dataStr.indexOf(transformedFilter) != -1;
}

// Daniel Brenot's implementation
function newPredicate(data, filter) {
	const transformedFilter = filter.trim().toLowerCase();
	
    return Object.keys(data).some(
      (key)=>data[key].toLowerCase().includes(transformedFilter)
    );
}

// Michael Cunningham's implementation
function newerPredicate(data, filter) {
	const transformedFilter = filter.trim().toLowerCase();
	
	for (val of Object.values(data)) {
		if (val.toLowerCase().includes(transformedFilter)) {
			return true;
		}
	}
	return false;
}

// From a stackoverflow answer by https://stackoverflow.com/users/508537/briguy37
function generateUUID() { // Public Domain/MIT
    var d = new Date().getTime();//Timestamp
    var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random() * 16;//random number between 0 and 16
        if(d > 0){//Use timestamp until depleted
            r = (d + r)%16 | 0;
            d = Math.floor(d/16);
        } else {//Use microseconds since page-load if supported
            r = (d2 + r)%16 | 0;
            d2 = Math.floor(d2/16);
        }
        return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
    });
}

let searchList = {}
let checkList = [] // Succeeding checklist
let badList = [] // Failing checklist

for (let i = testSize; i > 0; i--) {
    // let key = generateUUID();
    let val = generateUUID();
    searchList[i] = val;
    checkList.push(val);
}

for (let i = testSize; i > 0; i--) {
	let val = generateUUID();
	badList.push(val);
}
delete caserun single casemove downdrag and drop case


ready



if (checkSuccess) {
	for (val of checkList) {
 		outputOrig.push(originalPredicate(searchList, val));
	}
} else {
	for (bad of badList) {
		outputOrig.push(originalPredicate(searchList, bad));
	}
}
delete caserun single casemove upmove downdrag and drop case


ready



if (checkSuccess) {
	for (val of checkList) {
		outputNew.push(newPredicate(searchList, val));
	}
} else {
	for (bad of badList) {
		outputNew.push(newPredicate(searchList, bad));
	}
}
delete caserun single casemove updrag and drop case


ready



if (checkSuccess) {
	for (val of checkList) {
 		outputNewer.push(newerPredicate(searchList, val));
	}
} else {
	for (bad of badList) {
		outputNewer.push(newerPredicate(searchList, bad));
	}
}
Test Case - click to add another test case
disable teardown JavaScript
teardown JavaScript
if (printOrig) { console.log("Original: ", outputOrig); }
if (printNew) { console.log("New: ", outputNew); }
if (printNewer) { console.log("Newer", outputNewer); }
Output (DOM) - click to monitor output (DOM) while test is running
RUN