Files
go-mxl-pattern-generator/internal/generator/wgpu_move_test.go
T
2026-09-16 23:58:45 +03:00

52 lines
1.8 KiB
Go

package generator
import (
"path/filepath"
"testing"
)
func TestWGPUMoveSquare(t *testing.T) {
const width, height = 1920, 1080
g, err := NewWGPUGenerator(width, height, filepath.Join("..", "..", "kernels", "dynamic", "smpteBars.wgsl"))
if err != nil {
t.Fatalf("init: %v", err)
}
defer g.Close()
buf := make([]byte, width*height*8/3)
// square center x=960 sits on the green bar (534/253/207):
// inverted -> Y=1004-534=470, Cb=1024-253=771, Cr=1024-207=817
const invY, invCb, invCr = 470, 771, 817
const greenY = 534 // bar 3 covers x in [823,1098)
// tick 0: offset = 0, square centered at (960,540), half = 75
if err := g.GenerateFrame(buf, 0); err != nil {
t.Fatalf("tick 0: %v", err)
}
if y, cb, cr := sampleV210(buf, width, 960, 540); y != invY || cb != invCb || cr != invCr {
t.Fatalf("tick 0 center: got %d/%d/%d, want inverted green 470/771/817", y, cb, cr)
}
if y, _, _ := sampleV210(buf, width, 860, 540); y != greenY {
t.Fatalf("tick 0 left of square: Y=%d, want green %d", y, greenY)
}
// amplitude = centerX - half = 885: tick 79 (sin~1) puts the square at
// the far right, x in [1770,1920), over the gray side panel
// (414/512/512): inverted -> 590/512/512.
const invFlankY, invFlankCb, invFlankCr = 590, 512, 512
if err := g.GenerateFrame(buf, 79); err != nil {
t.Fatalf("tick 79: %v", err)
}
if y, cb, cr := sampleV210(buf, width, 1840, 540); y != invFlankY || cb != invFlankCb || cr != invFlankCr {
t.Fatalf("tick 79 shifted center: got %d/%d/%d, want inverted gray 590/512/512", y, cb, cr)
}
if y, _, _ := sampleV210(buf, width, 960, 540); y != greenY {
t.Fatalf("tick 79 old center: Y=%d, want green %d (square moved away)", y, greenY)
}
// bars untouched far from the square
if y, _, _ := sampleV210(buf, width, 100, 100); y != 414 {
t.Fatalf("tick 79 bars: Y=%d, want gray flank 414", y)
}
}