Blame tests/unit/insertSorted.js

Packit d345d1
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
Packit d345d1
Packit d345d1
// Test cases for Util.insertSorted
Packit d345d1
Packit d345d1
const JsUnit = imports.jsUnit;
Packit d345d1
Packit d345d1
// Needed so that Util can bring some UI stuff
Packit d345d1
// we don't actually use
Packit d345d1
const Environment = imports.ui.environment;
Packit d345d1
Environment.init();
Packit d345d1
const Util = imports.misc.util;
Packit d345d1
Packit d345d1
function assertArrayEquals(errorMessage, array1, array2) {
Packit d345d1
    JsUnit.assertEquals(errorMessage + ' length',
Packit d345d1
                        array1.length, array2.length);
Packit d345d1
    for (let j = 0; j < array1.length; j++) {
Packit d345d1
        JsUnit.assertEquals(errorMessage + ' item ' + j,
Packit d345d1
                            array1[j], array2[j]);
Packit d345d1
    }
Packit d345d1
}
Packit d345d1
Packit d345d1
function cmp(one, two) {
Packit d345d1
    return one-two;
Packit d345d1
}
Packit d345d1
Packit d345d1
let arrayInt = [1, 2, 3, 5, 6];
Packit d345d1
Util.insertSorted(arrayInt, 4, cmp);
Packit d345d1
Packit d345d1
assertArrayEquals('first test', [1,2,3,4,5,6], arrayInt);
Packit d345d1
Packit d345d1
// no comparator, integer sorting is implied
Packit d345d1
Util.insertSorted(arrayInt, 3);
Packit d345d1
Packit d345d1
assertArrayEquals('second test', [1,2,3,3,4,5,6], arrayInt);
Packit d345d1
Packit d345d1
let obj1 = { a: 1 };
Packit d345d1
let obj2 = { a: 2, b: 0 };
Packit d345d1
let obj3 = { a: 2, b: 1 };
Packit d345d1
let obj4 = { a: 3 };
Packit d345d1
Packit d345d1
function objCmp(one, two) {
Packit d345d1
    return one.a - two.a;
Packit d345d1
}
Packit d345d1
Packit d345d1
let arrayObj = [obj1, obj3, obj4];
Packit d345d1
Packit d345d1
// obj2 compares equivalent to obj3, should be
Packit d345d1
// inserted before
Packit d345d1
Util.insertSorted(arrayObj, obj2, objCmp);
Packit d345d1
Packit d345d1
assertArrayEquals('object test', [obj1, obj2, obj3, obj4], arrayObj);
Packit d345d1
Packit d345d1
function checkedCmp(one, two) {
Packit d345d1
    if (typeof one != 'number' ||
Packit d345d1
        typeof two != 'number')
Packit d345d1
        throw new TypeError('Invalid type passed to checkedCmp');
Packit d345d1
Packit d345d1
    return one-two;
Packit d345d1
}
Packit d345d1
Packit d345d1
let arrayEmpty = [];
Packit d345d1
Packit d345d1
// check that no comparisons are made when
Packit d345d1
// inserting in a empty array
Packit d345d1
Util.insertSorted(arrayEmpty, 3, checkedCmp);
Packit d345d1
Packit d345d1
// Insert at the end and check that we don't
Packit d345d1
// access past it
Packit d345d1
Util.insertSorted(arrayEmpty, 4, checkedCmp);
Packit d345d1
Util.insertSorted(arrayEmpty, 5, checkedCmp);
Packit d345d1
Packit d345d1
// Some more insertions
Packit d345d1
Util.insertSorted(arrayEmpty, 2, checkedCmp);
Packit d345d1
Util.insertSorted(arrayEmpty, 1, checkedCmp);
Packit d345d1
Packit d345d1
assertArrayEquals('checkedCmp test', [1, 2, 3, 4, 5], arrayEmpty);