diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-10-20 16:43:42 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-10-27 22:44:39 +0200 |
commit | 206665a2d97106722a6b32e24a504863040ca515 (patch) | |
tree | a2921d527dc04b7a4a0bc6ff3718bbdea4a8aa06 /lib/iterator/index_test.go | |
parent | c5face0b6f922781f1d2ae754c00fdee6c58af20 (diff) | |
download | aerc-206665a2d97106722a6b32e24a504863040ca515.tar.gz |
iterator: add functionality to move indices
Extract the index acrobatics from the message store and move it to
iterator package for re-use and to add unit tests.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/iterator/index_test.go')
-rw-r--r-- | lib/iterator/index_test.go | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/lib/iterator/index_test.go b/lib/iterator/index_test.go new file mode 100644 index 00000000..c9b79304 --- /dev/null +++ b/lib/iterator/index_test.go @@ -0,0 +1,133 @@ +package iterator_test + +import ( + "testing" + + "git.sr.ht/~rjarry/aerc/lib/iterator" +) + +type indexer struct { + start int + end int +} + +func (ip *indexer) StartIndex() int { + return ip.start +} + +func (ip *indexer) EndIndex() int { + return ip.end +} + +func TestMoveIndex(t *testing.T) { + tests := []struct { + idx int + delta int + start int + end int + cb iterator.BoundsCheckFunc + expected int + }{ + { + idx: 0, + delta: 1, + start: 0, + end: 2, + cb: iterator.FixBounds, + expected: 1, + }, + { + idx: 0, + delta: 5, + start: 0, + end: 2, + cb: iterator.FixBounds, + expected: 2, + }, + { + idx: 0, + delta: -1, + start: 0, + end: 2, + cb: iterator.FixBounds, + expected: 0, + }, + { + idx: 0, + delta: 2, + start: 0, + end: 2, + cb: iterator.WrapBounds, + expected: 2, + }, + { + idx: 0, + delta: 3, + start: 0, + end: 2, + cb: iterator.WrapBounds, + expected: 0, + }, + { + idx: 0, + delta: -1, + start: 0, + end: 2, + cb: iterator.WrapBounds, + expected: 2, + }, + { + idx: 2, + delta: 2, + start: 0, + end: 2, + cb: iterator.WrapBounds, + expected: 1, + }, + { + idx: 0, + delta: -2, + start: 0, + end: 2, + cb: iterator.WrapBounds, + expected: 1, + }, + { + idx: 1, + delta: 1, + start: 2, + end: 0, + cb: iterator.FixBounds, + expected: 0, + }, + { + idx: 0, + delta: 1, + start: 2, + end: 0, + cb: iterator.FixBounds, + expected: 0, + }, + { + idx: 0, + delta: 1, + start: 2, + end: 0, + cb: iterator.WrapBounds, + expected: 2, + }, + } + + for i, test := range tests { + idx := iterator.MoveIndex( + test.idx, + test.delta, + &indexer{test.start, test.end}, + test.cb, + ) + if idx != test.expected { + t.Errorf("test %d [%#v] failed: got %d but expected %d", + i, test, idx, test.expected) + } + } +} |