package tests import "core:os" import "core:testing" import memory "../src/memory" import profile "../src/profile" @(test) record_game_tracks_bests :: proc(t: ^testing.T) { key := "TEST/RECORD" first := profile.record_game(key, 20, 90) testing.expect_value(t, first.record.games, 1) testing.expect_value(t, first.record.best_moves, 20) testing.expect(t, !first.new_best_moves && !first.new_best_time) // nothing to beat yet worse := profile.record_game(key, 25, 120) testing.expect(t, !worse.new_best_moves && !worse.new_best_time) testing.expect_value(t, worse.record.best_moves, 20) // Fewer moves but slower: only the moves record changes fewer := profile.record_game(key, 15, 100) testing.expect(t, fewer.new_best_moves && !fewer.new_best_time) testing.expect_value(t, fewer.record.best_moves, 15) testing.expect_value(t, fewer.record.best_seconds, 90) testing.expect_value(t, fewer.record.games, 3) } @(test) profile_round_trips_through_json :: proc(t: ^testing.T) { path := "build/test-profile.json" os.remove(path) defer os.remove(path) testing.expect(t, profile.init(path)) defer profile.path = "" // stop other tests from writing the file profile.set_difficulty("HARD") profile.record_game("TEST/SAVE", 12, 61.5) // Reload from disk into a clean state profile.data = {} testing.expect(t, profile.init(path)) testing.expect_value(t, profile.data.difficulty, "HARD") record, ok := profile.get("TEST/SAVE") testing.expect(t, ok) testing.expect_value(t, record.best_moves, 12) testing.expect_value(t, record.best_seconds, 61.5) } @(test) winning_records_a_score :: proc(t: ^testing.T) { memory.deal(.KATAKANA, .EASY) for i in 0 ..< memory.card_count { if memory.cards[i].matched { continue } memory.select_card(i) memory.select_card(partner_of(i)) advance(2) } testing.expect_value(t, memory.state, memory.State.OVER) record, ok := profile.get(memory.score_key(.KATAKANA, .EASY)) testing.expect(t, ok) testing.expect_value(t, record.best_moves, memory.pair_count) testing.expect_value(t, memory.last_result.record.games, record.games) } @(test) time_format :: proc(t: ^testing.T) { testing.expect_value(t, profile.format_time(0), "0:00") testing.expect_value(t, profile.format_time(65.9), "1:05") testing.expect_value(t, profile.format_time(600), "10:00") }