]> Cypherpunks.ru repositories - govpn.git/blobdiff - internal/subtle/aliasing_test.go
Preparing move to modules
[govpn.git] / internal / subtle / aliasing_test.go
diff --git a/internal/subtle/aliasing_test.go b/internal/subtle/aliasing_test.go
new file mode 100644 (file)
index 0000000..dba65b5
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package subtle_test
+
+import (
+       "testing"
+
+       "go.cypherpunks.ru/govpn/v7/internal/subtle"
+)
+
+var a, b [100]byte
+
+var aliasingTests = []struct {
+       x, y                       []byte
+       anyOverlap, inexactOverlap bool
+}{
+       {a[:], b[:], false, false},
+       {a[:], b[:0], false, false},
+       {a[:], b[:50], false, false},
+       {a[40:50], a[50:60], false, false},
+       {a[40:50], a[60:70], false, false},
+       {a[:51], a[50:], true, true},
+       {a[:], a[:], true, false},
+       {a[:50], a[:60], true, false},
+       {a[:], nil, false, false},
+       {nil, nil, false, false},
+       {a[:], a[:0], false, false},
+       {a[:10], a[:10:20], true, false},
+       {a[:10], a[5:10:20], true, true},
+}
+
+func testAliasing(t *testing.T, i int, x, y []byte, anyOverlap, inexactOverlap bool) {
+       any := subtle.AnyOverlap(x, y)
+       if any != anyOverlap {
+               t.Errorf("%d: wrong AnyOverlap result, expected %v, got %v", i, anyOverlap, any)
+       }
+       inexact := subtle.InexactOverlap(x, y)
+       if inexact != inexactOverlap {
+               t.Errorf("%d: wrong InexactOverlap result, expected %v, got %v", i, inexactOverlap, any)
+       }
+}
+
+func TestAliasing(t *testing.T) {
+       for i, tt := range aliasingTests {
+               testAliasing(t, i, tt.x, tt.y, tt.anyOverlap, tt.inexactOverlap)
+               testAliasing(t, i, tt.y, tt.x, tt.anyOverlap, tt.inexactOverlap)
+       }
+}