// Copyright 2026 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 testdeps import ( "bufio" "strconv" "strings" "testing" ) func TestTestLogDedup(t *testing.T) { var b strings.Builder l := &testLog{w: bufio.NewWriter(&b)} l.Stat("a") l.Stat("a") l.Open("a") l.Getenv("HOME") l.Getenv("HOME") l.Chdir("/x") l.Stat("a") // relative to /x now, so it must be logged again l.Stat("a") l.Getenv("HOME") l.Open("") // dropped l.Open("b\nc") // dropped if err := l.w.Flush(); err != nil { t.Fatal(err) } want := "stat a\nopen a\ngetenv HOME\nchdir /x\nstat a\ngetenv HOME\n" if got := b.String(); got != want { t.Errorf("log:\n%s\nwant:\n%s", got, want) } } // TestTestLogBounded checks that the seen set stays bounded and never // drops an entry that was not written before, however many there are. func TestTestLogBounded(t *testing.T) { var b strings.Builder l := &testLog{w: bufio.NewWriter(&b)} const n = 100000 most := 0 for i := range n { l.Stat("f" + strconv.Itoa(i)) most = max(most, len(l.seen)) } if most > n/2 { t.Errorf("seen grew to %d entries for %d distinct names", most, n) } if err := l.w.Flush(); err != nil { t.Fatal(err) } if got := strings.Count(b.String(), "\n"); got != n { t.Errorf("wrote %d lines for %d distinct entries", got, n) } }