зеркало из https://github.com/mozilla/pjs.git
Add Utils.slices. r=philiKON
This commit is contained in:
Родитель
b9947162bf
Коммит
9041807922
|
@ -249,6 +249,24 @@ let Utils = {
|
|||
return Utils.waitForSyncCallback(storageCallback.syncCb);
|
||||
},
|
||||
|
||||
/*
|
||||
* Partition the input array into an array of arrays. Return a generator.
|
||||
*/
|
||||
slices: function slices(arr, sliceSize) {
|
||||
if (!sliceSize || sliceSize <= 0)
|
||||
throw "Invalid slice size.";
|
||||
|
||||
if (sliceSize > arr.length) {
|
||||
yield arr;
|
||||
} else {
|
||||
let offset = 0;
|
||||
while (arr.length > offset) {
|
||||
yield arr.slice(offset, offset + sliceSize);
|
||||
offset += sliceSize;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
byteArrayToString: function byteArrayToString(bytes) {
|
||||
return [String.fromCharCode(byte) for each (byte in bytes)].join("");
|
||||
},
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
Cu.import("resource://services-sync/util.js");
|
||||
|
||||
function run_test() {
|
||||
let input = [1, 2, 3, 4, 5];
|
||||
|
||||
let err;
|
||||
try {
|
||||
Utils.slices(input, 0).next();
|
||||
} catch (ex) {
|
||||
err = ex;
|
||||
}
|
||||
do_check_eq("Invalid slice size.", err);
|
||||
|
||||
err = undefined;
|
||||
try {
|
||||
Utils.slices(input).next();
|
||||
} catch (ex) {
|
||||
err = ex;
|
||||
}
|
||||
do_check_eq("Invalid slice size.", err);
|
||||
|
||||
function slurp(g) [x for each (x in g)]
|
||||
|
||||
let sliced1 = slurp(Utils.slices(input, 1));
|
||||
let sliced2 = slurp(Utils.slices(input, 2));
|
||||
let sliced3 = slurp(Utils.slices(input, 5));
|
||||
let sliced4 = slurp(Utils.slices(input, 7));
|
||||
|
||||
do_check_eq(sliced1.length, 5);
|
||||
do_check_eq(sliced2.length, 3);
|
||||
do_check_eq(sliced3.length, 1);
|
||||
do_check_eq(sliced4.length, 1);
|
||||
sliced1.every(function(x) x.length == 1);
|
||||
_(JSON.stringify(sliced2));
|
||||
do_check_eq(sliced2[0].length, 2);
|
||||
do_check_eq(sliced2[1].length, 2);
|
||||
do_check_eq(sliced2[2].length, 1);
|
||||
sliced3.every(function(x) x.length == 5);
|
||||
sliced4.every(function(x) x.length == 5);
|
||||
|
||||
let sliced5 = slurp(Utils.slices(["foo"], 50));
|
||||
do_check_eq(sliced5.length, 1);
|
||||
do_check_eq(sliced5[0], "foo");
|
||||
|
||||
let sliced6 = slurp(Utils.slices([], 50));
|
||||
do_check_eq(sliced6.length, 1);
|
||||
do_check_eq(sliced6[0].length, 0);
|
||||
}
|
|
@ -97,5 +97,6 @@ tail =
|
|||
[test_utils_sha1.js]
|
||||
[test_utils_sha1hmac.js]
|
||||
[test_utils_sha256HMAC.js]
|
||||
[test_utils_slices.js]
|
||||
[test_utils_stackTrace.js]
|
||||
[test_utils_utf8.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче