|  | // 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" | 
|  |  | 
|  | "crypto/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) | 
|  | } | 
|  | } |