summaryrefslogtreecommitdiffstats
path: root/src/item_test.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2016-08-19 02:39:32 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2016-08-19 02:39:32 +0900
commit37dc273148df0893053bf5cda0582a23f5c2b2d2 (patch)
treed90f5e96fa97de429265461268b1a6db2703cb4c /src/item_test.go
parentf7f01d109eb05c7eae82c243b6b6d5c5951ee707 (diff)
Micro-optimizations
- Make structs smaller - Introduce Result struct and use it to represent matched items instead of reusing Item struct for that purpose - Avoid unnecessary memory allocation - Avoid growing slice from the initial capacity - Code cleanup
Diffstat (limited to 'src/item_test.go')
-rw-r--r--src/item_test.go108
1 files changed, 11 insertions, 97 deletions
diff --git a/src/item_test.go b/src/item_test.go
index 36a436d3..1efb5f1d 100644
--- a/src/item_test.go
+++ b/src/item_test.go
@@ -1,109 +1,23 @@
package fzf
import (
- "math"
- "sort"
"testing"
- "github.com/junegunn/fzf/src/curses"
"github.com/junegunn/fzf/src/util"
)
-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([5]int32{3, 0, 0, 0, 5}, [5]int32{2, 0, 0, 0, 7}, false) ||
- !compareRanks([5]int32{3, 0, 0, 0, 5}, [5]int32{3, 0, 0, 0, 6}, false) ||
- !compareRanks([5]int32{1, 2, 0, 0, 3}, [5]int32{1, 3, 0, 0, 2}, false) ||
- !compareRanks([5]int32{0, 0, 0, 0, 0}, [5]int32{0, 0, 0, 0, 0}, false) {
- t.Error("Invalid order")
- }
-
- if compareRanks([5]int32{3, 0, 0, 0, 5}, [5]int32{2, 0, 0, 0, 7}, true) ||
- !compareRanks([5]int32{3, 0, 0, 0, 5}, [5]int32{3, 0, 0, 0, 6}, false) ||
- !compareRanks([5]int32{1, 2, 0, 0, 3}, [5]int32{1, 3, 0, 0, 2}, true) ||
- !compareRanks([5]int32{0, 0, 0, 0, 0}, [5]int32{0, 0, 0, 0, 0}, false) {
- t.Error("Invalid order (tac)")
- }
-}
-
-// Match length, string length, index
-func TestItemRank(t *testing.T) {
- // FIXME global
- sortCriteria = []criterion{byMatchLen, byLength}
-
- strs := [][]rune{[]rune("foo"), []rune("foobar"), []rune("bar"), []rune("baz")}
- item1 := Item{text: util.RunesToChars(strs[0]), offsets: []Offset{}, rank: [5]int32{0, 0, 0, 0, 1}}
- rank1 := item1.Rank(true)
- if rank1[0] != math.MaxInt32 || rank1[1] != 3 || rank1[4] != 1 {
- t.Error(item1.Rank(true))
+func TestStringPtr(t *testing.T) {
+ orig := []byte("\x1b[34mfoo")
+ text := []byte("\x1b[34mbar")
+ item := Item{origText: &orig, text: util.ToChars(text)}
+ if item.AsString(true) != "foo" || item.AsString(false) != string(orig) {
+ t.Fail()
}
- // Only differ in index
- item2 := Item{text: util.RunesToChars(strs[0]), offsets: []Offset{}}
-
- items := []*Item{&item1, &item2}
- sort.Sort(ByRelevance(items))
- if items[0] != &item2 || items[1] != &item1 {
- t.Error(items)
+ if item.AsString(true) != "foo" {
+ t.Fail()
}
-
- 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: util.RunesToChars(strs[1]), rank: [5]int32{0, 0, 0, 0, 2}, offsets: []Offset{Offset{1, 3}, Offset{5, 7}}}
- item4 := Item{text: util.RunesToChars(strs[1]), rank: [5]int32{0, 0, 0, 0, 2}, offsets: []Offset{Offset{1, 2}, Offset{6, 7}}}
- item5 := Item{text: util.RunesToChars(strs[2]), rank: [5]int32{0, 0, 0, 0, 2}, offsets: []Offset{Offset{1, 3}, Offset{5, 7}}}
- item6 := Item{text: util.RunesToChars(strs[2]), rank: [5]int32{0, 0, 0, 0, 2}, offsets: []Offset{Offset{1, 2}, Offset{6, 7}}}
- items = []*Item{&item1, &item2, &item3, &item4, &item5, &item6}
- sort.Sort(ByRelevance(items))
- if items[0] != &item6 || items[1] != &item4 ||
- items[2] != &item5 || items[3] != &item3 ||
- items[4] != &item2 || items[5] != &item1 {
- t.Error(items)
- }
-}
-
-func TestColorOffset(t *testing.T) {
- // ------------ 20 ---- -- ----
- // ++++++++ ++++++++++
- // --++++++++-- --++++++++++---
- item := Item{
- offsets: []Offset{Offset{5, 15}, Offset{25, 35}},
- colors: []ansiOffset{
- ansiOffset{[2]int32{0, 20}, ansiState{1, 5, false}},
- ansiOffset{[2]int32{22, 27}, ansiState{2, 6, true}},
- ansiOffset{[2]int32{30, 32}, ansiState{3, 7, false}},
- ansiOffset{[2]int32{33, 40}, ansiState{4, 8, true}}}}
- // [{[0 5] 9 false} {[5 15] 99 false} {[15 20] 9 false} {[22 25] 10 true} {[25 35] 99 false} {[35 40] 11 true}]
-
- offsets := item.colorOffsets(99, false, true)
- assert := func(idx int, b int32, e int32, c int, bold bool) {
- o := offsets[idx]
- if o.offset[0] != b || o.offset[1] != e || o.color != c || o.bold != bold {
- t.Error(o)
- }
+ item.origText = nil
+ if item.AsString(true) != string(text) || item.AsString(false) != string(text) {
+ t.Fail()
}
- assert(0, 0, 5, curses.ColUser, false)
- assert(1, 5, 15, 99, false)
- assert(2, 15, 20, curses.ColUser, false)
- assert(3, 22, 25, curses.ColUser+1, true)
- assert(4, 25, 35, 99, false)
- assert(5, 35, 40, curses.ColUser+2, true)
}