From 079e4afa56655f12a9f0d599b7bfdf88df1f05bd Mon Sep 17 00:00:00 2001 From: Chunseok Lee Date: Mon, 18 Mar 2024 14:35:43 +0900 Subject: [PATCH] FC int4 weight test in nnfw_api_test --- .../one_op_tests/FullyConnected.test.cc | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/nnfw_api/src/GenModelTests/one_op_tests/FullyConnected.test.cc b/tests/nnfw_api/src/GenModelTests/one_op_tests/FullyConnected.test.cc index 791787f9b7f..868a7b45841 100644 --- a/tests/nnfw_api/src/GenModelTests/one_op_tests/FullyConnected.test.cc +++ b/tests/nnfw_api/src/GenModelTests/one_op_tests/FullyConnected.test.cc @@ -57,6 +57,35 @@ TEST_F(GenModelTest, OneOp_FullyConnected) SUCCEED(); } +TEST_F(GenModelTest, OneOp_FullyConnected_Int4Weight) +{ + CircleGen cgen; + // clang-format off + // This is packed weight for [0, 1, 0, 0, -1, -1 ,0, 0] + std::vector weight_data{ 16, 0, 255, 0 }; + std::vector bias_data{ 0, 1, 2, 3 }; + + // clang-format on + uint32_t weight_buf = cgen.addBuffer(weight_data); + uint32_t bias_buf = cgen.addBuffer(bias_data); + + int input = cgen.addTensor({{1, 2}, circle::TensorType::TensorType_FLOAT32}); + std::vector weight_scales = {0.5}; + std::vector weight_zeropoints = {0}; + int weight = cgen.addTensor({{4, 2}, circle::TensorType::TensorType_INT4, weight_buf}, weight_scales, weight_zeropoints); + int bias = cgen.addTensor({{4}, circle::TensorType::TensorType_FLOAT32, bias_buf}); + int output = cgen.addTensor({{1, 4}, circle::TensorType::TensorType_FLOAT32}); + cgen.addOperatorFullyConnected({{input, weight, bias}, {output}}); + cgen.setInputsAndOutputs({input}, {output}); + + _context = std::make_unique(cgen.finish()); + _context->addTestCase( + uniformTCD({{1, 3}}, {{1.5 , 1, 0, 3}})); + _context->setBackends({"cpu"}); + + SUCCEED(); +} + #if defined(__aarch64__) TEST_F(GenModelTest, OneOp_FullyConnectedShuffled16x1Float32) {