absolute: efficient equivalence check method
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m16s
Test / Hakurei (push) Successful in 3m3s
Test / Hpkg (push) Successful in 3m53s
Test / Sandbox (race detector) (push) Successful in 4m16s
Test / Hakurei (race detector) (push) Successful in 4m58s
Test / Flake checks (push) Successful in 1m20s
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m16s
Test / Hakurei (push) Successful in 3m3s
Test / Hpkg (push) Successful in 3m53s
Test / Sandbox (race detector) (push) Successful in 4m16s
Test / Hakurei (race detector) (push) Successful in 4m58s
Test / Flake checks (push) Successful in 1m20s
This is more efficient and makes the call site cleaner. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
9aec2f46fe
commit
31f0dd36df
@ -39,6 +39,15 @@ func (a *Absolute) String() string {
|
|||||||
return a.pathname
|
return a.pathname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Absolute) Is(v *Absolute) bool {
|
||||||
|
if a == nil && v == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return a != nil && v != nil &&
|
||||||
|
a.pathname != zeroString && v.pathname != zeroString &&
|
||||||
|
a.pathname == v.pathname
|
||||||
|
}
|
||||||
|
|
||||||
// NewAbs checks pathname and returns a new [Absolute] if pathname is absolute.
|
// NewAbs checks pathname and returns a new [Absolute] if pathname is absolute.
|
||||||
func NewAbs(pathname string) (*Absolute, error) {
|
func NewAbs(pathname string) (*Absolute, error) {
|
||||||
if !isAbs(pathname) {
|
if !isAbs(pathname) {
|
||||||
|
@ -69,7 +69,7 @@ func TestNewAbs(t *testing.T) {
|
|||||||
wantPanic := `path "etc" is not absolute`
|
wantPanic := `path "etc" is not absolute`
|
||||||
|
|
||||||
if r := recover(); r != wantPanic {
|
if r := recover(); r != wantPanic {
|
||||||
t.Errorf("MustAbsolute: panic = %v; want %v", r, wantPanic)
|
t.Errorf("MustAbs: panic = %v; want %v", r, wantPanic)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -98,6 +98,29 @@ func TestAbsoluteString(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAbsoluteIs(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
a, v *Absolute
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{"nil", (*Absolute)(nil), (*Absolute)(nil), true},
|
||||||
|
{"nil a", (*Absolute)(nil), MustAbs("/"), false},
|
||||||
|
{"nil v", MustAbs("/"), (*Absolute)(nil), false},
|
||||||
|
{"zero", new(Absolute), new(Absolute), false},
|
||||||
|
{"zero a", new(Absolute), MustAbs("/"), false},
|
||||||
|
{"zero v", MustAbs("/"), new(Absolute), false},
|
||||||
|
{"equals", MustAbs("/"), MustAbs("/"), true},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
if got := tc.a.Is(tc.v); got != tc.want {
|
||||||
|
t.Errorf("Is: %v, want %v", got, tc.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type sCheck struct {
|
type sCheck struct {
|
||||||
Pathname *Absolute `json:"val"`
|
Pathname *Absolute `json:"val"`
|
||||||
Magic int `json:"magic"`
|
Magic int `json:"magic"`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user