QUnit.extend(QUnit, {
	rxNumericCSSProperty: /[0-9.]+/g,
	numericCSSPropertyEquals: function(actual, expected, message) {
		//Simple case, both strings already match.
		if(actual === expected) {
			QUnit.push(true, actual, expected, message);

			return;
		}

		//Now extract all numbers from the property string.
		//e.g. "0.5px 100px" will result in ["0.5", "100"]
		var actualArray = actual.match(QUnit.rxNumericCSSProperty);
		var expectedArray = expected.match(QUnit.rxNumericCSSProperty);

		var passes = actualArray !== null && expectedArray !== null && actualArray.length === expectedArray.length;

		for(var i = 0; passes && i < actualArray.length; i++) {
			var curActual = actualArray[i];
			var curExpected = expectedArray[i];
			var delta = 0.01;

			//Use 0.01 for floats and 1 for ints.
			if(curActual.indexOf('.') === -1 && curExpected.indexOf('.') === -1) {
				delta = 1;
			}

			curActual = parseFloat(curActual);
			curExpected = parseFloat(curExpected);

			passes = (curActual === curExpected) || Math.abs(curActual - curExpected) <= delta;
		}

		QUnit.push(passes, actual, expected, message);
	}
});