diff options
author | Jeremy Johnson <jeremy.johnson@arm.com> | 2023-11-01 11:29:56 +0000 |
---|---|---|
committer | Eric Kunze <eric.kunze@arm.com> | 2023-11-10 16:35:17 +0000 |
commit | bfc53031803338d9f0866f88f1d2deffd4928bcc (patch) | |
tree | b43dbe24df3445639344662e76d1dc37341c2a4f /reference_model/test | |
parent | 7bf0cb990b55d5738c8dc4291686576654d2d8ab (diff) | |
download | reference_model-bfc53031803338d9f0866f88f1d2deffd4928bcc.tar.gz |
Main Compliance testing support for ARGMAX, REDUCE_SUM/MAX/MIN
Add extra tests for FP32 REDUCE_SUM that meet MIN_DOT_PRODUCTS.
Plus improved dot product test generation skip information.
Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: Ia8198a9500ddddfc86c5bb84230b9a4edf5ffd50
Diffstat (limited to 'reference_model/test')
-rw-r--r-- | reference_model/test/generate_tests.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/reference_model/test/generate_tests.cpp b/reference_model/test/generate_tests.cpp index 6173372..40dd59f 100644 --- a/reference_model/test/generate_tests.cpp +++ b/reference_model/test/generate_tests.cpp @@ -509,4 +509,75 @@ TEST_CASE("positive - pseudo random") check_not_output<float>(bufferP0, bufferP1); } } +void reduce_sum_test_FP32(const std::string tosaName, + const size_t tosaElements, + const std::string templateJsonCfg, + const std::string setStr, + const std::vector<uint32_t> expected) +{ + std::string jsonCfg = templateJsonCfg; + update_json_template(jsonCfg, "_SET_", setStr); + + std::vector<float> buffer(tosaElements); + REQUIRE(tgd_generate_data(jsonCfg.c_str(), tosaName.c_str(), (void*)buffer.data(), tosaElements * 4)); + // Choose different generator values to test at positions 6, 7 & 8 + std::vector<float> mid_three(buffer.begin() + 6, buffer.begin() + 9); + check_output<float>(mid_three, expected); +} + +TEST_CASE("positive - FP32 reduce_sum dot product (values 6,7 & 8)") +{ + std::string templateJsonCfg = R"({ + "tensors" : { + "input" : { + "generator": "DOT_PRODUCT", + "data_type": "FP32", + "input_type": "VARIABLE", + "shape" : [ 5, 3, 7 ], + "input_pos": 0, + "op" : "REDUCE_SUM", + "dot_product_info": { + "s": _SET_, + "ks": 3, + "acc_type": "FP32", + "axis": 1 + } + } + } + })"; + + const std::string tosaName = "input"; + const size_t tosaElements = 5 * 3 * 7; + + SUBCASE("reduce_sum, set 0, param 0") + { + std::vector<uint32_t> expected = { 0x3df2e612, 0x3f59255f, 0x0 }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "0", expected); + } + SUBCASE("reduce_sum, set 1, param 0") + { + std::vector<uint32_t> expected = { 0x5edaa175, 0x5edb84c1, 0x5ea3c765 }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "1", expected); + } + SUBCASE("reduce_sum, set 2, param 0") + { + std::vector<uint32_t> expected = { 0x3f800000, 0x3e73f143, 0x3f12cef8 }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "2", expected); + } + SUBCASE("reduce_sum, set 3, param 0") + { + std::vector<uint32_t> expected = { 0x41800000, 0xbe9f659e, 0xbfaca78c }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "3", expected); + } + SUBCASE("reduce_sum, set 4, param 0") + { + std::vector<uint32_t> expected = { 0x5e1e6f12, 0x3f000000, 0x3f000000 }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "4", expected); + } + SUBCASE("reduce_sum, set 5, param 0") + { + std::vector<uint32_t> expected = { 0x5d2790c5, 0xdec3dadc, 0xdea1486e }; + reduce_sum_test_FP32(tosaName, tosaElements, templateJsonCfg, "5", expected); + } +} TEST_SUITE_END(); // generate |