Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Translation of Mike Taylor's selection sort unit tests from Ruby to JavaScript.
- // http://reprog.wordpress.com/2010/05/20/what-does-it-take-to-test-a-sorting-routine/
- function arraysAreEqual(arr1, arr2) {
- if (arr1.length !== arr2.length) {
- return false;
- } else {
- for (var i = 0; i < arr1.length; i++) {
- if (arr1[i] !== arr2[i]) {
- return false;
- }
- }
- }
- return true;
- }
- function numericComp(a, b) {
- return (a < b ? -1 :
- a > b ? 1 : 0);
- }
- var output = (
- console !== undefined && console.hasOwnProperty("log") ?
- console.log :
- function(msg) { alert(msg); }
- );
- var tests = [
- [],
- [0],
- [0, 0],
- [0, 0, 0],
- [0, 1],
- [1, 0],
- [0, 1, 2],
- [0, 2, 1],
- [1, 0, 2],
- [1, 2, 0],
- [2, 0, 1],
- [2, 1, 0],
- [0, 1, 1],
- [1, 0, 1],
- [1, 1, 0],
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
- [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
- [42, 9, 17, 54, 602, -3, 54, 999, -11],
- [-11, -3, 9, 17, 42, 54, 54, 602, 999],
- [6, -Infinity, 7, -Number.MAX_VALUE, -3, 0, Infinity, 1, Number.MAX_VALUE, -26]
- ];
- var random_tests = [];
- for (var i = 0; i < 10; i++) {
- var a = [];
- var size = Math.floor(Math.random() * 100);
- for (var j = 0; j < size; j++) {
- a.push(Math.random() * 1000000-500000);
- }
- random_tests.push(a);
- }
- var ntests = 0;
- var nok = 0;
- var all_tests = tests.concat(random_tests);
- for (var i = 0; i < all_tests.length; i++) {
- var a = all_tests[i];
- var copy = a.slice();
- selectionSort(copy);
- if (arraysAreEqual(copy, a.sort(numericComp))) {
- nok += 1;
- } else {
- output("failed test " + i + ": [" + a.join(' ') + "] -> [" + copy.join(' ') + "]");
- }
- ntests += 1;
- }
- output("passed " + nok + " of " + ntests + " tests (" + 100*nok/ntests + "%)");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement