1
0
mirror of https://github.com/golang/go synced 2024-11-18 13:44:48 -07:00
go/internal/lsp/cache/parse_test.go
Heschi Kreinick 9176cd3008 internal/lsp/cache: trim ellipsis array literals
While looking at Kubernetes I noticed that golang.org/x/text packages
were some of the largest. The problem is the large code-generated
tables, which use ellipsis array literals. Teach gopls to trim the cases
that matter there.

While silly, this trims ~60MB off the live heap, so I think it might be
worth it.

Change-Id: I0cfd80bd5fbc8703ac628312982af9c6ed871758
Reviewed-on: https://go-review.googlesource.com/c/tools/+/248180
Run-TryBot: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2020-08-12 23:16:40 +00:00

38 lines
792 B
Go

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