Add layout components 001-020 with demos and behavior tests
This commit is contained in:
29 files changed
+2110
-9
No files matched your search
@@ -0,0 +1,90 @@
|
||||
package layout
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/pixel"
|
||||
)
|
||||
|
||||
func panics(t *testing.T, name string, fn func()) {
|
||||
t.Helper()
|
||||
defer func() {
|
||||
if recover() == nil {
|
||||
t.Fatalf("%s did not panic", name)
|
||||
}
|
||||
}()
|
||||
fn()
|
||||
}
|
||||
|
||||
func TestOrDef(t *testing.T) {
|
||||
if orDef("x", 0, 7) != 7 || orDef("x", 3, 7) != 3 {
|
||||
t.Fatal("orDef did not default zero or keep a value")
|
||||
}
|
||||
panics(t, "negative option", func() { orDef("x", -1, 7) })
|
||||
panics(t, "unknown frame style", func() { border(pixel.FrameStyle(99)) })
|
||||
}
|
||||
|
||||
func TestEdges(t *testing.T) {
|
||||
type e struct{ right, below bool }
|
||||
want := []e{{true, true}, {true, true}, {false, true}, {true, false}, {false, false}}
|
||||
for i, w := range want {
|
||||
if r, b := edges(i, 5, 3); r != w.right || b != w.below {
|
||||
t.Errorf("cell %d of 5 in 3 columns: right %v below %v", i, r, b)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLanes(t *testing.T) {
|
||||
got := lanes([]int{40, 24, 56, 32, 24, 48, 32, 40}, 3, 4)
|
||||
want := [][]int{{0, 4, 7}, {1, 3, 6}, {2, 5}}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("lanes %v, want %v", got, want)
|
||||
}
|
||||
panics(t, "zero height", func() { lanes([]int{8, 0}, 2, 4) })
|
||||
}
|
||||
|
||||
func TestShares(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
total, n int
|
||||
want []int
|
||||
}{{10, 3, []int{4, 3, 3}}, {9, 3, []int{3, 3, 3}}, {-5, 2, []int{0, 0}}} {
|
||||
if got := shares(tc.total, tc.n); !reflect.DeepEqual(got, tc.want) {
|
||||
t.Errorf("shares(%d, %d) = %v", tc.total, tc.n, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestThumb(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
h, view, y, maxY, size, at float32
|
||||
}{
|
||||
{60, 100, 0, 1180, 16, 0},
|
||||
{60, 100, 1180, 1180, 16, 44},
|
||||
{10, 50, 30, 1000, 10, 0},
|
||||
{60, 100, 0, 0, 60, 0},
|
||||
{100, 100, 50, 100, 50, 24},
|
||||
} {
|
||||
if size, at := thumb(tc.h, tc.view, tc.y, tc.maxY, 2); size != tc.size || at != tc.at {
|
||||
t.Errorf("thumb(h %v view %v y %v max %v) = %v at %v, want %v at %v", tc.h, tc.view, tc.y, tc.maxY, size, at, tc.size, tc.at)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFit(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
w, h int
|
||||
roomW, roomH float32
|
||||
base, want int
|
||||
}{
|
||||
{64, 40, 256, 200, 2, 4},
|
||||
{64, 40, 200, 200, 2, 2},
|
||||
{10, 10, 0, 0, 1, 1},
|
||||
{160, 144, 1000, 1000, 1, 4},
|
||||
{160, 144, 400, 300, 1, 2},
|
||||
} {
|
||||
if got := fit(tc.w, tc.h, tc.roomW, tc.roomH, tc.base); got != tc.want {
|
||||
t.Errorf("fit(%d×%d in %v×%v from %d) = %d, want %d", tc.w, tc.h, tc.roomW, tc.roomH, tc.base, got, tc.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user