mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-22 08:48:43 +02:00
simplify task package implementation
This commit is contained in:
@@ -1,30 +0,0 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type AtomicValue[T any] struct {
|
||||
atomic.Value
|
||||
}
|
||||
|
||||
func (a *AtomicValue[T]) Load() T {
|
||||
return a.Value.Load().(T)
|
||||
}
|
||||
|
||||
func (a *AtomicValue[T]) Store(v T) {
|
||||
a.Value.Store(v)
|
||||
}
|
||||
|
||||
func (a *AtomicValue[T]) Swap(v T) T {
|
||||
return a.Value.Swap(v).(T)
|
||||
}
|
||||
|
||||
func (a *AtomicValue[T]) CompareAndSwap(oldV, newV T) bool {
|
||||
return a.Value.CompareAndSwap(oldV, newV)
|
||||
}
|
||||
|
||||
func (a *AtomicValue[T]) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(a.Load())
|
||||
}
|
||||
30
internal/utils/atomic/atomic_value.go
Normal file
30
internal/utils/atomic/atomic_value.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package atomic
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type Value[T any] struct {
|
||||
atomic.Value
|
||||
}
|
||||
|
||||
func (a *Value[T]) Load() T {
|
||||
return a.Value.Load().(T)
|
||||
}
|
||||
|
||||
func (a *Value[T]) Store(v T) {
|
||||
a.Value.Store(v)
|
||||
}
|
||||
|
||||
func (a *Value[T]) Swap(v T) T {
|
||||
return a.Value.Swap(v).(T)
|
||||
}
|
||||
|
||||
func (a *Value[T]) CompareAndSwap(oldV, newV T) bool {
|
||||
return a.Value.CompareAndSwap(oldV, newV)
|
||||
}
|
||||
|
||||
func (a *Value[T]) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(a.Load())
|
||||
}
|
||||
@@ -152,9 +152,10 @@ func (m Map[KT, VT]) CollectErrorsParallel(do func(k KT, v VT) error) []error {
|
||||
return m.CollectErrors(do)
|
||||
}
|
||||
|
||||
errs := make([]error, 0)
|
||||
mu := sync.Mutex{}
|
||||
wg := sync.WaitGroup{}
|
||||
var errs []error
|
||||
var mu sync.Mutex
|
||||
var wg sync.WaitGroup
|
||||
|
||||
m.Range(func(k KT, v VT) bool {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
@@ -171,24 +172,6 @@ func (m Map[KT, VT]) CollectErrorsParallel(do func(k KT, v VT) error) []error {
|
||||
return errs
|
||||
}
|
||||
|
||||
// RemoveAll removes all key-value pairs from the map where the value matches the given criteria.
|
||||
//
|
||||
// Parameters:
|
||||
//
|
||||
// criteria: function to determine whether a value should be removed
|
||||
//
|
||||
// Returns:
|
||||
//
|
||||
// nothing
|
||||
func (m Map[KT, VT]) RemoveAll(criteria func(VT) bool) {
|
||||
m.Range(func(k KT, v VT) bool {
|
||||
if criteria(v) {
|
||||
m.Delete(k)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
func (m Map[KT, VT]) Has(k KT) bool {
|
||||
_, ok := m.Load(k)
|
||||
return ok
|
||||
|
||||
@@ -61,3 +61,7 @@ func (set Set[T]) RangeAllParallel(f func(T)) {
|
||||
func (set Set[T]) Size() int {
|
||||
return set.m.Size()
|
||||
}
|
||||
|
||||
func (set Set[T]) IsEmpty() bool {
|
||||
return set.m == nil || set.m.Size() == 0
|
||||
}
|
||||
|
||||
@@ -20,10 +20,17 @@ func IgnoreError[Result any](r Result, _ error) Result {
|
||||
return r
|
||||
}
|
||||
|
||||
func fmtError(err error) string {
|
||||
if err == nil {
|
||||
return "<nil>"
|
||||
}
|
||||
return ansi.StripANSI(err.Error())
|
||||
}
|
||||
|
||||
func ExpectNoError(t *testing.T, err error) {
|
||||
t.Helper()
|
||||
if err != nil && !reflect.ValueOf(err).IsNil() {
|
||||
t.Errorf("expected err=nil, got %s", ansi.StripANSI(err.Error()))
|
||||
if err != nil {
|
||||
t.Errorf("expected err=nil, got %s", fmtError(err))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
@@ -31,7 +38,7 @@ func ExpectNoError(t *testing.T, err error) {
|
||||
func ExpectError(t *testing.T, expected error, err error) {
|
||||
t.Helper()
|
||||
if !errors.Is(err, expected) {
|
||||
t.Errorf("expected err %s, got %s", expected, ansi.StripANSI(err.Error()))
|
||||
t.Errorf("expected err %s, got %s", expected, fmtError(err))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
@@ -39,7 +46,7 @@ func ExpectError(t *testing.T, expected error, err error) {
|
||||
func ExpectError2(t *testing.T, input any, expected error, err error) {
|
||||
t.Helper()
|
||||
if !errors.Is(err, expected) {
|
||||
t.Errorf("%v: expected err %s, got %s", input, expected, ansi.StripANSI(err.Error()))
|
||||
t.Errorf("%v: expected err %s, got %s", input, expected, fmtError(err))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
@@ -48,7 +55,7 @@ func ExpectErrorT[T error](t *testing.T, err error) {
|
||||
t.Helper()
|
||||
var errAs T
|
||||
if !errors.As(err, &errAs) {
|
||||
t.Errorf("expected err %T, got %s", errAs, ansi.StripANSI(err.Error()))
|
||||
t.Errorf("expected err %T, got %s", errAs, fmtError(err))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user