diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-03 13:03:37 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-03 13:03:37 +0200 |
| commit | d80acf0c92ad4b436c23ac881ec24485297a80d8 (patch) | |
| tree | e03bd7699d8e698585a820ec4416a1a5e010683f /internal/flamegraph/layout_test.go | |
| parent | f92382c20193a5366d15c7347dcc8ed2743f3b85 (diff) | |
Extract renderer-agnostic flamegraph layout
Diffstat (limited to 'internal/flamegraph/layout_test.go')
| -rw-r--r-- | internal/flamegraph/layout_test.go | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/internal/flamegraph/layout_test.go b/internal/flamegraph/layout_test.go new file mode 100644 index 0000000..8fa7398 --- /dev/null +++ b/internal/flamegraph/layout_test.go @@ -0,0 +1,77 @@ +package flamegraph + +import ( + "math" + "testing" +) + +func almostEqual(a, b float64) bool { + return math.Abs(a-b) < 1e-6 +} + +func TestBuildFrameLayoutBasicGeometry(t *testing.T) { + tr := newTrie() + tr.add([]string{"A"}, 4) + tr.add([]string{"B"}, 1) + tr.computeTotals() + + cfg := defaultSVGConfig() + cfg.Width = 100 + cfg.FrameHeight = 10 + cfg.FontSize = 10 + cfg.MinWidthPx = 1 + + frames := BuildFrameLayout(tr, cfg) + if len(frames) != 2 { + t.Fatalf("frames len = %d, want 2", len(frames)) + } + + a := frames[0] + if a.Name != "A" { + t.Fatalf("first frame name = %q, want %q", a.Name, "A") + } + if !almostEqual(a.X, 0) { + t.Fatalf("A x = %f, want 0", a.X) + } + if !almostEqual(a.Width, 80) { + t.Fatalf("A width = %f, want 80", a.Width) + } + if !almostEqual(a.Percent, 80) { + t.Fatalf("A percent = %f, want 80", a.Percent) + } + if a.Depth != 1 { + t.Fatalf("A depth = %d, want 1", a.Depth) + } + + b := frames[1] + if b.Name != "B" { + t.Fatalf("second frame name = %q, want %q", b.Name, "B") + } + if !almostEqual(b.X, 80) { + t.Fatalf("B x = %f, want 80", b.X) + } + if !almostEqual(b.Width, 20) { + t.Fatalf("B width = %f, want 20", b.Width) + } +} + +func TestBuildFrameLayoutSkipsFramesBelowMinWidth(t *testing.T) { + tr := newTrie() + tr.add([]string{"A"}, 999) + tr.add([]string{"B"}, 1) + tr.computeTotals() + + cfg := defaultSVGConfig() + cfg.Width = 100 + cfg.FrameHeight = 10 + cfg.FontSize = 10 + cfg.MinWidthPx = 1 + + frames := BuildFrameLayout(tr, cfg) + if len(frames) != 1 { + t.Fatalf("frames len = %d, want 1", len(frames)) + } + if frames[0].Name != "A" { + t.Fatalf("remaining frame name = %q, want %q", frames[0].Name, "A") + } +} |
