Work on creating tests for rsync api

This commit is contained in:
Kovid Goyal
2023-07-03 15:41:40 +05:30
parent 278a3986e5
commit 26c22f0086
5 changed files with 133 additions and 28 deletions

View File

@@ -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 != "" {

View 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)
}
}