--- /dev/null
+// Copyright 2019 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 cache
+
+import (
+ "go/ast"
+ "go/parser"
+ "testing"
+)
+
+func TestArrayLength(t *testing.T) {
+ tests := []struct {
+ expr string
+ length int
+ }{
+ {`[...]int{0,1,2,3,4,5,6,7,8,9}`, 10},
+ {`[...]int{9:0}`, 10},
+ {`[...]int{19-10:0}`, 10},
+ {`[...]int{19-10:0, 17-10:0, 18-10:0}`, 10},
+ }
+
+ for _, tt := range tests {
+ expr, err := parser.ParseExpr(tt.expr)
+ if err != nil {
+ t.Fatal(err)
+ }
+ l, ok := arrayLength(expr.(*ast.CompositeLit))
+ if !ok {
+ t.Errorf("arrayLength did not recognize expression %#v", expr)
+ }
+ if l != tt.length {
+ t.Errorf("arrayLength(%#v) = %v, want %v", expr, l, tt.length)
+ }
+ }
+}