Add explicit failure reasons to tests
This commit is contained in:
@@ -74,13 +74,13 @@ character_clip_found_and_missing :: proc(t: ^testing.T) {
|
|||||||
defer destroy_test_character(&data)
|
defer destroy_test_character(&data)
|
||||||
|
|
||||||
clip, ok := character_clip(&data, "idle")
|
clip, ok := character_clip(&data, "idle")
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "character_clip should find idle")
|
||||||
testing.expect_value(t, len(clip.frames), 3)
|
testing.expect_value(t, len(clip.frames), 3)
|
||||||
testing.expect(t, clip.loop)
|
testing.expect(t, clip.loop, "idle clip should loop")
|
||||||
testing.expect_value(t, clip.fps, f32(10))
|
testing.expect_value(t, clip.fps, f32(10))
|
||||||
|
|
||||||
_, ok = character_clip(&data, "missing")
|
_, ok = character_clip(&data, "missing")
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_clip should miss unknown name")
|
||||||
|
|
||||||
data.def.clips["empty"] = Clip_Def {
|
data.def.clips["empty"] = Clip_Def {
|
||||||
loop = true,
|
loop = true,
|
||||||
@@ -88,7 +88,7 @@ character_clip_found_and_missing :: proc(t: ^testing.T) {
|
|||||||
frames = nil,
|
frames = nil,
|
||||||
}
|
}
|
||||||
_, ok = character_clip(&data, "empty")
|
_, ok = character_clip(&data, "empty")
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_clip should reject empty frames")
|
||||||
}
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
@@ -161,7 +161,7 @@ update_sprite_advances_multiple_frames :: proc(t: ^testing.T) {
|
|||||||
s := spawn_sprite(&data, {}, "idle", 0)
|
s := spawn_sprite(&data, {}, "idle", 0)
|
||||||
update_sprite(&s, 0.25)
|
update_sprite(&s, 0.25)
|
||||||
testing.expect_value(t, s.frame, 2)
|
testing.expect_value(t, s.frame, 2)
|
||||||
testing.expect(t, s.time > 0.049 && s.time < 0.051)
|
testing.expect(t, s.time > 0.049 && s.time < 0.051, "leftover time after multi-frame advance should be ~0.05")
|
||||||
}
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ parse_char_def_happy_path :: proc(t: ^testing.T) {
|
|||||||
def, ok := parse_char_def(src)
|
def, ok := parse_char_def(src)
|
||||||
defer destroy_char_def(&def)
|
defer destroy_char_def(&def)
|
||||||
|
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "parse_char_def should succeed on valid JSON")
|
||||||
testing.expect_value(t, def.id, "toad")
|
testing.expect_value(t, def.id, "toad")
|
||||||
testing.expect_value(t, def.atlas, "toad.atlas.png")
|
testing.expect_value(t, def.atlas, "toad.atlas.png")
|
||||||
testing.expect_value(t, def.version, 1)
|
testing.expect_value(t, def.version, 1)
|
||||||
@@ -20,8 +20,8 @@ parse_char_def_happy_path :: proc(t: ^testing.T) {
|
|||||||
testing.expect_value(t, def.pivot[1], f32(1.0))
|
testing.expect_value(t, def.pivot[1], f32(1.0))
|
||||||
|
|
||||||
idle, found := def.clips["idle"]
|
idle, found := def.clips["idle"]
|
||||||
testing.expect(t, found)
|
testing.expect(t, found, "expected idle clip in parsed def")
|
||||||
testing.expect(t, idle.loop)
|
testing.expect(t, idle.loop, "idle clip should loop")
|
||||||
testing.expect_value(t, idle.fps, f32(8.0))
|
testing.expect_value(t, idle.fps, f32(8.0))
|
||||||
testing.expect_value(t, len(idle.frames), 1)
|
testing.expect_value(t, len(idle.frames), 1)
|
||||||
testing.expect_value(t, idle.frames[0].rect, [4]int{1, 2, 3, 4})
|
testing.expect_value(t, idle.frames[0].rect, [4]int{1, 2, 3, 4})
|
||||||
@@ -30,7 +30,7 @@ parse_char_def_happy_path :: proc(t: ^testing.T) {
|
|||||||
@(test)
|
@(test)
|
||||||
parse_char_def_bad_json :: proc(t: ^testing.T) {
|
parse_char_def_bad_json :: proc(t: ^testing.T) {
|
||||||
_, ok := parse_char_def(transmute([]u8)string("{ not json"))
|
_, ok := parse_char_def(transmute([]u8)string("{ not json"))
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "parse_char_def should fail on invalid JSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
@@ -51,17 +51,17 @@ character_frame_rect_hit_and_miss :: proc(t: ^testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rect, ok := character_frame_rect(&data, "idle", 1)
|
rect, ok := character_frame_rect(&data, "idle", 1)
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "character_frame_rect should find idle frame 1")
|
||||||
testing.expect_value(t, rect, [4]int{50, 60, 70, 80})
|
testing.expect_value(t, rect, [4]int{50, 60, 70, 80})
|
||||||
|
|
||||||
_, ok = character_frame_rect(&data, "missing", 0)
|
_, ok = character_frame_rect(&data, "missing", 0)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame_rect should miss unknown clip")
|
||||||
|
|
||||||
_, ok = character_frame_rect(&data, "idle", -1)
|
_, ok = character_frame_rect(&data, "idle", -1)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame_rect should reject negative index")
|
||||||
|
|
||||||
_, ok = character_frame_rect(&data, "idle", 2)
|
_, ok = character_frame_rect(&data, "idle", 2)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame_rect should reject out-of-range index")
|
||||||
}
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
@@ -85,7 +85,7 @@ character_frame_returns_full_def :: proc(t: ^testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
frame, ok := character_frame(&data, "idle", 0)
|
frame, ok := character_frame(&data, "idle", 0)
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "character_frame should find idle frame 0")
|
||||||
testing.expect_value(t, frame.rect, [4]int{10, 20, 30, 40})
|
testing.expect_value(t, frame.rect, [4]int{10, 20, 30, 40})
|
||||||
testing.expect_value(t, frame.source_size, [2]int{100, 200})
|
testing.expect_value(t, frame.source_size, [2]int{100, 200})
|
||||||
testing.expect_value(t, frame.trim_offset, [2]int{5, 7})
|
testing.expect_value(t, frame.trim_offset, [2]int{5, 7})
|
||||||
@@ -94,7 +94,7 @@ character_frame_returns_full_def :: proc(t: ^testing.T) {
|
|||||||
@(test)
|
@(test)
|
||||||
character_frame_nil_and_bad_index :: proc(t: ^testing.T) {
|
character_frame_nil_and_bad_index :: proc(t: ^testing.T) {
|
||||||
_, ok := character_frame(nil, "idle", 0)
|
_, ok := character_frame(nil, "idle", 0)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame should fail on nil data")
|
||||||
|
|
||||||
data: Character_Data
|
data: Character_Data
|
||||||
data.def.clips = make(map[string]Clip_Def)
|
data.def.clips = make(map[string]Clip_Def)
|
||||||
@@ -106,11 +106,11 @@ character_frame_nil_and_bad_index :: proc(t: ^testing.T) {
|
|||||||
data.def.clips["idle"] = Clip_Def{frames = frames}
|
data.def.clips["idle"] = Clip_Def{frames = frames}
|
||||||
|
|
||||||
_, ok = character_frame(&data, "idle", -1)
|
_, ok = character_frame(&data, "idle", -1)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame should reject negative index")
|
||||||
_, ok = character_frame(&data, "idle", 1)
|
_, ok = character_frame(&data, "idle", 1)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame should reject out-of-range index")
|
||||||
_, ok = character_frame(&data, "missing", 0)
|
_, ok = character_frame(&data, "missing", 0)
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "character_frame should miss unknown clip")
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_char_def :: proc(def: ^Char_Def) {
|
destroy_char_def :: proc(def: ^Char_Def) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ shader_filenames_per_backend :: proc(t: ^testing.T) {
|
|||||||
@(test)
|
@(test)
|
||||||
choose_shader_runtime_prefers_msl :: proc(t: ^testing.T) {
|
choose_shader_runtime_prefers_msl :: proc(t: ^testing.T) {
|
||||||
rt, ok := choose_shader_runtime_from_formats({.MSL, .SPIRV, .DXIL})
|
rt, ok := choose_shader_runtime_from_formats({.MSL, .SPIRV, .DXIL})
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "should pick a runtime when MSL is available")
|
||||||
testing.expect_value(t, rt.backend, Shader_Backend.Metal_MSL)
|
testing.expect_value(t, rt.backend, Shader_Backend.Metal_MSL)
|
||||||
testing.expect_value(t, rt.shader_dir, "shaders/metal")
|
testing.expect_value(t, rt.shader_dir, "shaders/metal")
|
||||||
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.MSL})
|
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.MSL})
|
||||||
@@ -30,7 +30,7 @@ choose_shader_runtime_prefers_msl :: proc(t: ^testing.T) {
|
|||||||
@(test)
|
@(test)
|
||||||
choose_shader_runtime_spirv_only :: proc(t: ^testing.T) {
|
choose_shader_runtime_spirv_only :: proc(t: ^testing.T) {
|
||||||
rt, ok := choose_shader_runtime_from_formats({.SPIRV})
|
rt, ok := choose_shader_runtime_from_formats({.SPIRV})
|
||||||
testing.expect(t, ok)
|
testing.expect(t, ok, "should pick SPIR-V when it is the only format")
|
||||||
testing.expect_value(t, rt.backend, Shader_Backend.Vulkan_SPIRV)
|
testing.expect_value(t, rt.backend, Shader_Backend.Vulkan_SPIRV)
|
||||||
testing.expect_value(t, rt.shader_dir, "shaders/vulkan")
|
testing.expect_value(t, rt.shader_dir, "shaders/vulkan")
|
||||||
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.SPIRV})
|
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.SPIRV})
|
||||||
@@ -39,5 +39,5 @@ choose_shader_runtime_spirv_only :: proc(t: ^testing.T) {
|
|||||||
@(test)
|
@(test)
|
||||||
choose_shader_runtime_empty_fails :: proc(t: ^testing.T) {
|
choose_shader_runtime_empty_fails :: proc(t: ^testing.T) {
|
||||||
_, ok := choose_shader_runtime_from_formats({})
|
_, ok := choose_shader_runtime_from_formats({})
|
||||||
testing.expect(t, !ok)
|
testing.expect(t, !ok, "empty format set should fail")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ frame_uvs_unflipped :: proc(t: ^testing.T) {
|
|||||||
testing.expect_value(t, v0, f32(0.1))
|
testing.expect_value(t, v0, f32(0.1))
|
||||||
testing.expect_value(t, u1, f32(0.4))
|
testing.expect_value(t, u1, f32(0.4))
|
||||||
testing.expect_value(t, v1, f32(0.3))
|
testing.expect_value(t, v1, f32(0.3))
|
||||||
testing.expect(t, u0 < u1)
|
testing.expect(t, u0 < u1, "unflipped UVs should have u0 < u1")
|
||||||
}
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
|
|||||||
Reference in New Issue
Block a user