Matteo Bruni (@Mystral) commented about dlls/d3dx9_36/tests/effect.c:
+ /* Begin value loop. */ + for (x = 0; x < (sizeof( test_set_raw_data_values ) / sizeof( struct test_set_raw_data_value )); x++) + { + result_buf = malloc( test_set_raw_data_values[x].expected_data_len ); + if (result_buf) + { + memset( result_buf, '\0', test_set_raw_data_values[x].expected_data_len ); + hr = effect->lpVtbl->SetRawValue( effect, + effect->lpVtbl->GetParameterByName( effect, NULL, test_set_raw_data_values[x].param_name ), + test_set_raw_data_values[x].param_data, + test_set_raw_data_values[x].offset, + test_set_raw_data_values[x].param_data_len ); + ok( hr == test_set_raw_data_values[x].expected_result, + "Test # %#1.1x var name %s : got HRESULT %#1.1x, expected %#1.1x.\n", x, + test_set_raw_data_values[x].param_name, hr, + test_set_raw_data_values[x].expected_result ); It's nice to make use of test contexts. At the start of the loop you'd have something like: `winetest_push_context("Test %u, parameter %s", i + 1, tests[i].param_name);` and at the end: `winetest_pop_context();`
Then the ok() call becomes something like ```suggestion:-0+0 ok(hr == tests[i].expected_hr, "Unexpected hr %#x, expected %#x.\n", hr, tests[i].expected_hr); ``` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/979#note_11095