ROOT :: Rectangle.{ 0.0, 0.0, 100.0, 100.0, }; TESTS :: Test.[ { "top left", ROOT, { 2.0, 2.0 }, .TOP | .LEFT, { 0.0, 0.0, 200.0, 200.0 } }, { "top right", ROOT, { 2.0, 2.0 }, .TOP | .RIGHT, { -100.0, 0.0, 200.0, 200.0 } }, { "top mid", ROOT, { 2.0, 2.0 }, .TOP | .MID, { -50.0, 0.0, 200.0, 200.0 } }, { "mid left", ROOT, { 2.0, 2.0 }, .MID | .LEFT, { 0.0, -50.0, 200.0, 200.0 } }, { "mid right", ROOT, { 2.0, 2.0 }, .MID | .RIGHT, { -100.0, -50.0, 200.0, 200.0 } }, { "mid (none)", ROOT, { 2.0, 2.0 }, .NONE, { -50.0, -50.0, 200.0, 200.0 } }, { "mid", ROOT, { 2.0, 2.0 }, .MID, { -50.0, -50.0, 200.0, 200.0 } }, { "bot left", ROOT, { 2.0, 2.0 }, .BOTTOM | .LEFT, { 0.0, -100.0, 200.0, 200.0 } }, { "bot right", ROOT, { 2.0, 2.0 }, .BOTTOM | .RIGHT, { -100.0, -100.0, 200.0, 200.0 } }, { "bot mid", ROOT, { 2.0, 2.0 }, .BOTTOM | .MID, { -50.0, -100.0, 200.0, 200.0 } }, ]; MY_ASS_CODE :: #code { log_error("\n%: Test failed: '%'", loc, `it.label); log_error("-------------------"); log_error(":Given\n%\n\n", a); log_error(":Expected\n%\n\n", b); `return false; } Rectangle :: struct { x: float; /** top-left corner position x */ y: float; /** top-left corner position y */ width: float; height: float; } Test :: struct { label: string; root: Rectangle; scale: Vector2; origin: Rect_Origin; expected: Rectangle; } operator == :: (a: Rectangle, b: Rectangle) -> bool { result := true; result &= a.x == b.x; result &= a.y == b.y; result &= a.width == b.width; result &= a.height == b.height; return result; } run :: () -> bool { for TESTS { new := rect_scale(it.root, it.scale, it.origin); #if false then log_vars(it.label, new); ass(new, it.expected, MY_ASS_CODE); } /** Test with pointer */ root := ROOT; test :: TESTS[TESTS.count-1]; rect_scale(*root, test.scale, test.origin); ass(root == test.expected); return true; } #import "Basic"; #import "Print_Vars"; #import "Math"; #import,file "../0x2_Math.jai"; #load "assertion.jai";