mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-12-25 14:36:35 +08:00
新版IP库管理阶段性提交(未完成)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
20
internal/utils/numberutils/utils_test.go
Normal file
20
internal/utils/numberutils/utils_test.go
Normal 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))
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user