新版IP库管理阶段性提交(未完成)

This commit is contained in:
GoEdgeLab
2022-08-13 23:55:48 +08:00
parent 0388d6c557
commit 0e411ff59f
42 changed files with 2628 additions and 172 deletions

View File

@@ -9,3 +9,33 @@ func FormatInt64(value int64) string {
func FormatInt(value int) string {
return strconv.Itoa(value)
}
func Max[T int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | float32 | float64](values ...T) T {
if len(values) == 0 {
return 0
}
var max T
for index, value := range values {
if index == 0 {
max = value
} else if value > max {
max = value
}
}
return max
}
func Min[T int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | float32 | float64](values ...T) T {
if len(values) == 0 {
return 0
}
var min T
for index, value := range values {
if index == 0 {
min = value
} else if value < min {
min = value
}
}
return min
}

View File

@@ -0,0 +1,20 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package numberutils_test
import (
"github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils"
"testing"
)
func TestMax(t *testing.T) {
t.Log(numberutils.Max[int](1, 2, 3))
t.Log(numberutils.Max[int32](1, 2, 3))
t.Log(numberutils.Max[float32](1.2, 2.3, 3.4))
}
func TestMin(t *testing.T) {
t.Log(numberutils.Min[int](1, 2, 3))
t.Log(numberutils.Min[int32](1, 2, 3))
t.Log(numberutils.Min[float32](1.2, 2.3, 3.4))
}

View File

@@ -2,7 +2,9 @@
package utils
import "strings"
import (
"strings"
)
// SplitStrings 分隔字符串
// 忽略其中为空的片段
@@ -30,3 +32,33 @@ func ContainsStringInsensitive(list []string, search string) bool {
}
return false
}
// Similar 计算相似度
// between 0-1
func Similar(s1 string, s2 string) float32 {
var r1s = []rune(s1)
var r2s = []rune(s2)
var l1 = len(r1s)
var l2 = len(r2s)
if l1 > l2 {
r1s, r2s = r2s, r1s
}
if len(r1s) == 0 {
return 0
}
var count = 0
for _, r := range r1s {
for index, r2 := range r2s {
if r == r2 {
count++
r2s = r2s[index+1:]
break
}
}
}
return (float32(count)/float32(l1) + float32(count)/float32(l2)) / 2
}

View File

@@ -1,22 +1,30 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package utils
package utils_test
import (
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/iwind/TeaGo/assert"
"testing"
)
func TestSplitStrings(t *testing.T) {
t.Log(SplitStrings("a, b, c", ","))
t.Log(SplitStrings("a, b, c, ", ","))
t.Log(utils.SplitStrings("a, b, c", ","))
t.Log(utils.SplitStrings("a, b, c, ", ","))
}
func TestContainsStringInsensitive(t *testing.T) {
var a = assert.NewAssertion(t)
a.IsTrue(ContainsStringInsensitive([]string{"a", "b", "C"}, "A"))
a.IsTrue(ContainsStringInsensitive([]string{"a", "b", "C"}, "b"))
a.IsTrue(ContainsStringInsensitive([]string{"a", "b", "C"}, "c"))
a.IsFalse(ContainsStringInsensitive([]string{"a", "b", "C"}, "d"))
a.IsTrue(utils.ContainsStringInsensitive([]string{"a", "b", "C"}, "A"))
a.IsTrue(utils.ContainsStringInsensitive([]string{"a", "b", "C"}, "b"))
a.IsTrue(utils.ContainsStringInsensitive([]string{"a", "b", "C"}, "c"))
a.IsFalse(utils.ContainsStringInsensitive([]string{"a", "b", "C"}, "d"))
}
func TestSimilar(t *testing.T) {
t.Log(utils.Similar("", ""))
t.Log(utils.Similar("", "a"))
t.Log(utils.Similar("abc", "bcd"))
t.Log(utils.Similar("efgj", "hijk"))
t.Log(utils.Similar("efgj", "klmn"))
}