// 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 packages_test import ( "runtime" "testing" "time" "golang.org/x/tools/go/packages" "golang.org/x/tools/internal/testenv" ) // This test loads the metadata for the standard library, func TestStdlibMetadata(t *testing.T) { testenv.NeedsGoPackages(t) runtime.GC() t0 := time.Now() var memstats runtime.MemStats runtime.ReadMemStats(&memstats) alloc := memstats.Alloc // Load, parse and type-check the program. cfg := &packages.Config{Mode: packages.LoadAllSyntax} pkgs, err := packages.Load(cfg, "std") if err != nil { t.Fatalf("failed to load metadata: %v", err) } if packages.PrintErrors(pkgs) > 0 { t.Fatal("there were errors loading standard library") } t1 := time.Now() runtime.GC() runtime.ReadMemStats(&memstats) runtime.KeepAlive(pkgs) t.Logf("Loaded %d packages", len(pkgs)) numPkgs := len(pkgs) want := 150 // 186 on linux, 185 on windows. if numPkgs < want { t.Errorf("Loaded only %d packages, want at least %d", numPkgs, want) } t.Log("GOMAXPROCS: ", runtime.GOMAXPROCS(0)) t.Log("Metadata: ", t1.Sub(t0)) // ~800ms on 12 threads t.Log("#MB: ", int64(memstats.Alloc-alloc)/1000000) // ~1MB }