diff --git a/tools/cmd/benchmark/main.go b/tools/cmd/benchmark/main.go index 6ef8e78b1..77aab1663 100644 --- a/tools/cmd/benchmark/main.go +++ b/tools/cmd/benchmark/main.go @@ -150,6 +150,27 @@ func unicode() (r result, err error) { return result{desc, data_sz, duration, reps}, nil } +func unique_unicode() (r result, err error) { + const cell_count = 256 * 1024 + const combining_count = 0x70 + var data strings.Builder + data.Grow(cell_count * 10) + for i := range cell_count { + q := i + data.WriteByte('a') + for range 3 { + data.WriteRune(rune(0x300 + q%combining_count)) + q /= combining_count + } + } + const desc = "Unique multi-codepoint Unicode cells" + duration, data_sz, reps, err := benchmark_data(desc, data.String(), opts) + if err != nil { + return result{}, err + } + return result{desc, data_sz, duration, reps}, nil +} + func ascii_with_csi() (r result, err error) { const sz = 1024*1024 + 17 out := make([]byte, 0, sz+48) @@ -244,7 +265,7 @@ func present_result(r result, col_width int) { func all_benchamrks() []string { return []string{ - "ascii", "unicode", "csi", "images", "long_escape_codes", + "ascii", "unicode", "unique_unicode", "csi", "images", "long_escape_codes", } } @@ -276,6 +297,13 @@ func main(args []string) (err error) { results = append(results, r) } + if slices.Index(args, "unique_unicode") >= 0 { + if r, err = unique_unicode(); err != nil { + return err + } + results = append(results, r) + } + if slices.Index(args, "csi") >= 0 { if r, err = ascii_with_csi(); err != nil { return err