aboutsummaryrefslogtreecommitdiff
path: root/reference_model/test/generate_tests.cpp
diff options
context:
space:
mode:
authorJeremy Johnson <jeremy.johnson@arm.com>2023-10-04 14:17:55 +0100
committerEric Kunze <eric.kunze@arm.com>2023-10-04 18:45:40 +0000
commitb20b0c9cb4c85bb9a3c901d5acaf421d84656850 (patch)
tree8af9d6338b62bc65e7e4292427f06a4ef0346312 /reference_model/test/generate_tests.cpp
parent12ee1a79374b451602784fd6dc8f63886bf2a997 (diff)
downloadreference_model-b20b0c9cb4c85bb9a3c901d5acaf421d84656850.tar.gz
Add initial TOSA MI generator support
Add support for dot-product MatMul - test set 0 Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Change-Id: Ifd15b42570014b634f59c94a1fd1cd56bac79ea4 Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Diffstat (limited to 'reference_model/test/generate_tests.cpp')
-rw-r--r--reference_model/test/generate_tests.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/reference_model/test/generate_tests.cpp b/reference_model/test/generate_tests.cpp
new file mode 100644
index 0000000..88dc979
--- /dev/null
+++ b/reference_model/test/generate_tests.cpp
@@ -0,0 +1,115 @@
+// Copyright (c) 2023, ARM Limited.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include "generate.h"
+
+#include <doctest.h>
+
+#include <array>
+#include <string>
+#include <vector>
+
+TEST_SUITE_BEGIN("generate");
+
+TEST_CASE("negative - api")
+{
+ std::string json_cfg = R"({
+ "tensors" : {
+ "in1" : {
+ "generator": "DOT_PRODUCT",
+ "data_type": "FP32",
+ "input_type": "VARIABLE",
+ "shape" : [ 4, 8, 8 ],
+ "input_pos": 0,
+ "op" : "MATMUL",
+ "dot_product_info": {
+ "s": 0,
+ "ks": 10,
+ "acc_type": "FP32"
+ }
+ }
+ }
+ })";
+
+ const std::string tosaName = "in1";
+ const size_t tosaElements = 4 * 8 * 8;
+ const size_t tosaSize = tosaElements * 4;
+
+ SUBCASE("missing input")
+ {
+ REQUIRE_FALSE(tgd_generate_data(NULL, NULL, NULL, 0));
+ }
+ SUBCASE("invalid json")
+ {
+ std::string invalid_json_cfg = R"({
+ "tensors" : {
+ "in1" : {
+ "generator": DOT_PRODUCT,
+ },
+ }
+ })";
+
+ std::vector<float> buffer(tosaElements);
+ REQUIRE_FALSE(tgd_generate_data(invalid_json_cfg.c_str(), tosaName.c_str(), (void*)buffer.data(), tosaSize));
+ }
+ SUBCASE("invalid json - mismatching name")
+ {
+ std::string invalidName = "notFound1";
+
+ std::vector<float> buffer(tosaElements);
+ REQUIRE_FALSE(tgd_generate_data(json_cfg.c_str(), invalidName.c_str(), (void*)buffer.data(), tosaSize));
+ }
+ SUBCASE("mismatching size")
+ {
+ size_t smallElements = 4 * 8 * 7;
+ size_t smallSize = smallElements * 4;
+
+ std::vector<float> buffer(smallElements);
+ REQUIRE_FALSE(tgd_generate_data(json_cfg.c_str(), tosaName.c_str(), (void*)buffer.data(), smallSize));
+ }
+}
+
+TEST_CASE("positive - dot product")
+{
+ std::string json_cfg = R"({
+ "tensors" : {
+ "in1" : {
+ "generator": "DOT_PRODUCT",
+ "data_type": "FP32",
+ "input_type": "VARIABLE",
+ "shape" : [ 4, 8, 8 ],
+ "input_pos": 0,
+ "op" : "MATMUL",
+ "dot_product_info": {
+ "s": 0,
+ "ks": 10,
+ "acc_type": "FP32"
+ }
+ }
+ }
+ })";
+
+ const std::string tosaName = "in1";
+ const size_t tosaElements = 4 * 8 * 8;
+ const size_t tosaSize = tosaElements * 4;
+
+ SUBCASE("matmul")
+ {
+ std::vector<float> buffer(tosaElements);
+ REQUIRE(tgd_generate_data(json_cfg.c_str(), tosaName.c_str(), (void*)buffer.data(), tosaSize));
+ REQUIRE(buffer[0] == (float)-0.950864);
+ REQUIRE(buffer[1] == 0.f);
+ }
+}
+
+TEST_SUITE_END(); // generate \ No newline at end of file