| 130 | } |
| 131 | |
| 132 | bool test_basic_operation(const std::string& op_name, |
| 133 | std::function<size_t(CactusGraph&, size_t, size_t)> op_func, |
| 134 | const std::vector<__fp16>& data_a, |
| 135 | const std::vector<__fp16>& data_b, |
| 136 | const std::vector<__fp16>& expected, |
| 137 | const std::vector<size_t>& shape) { |
| 138 | (void)op_name; |
| 139 | CactusGraph graph; |
| 140 | size_t input_a = graph.input(shape, Precision::FP16); |
| 141 | size_t input_b = graph.input(shape, Precision::FP16); |
| 142 | size_t result_id = op_func(graph, input_a, input_b); |
| 143 | |
| 144 | graph.set_input(input_a, const_cast<void*>(static_cast<const void*>(data_a.data())), Precision::FP16); |
| 145 | graph.set_input(input_b, const_cast<void*>(static_cast<const void*>(data_b.data())), Precision::FP16); |
| 146 | graph.execute(); |
| 147 | |
| 148 | __fp16* output = static_cast<__fp16*>(graph.get_output(result_id)); |
| 149 | for (size_t i = 0; i < expected.size(); ++i) { |
| 150 | if (std::abs(static_cast<float>(output[i]) - static_cast<float>(expected[i])) > 1e-2f) { |
| 151 | graph.hard_reset(); |
| 152 | return false; |
| 153 | } |
| 154 | } |
| 155 | graph.hard_reset(); |
| 156 | return true; |
| 157 | } |
| 158 | |
| 159 | bool test_scalar_operation(const std::string& op_name, |
| 160 | std::function<size_t(CactusGraph&, size_t, float)> op_func, |
no test coverage detected