15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)(function(){ 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Populated from: http://www.medcalc.be/manual/t-distribution.php 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 95% confidence for N - 1 = 4 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tDistribution = 2.776; 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The number of individual test iterations to do 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var numTests = 5; 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The type of run that we're doing (options are "runs/s" or "ms") 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var runStyle = "runs/s"; 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // A rough estimate, in seconds, of how long it'll take each test 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // iteration to run 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var timePerTest = runStyle === "runs/s" ? 1 : 0.5; 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Initialize a batch of tests 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // name = The name of the test collection 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.startTest = function(name, version){ 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) numloaded++; 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( numloaded == totalTests ) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTimeout( init, 100 ); 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testName = name; 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !queues[testName] ) return; 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testID = testName; 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testNames[testID] = testName; 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testVersions[testID] = version || 0; 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testSummary[testID] = testSummaryNum[testID] = testDone[testID] = testNum[testID] = 0; 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queues[testID].push(function(){ 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) summary = 0; 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dequeue(); 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Anything that you want to have run in order, but not actually test 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.prep = function(fn){ 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !queues[testName] ) return; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queues[testID].push(function(){ 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fn(); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dequeue(); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // End the tests and finalize the report 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.endTest = function(){ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !queues[testName] ) return; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Save the summary output until all the test are complete 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queues[testID].push(function(){ 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dequeue(); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Run a new test 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // name = The unique name of the test 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // num = The 'length' of the test (length of string, # of tests, etc.) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // fn = A function holding the test to run 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.test = function(name, num, fn){ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !queues[testName] ) return; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Save the summary output until all the test are complete 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var curTest = testName, curID = testID; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( arguments.length === 3 ) { 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !nameDone[name] ) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nameDone[name] = 0; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nameDone[name]++; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( nameDone[name] != 3 ) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fn = num; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) num = 1; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) time += timePerTest * numTests; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testNum[curID]++; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Don't execute the test immediately 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queues[testID].push(function(){ 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) title = name; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var times = [], start, pos = 0, cur; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTimeout(function(){ 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // run tests 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( doShark(name) ) { 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) connectShark(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) startShark(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) start = (new Date()).getTime(); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( runStyle === "runs/s" ) { 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var runs = 0; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cur = (new Date()).getTime(); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ( (cur - start) < 1000 ) { 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fn(); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cur = (new Date()).getTime(); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs++; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fn(); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cur = (new Date()).getTime(); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( doShark(name) ) { 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stopShark(); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) disconnectShark(); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For making Median and Variance 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( runStyle === "runs/s" ) { 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) times.push( (runs * 1000) / (cur - start) ); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) times.push( cur - start ); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } catch( e ) { 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) alert("FAIL " + name + " " + num + e); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( pos < numTests ) { 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTime(); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTestPos({curID: curID, collection: testNames[curID], version: testVersions[curID]}); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( ++pos < numTests ) { 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTimeout( arguments.callee, 1 ); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var data = compute( times, numTests ); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.curID = curID; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.collection = testNames[curID]; 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.version = testVersions[curID]; 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.name = title; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.scale = num; 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) data.times = times; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) logTest(data); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dequeue(); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function compute(times, runs){ 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var results = {runs: runs}, num = times.length; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) times = times.sort(function(a,b){ 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a - b; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Sum 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.sum = 0; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < num; i++ ) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.sum += times[i]; 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Min 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.min = times[0]; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Max 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.max = times[ num - 1 ]; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Mean 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.mean = results.sum / num; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Median 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.median = num % 2 == 0 ? 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (times[Math.floor(num/2)] + times[Math.ceil(num/2)]) / 2 : 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) times[Math.round(num/2)]; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Variance 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.variance = 0; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < num; i++ ) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.variance += Math.pow(times[i] - results.mean, 2); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.variance /= num - 1; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make Standard Deviation 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.deviation = Math.sqrt( results.variance ); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Compute Standard Errors Mean 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.sem = (results.deviation / Math.sqrt(results.runs)) * tDistribution; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Error 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.error = ((results.sem / results.mean) * 100) || 0; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return results; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // All the test data 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tests; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The number of test files to load 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totalTests = 0; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totalTestItems = 0; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The number of test files loaded 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var numloaded = 0; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Queue of functions to run 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var queue = []; 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var queues = {}; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var catnames = { 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dromaeo: "Dromaeo JavaScript Tests", 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sunspider: "SunSpider JavaScript Tests", 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "v8": "V8 JavaScript Tests", 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dom: "DOM Core Tests", 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jslib: "JavaScript Library Tests", 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cssquery: "CSS Selector Tests" 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var testElems = {}; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var testNum = {}; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var testDone = {}; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var testNames = {}; 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var testVersions = {}; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dataStore = []; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var names = []; 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var interval; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totalTime = 0; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var time = 0; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var title, testName, testID, testSummary = {} , testSummaryNum = {}, maxTotal = 0, maxTotalNum = 0; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nameDone = {}; 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Query String Parsing 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var search = window.limitSearch || (window.location.search || "?").substr(1); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) search = search.replace(/&runStyle=([^&]+)/, function(all, type){ 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runStyle = type; 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ""; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var parts = search.split("&"); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( parts[0] === "recommended" ) { 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parts[0] = "dromaeo|sunspider|v8|dom|jslib"; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var none = !parts[0] || parts[0].match(/=/); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var filter = parts.length && !parts[0].match(/=/) && parts[0] !== "all" ? 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new RegExp(parts.shift(), "i") : 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /./; 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // To enable shark debugging add &shark to the end of the URL 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var doShark = function(name) { return false; }; 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < parts.length; i++ ) { 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var m = /^shark(?:=(.*))?$/.exec(parts[i]); 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m) { 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m[1] === undefined) { 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) doShark = function(name) { return true; }; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sharkMatch = new RegExp(m[1]); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) doShark = function(name) { 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sharkMatch.test(name); 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m = /^numTests=(\d+)$/.exec(parts[i]); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) numTests = Number(m[1]); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jQuery(function(){ 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var id = search.match(/id=([\d,]+)/); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( none && !id ) { 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview").hide(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cat = filter.toString().slice(1,-2); 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( catnames[cat] ) { 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview span:first").html( catnames[cat] ); 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( catnames[cat].length > 22 ) { 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview span:first").css("font-size", 22); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#tests").hide(); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jQuery.getJSON("tests/MANIFEST.json", function(json){ 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tests = json; 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) names = []; 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var name in tests ) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Don't load tests that we aren't looking for 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( filter.test( name ) ) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) names.push( name ); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) names = names.sort(function(a, b){ 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tests[a].name < tests[b].name ? -1 : 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tests[a].name == tests[b].name ? 0 : 1; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Check if we're loading a specific result set 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ?id=NUM 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( id ) { 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jQuery.ajax({ 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) url: "store.php?id=" + id[1], 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dataType: "json", 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) success: function(data){ 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resultsLoaded(id[1], data); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Otherwise we're loading a normal set of tests 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#wrapper").append("<br style='clear:both;'/><center><a href='?" + names.join("|") + "'>Re-run tests</a></center>"); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < names.length; i++ ) (function(name){ 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var test = tests[name]; 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queues[name] = []; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeElem(name); 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) initTest(name); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalTests++; 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Check if we're loading an HTML file 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( test.file.match(/html$/) ) { 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var iframe = document.createElement("iframe"); 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) iframe.style.height = "1px"; 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) iframe.style.width = "1px"; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) iframe.src = "tests/" + test.file; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) document.body.appendChild( iframe ); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Otherwise we're loading a pure-JS test 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jQuery.getScript("tests/" + test.file); 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) })(names[i]); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Remove the next test from the queue and execute it 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function dequeue(){ 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( interval && queue.length ) { 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (window.parent) { 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.parent.postMessage({ name: "dromaeo:progress", 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) status: { current: totalTestItems - queue.length, 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) score: dataStore[dataStore.length - 1], 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) total: totalTestItems } }, "*"); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queue.shift()(); 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if ( queue.length == 0 ) { 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) interval = false; 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) time = 0; 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview input").remove(); 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTimebar(); 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( window.limitSearch ) { 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var summary = (runStyle === "runs/s" ? Math.pow(Math.E, maxTotal / maxTotalNum) : maxTotal).toFixed(2); 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( typeof tpRecordTime !== "undefined" ) { 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tpRecordTime( summary ); 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var pre = document.createElement("pre"); 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pre.style.display = "none"; 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pre.innerHTML = "__start_report" + summary + "__end_report"; 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) document.body.appendChild( pre ); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( typeof goQuitApplication !== "undefined" ) { 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) goQuitApplication(); 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if ( dataStore && dataStore.length ) { 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("body").addClass("alldone"); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var div = jQuery("<div class='results'>Saving...</div>").insertBefore("#overview"); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jQuery.ajax({ 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) type: "POST", 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) url: "store.php", 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data: "data=" + encodeURIComponent(JSON.stringify(dataStore)) + "&style=" + runStyle, 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) success: function(id){ 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var url = window.location.href.replace(/\?.*$/, "") + "?id=" + id; 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) div.html("Results saved. You can access them at a later time at the following URL:<br/><strong><a href='" + url + "'>" + url + "</a></strong></div>"); 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (window.parent) 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.parent.postMessage({ name: "dromaeo:alldone", result: dataStore }, "*"); 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function updateTimebar(){ 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#timebar").html("<span><strong>" + (runStyle === "runs/s" ? Math.pow(Math.E, maxTotal / maxTotalNum) : maxTotal).toFixed(2) + "</strong>" + runStyle + " (Total)</span>"); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Run once all the test files are fully loaded 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function init(){ 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var n = 0; n < names.length; n++ ) { 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) queue = queue.concat( queues[ names[n] ] ); 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalTestItems = queue.length; 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalTime = time; 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) time += timePerTest; 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTime(); 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#pause") 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .val("Run") 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .click(function(){ 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( interval ) { 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) interval = null; 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.value = "Run"; 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !interval ) { 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) interval = true; 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dequeue(); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.value = "Pause"; 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( window.limitSearch ) { 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#pause").click(); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (window.parent) 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.parent.postMessage({ name: "dromaeo:ready" }, "*"); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function initTest(curID){ 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("<div class='result-item'></div>") 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .append( testElems[ curID ] ) 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .append( "<p>" + (tests[curID] ? tests[ curID ].desc : "") + "<br/><a href='" + 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tests[curID] && tests[curID].origin ? tests[ curID ].origin[1] : "") + "'>Origin</a>, <a href='tests/" + 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tests[curID] ? tests[ curID ].file : "") + "'>Source</a>, <b>Tests:</b> " + 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tests[curID] && tests[curID].tags ? tests[ curID ].tags.join(", ") : "") + "</p>" ) 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .append( "<ol class='results'></ol>" ) 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .appendTo("#main"); 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function resultsLoaded(id, datas){ 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var results = {}; 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var runs = {}; 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var output = ""; 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var excluded = []; 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var overview = document.getElementById("overview"); 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var d = 0; d < datas.length; d++ ) { 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var data = datas[d]; 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runStyle = data.style; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( datas.length == 1 ) { 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview").before("<div class='results'>Viewing test run #" + id + 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ", run on: " + data.created_at + " by:<br>" + data.useragent + "</div>"); 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[data.id] = data; 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[data.id].mean = 0; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[data.id].error = 0; 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[data.id].num = 0; 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[data.id].name = (data.useragent.match(/(MSIE [\d.]+)/) || 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.useragent.match(/((?:WebKit|Firefox|Shiretoko|Opera)\/[\w.]+)/) || [0,data.id])[1]; 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < data.results.length; i++ ) { 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var result = data.results[i]; 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var curID = result.collection; 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var run = result.run_id; 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.version += data.style; 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !results[curID] ) 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[curID] = {tests:{}, total:{}, version: result.version}; 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( results[curID].version == result.version ) { 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !results[curID].total[run] ) { 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[curID].total[run] = {max:0, mean:0, median:0, min:0, deviation:0, error:0, num:0}; 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[curID].tests[run] = []; 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.error = ((((result.deviation / Math.sqrt(result.runs)) * tDistribution) / result.mean) * 100) || 0; 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[curID].tests[run].push( result ); 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var error = (parseFloat(result.error) / 100) * parseFloat(result.mean); 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) error = (runStyle === "ms" ? error : error == 0 ? 0 : Math.log(error)); 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var total = results[curID].total[run]; 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) total.num++; 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var type in total ) { 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( type == "error" ) { 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) total.error += error; 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if ( type == "mean" ) { 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) total.mean += (runStyle === "ms" ? parseFloat(result.mean) : Math.log(parseFloat(result.mean))); 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if ( type !== "num" ) { 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) total[type] += parseFloat(result[type]); 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[run].num++; 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[run].mean += runStyle === "ms" ? parseFloat(result.mean) : Math.log(parseFloat(result.mean)); 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[run].error += error; 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var runTests = []; 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( datas.length == 1 ) { 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("body").addClass("alldone"); 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < data.results.length; i++ ) { 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var item = data.results[i]; 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var result = item.curID = item.collection; 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !filter.test(result) ) 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !testElems[result] ) { 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runTests.push(result); 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeElem( result ); 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) initTest( result ); 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Compute Standard Errors Mean 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item.sem = (item.deviation / Math.sqrt(item.runs)) * tDistribution; 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Error 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item.error = ((item.sem / item.mean) * 100) || 0; 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) logTest( item ); 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // testDone, testNum, testSummary 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testDone[ result ] = numTests - 1; 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testNum[ result ] = 1; 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTestPos( item ); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("div.result-item").addClass("done"); 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalTime = time = timePerTest; 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTime(); 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#overview input").remove(); 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTimebar(); 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Remove results where there is only one comparison set 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var id in results ) { 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var num = 0; 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var ntest in results[id].tests ) { 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) num++; 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( num > 1 ) 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( num <= 1 ) { 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) excluded.push( id ); 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete results[id]; 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var preoutput = "<tr><td></td>"; 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) preoutput += "<th><a href='?id=" + run + "'>" + runs[run].name + "</a></th>"; 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) //preoutput += "<th>Winning %</th></tr>"; 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) preoutput += "</tr>"; 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var result in results ) { 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Skip results that we're filtering out 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !filter.test(result) ) 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runTests.push(result); 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( runStyle === "runs/s" ) { 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) { 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var mean = results[result].total[run].mean - 0; 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var error = results[result].total[run].error - 0; 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mean = Math.pow(Math.E, mean / results[result].total[run].num); 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) error = Math.pow(Math.E, error / results[result].total[run].num); 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[result].total[run].mean = mean; 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results[result].total[run].error = error; 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var name = tests[result] ? tests[result].name : result; 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = processWinner(results[result].total); 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<tr><th class='name'><span onclick='toggleResults(this.nextSibling);'>▶ </span>" + 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<a href='' onclick='return toggleResults(this);'>" + name + "</a></th>"; 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) { 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var mean = results[result].total[run].mean - 0; 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var error = results[result].total[run].error - 0; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<td class='" + (tmp[run] || '') + "'>" + mean.toFixed(2) + "<small>" + runStyle + " ±" + ((error / mean) * 100).toFixed(2) + "%</small></td>"; 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) //showWinner(tmp); 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "</tr>"; 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var _tests = results[result].tests, _data = _tests[run], _num = _data.length; 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i = 0; i < _num; i++ ) { 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<tr class='onetest hidden'><td><small>" + _data[i].name + "</small></td>"; 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) { 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<td>" + (_tests[run][i].mean - 0).toFixed(2) + "<small>" + runStyle + " ±" + (_tests[run][i].error - 0).toFixed(2) + "%</small></td>"; 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<td></td></tr>"; 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( runStyle === "runs/s" ) { 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) { 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[run].mean = Math.pow(Math.E, runs[run].mean / runs[run].num); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) runs[run].error = Math.pow(Math.E, runs[run].error / runs[run].num); 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = processWinner(runs); 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totaloutput = ""; 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( runStyle === "ms" ) { 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totaloutput += "<tr><th class='name'>Total:</th>"; 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totaloutput += "<tr><th class='name'>Total Score:</th>"; 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var run in runs ) { 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totaloutput += "<th class='name " + (tmp[run] || '') + "' title='" + (tmp[run + "title"] || '') + "'>" + runs[run].mean.toFixed(2) + "<small>" + runStyle + " ±" + ((runs[run].error / runs[run].mean) * 100).toFixed(2) + "%</small></th>"; 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) //showWinner(tmp); 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totaloutput += "</tr>"; 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) overview.className = ""; 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) overview.innerHTML = "<div class='resultwrap'><table class='results'>" + preoutput + totaloutput + output + totaloutput + "</table>" + (excluded.length ? "<div style='text-align:left;'><small><b>Excluded Tests:</b> " + excluded.sort().join(", ") + "</small></div>" : "") + "</div>"; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#wrapper").append("<center><a href='?" + runTests.join("|") + "'>Re-run tests</a></center>"); 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function showWinner(tmp){ 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( datas.length > 1 ) { 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( tmp.tie ) 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<th>Tie</th>"; 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output += "<th>" + tmp.diff + "%</th>"; 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.toggleResults = function(elem){ 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var span = elem.previousSibling; 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elem.blur(); 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elem = elem.parentNode.parentNode.nextSibling; 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) span.innerHTML = elem.className.indexOf("hidden") < 0 ? "▶ " : "▼ "; 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ( elem && elem.className.indexOf("onetest") >= 0 ) { 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elem.className = "onetest" + (elem.className.indexOf("hidden") >= 0 ? " " : " hidden"); 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elem = elem.nextSibling; 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function updateTime(){ 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) time -= timePerTest; 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#left").html(Math.floor(time / 60) + ":" + (time % 60 < 10 ? "0" : "" ) + Math.floor(time % 60)); 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var w = ((totalTime - time) / totalTime) * 100; 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#timebar").width((w < 1 ? 1 : w) + "%"); 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function logTest(data){ 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Keep a running summary going 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) data.mean = parseFloat(data.mean); 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var mean = (runStyle === "runs/s" ? Math.log(data.mean) : data.mean); 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testSummary[data.curID] = (testSummary[data.curID] || 0) + mean; 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testSummaryNum[data.curID] = (testSummaryNum[data.curID] || 0) + 1; 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxTotal += mean; 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxTotalNum++; 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testDone[data.curID]--; 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTestPos(data); 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testElems[data.curID].next().next().append("<li><b>" + data.name + 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ":</b> " + data.mean.toFixed(2) + "<small>" + runStyle + " ±" + data.error.toFixed(2) + "%</small></li>"); 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dataStore.push(data); 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function updateTestPos(data, update){ 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !update ) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testDone[data.curID]++; 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var per = (testDone[data.curID] / (testNum[data.curID] * numTests)) * 100; 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( update ) 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) per = 1; 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var mean = (runStyle === "runs/s" ? 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Math.pow(Math.E, testSummary[data.curID] / testSummaryNum[data.curID]) : 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testSummary[data.curID]); 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testElems[data.curID].html("<b>" + (tests[data.curID] ? tests[data.curID].name : data.curID) + 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ":</b> <div class='bar'><div style='width:" + 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) per + "%;'>" + (per >= 100 ? "<span>" + mean.toFixed(2) + runStyle + "</span>" : "") + "</div></div>"); 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( per >= 100 && testSummary[data.curID] > 0 ) { 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testElems[data.curID].parent().addClass("done"); 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function processWinner(data){ 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var minVal = -1, min2Val = -1, min, min2; 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for ( var i in data ) { 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var total = data[i].mean; 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( minVal == -1 || (runStyle === "ms" && total <= minVal || runStyle === "runs/s" && total >= minVal) ) { 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) min2Val = minVal; 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) min2 = min; 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) minVal = total; 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) min = i; 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if ( min2Val == -1 || (runStyle === "ms" && total <= minVal || runStyle === "runs/s" && total >= min2Val) ) { 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) min2Val = total; 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) min2 = i; 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tieVal = (runStyle === "ms" ? minVal : min2Val) + data[min].error + data[min2].error; 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ret = { 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) winner: min, 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diff: runStyle === "ms" ? 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) -1 * Math.round((1 - (min2Val / minVal)) * 100) : 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Math.round(((minVal / min2Val) - 1) * 100), 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tie: minVal == min2Val || (runStyle === "ms" ? tieVal >= min2Val : tieVal >= minVal) 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret.tie = ret.tie || ret.diff == 0; 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( ret.tie ) { 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min ] = 'tie'; 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min2 ] = 'tie'; 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min + 'title' ] = "Tied with another run."; 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min2 + 'title' ] = "Tied with another run."; 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min ] = 'winner'; 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( min2Val > -1 ) { 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ret[ min + 'title' ] = "Won by " + ret.diff + "%."; 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ret; 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function makeElem(testID){ 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( tests[testID] ) { 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cat = tests[testID].category, catsm = cat.replace(/[^\w]/g, "-"); 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( !$("#" + catsm).length ) { 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#main").append("<h2 id='" + catsm + "' class='test'><a href='?cat=" + cat +"'>" + cat + '</a><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est. Time: <strong id="left">0:00</strong></span></div></div>'); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testElems[testID] = $("<div class='test'></div>") 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .click(function(){ 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var next = jQuery(this).next().next(); 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ( next.children().length == 0 ) return; 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var display = next.css("display"); 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) next.css("display", display == 'none' ? 'block' : 'none'); 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateTestPos({curID: testID, collection: tests[testID] ? tests[testID].name : testID, version: testVersions[testID]}, true); 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.addEventListener("message", function(event) { 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (event.data.name) { 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "dromaeo:start": 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $("#pause").click(); 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.log("Unknwon message:" + JSON.stringify(event.data)); 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}); 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)})(); 807