package world import ( "testing" "github.com/stretchr/testify/require" ) func TestRender_SortsByPriorityWithinTile(t *testing.T) { t.Parallel() w := NewWorld(10, 10) w.resetGrid(2 * SCALE) // Same tile. Priorities deliberately mixed. _, err := w.AddCircle(5, 5, 1, CircleWithPriority(500)) require.NoError(t, err) _, err = w.AddLine(1, 5, 9, 5, LineWithPriority(100)) require.NoError(t, err) _, err = w.AddPoint(5, 6, PointWithPriority(300)) require.NoError(t, err) for _, obj := range w.objects { w.indexObject(obj) } params := RenderParams{ ViewportWidthPx: 10, ViewportHeightPx: 10, MarginXPx: 0, MarginYPx: 0, CameraXWorldFp: 5 * SCALE, CameraYWorldFp: 5 * SCALE, CameraZoom: 1.0, Options: &RenderOptions{ // default: wrap on }, } d := &fakePrimitiveDrawer{} require.NoError(t, w.Render(d, params)) // We verify the first occurrence of each primitive kind follows priority order. // Since each object is drawn with Add* + Fill/Stroke immediately, order should match. cmds := d.Commands() firstLine := indexOfFirst(cmds, "AddLine") firstCircle := indexOfFirst(cmds, "AddCircle") firstPoint := indexOfFirst(cmds, "AddPoint") require.NotEqual(t, -1, firstLine) require.NotEqual(t, -1, firstCircle) require.NotEqual(t, -1, firstPoint) require.Less(t, firstLine, firstPoint) require.Less(t, firstPoint, firstCircle) // 300 before 500 } func indexOfFirst(cmds []fakeDrawerCommand, name string) int { for i, c := range cmds { if c.Name == name { return i } } return -1 }