mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-21 07:55:10 +02:00
Work on creating tests for rsync api
This commit is contained in:
@@ -219,6 +219,14 @@ func Concat[T any](slices ...[]T) []T {
|
||||
return result
|
||||
}
|
||||
|
||||
func ShiftLeft[T any](s []T, amt int) []T {
|
||||
leftover := len(s) - amt
|
||||
if leftover > 0 {
|
||||
copy(s, s[amt:])
|
||||
}
|
||||
return s[:leftover]
|
||||
}
|
||||
|
||||
func SetStructDefaults(v reflect.Value) (err error) {
|
||||
for _, field := range reflect.VisibleFields(v.Type()) {
|
||||
if defval := field.Tag.Get("default"); defval != "" {
|
||||
|
||||
35
tools/utils/random/random.go
Normal file
35
tools/utils/random/random.go
Normal file
@@ -0,0 +1,35 @@
|
||||
// License: GPLv3 Copyright: 2023, Kovid Goyal, <kovid at kovidgoyal.net>
|
||||
|
||||
package random
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
"golang.org/x/exp/constraints"
|
||||
)
|
||||
|
||||
var _ = fmt.Print
|
||||
|
||||
// Return a random integer in the range [0, limit). limit must be > 0
|
||||
func Int[T constraints.Integer](limit T) T {
|
||||
b := big.NewInt(int64(limit))
|
||||
n, err := rand.Int(rand.Reader, b)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return T(n.Uint64())
|
||||
}
|
||||
|
||||
// Return one of items randomnly
|
||||
func Choice[T any](items ...T) T {
|
||||
return items[Int(len(items))]
|
||||
}
|
||||
|
||||
// Write randomn bytes into the provided slice
|
||||
func Bytes(b []byte) {
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user