Update dependencies (#5518)
This commit is contained in:
22
vendor/github.com/agnivade/levenshtein/.travis.yml
generated
vendored
22
vendor/github.com/agnivade/levenshtein/.travis.yml
generated
vendored
@@ -1,7 +1,23 @@
|
||||
language: go
|
||||
|
||||
# See https://travis-ci.community/t/goos-js-goarch-wasm-go-run-fails-panic-newosproc-not-implemented/1651
|
||||
#addons:
|
||||
# chrome: stable
|
||||
|
||||
before_install:
|
||||
- export GO111MODULE=on
|
||||
|
||||
#install:
|
||||
#- go get github.com/agnivade/wasmbrowsertest
|
||||
#- mv $GOPATH/bin/wasmbrowsertest $GOPATH/bin/go_js_wasm_exec
|
||||
#- export PATH=$GOPATH/bin:$PATH
|
||||
|
||||
go:
|
||||
- 1.9.x
|
||||
- 1.10.x
|
||||
- 1.11.x
|
||||
- 1.13.x
|
||||
- 1.14.x
|
||||
- 1.15.x
|
||||
- tip
|
||||
|
||||
script:
|
||||
#- GOOS=js GOARCH=wasm go test -v
|
||||
- go test -v
|
||||
|
||||
10
vendor/github.com/agnivade/levenshtein/Makefile
generated
vendored
10
vendor/github.com/agnivade/levenshtein/Makefile
generated
vendored
@@ -4,10 +4,12 @@ install:
|
||||
go install
|
||||
|
||||
lint:
|
||||
gofmt -l -s -w . && go tool vet -all . && golint
|
||||
gofmt -l -s -w . && go vet . && golint -set_exit_status=1 .
|
||||
|
||||
test:
|
||||
go test -race -v -coverprofile=coverage.txt -covermode=atomic
|
||||
test: # The first 2 go gets are to support older Go versions
|
||||
go get github.com/arbovm/levenshtein
|
||||
go get github.com/dgryski/trifles/leven
|
||||
GO111MODULE=on go test -race -v -coverprofile=coverage.txt -covermode=atomic
|
||||
|
||||
bench:
|
||||
go test -run=XXX -bench=. -benchmem
|
||||
go test -run=XXX -bench=. -benchmem -count=5
|
||||
|
||||
33
vendor/github.com/agnivade/levenshtein/README.md
generated
vendored
33
vendor/github.com/agnivade/levenshtein/README.md
generated
vendored
@@ -1,4 +1,4 @@
|
||||
levenshtein [](https://travis-ci.org/agnivade/levenshtein) [](https://goreportcard.com/report/github.com/agnivade/levenshtein) [](https://godoc.org/github.com/agnivade/levenshtein)
|
||||
levenshtein [](https://travis-ci.org/agnivade/levenshtein) [](https://goreportcard.com/report/github.com/agnivade/levenshtein) [](https://pkg.go.dev/github.com/agnivade/levenshtein)
|
||||
===========
|
||||
|
||||
[Go](http://golang.org) package to calculate the [Levenshtein Distance](http://en.wikipedia.org/wiki/Levenshtein_distance)
|
||||
@@ -6,6 +6,10 @@ levenshtein [. If you need to handle strings larger than that, please pin to version 1.0.3.
|
||||
|
||||
Install
|
||||
-------
|
||||
|
||||
@@ -38,10 +42,10 @@ Benchmarks
|
||||
|
||||
```
|
||||
name time/op
|
||||
Simple/ASCII-4 537ns ± 2%
|
||||
Simple/French-4 956ns ± 0%
|
||||
Simple/Nordic-4 1.95µs ± 1%
|
||||
Simple/Tibetan-4 1.53µs ± 2%
|
||||
Simple/ASCII-4 330ns ± 2%
|
||||
Simple/French-4 617ns ± 2%
|
||||
Simple/Nordic-4 1.16µs ± 4%
|
||||
Simple/Tibetan-4 1.05µs ± 1%
|
||||
|
||||
name alloc/op
|
||||
Simple/ASCII-4 96.0B ± 0%
|
||||
@@ -55,3 +59,22 @@ Simple/French-4 1.00 ± 0%
|
||||
Simple/Nordic-4 1.00 ± 0%
|
||||
Simple/Tibetan-4 1.00 ± 0%
|
||||
```
|
||||
|
||||
Comparisons with other libraries
|
||||
--------------------------------
|
||||
|
||||
```
|
||||
name time/op
|
||||
Leven/ASCII/agniva-4 353ns ± 1%
|
||||
Leven/ASCII/arbovm-4 485ns ± 1%
|
||||
Leven/ASCII/dgryski-4 395ns ± 0%
|
||||
Leven/French/agniva-4 648ns ± 1%
|
||||
Leven/French/arbovm-4 791ns ± 0%
|
||||
Leven/French/dgryski-4 682ns ± 0%
|
||||
Leven/Nordic/agniva-4 1.28µs ± 1%
|
||||
Leven/Nordic/arbovm-4 1.52µs ± 1%
|
||||
Leven/Nordic/dgryski-4 1.32µs ± 1%
|
||||
Leven/Tibetan/agniva-4 1.12µs ± 1%
|
||||
Leven/Tibetan/arbovm-4 1.31µs ± 0%
|
||||
Leven/Tibetan/dgryski-4 1.16µs ± 0%
|
||||
```
|
||||
|
||||
52
vendor/github.com/agnivade/levenshtein/levenshtein.go
generated
vendored
52
vendor/github.com/agnivade/levenshtein/levenshtein.go
generated
vendored
@@ -6,12 +6,17 @@ package levenshtein
|
||||
|
||||
import "unicode/utf8"
|
||||
|
||||
// minLengthThreshold is the length of the string beyond which
|
||||
// an allocation will be made. Strings smaller than this will be
|
||||
// zero alloc.
|
||||
const minLengthThreshold = 32
|
||||
|
||||
// ComputeDistance computes the levenshtein distance between the two
|
||||
// strings passed as an argument. The return value is the levenshtein distance
|
||||
//
|
||||
// Works on runes (Unicode code points) but does not normalize
|
||||
// the input strings. See https://blog.golang.org/normalization
|
||||
// and the golang.org/x/text/unicode/norm pacage.
|
||||
// and the golang.org/x/text/unicode/norm package.
|
||||
func ComputeDistance(a, b string) int {
|
||||
if len(a) == 0 {
|
||||
return utf8.RuneCountInString(b)
|
||||
@@ -25,12 +30,10 @@ func ComputeDistance(a, b string) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
// We need to convert to []rune if the strings are non-ascii.
|
||||
// We need to convert to []rune if the strings are non-ASCII.
|
||||
// This could be avoided by using utf8.RuneCountInString
|
||||
// and then doing some juggling with rune indices.
|
||||
// The primary challenge is keeping track of the previous rune.
|
||||
// With a range loop, its not that easy. And with a for-loop
|
||||
// we need to keep track of the inter-rune width using utf8.DecodeRuneInString
|
||||
// and then doing some juggling with rune indices,
|
||||
// but leads to far more bounds checks. It is a reasonable trade-off.
|
||||
s1 := []rune(a)
|
||||
s2 := []rune(b)
|
||||
|
||||
@@ -41,22 +44,33 @@ func ComputeDistance(a, b string) int {
|
||||
lenS1 := len(s1)
|
||||
lenS2 := len(s2)
|
||||
|
||||
// init the row
|
||||
x := make([]int, lenS1+1)
|
||||
for i := 0; i <= lenS1; i++ {
|
||||
x[i] = i
|
||||
// Init the row.
|
||||
var x []uint16
|
||||
if lenS1+1 > minLengthThreshold {
|
||||
x = make([]uint16, lenS1+1)
|
||||
} else {
|
||||
// We make a small optimization here for small strings.
|
||||
// Because a slice of constant length is effectively an array,
|
||||
// it does not allocate. So we can re-slice it to the right length
|
||||
// as long as it is below a desired threshold.
|
||||
x = make([]uint16, minLengthThreshold)
|
||||
x = x[:lenS1+1]
|
||||
}
|
||||
|
||||
// we start from 1 because index 0 is already 0.
|
||||
for i := 1; i < len(x); i++ {
|
||||
x[i] = uint16(i)
|
||||
}
|
||||
|
||||
// make a dummy bounds check to prevent the 2 bounds check down below.
|
||||
// The one inside the loop is particularly costly.
|
||||
_ = x[lenS1]
|
||||
// fill in the rest
|
||||
for i := 1; i <= lenS2; i++ {
|
||||
prev := i
|
||||
var current int
|
||||
|
||||
prev := uint16(i)
|
||||
for j := 1; j <= lenS1; j++ {
|
||||
|
||||
if s2[i-1] == s1[j-1] {
|
||||
current = x[j-1] // match
|
||||
} else {
|
||||
current := x[j-1] // match
|
||||
if s2[i-1] != s1[j-1] {
|
||||
current = min(min(x[j-1]+1, prev+1), x[j]+1)
|
||||
}
|
||||
x[j-1] = prev
|
||||
@@ -64,10 +78,10 @@ func ComputeDistance(a, b string) int {
|
||||
}
|
||||
x[lenS1] = prev
|
||||
}
|
||||
return x[lenS1]
|
||||
return int(x[lenS1])
|
||||
}
|
||||
|
||||
func min(a, b int) int {
|
||||
func min(a, b uint16) uint16 {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user