aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/harness/helper.js111
-rw-r--r--test/harness/sth.js372
-rw-r--r--test/suite/ch08/8.5/8.5.1.js64
-rw-r--r--test/suite/ch08/8.5/S8.5_A13_T1.js28
-rw-r--r--test/suite/ch15/15.8/15.8.2/15.8.2.16/S15.8.2.16_A7.js9
-rw-r--r--test/suite/ch15/15.8/15.8.2/15.8.2.18/S15.8.2.18_A7.js12
6 files changed, 455 insertions, 141 deletions
diff --git a/test/harness/helper.js b/test/harness/helper.js
index 75a6b93ba..04c6cb6b7 100644
--- a/test/harness/helper.js
+++ b/test/harness/helper.js
@@ -34,30 +34,77 @@ function Presenter() {
}
}
+ /* Updates the displayed version. */
this.setVersion = function(v) {
version = v;
$(".targetTestSuiteVersion").text(v);
}
-
- this.setDate = function(d) {
+
+ /* Updates the displayed date. */
+ this.setDate = function(d) {
date = d;
$(".targetTestSuiteDate").text(d);
}
-
+
+ /* Updates the displayed number of tests to run. */
this.setTotalTests = function(tests) {
totalTests = tests;
$('#testsToRun').text(tests);
}
- /* Write status to the activity bar. */
+ /* Write status to the activity bar. */
this.updateStatus = function (str) {
this.activityBar.text(str);
}
-
- this.finished = function(elapsed) {
- $('.button-start').attr('src', 'images/start.png');
- $('.button-start').fadeOut('fast');
+
+ /* When starting to load a test, create a table row entry and buttons. Display file path. */
+ this.setTestWaiting = function(index, path) {
+ var appendMsg = '<tr class="waiting"><td height="29" class="chapterName">Waiting to load test file: ' + path + '</td>';
+ appendMsg += '<td width="83"><img src="images/select.png" alt="Select" title="Toggle the selection of this chapter." /></td>';
+ appendMsg += '<td width="83"><img src="images/run.png" alt="Run" title="Run this chapter individually." /></td></tr>';
+
+ $('#chapterSelector table').append(appendMsg);
+ // Find the table row
+ var tr = $('#chapterSelector table tr').filter(":last-child");
+ // Attach click listeners to the buttons
+ tr.find("img").filter('[alt="Select"]').bind("click", {tr: tr, index: index}, function(event) {
+ controller.toggleSelection(event.data.index);
+ // Deselect row
+ if(event.data.tr.hasClass("selectedChapter")) {
+ event.data.tr.removeClass("selectedChapter");
+ event.data.tr.find('img').filter('[alt="Selected"]').attr({
+ src: 'images/select.png',
+ alt: 'Select'
+ });
+ }
+ // Select row
+ else {
+ event.data.tr.addClass("selectedChapter");
+ event.data.tr.find('img').filter('[alt="Select"]').attr({
+ src: 'images/selected.png',
+ alt: 'Selected'
+ });
+ }
+ });
+ }
+
+ this.setTestLoading = function(index, path) {
+ var tr = $('#chapterSelector table tr').filter(":nth-child(" + (index+1) + ")");
+ tr.removeClass("waiting");
+ tr.addClass("loading");
+ tr.find(":first-child").html("Loading test file: " + path);
+ };
+
+ /* On test loaded, display the chapter name and the number of tests */
+ this.setTestLoaded = function(index, name, numTests) {
+ var tr = $('#chapterSelector table tr').filter(":nth-child(" + (index+1) + ")");
+ tr.removeClass("loading");
+ tr.find("td").filter(":first-child").html(name + " (" + numTests + " tests)");
+ }
+
+ /* Called when the tests finish executing. */
+ this.finished = function(elapsed) {
progressBar.find(".text").html("Testing complete!");
if (isSiteDebugMode()) {
this.activityBar.text('Overall Execution Time: ' + elapsed + ' minutes');
@@ -65,27 +112,19 @@ function Presenter() {
this.activityBar.text('');
}
}
-
- this.started = function () {
- $('.button-start').attr('src', 'images/pause.png');
- }
-
- this.paused = function () {
- $('.button-start').attr('src', 'images/resume.png');
- }
- this.reset = function() {
+ this.reset = function () {
globalSection.reset();
updateCounts();
+ this.activityBar.text('');
logger.empty();
currentSection = globalSection;
renderCurrentSection();
- $('.button-start').show();
}
- /* Do some setup tasks. */
+ /* Do some setup tasks. */
this.setup = function() {
backLink = $('#backlinkDiv');
backLink.click(goBack);
@@ -105,7 +144,29 @@ function Presenter() {
renderCurrentSection();
}
- //**IMPLEMENTATION DETAILS***************************************************
+ /* The state machine for the button display. */
+ this.setState = function(state) {
+ // Hide all the buttons
+ $('.progressBarButtons img').addClass("hide");
+ // Only show what is needed.
+ if(state == 'loading') {
+ $('#btnRunAll').removeClass('hide');
+ $('#btnRunSelected').removeClass('hide');
+ }
+ else if(state == 'paused') {
+ $('#btnResume').removeClass('hide');
+ $('#btnReset').removeClass('hide');
+ }
+ else if(state == 'running') {
+ $('#btnPause').removeClass('hide');
+ }
+ else if(state == 'loaded') {
+ $('#btnRunAll').removeClass('hide');
+ $('#btnRunSelected').removeClass('hide');
+ }
+ };
+
+ //**IMPLEMENTATION DETAILS***************************************************
/* Renders the current section into the report window. */
function renderCurrentSection() {
@@ -352,11 +413,11 @@ function Presenter() {
xml = '<testRun>\r\n' +
'<userAgent>' + window.navigator.userAgent + '</userAgent>\r\n' +
- '<Date>' + dateNow.toDateString() + '</Date>\r\n' +
- '<targetTestSuiteName>ECMAScript Test262 Site</targetTestSuiteName>\r\n' +
- '<targetTestSuiteVersion>' + version + '</targetTestSuiteVersion>\r\n' +
- '<targetTestSuiteDate>' + date + '</targetTestSuiteDate>\r\n' +
- ' <Tests>\r\n\r\n';
+ '<Date>' + dateNow.toDateString() + '</Date>\r\n' +
+ '<targetTestSuiteName>ECMAScript Test262 Site</targetTestSuiteName>\r\n' +
+ '<targetTestSuiteVersion>' + version + '</targetTestSuiteVersion>\r\n' +
+ '<targetTestSuiteDate>' + date + '</targetTestSuiteDate>\r\n' +
+ ' <Tests>\r\n\r\n';
reportWindow = window.open();
reportWindow.document.writeln("<title>ECMAScript Test262 XML</title>");
diff --git a/test/harness/sth.js b/test/harness/sth.js
index 91656937c..c2ce49371 100644
--- a/test/harness/sth.js
+++ b/test/harness/sth.js
@@ -85,6 +85,7 @@ function BrowserRunner() {
/* Run the test. */
this.run = function (test, code) {
+ var start = new Date();
//--Detect proper window.onerror support
if (instance.supportsWindowOnerror===undefined) {
@@ -121,7 +122,7 @@ function BrowserRunner() {
document.body.removeChild(iframePrereqs);
instance.run(test, code);
}, 500);
- return;
+ return 0; // initial config, ignore this timing.
}
currentTest = {};
@@ -207,6 +208,10 @@ function BrowserRunner() {
idoc.writeln(globalScopeContents);
idoc.writeln("</script>");
idoc.close();
+
+ var elapsed = new Date() - start;
+
+ return elapsed;
};
//--Helper functions-------------------------------------------------------
@@ -227,7 +232,7 @@ function BrowserRunner() {
*
* Callbacks:
* * onLoadingNextSection(path): Called after a request is sent for the next section json, with the path to that json.
- * * onInitialized(totalTests, version, date): Called after the testcases.json is loaded and parsed.
+ * * onInitialized(totalTests): Called after the testcases.json is loaded and parsed.
* * onTestReady(id, code): Called when a test is ready with the
* test's id and code.
* * onTestsExhausted(): Called when there are no more tests to run.
@@ -236,35 +241,33 @@ function TestLoader() {
var testGroups = [],
testGroupIndex = 0,
currentTestIndex = 0,
- loader = this;
+ loader = this,
+ mode = "all";
- this.version = undefined;
- this.date = undefined;
- this.totalTests = 0;
+ this.loadedFiles = 0;
+ this.version = undefined;
+ this.date = undefined;
+ this.totalTests = 0;
+ this.runningTests = 0;
/* Get the XML for the next section */
function getNextXML() {
- var group = testGroups[testGroupIndex];
currentTestIndex = 0;
- if(group.tests.length > 0) {
- // already loaded this section.
+ // already loaded this section.
+ if(testGroups[testGroupIndex].status == 'loaded') {
+ testGroups[testGroupIndex].onLoaded = function(){};
loader.getNextTest();
return;
}
- $.ajax({url: group.path, dataType: 'json', success: function(data) {
- group.tests = data.testsCollection.tests;
- loader.getNextTest();
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- //alert(XMLHttpRequest);
- }
-
- });
-
- loader.onLoadingNextSection(group.path);
+ // not loaded, so we attach a callback to come back here when the file loads.
+ else {
+ presenter.updateStatus("Loading file: " + testGroups[testGroupIndex].path);
+ testGroups[testGroupIndex].onLoaded = getNextXML;
+
+ }
}
-
+
/* Get the test list xml */
function loadTestXML() {
var testsListLoader = new XMLHttpRequest();
@@ -279,14 +282,99 @@ function TestLoader() {
for (var i = 0; i < testSuite.length; i++) {
testGroups[i] = {
path: testSuite[i],
- tests: []
+ tests: [],
+ selected: false,
+ status: 'waiting',
+ onLoaded: function(){}
};
+ presenter.setTestWaiting(i, testSuite[i]);
+
+ var tr = $('#chapterSelector table tr').filter(':nth-child(' + (i+1) + ')');
+ tr.find('img').filter('[alt="Run"]').bind('click', {index:i}, function(event){
+ controller.runIndividualTest(event.data.index);
+ });
}
loader.onInitialized(loader.totalTests);
- getNextXML();
+ getFile();
}});
}
+
+ /* Get the test file. Handles all the logic of figuring out the next file to load. */
+ function getFile(index) {
+ index = (arguments.length == 0) ? -1 : index;
+
+ // Look for selected waiting chapters (priority because you'll probably want to run them soon)
+ for(var i = 0; index == -1 && i < testGroups.length; i++) {
+ if(testGroups[i].status == 'waiting' && testGroups[i].selected) {
+ index = i;
+ }
+ }
+
+ // Look for just chapters waiting to be loaded.
+ for(var i = 0; index == -1 && i < testGroups.length; i++) {
+ if(testGroups[i].status == 'waiting') {
+ index = i;
+ }
+ }
+
+ if(index == -1) {
+ // Still -1? No more tests are waiting to be loaded then.
+ if(controller.state == 'loading') {
+ presenter.setState('loaded');
+ }
+ return;
+ }
+
+ presenter.setTestLoading(index, testGroups[index].path);
+ // the only other status that should be set when we get here is 'priorityloading'
+ if(testGroups[index].status == 'waiting') {
+ testGroups[index].status = 'loading';
+ }
+
+ loader.onTestStartLoading(index, testGroups[index].path);
+ // Create the AJAX call to grab the file.
+ $.ajax({
+ url: testGroups[index].path,
+ dataType: 'json',
+ // Callback with the chapter name and number of tests.
+ success: function(data, status, xhr) {
+ // Save the data for later usage
+ testGroups[index].tests = data.testsCollection.tests;
+ onTestLoaded(index, data.testsCollection.name, data.testsCollection.tests.length);
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ // TODO: Catch this error and update UI accordingly. Unlikely to happen, but errors would be 404 or 5-- errors.
+
+ }
+ });
+ }
+
+ /* Executes when a test file finishes loading. */
+ function onTestLoaded(index, name, numTests) {
+ presenter.setTestLoaded(index, name, numTests);
+ if(testGroups[index].selected && mode == "multiple") {
+ loader.runningTests += numTests;
+ loader.onInitialized( loader.runningTests );
+ }
+
+ // The loading status is only assigned when downloading files in sequence, otherwise it
+ // gets the status of priorityloading. When loading out of order, we only want to download
+ // the single file, so we'll only tell it to get the next file when we see a status of
+ // loading.
+ if(testGroups[index].status == 'loading') {
+ getFile(); // triggers downloading the next file
+ testGroups[index].status = 'loaded';
+ }
+ else if(testGroups[index].status == 'priorityloading') {
+ // Run the test
+ testGroups[index].status = 'loaded';
+ loader.setChapter(index);
+ }
+
+ testGroups[index].onLoaded();
+ };
+
function getIdFromPath (path) {
//path is of the form "a/b/c.js"
@@ -304,42 +392,128 @@ function TestLoader() {
/* Move on to the next test */
this.getNextTest = function() {
- if(testGroups.length == 0) {
- // Initialize.
- loadTestXML();
- } else if(currentTestIndex < testGroups[testGroupIndex].tests.length) {
- // We have tests left in this test group.
- var test = testGroups[testGroupIndex].tests[currentTestIndex++];
- var scriptCode = test.code;
- test.id = getIdFromPath(test.path);
- //var scriptCode = (test.firstChild.text != undefined) ?
- // test.firstChild.text : test.firstChild.textContent;
-
- loader.onTestReady(test, $.base64Decode(scriptCode));
- } else if(testGroupIndex < testGroups.length - 1) {
- // We don't have tests left in this test group, so move on
- // to the next.
- testGroupIndex++;
- getNextXML();
- } else {
- // We're done.
- loader.onTestsExhausted();
+ // If the file is loaded
+ if(testGroups[testGroupIndex].status == "loaded")
+ {
+ // And if we have tests left in this file
+ if(currentTestIndex < testGroups[testGroupIndex].tests.length) {
+ // Run the next test
+ var test = testGroups[testGroupIndex].tests[currentTestIndex++];
+ var scriptCode = test.code;
+ test.id = getIdFromPath(test.path);
+
+ loader.onTestReady(test, $.base64Decode(scriptCode));
+ }
+ // If there are no tests left and we aren't just running one file
+ else if(testGroupIndex < testGroups.length - 1 && mode !== "one") {
+ // And if we are running multiple chapters
+ if(mode == "multiple") {
+ var i = testGroupIndex + 1;
+ testGroupIndex = -1;
+ for(; i < testGroups.length && testGroupIndex == -1; i++) {
+ if(testGroups[i].selected === true) {
+ testGroupIndex = i;
+ }
+ }
+ if(testGroupIndex == -1) { // we couldn't find a test we haven't run yet
+ loader.onTestsExhausted();
+ return;
+ }
+ }
+ // And if
+ else {
+ // We don't have tests left in this test group, so move on
+ // to the next.
+ testGroupIndex++;
+ }
+ getNextXML();
+ }
+ //
+ else {
+ // We're done.
+ loader.onTestsExhausted();
+ }
+ }
+ else {
+ presenter.updateStatus("Loading test file: " + testGroups[testGroupIndex].path);
+ testGroups[testGroupIndex].onLoaded = getNextXML;
}
};
- /* Start over at the beginning */
+ /* Reset counters that track the next test (so we test from the beginning) */
this.reset = function() {
+ mode = "all";
currentTestIndex = 0;
testGroupIndex = 0;
};
-
-
-
+
+ /* Begin downloading test files. */
+ this.startLoadingTests = function() {
+ loadTestXML();
+ };
+
+ /* Prepare for testing a single chapter. */
+ this.setChapter = function(index) {
+ currentTestIndex = 0;
+ testGroupIndex = index;
+ mode = "one";
+
+ if(testGroups[index].status == 'loaded') {
+ loader.onInitialized(testGroups[index].tests.length);
+ }
+ else {
+ testGroups[index].status = 'priorityloading';
+ getFile(index);
+ loader.onInitialized(0);
+ }
+ };
+
+ /* Prepare for testing multiple chapters. Returns true if at least one chapter was selected. */
+ this.setMultiple = function() {
+ // Find the index of the first selection
+ var firstSelectedIndex = -1;
+ for(var i = 0; firstSelectedIndex == -1 && i < testGroups.length; i++) {
+ if(testGroups[i].selected) {
+ firstSelectedIndex = i;
+ }
+ }
+ // If we didn't find a selected index, just quit.
+ if(firstSelectedIndex == -1) {
+ return false;
+ }
+
+ // Begin loading the file immediately, if necessary
+ if(testGroups[firstSelectedIndex].status == 'waiting') {
+ getFile(firstSelectedIndex);
+ }
+
+ mode = "multiple";
+ testGroupIndex = firstSelectedIndex; // start at this chapter
+ currentTestIndex = 0; // start at test 0
+
+ // Count the number of tests
+ runningTests = 0;
+ for(var i = 0; i < testGroups.length; i++) {
+ runningTests += (testGroups[i].selected && testGroups[i].status == 'loaded') ? testGroups[i].tests.length : 0;
+ }
+ loader.onInitialized(runningTests);
+ return true;
+ };
+
+ this.getNumTestFiles = function() {
+ return testGroups.length;
+ };
+
+ /* Toggle the selection of a file. */
+ this.toggleSelection = function(index) {
+ testGroups[index].selected = !testGroups[index].selected;
+ }
+
}
/* Controls test generation and running, and sends results to the presenter. */
function Controller() {
- var state = 'stopped';
+ var state = 'undefined';
var runner = new BrowserRunner();
var loader = new TestLoader();
var controller = this;
@@ -357,67 +531,104 @@ function Controller() {
finished: function(elapsed) { }
};
+ /* Executes when a test case finishes executing. */
runner.onComplete = function(test) {
presenter.addTestResult(test);
try {
controller.implementerHook.addTestResult(test);
} catch(e) { /*no-op*/}
- if(state === 'running')
+ if(state === 'running') {
setTimeout(loader.getNextTest, 10);
+ }
};
+ /* Executes when the loader has been initialized. */
loader.onInitialized = function(totalTests) {
+ if(arguments.length == 0) {
+ totalTests = loader.totalTests;
+ }
presenter.setTotalTests(totalTests);
};
+
+ /* Executes when a test file starts loading. */
+ loader.onTestStartLoading = function(index, path) {
+ presenter.setTestLoading(index, path);
+ }
- loader.onLoadingNextSection = function(path) {
- presenter.updateStatus("Loading: " + path);
- };
-
+ /* Executes when a test is ready to run. */
loader.onTestReady = function(testObj, testSrc) {
presenter.updateStatus("Running Test: " + testObj.id);
- runner.run(testObj, testSrc);
+ elapsed += runner.run(testObj, testSrc);
};
+ /* Executes when there are no more tests to run. */
loader.onTestsExhausted = function() {
- state = 'stopped';
- elapsed += new Date() - startTime;
elapsed = elapsed/(1000*60); //minutes
- elapsed = elapsed.toFixed(1);
+ elapsed = elapsed.toFixed(3);
+
+ state = (loader.loadedFiles == loader.getNumTestFiles()) ? 'loaded' : 'loading';
+ presenter.setState(state);
presenter.finished(elapsed);
try {
controller.implementerHook.finished(elapsed);
} catch(e) { /*no-op*/}
};
-
+
+ /* Start the test execution. */
this.start = function() {
+ elapsed = 0;
state = 'running';
- startTime = new Date();
+ presenter.setState(state);
loader.getNextTest();
- presenter.started();
};
+ /* Pause the test execution. */
this.pause = function() {
- elapsed += new Date() - startTime;
state = 'paused';
- presenter.paused();
+ presenter.setState(state);
};
+ /* Reset the testing status. */
this.reset = function() {
- startTime = new Date();
- elapsed = 0;
+ loader.onInitialized();
loader.reset();
presenter.reset();
+
+ state = (loader.loadedFiles == loader.getNumTestFiles()) ? 'loaded' : 'loading';
+ presenter.setState(state);
};
-
- this.toggle = function() {
- if(state === 'running') {
- controller.pause();
- } else {
+
+ /* Start loading tests. */
+ this.startLoadingTests = function() {
+ state = 'loading';
+ presenter.setState(state);
+ loader.startLoadingTests();
+ }
+
+ /* Set the individual chapter in the laoder and start the controller. */
+ this.runIndividualTest = function(index) {
+ controller.reset();
+ loader.setChapter(index);
+ controller.start();
+ }
+
+ /* Compile a list of the selected tests and start the controller. */
+ this.runSelected = function() {
+ controller.reset();
+ if(loader.setMultiple()) {
controller.start();
}
- };
+ }
+
+ this.runAll = function() {
+ controller.reset();
+ controller.start();
+ }
+
+ this.toggleSelection = function(index) {
+ loader.toggleSelection(index);
+ }
}
var controller = new Controller();
@@ -474,17 +685,12 @@ $(function () {
});
});
- //Attach the click event to the start button. It starts, stops and
- //pauses the tests
- $('.button-start').click(function () {
- controller.toggle();
- });
-
- //Attach the click event to the reset button. It reset all the
- //test to zero
- $('.button-reset').click(function () {
- controller.reset();
- });
+ // Attach click events to all the control buttons.
+ $('#btnRunAll').click(controller.runAll);
+ $('#btnReset').click(controller.reset);
+ $('#btnRunSelected').click(controller.runSelected);
+ $('#btnPause').click(controller.pause);
+ $('#btnResume').click(controller.start);
var SUITE_DESCRIP_PATH = "json/suiteDescrip.json";
$.ajax({ url: SUITE_DESCRIP_PATH, dataType: 'json', success: function (data) {
@@ -492,4 +698,8 @@ $(function () {
presenter.setDate(data.date);
}
});
+
+ // Start loading the files right away.
+ controller.startLoadingTests();
+
});
diff --git a/test/suite/ch08/8.5/8.5.1.js b/test/suite/ch08/8.5/8.5.1.js
new file mode 100644
index 000000000..076eebfba
--- /dev/null
+++ b/test/suite/ch08/8.5/8.5.1.js
@@ -0,0 +1,64 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.5/8.5.1.js
+ * @description Valid Number ranges
+ */
+
+// Check range support for Number values (IEEE 754 64-bit floats having the form s*m*2**e)
+//
+// For normalized floats, sign (s) is +1 or -1, m (mantisa) is a positive integer less
+// than 2**53 but not less than 2**52 and e (exponent) is an integer ranging from -1074 to 971
+//
+// For denormalized floats, s is +1 or -1, m is a positive integer less than 2**52, and
+// e is -1074
+//
+// Below 64-bit float values shown for informational purposes. Values may be positive or negative.
+// Infinity >= ~1.797693134862315907729305190789e+308 >= 2**1024
+// MAX_NORM = ~1.797693134862315708145274237317e+308 = (2**53 - 1) * (2**-52) * (2**1023) = (2**53-1) * (2**971) = (2**1024) - (2**971)
+// MIN_NORM = ~2.2250738585072013830902327173324e-308 = 2**-1022
+// MAX_DENORM = ~2.2250738585072008890245868760859e-308 = MIN_NORM - MIN_DENORM = (2**-1022) - (2**-1074)
+// MIN_DENORM = ~4.9406564584124654417656879286822e-324 = 2**-1074
+
+// Fill an array with 2 to the power of (0 ... -1075)
+var value = 1;
+var floatValues = new Array(1076);
+for(var power = 0; power <= 1075; power++){
+ floatValues[power] = value;
+ // Use basic math operations for testing, which are required to support 'gradual underflow' rather
+ // than Math.pow etc..., which are defined as 'implementation dependent'.
+ value = value * 0.5;
+}
+
+// The last value is below min denorm and should round to 0, everything else should contain a value
+if(floatValues[1075] !== 0) {
+ $ERROR("Value after min denorm should round to 0");
+}
+
+// Validate the last actual value is min denorm
+if(floatValues[1074] !== 4.9406564584124654417656879286822e-324) {
+ $ERROR("Min denorm value is incorrect: " + floatValues[1074]);
+}
+
+// Validate that every value is half the value before it up to 1
+for(var index = 1074; index > 0; index--){
+ if(floatValues[index] === 0){
+ $ERROR("2**-" + index + " should not be 0");
+ }
+ if(floatValues[index - 1] !== (floatValues[index] * 2)){
+ $ERROR("Value should be double adjacent value at index " + index);
+ }
+}
+
+// Max norm should be supported and compare less than inifity
+if(!(1.797693134862315708145274237317e+308 < Infinity)){
+ $ERROR("Max Number value 1.797693134862315708145274237317e+308 should not overflow to infinity");
+}
+
+// Numbers closer to 2**1024 then max norm should overflow to infinity
+if(!(1.797693134862315808e+308 === +Infinity)){
+ $ERROR("1.797693134862315808e+308 did not resolve to Infinity");
+}
diff --git a/test/suite/ch08/8.5/S8.5_A13_T1.js b/test/suite/ch08/8.5/S8.5_A13_T1.js
deleted file mode 100644
index 7ac286045..000000000
--- a/test/suite/ch08/8.5/S8.5_A13_T1.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2009 the Sputnik authors. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/**
- * Finite nonzero values that are Normalised having the form s*m*2**e
- * where s is +1 or -1, m is a positive integer less than 2**53 but not
- * less than s**52 and e is an integer ranging from -1074 to 971
- *
- * @path ch08/8.5/S8.5_A13_T1.js
- * @description Finite Non zero values where e is -1074
- * @implDependent Does not pass on current ARM processors
- */
-
-//CHECK #1
-if ((1*((Math.pow(2,53))-1)*(Math.pow(2,-1074))) !== 4.4501477170144023e-308){
- $ERROR('#1: (1*((Math.pow(2,53))-1)*(Math.pow(2,-1074))) === 4.4501477170144023e-308. Actual: ' + ((1*((Math.pow(2,53))-1)*(Math.pow(2,-1074)))));
-}
-
-//CHECK #2
-if ((1*(Math.pow(2,52))*(Math.pow(2,-1074))) !== 2.2250738585072014e-308){
- $ERROR('#2: (1*(Math.pow(2,52))*(Math.pow(2,-1074))) === 2.2250738585072014e-308. Actual: ' + ((1*(Math.pow(2,52))*(Math.pow(2,-1074)))));
-}
-
-//CHECK #3
-if ((-1*(Math.pow(2,52))*(Math.pow(2,-1074))) !== -2.2250738585072014e-308){
- $ERROR('#3: (-1*(Math.pow(2,52))*(Math.pow(2,-1074))) === -2.2250738585072014e-308. Actual: ' + ((-1*(Math.pow(2,52))*(Math.pow(2,-1074)))));
-}
-
diff --git a/test/suite/ch15/15.8/15.8.2/15.8.2.16/S15.8.2.16_A7.js b/test/suite/ch15/15.8/15.8.2/15.8.2.16/S15.8.2.16_A7.js
index 867dcdb2c..8ec58a852 100644
--- a/test/suite/ch15/15.8/15.8.2/15.8.2.16/S15.8.2.16_A7.js
+++ b/test/suite/ch15/15.8/15.8.2/15.8.2.16/S15.8.2.16_A7.js
@@ -77,7 +77,11 @@ x[59] = 5.88425290672373970000;
x[60] = 5.98398600683770090000;
x[61] = 6.08371910695166300000;
x[62] = 6.18345220706562420000;
-x[63] = 6.28318530717958620000;
+// Result is implementation dependent and varies on platform as you approach limits.
+// e.g. Output approaches zero as input approaches PI * 2 (6.28318530717958647).
+// The value of 6.2831 for x[63] is chosen below as an arbitrary cut off point for
+// expecting a result within the validation's tolerance range.
+x[63] = 6.2831;
var y = new Array();
@@ -144,8 +148,7 @@ y[59] = -0.38843479627469474000;
y[60] = -0.29475517441090471000;
y[61] = -0.19814614319939772000;
y[62] = -0.09956784659581728600;
-y[63] = -0.0000000000000002449293598294706400;
-
+y[63] = -0.00008530717948287973;
var val;
for (i = 0; i < vnum; i++)
diff --git a/test/suite/ch15/15.8/15.8.2/15.8.2.18/S15.8.2.18_A7.js b/test/suite/ch15/15.8/15.8.2/15.8.2.18/S15.8.2.18_A7.js
index 79dca3833..8f1c0a647 100644
--- a/test/suite/ch15/15.8/15.8.2/15.8.2.18/S15.8.2.18_A7.js
+++ b/test/suite/ch15/15.8/15.8.2/15.8.2.18/S15.8.2.18_A7.js
@@ -14,7 +14,11 @@ $INCLUDE("math_isequal.js");
// CHECK#1
vnum = 64;
var x = new Array();
-x[0] = -1.57079632679489660000;
+// Result is implementation dependent and varies on platform as you approach limits.
+// e.g. Output approaches Infinity as input approaches PI / 2 (1.5707963267948966)
+// The value of 1.5707 for x[0] is chosen below as an arbitrary cut off point for
+// expecting a result within the validation's tolerance range.
+x[0] = -1.5707;
x[1] = -1.52092977673791570000;
x[2] = -1.47106322668093490000;
x[3] = -1.42119667662395410000;
@@ -77,12 +81,12 @@ x[59] = 1.37133012656697330000;
x[60] = 1.42119667662395390000;
x[61] = 1.47106322668093490000;
x[62] = 1.52092977673791550000;
-x[63] = 1.57079632679489660000;
+x[63] = 1.5707;
var y = new Array();
-y[0] = -16331239353195370.00000000000000000000;
+y[0] = -10381.32741756979;
y[1] = -20.03689788997828100000;
y[2] = -9.99349498241742220000;
y[3] = -6.63456649978931170000;
@@ -145,7 +149,7 @@ y[59] = 4.94671494494940060000;
y[60] = 6.63456649978930190000;
y[61] = 9.99349498241742220000;
y[62] = 20.03689788997819200000;
-y[63] = 16331239353195370.00000000000000000000;
+y[63] = 10381.32741756979;
var val;