summaryrefslogtreecommitdiff
path: root/src/item_test.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2015-01-02 04:49:30 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2015-01-04 00:37:29 +0900
commitf3177305d5572b26f135fc045481358b4eb1bf69 (patch)
treed59fd9587e44e998581a131875bf45e243df6c6e /src/item_test.go
parent7ba93d9f8351be64b37c65ae04d594ee261d5d26 (diff)
downloadfzf-f3177305d5572b26f135fc045481358b4eb1bf69.tar.gz
Rewrite fzf in Go
Diffstat (limited to 'src/item_test.go')
-rw-r--r--src/item_test.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/item_test.go b/src/item_test.go
new file mode 100644
index 00000000..1e316291
--- /dev/null
+++ b/src/item_test.go
@@ -0,0 +1,78 @@
+package fzf
+
+import (
+ "sort"
+ "testing"
+)
+
+func TestOffsetSort(t *testing.T) {
+ offsets := []Offset{
+ Offset{3, 5}, Offset{2, 7},
+ Offset{1, 3}, Offset{2, 9}}
+ sort.Sort(ByOrder(offsets))
+
+ if offsets[0][0] != 1 || offsets[0][1] != 3 ||
+ offsets[1][0] != 2 || offsets[1][1] != 7 ||
+ offsets[2][0] != 2 || offsets[2][1] != 9 ||
+ offsets[3][0] != 3 || offsets[3][1] != 5 {
+ t.Error("Invalid order:", offsets)
+ }
+}
+
+func TestRankComparison(t *testing.T) {
+ if compareRanks(Rank{3, 0, 5}, Rank{2, 0, 7}) ||
+ !compareRanks(Rank{3, 0, 5}, Rank{3, 0, 6}) ||
+ !compareRanks(Rank{1, 2, 3}, Rank{1, 3, 2}) ||
+ !compareRanks(NilRank, Rank{0, 0, 0}) ||
+ compareRanks(Rank{0, 0, 0}, NilRank) {
+ t.Error("Invalid order")
+ }
+}
+
+// Match length, string length, index
+func TestItemRank(t *testing.T) {
+ strs := []string{"foo", "foobar", "bar", "baz"}
+ item1 := Item{text: &strs[0], index: 1, offsets: []Offset{}}
+ rank1 := item1.Rank()
+ if rank1[0] != 0 || rank1[1] != 3 || rank1[2] != 1 {
+ t.Error(item1.Rank())
+ }
+ // Only differ in index
+ item2 := Item{text: &strs[0], index: 0, offsets: []Offset{}}
+
+ items := []*Item{&item1, &item2}
+ sort.Sort(ByRelevance(items))
+ if items[0] != &item2 || items[1] != &item1 {
+ t.Error(items)
+ }
+
+ items = []*Item{&item2, &item1, &item1, &item2}
+ sort.Sort(ByRelevance(items))
+ if items[0] != &item2 || items[1] != &item2 ||
+ items[2] != &item1 || items[3] != &item1 {
+ t.Error(items)
+ }
+
+ // Sort by relevance
+ item3 := Item{text: &strs[1], index: 2, offsets: []Offset{Offset{1, 3}, Offset{5, 7}}}
+ item4 := Item{text: &strs[1], index: 2, offsets: []Offset{Offset{1, 2}, Offset{6, 7}}}
+ item5 := Item{text: &strs[2], index: 2, offsets: []Offset{Offset{1, 3}, Offset{5, 7}}}
+ item6 := Item{text: &strs[2], index: 2, offsets: []Offset{Offset{1, 2}, Offset{6, 7}}}
+ items = []*Item{&item1, &item2, &item3, &item4, &item5, &item6}
+ sort.Sort(ByRelevance(items))
+ if items[0] != &item2 || items[1] != &item1 ||
+ items[2] != &item6 || items[3] != &item4 ||
+ items[4] != &item5 || items[5] != &item3 {
+ t.Error(items)
+ }
+
+ // Sort merged lists
+ lists := [][]*Item{
+ []*Item{&item2, &item4, &item5}, []*Item{&item1, &item6}, []*Item{&item3}}
+ items = SortMerge(lists)
+ if items[0] != &item2 || items[1] != &item1 ||
+ items[2] != &item6 || items[3] != &item4 ||
+ items[4] != &item5 || items[5] != &item3 {
+ t.Error(items)
+ }
+}