Benchmark - Integer Validation

RegExp vs Number + parseInt

by Jason Butz

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/2.1.4/benchmark.min.js"></script>
<button id="runSuite">
Run Suite
</button>

JavaScript

function logOutput(outputMessage) {
	console.log(outputMessage);
	let el = document.createElement('p');
    el.innerText = outputMessage;
    
    document.body.appendChild(el);
}

var suite = new Benchmark.Suite;

// Setup Values
var inputValue = '10';

// Add Tests
suite
    .add('RegExp', function() {
		(inputValue.toString().match(/^([-]{0,1})(\d+)$/) != null);
    })
    .add('Number + parseInt', function() {
		(Number(inputValue) === parseInt(inputValue, 10));
    })
// Add Listeners
	.on('start', function() {
    	logOutput('Suite Started')
    })
    .on('cycle', function(event) {
        logOutput(String(event.target));
    })
    .on('complete', function() {
    	let fastest = this.filter('fastest');
        let fastestHz = fastest.map('hz')[0];
        logOutput('Fastest is ' + fastest.map('name'));
        
        this.each((test) => {
        	if(test.name !== fastest.map('name')[0]) {
            	let hz = test.hz;
            	let perc = (1 - (hz / fastestHz)) * 100;
                logOutput(`${test.name} is ${perc < 1 ? perc.toFixed(2) : Math.round(perc)}% slower`);
            }
        });
        
        document.getElementById('runSuite').disabled = false;
    })



document.getElementById('runSuite').addEventListener('click', function() {
	this.disabled = true;
	suite.run({ 'async': true });
});