mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-09 15:28:08 +00:00
re-enable p2r determinism tests
This commit is contained in:
+1
-1
@@ -41,6 +41,6 @@ target:
|
||||
{
|
||||
executable: "build/torture.exe"
|
||||
working_directory: build
|
||||
arguments: "raddbg/* --gui"
|
||||
arguments: "rdi_from_pdb/* --gui"
|
||||
enabled: 1
|
||||
}
|
||||
|
||||
@@ -1,18 +1,39 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
SkippedTest(p2r_determ)
|
||||
internal String8
|
||||
p2r_test__test_path(Arena *arena, TestCtx *ctx, String8 id, String8 name)
|
||||
{
|
||||
U64 num_repeats_per_pdb = 32;
|
||||
String8 path = str8f(arena, "%S/%S/%S", ctx->input_data_path, id, name);
|
||||
return path;
|
||||
}
|
||||
|
||||
Test(p2r_determinism)
|
||||
{
|
||||
U64 num_repeats_per_pdb = 16;
|
||||
String8 pdb_paths[] =
|
||||
{
|
||||
push_str8f(arena, "%S/mule_main.pdb", g_test_data),
|
||||
push_str8f(arena, "%S/mule_module.pdb", g_test_data),
|
||||
p2r_test__test_path(arena, ctx, s("mule_main_9ff1e58f"), s("mule_main.pdb")),
|
||||
p2r_test__test_path(arena, ctx, s("mule_main_9ff1e58f"), s("mule_module.pdb")),
|
||||
};
|
||||
B32 all_pdbs_exist_locally = 1;
|
||||
for EachElement(pdb_idx, pdb_paths)
|
||||
{
|
||||
String8 pdb_path = pdb_paths[pdb_idx];
|
||||
if(properties_from_file_path(pdb_path).modified == 0)
|
||||
{
|
||||
all_pdbs_exist_locally = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!all_pdbs_exist_locally)
|
||||
{
|
||||
TestSkip();
|
||||
}
|
||||
else for EachElement(pdb_idx, pdb_paths)
|
||||
{
|
||||
// rjf: unpack paths, make output directory
|
||||
String8 pdb_path = path_normalized_from_string(arena, pdb_paths[pdb_idx]);
|
||||
String8 pdb_path = pdb_paths[pdb_idx];
|
||||
|
||||
// rjf: generate all RDIs
|
||||
String8List rdi_paths = {0};
|
||||
@@ -21,12 +42,12 @@ SkippedTest(p2r_determ)
|
||||
ProcessList processes = {0};
|
||||
for EachIndex(repeat_idx, num_repeats_per_pdb)
|
||||
{
|
||||
String8 rdi_name = push_str8f(arena, "repeat_%I64u.rdi", repeat_idx);
|
||||
String8 rdi_path = t_make_file_path(arena, rdi_name);
|
||||
String8 rdi_name = str8f(arena, "repeat_%I64u.rdi", repeat_idx);
|
||||
String8 rdi_path = str8f(arena, "%S/%S", ctx->artifacts_path, rdi_name);
|
||||
str8_list_push(arena, &rdi_paths, rdi_path);
|
||||
String8 cmdl = str8f(arena, "radbin -rdi -deterministic %S -out:%S", pdb_path, rdi_path);
|
||||
String8 cmdl = str8f(arena, "radbin --rdi --deterministic %S --out:%S", pdb_path, rdi_path);
|
||||
Process process = launch_cmd_line(cmdl);
|
||||
T_Ok(!process_match(process_zero(), process));
|
||||
TestCheck(!process_match(process_zero(), process));
|
||||
process_list_push(arena, &processes, process);
|
||||
}
|
||||
for EachNode(n, ProcessNode, processes.first)
|
||||
@@ -43,8 +64,8 @@ SkippedTest(p2r_determ)
|
||||
String8 rdi_path = n->string;
|
||||
String8 dump_path = str8f(arena, "%S.dump", rdi_path);
|
||||
str8_list_push(arena, &dump_paths, dump_path);
|
||||
Process process_handle = launch_cmd_linef("radbin -dump -deterministic %S -out:%S", rdi_path, dump_path);
|
||||
T_Ok(!process_match(process_zero(), process_handle));
|
||||
Process process_handle = launch_cmd_linef("radbin --dump --deterministic %S --out:%S", rdi_path, dump_path);
|
||||
TestCheck(!process_match(process_zero(), process_handle));
|
||||
process_list_push(arena, &processes, process_handle);
|
||||
}
|
||||
for EachNode(n, ProcessNode, processes.first)
|
||||
@@ -54,12 +75,12 @@ SkippedTest(p2r_determ)
|
||||
}
|
||||
|
||||
// rjf: gather all hashes/paths
|
||||
U64 rdi_hashes_count = rdi_paths.node_count;
|
||||
U128 *rdi_hashes = push_array(arena, U128, rdi_hashes_count);
|
||||
String8 *rdi_paths_array = push_array(arena, String8, rdi_hashes_count);
|
||||
U64 dump_hashes_count = dump_paths.node_count;
|
||||
U128 *dump_hashes = push_array(arena, U128, dump_hashes_count);
|
||||
String8 *dump_paths_array = push_array(arena, String8, dump_hashes_count);
|
||||
U64 rdi_hashes_count = rdi_paths.node_count;
|
||||
U128 *rdi_hashes = push_array(arena, U128, rdi_hashes_count);
|
||||
String8 *rdi_paths_array = push_array(arena, String8, rdi_hashes_count);
|
||||
U64 dump_hashes_count = dump_paths.node_count;
|
||||
U128 *dump_hashes = push_array(arena, U128, dump_hashes_count);
|
||||
String8 *dump_paths_array = push_array(arena, String8, dump_hashes_count);
|
||||
{
|
||||
U64 idx = 0;
|
||||
for EachNode(n, String8Node, rdi_paths.first)
|
||||
@@ -67,9 +88,8 @@ SkippedTest(p2r_determ)
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 rdi_path = n->string;
|
||||
String8 path = rdi_path;
|
||||
T_Ok(path.size);
|
||||
String8 data = data_from_file_path(scratch.arena, path);
|
||||
T_Ok(data.size);
|
||||
TestCheck(data.size != 0);
|
||||
rdi_hashes[idx] = u128_hash_from_str8(data);
|
||||
rdi_paths_array[idx] = path;
|
||||
scratch_end(scratch);
|
||||
@@ -82,9 +102,8 @@ SkippedTest(p2r_determ)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 path = n->string;
|
||||
T_Ok(path.size);
|
||||
String8 data = data_from_file_path(scratch.arena, path);
|
||||
T_Ok(data.size);
|
||||
TestCheck(data.size != 0);
|
||||
dump_hashes[idx] = u128_hash_from_str8(data);
|
||||
dump_paths_array[idx] = path;
|
||||
scratch_end(scratch);
|
||||
@@ -93,12 +112,12 @@ SkippedTest(p2r_determ)
|
||||
}
|
||||
|
||||
// rjf: determine if all hashes match
|
||||
U64 mismatch_idx = max_U64;
|
||||
U64 mismatch_num = 0;
|
||||
for EachIndex(idx, rdi_hashes_count)
|
||||
{
|
||||
if(!u128_match(rdi_hashes[idx], rdi_hashes[0]))
|
||||
{
|
||||
mismatch_idx = idx;
|
||||
mismatch_num = idx+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -106,18 +125,19 @@ SkippedTest(p2r_determ)
|
||||
{
|
||||
if(!u128_match(dump_hashes[idx], dump_hashes[0]))
|
||||
{
|
||||
mismatch_idx = idx;
|
||||
mismatch_num = idx+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: output bad case info
|
||||
if (mismatch_idx != max_U64) {
|
||||
U64 idx = mismatch_idx;
|
||||
t_outf(" pdb[%I64u] \"%S\"\n", idx, pdb_path);
|
||||
t_outf(" rdi[%I64u] 0x%I64x:%I64x \"%S\"\n", idx, rdi_hashes[idx].u64[0], rdi_hashes[idx].u64[1], rdi_paths_array[idx]);
|
||||
t_outf(" dump[%I64u] 0x%I64x:%I64x \"%S\"\n", idx, dump_hashes[idx].u64[0], dump_hashes[idx].u64[1], dump_paths_array[idx]);
|
||||
T_Ok(0);
|
||||
if(mismatch_num != 0)
|
||||
{
|
||||
U64 idx = mismatch_num-1;
|
||||
test_outf(" pdb[%I64u] \"%S\"\n", idx, pdb_path);
|
||||
test_outf(" rdi[%I64u] 0x%I64x:%I64x \"%S\"\n", idx, rdi_hashes[idx].u64[0], rdi_hashes[idx].u64[1], rdi_paths_array[idx]);
|
||||
test_outf(" dump[%I64u] 0x%I64x:%I64x \"%S\"\n", idx, dump_hashes[idx].u64[0], dump_hashes[idx].u64[1], dump_paths_array[idx]);
|
||||
}
|
||||
TestCheck(mismatch_num == 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ global B32 g_verbose;
|
||||
global B32 g_redirect_stdout = 1;
|
||||
global B32 g_stop_on_first_fail_or_crash = 1;
|
||||
global B32 g_build_only = 0;
|
||||
global String8 g_test_data;
|
||||
|
||||
// tests
|
||||
global TestInfo *g_sorted_test_infos[ArrayCount(test_infos)] = {0};
|
||||
@@ -1108,17 +1107,6 @@ t_entry_point(CmdLine *cmdline)
|
||||
g_gcc_path = cmd_line_string(cmdline, str8_lit("gcc"));
|
||||
g_linker_path = cmd_line_string(cmdline, str8_lit("linker"));
|
||||
|
||||
//
|
||||
// Handle -test_data
|
||||
//
|
||||
{
|
||||
g_test_data = cmd_line_string(cmdline, str8_lit("test_data"));
|
||||
if (g_test_data.size == 0) {
|
||||
g_test_data = str8f(scratch.arena, "%S/build", t_cwd_path());
|
||||
//fprintf(stderr, "WARNING: The test data folder path was not specified. Specify the path when running the program, assuming: %.*s --test_data:%.*s\n", str8_varg(cmdline->exe_name), str8_varg(g_test_data));
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Handle optional -target
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user