浏览代码

Moved LessRunes to types package

Jguer 5 年之前
父节点
当前提交
3d31b52799
共有 6 个文件被更改,包括 70 次插入33 次删除
  1. 2 1
      dep.go
  2. 30 0
      pkg/types/runes.go
  3. 33 0
      pkg/types/runes_test.go
  4. 2 2
      query.go
  5. 3 3
      upgrade.go
  6. 0 27
      utils.go

+ 2 - 1
dep.go

@@ -5,6 +5,7 @@ import (
 	"strings"
 
 	alpm "github.com/Jguer/go-alpm"
+	"github.com/Jguer/yay/v9/pkg/types"
 	rpc "github.com/mikkeloscar/aur"
 )
 
@@ -33,7 +34,7 @@ func (q providers) Less(i, j int) bool {
 		return false
 	}
 
-	return lessRunes([]rune(q.Pkgs[i].Name), []rune(q.Pkgs[j].Name))
+	return types.LessRunes([]rune(q.Pkgs[i].Name), []rune(q.Pkgs[j].Name))
 }
 
 func (q providers) Swap(i, j int) {

+ 30 - 0
pkg/types/runes.go

@@ -0,0 +1,30 @@
+package types
+
+import "unicode"
+
+// LessRunes compares two rune values, and returns true if the first argument is lexicographicaly smaller.
+func LessRunes(iRunes, jRunes []rune) bool {
+	max := len(iRunes)
+	if max > len(jRunes) {
+		max = len(jRunes)
+	}
+
+	for idx := 0; idx < max; idx++ {
+		ir := iRunes[idx]
+		jr := jRunes[idx]
+
+		lir := unicode.ToLower(ir)
+		ljr := unicode.ToLower(jr)
+
+		if lir != ljr {
+			return lir < ljr
+		}
+
+		// the lowercase runes are the same, so compare the original
+		if ir != jr {
+			return ir < jr
+		}
+	}
+
+	return len(iRunes) < len(jRunes)
+}

+ 33 - 0
pkg/types/runes_test.go

@@ -0,0 +1,33 @@
+package types
+
+import "testing"
+
+func TestLessRunes(t *testing.T) {
+	t.Parallel()
+	type args struct {
+		iRunes []rune
+		jRunes []rune
+	}
+	tests := []struct {
+		name string
+		args args
+		want bool
+	}{
+		{name: "nilslices", args: args{iRunes: nil, jRunes: nil}, want: false},
+		{name: "emptyslices", args: args{iRunes: []rune{}, jRunes: []rune{}}, want: false},
+		{name: "simpleslice a,b", args: args{iRunes: []rune{'a'}, jRunes: []rune{'b'}}, want: true},
+		{name: "simpleslice b,a", args: args{iRunes: []rune{'b'}, jRunes: []rune{'a'}}, want: false},
+		{name: "equalslice", args: args{iRunes: []rune{'a', 'a', 'a'}, jRunes: []rune{'a', 'a', 'a'}}, want: false},
+		{name: "uppercase", args: args{iRunes: []rune{'a'}, jRunes: []rune{'A'}}, want: false},
+		{name: "longerFirstArg", args: args{iRunes: []rune{'a', 'b'}, jRunes: []rune{'a'}}, want: false},
+		{name: "longerSecondArg", args: args{iRunes: []rune{'a'}, jRunes: []rune{'a', 'b'}}, want: true},
+		{name: "utf8 less", args: args{iRunes: []rune{'世', '2', '0'}, jRunes: []rune{'世', '界', '3'}}, want: true},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			if got := LessRunes(tt.args.iRunes, tt.args.jRunes); got != tt.want {
+				t.Errorf("LessRunes() = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}

+ 2 - 2
query.go

@@ -38,9 +38,9 @@ func (q aurQuery) Less(i, j int) bool {
 	case "popularity":
 		result = q[i].Popularity > q[j].Popularity
 	case "name":
-		result = lessRunes([]rune(q[i].Name), []rune(q[j].Name))
+		result = types.LessRunes([]rune(q[i].Name), []rune(q[j].Name))
 	case "base":
-		result = lessRunes([]rune(q[i].PackageBase), []rune(q[j].PackageBase))
+		result = types.LessRunes([]rune(q[i].PackageBase), []rune(q[j].PackageBase))
 	case "submitted":
 		result = q[i].FirstSubmitted < q[j].FirstSubmitted
 	case "modified":

+ 3 - 3
upgrade.go

@@ -29,14 +29,14 @@ func (u upSlice) Less(i, j int) bool {
 	if u[i].Repository == u[j].Repository {
 		iRunes := []rune(u[i].Name)
 		jRunes := []rune(u[j].Name)
-		return lessRunes(iRunes, jRunes)
+		return types.LessRunes(iRunes, jRunes)
 	}
 
 	syncDB, err := alpmHandle.SyncDBs()
 	if err != nil {
 		iRunes := []rune(u[i].Repository)
 		jRunes := []rune(u[j].Repository)
-		return lessRunes(iRunes, jRunes)
+		return types.LessRunes(iRunes, jRunes)
 	}
 
 	less := false
@@ -59,7 +59,7 @@ func (u upSlice) Less(i, j int) bool {
 
 	iRunes := []rune(u[i].Repository)
 	jRunes := []rune(u[j].Repository)
-	return lessRunes(iRunes, jRunes)
+	return types.LessRunes(iRunes, jRunes)
 
 }
 

+ 0 - 27
utils.go

@@ -2,7 +2,6 @@ package main
 
 import (
 	"fmt"
-	"unicode"
 )
 
 const gitEmptyTree = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
@@ -59,32 +58,6 @@ func (mss mapStringSet) Add(n string, v string) {
 	mss[n].set(v)
 }
 
-func lessRunes(iRunes, jRunes []rune) bool {
-	max := len(iRunes)
-	if max > len(jRunes) {
-		max = len(jRunes)
-	}
-
-	for idx := 0; idx < max; idx++ {
-		ir := iRunes[idx]
-		jr := jRunes[idx]
-
-		lir := unicode.ToLower(ir)
-		ljr := unicode.ToLower(jr)
-
-		if lir != ljr {
-			return lir < ljr
-		}
-
-		// the lowercase runes are the same, so compare the original
-		if ir != jr {
-			return ir < jr
-		}
-	}
-
-	return len(iRunes) < len(jRunes)
-}
-
 func stringSliceEqual(a, b []string) bool {
 	if a == nil && b == nil {
 		return true