Add explicit failure reasons to tests

This commit is contained in:
2026-08-02 23:53:34 -07:00
parent 248e57d3f0
commit cf888f26cd
4 changed files with 22 additions and 22 deletions
+5 -5
View File
@@ -74,13 +74,13 @@ character_clip_found_and_missing :: proc(t: ^testing.T) {
defer destroy_test_character(&data)
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(t, clip.loop)
testing.expect(t, clip.loop, "idle clip should loop")
testing.expect_value(t, clip.fps, f32(10))
_, 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 {
loop = true,
@@ -88,7 +88,7 @@ character_clip_found_and_missing :: proc(t: ^testing.T) {
frames = nil,
}
_, ok = character_clip(&data, "empty")
testing.expect(t, !ok)
testing.expect(t, !ok, "character_clip should reject empty frames")
}
@(test)
@@ -161,7 +161,7 @@ update_sprite_advances_multiple_frames :: proc(t: ^testing.T) {
s := spawn_sprite(&data, {}, "idle", 0)
update_sprite(&s, 0.25)
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)
+13 -13
View File
@@ -11,7 +11,7 @@ parse_char_def_happy_path :: proc(t: ^testing.T) {
def, ok := parse_char_def(src)
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.atlas, "toad.atlas.png")
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))
idle, found := def.clips["idle"]
testing.expect(t, found)
testing.expect(t, idle.loop)
testing.expect(t, found, "expected idle clip in parsed def")
testing.expect(t, idle.loop, "idle clip should loop")
testing.expect_value(t, idle.fps, f32(8.0))
testing.expect_value(t, len(idle.frames), 1)
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)
parse_char_def_bad_json :: proc(t: ^testing.T) {
_, 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)
@@ -51,17 +51,17 @@ character_frame_rect_hit_and_miss :: proc(t: ^testing.T) {
}
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})
_, 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)
testing.expect(t, !ok)
testing.expect(t, !ok, "character_frame_rect should reject negative index")
_, 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)
@@ -85,7 +85,7 @@ character_frame_returns_full_def :: proc(t: ^testing.T) {
}
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.source_size, [2]int{100, 200})
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)
character_frame_nil_and_bad_index :: proc(t: ^testing.T) {
_, 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.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}
_, 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)
testing.expect(t, !ok)
testing.expect(t, !ok, "character_frame should reject out-of-range index")
_, 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) {
+3 -3
View File
@@ -21,7 +21,7 @@ shader_filenames_per_backend :: proc(t: ^testing.T) {
@(test)
choose_shader_runtime_prefers_msl :: proc(t: ^testing.T) {
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.shader_dir, "shaders/metal")
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.MSL})
@@ -30,7 +30,7 @@ choose_shader_runtime_prefers_msl :: proc(t: ^testing.T) {
@(test)
choose_shader_runtime_spirv_only :: proc(t: ^testing.T) {
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.shader_dir, "shaders/vulkan")
testing.expect_value(t, rt.format, sdl.GPUShaderFormat{.SPIRV})
@@ -39,5 +39,5 @@ choose_shader_runtime_spirv_only :: proc(t: ^testing.T) {
@(test)
choose_shader_runtime_empty_fails :: proc(t: ^testing.T) {
_, ok := choose_shader_runtime_from_formats({})
testing.expect(t, !ok)
testing.expect(t, !ok, "empty format set should fail")
}
+1 -1
View File
@@ -41,7 +41,7 @@ frame_uvs_unflipped :: proc(t: ^testing.T) {
testing.expect_value(t, v0, f32(0.1))
testing.expect_value(t, u1, f32(0.4))
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)