mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
Add topic_generator.reverse_wrap_exclude().
This allows us to traverse a list backwards, cycling to the bottom as needed. This code is going to be used for the "A" key that cycles upward in the stream sidebar. It's probably overkill for that use case, but it does give us O(1) behavior and avoids the pitfall of accidentally mutating a list when reversing it.
This commit is contained in:
@@ -80,6 +80,67 @@ function is_odd(i) { return i % 2 === 1; }
|
||||
assert.equal(gen.next(), 200);
|
||||
}());
|
||||
|
||||
(function test_reverse() {
|
||||
var gen = tg.reverse_list_generator([10, 20, 30]);
|
||||
assert.equal(gen.next(), 30);
|
||||
assert.equal(gen.next(), 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
// If second parameter is not in the list, we just traverse the list
|
||||
// in reverse.
|
||||
gen = tg.reverse_wrap_exclude([10, 20, 30]);
|
||||
assert.equal(gen.next(), 30);
|
||||
assert.equal(gen.next(), 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
gen = tg.reverse_wrap_exclude([10, 20, 30], 'whatever');
|
||||
assert.equal(gen.next(), 30);
|
||||
assert.equal(gen.next(), 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
// Witness the mostly typical cycling behavior.
|
||||
gen = tg.reverse_wrap_exclude([5, 10, 20, 30], 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), 5);
|
||||
assert.equal(gen.next(), 30);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
gen = tg.reverse_wrap_exclude([5, 10, 20, 30], 5);
|
||||
assert.equal(gen.next(), 30);
|
||||
assert.equal(gen.next(), 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
gen = tg.reverse_wrap_exclude([5, 10, 20, 30], 30);
|
||||
assert.equal(gen.next(), 20);
|
||||
assert.equal(gen.next(), 10);
|
||||
assert.equal(gen.next(), 5);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
// Test small lists.
|
||||
gen = tg.reverse_wrap_exclude([], 5);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
gen = tg.reverse_wrap_exclude([5], 5);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
|
||||
gen = tg.reverse_wrap_exclude([5], 10);
|
||||
assert.equal(gen.next(), 5);
|
||||
assert.equal(gen.next(), undefined);
|
||||
assert.equal(gen.next(), undefined);
|
||||
}());
|
||||
|
||||
(function test_fchain() {
|
||||
var mults = function (n) {
|
||||
var ret = 0;
|
||||
|
||||
Reference in New Issue
Block a user