package remembering import ( "flag" "fmt" "io" "os" "path/filepath" "strings" ) var linesFlag = flag.Int( "lines", 1000000, "The number of menu lines to rank", ) func MainTest() { flag.Parse() n := *linesFlag tmp, err := os.MkdirTemp("", "remembering-bench-") if err != nil { panic(err) } defer os.RemoveAll(tmp) err = os.Setenv("XDG_DATA_HOME", tmp) if err != nil { panic(err) } menu := strings.Builder{} for i := 0; i < n; i++ { fmt.Fprintf(&menu, "item-%07d\n", i) } // half the items are already known, with spread counts profile := strings.Builder{} for i := 0; i < n; i += 2 { fmt.Fprintf( &profile, "%d profile item-%07d\n", i%97, i, ) } path, err := profilePath("bench") if err != nil { panic(err) } err = os.MkdirAll(filepath.Dir(path), 0755) if err != nil { panic(err) } err = os.WriteFile( path, []byte(profile.String()), 0644, ) if err != nil { panic(err) } rc := run(envT{ allArgs: []string{ "remembering", "-p", "bench", "--", "tail", "-n1", }, in: strings.NewReader(menu.String()), out: io.Discard, err: os.Stderr, }) if rc != 0 { panic("ranking failed") } fmt.Printf("ranked %d lines\n", n) }