blob: 73dd4a53ba9f6ee3c7b53b9648e21cd628fd1176 [file] [log] [blame]
Sadik Armagan34fa1bd2020-11-27 12:40:52 +00001//
Colm Donelan7bcae3c2024-01-22 10:07:14 +00002// Copyright © 2020, 2023-2024 Arm Ltd and Contributors. All rights reserved.
Sadik Armagan34fa1bd2020-11-27 12:40:52 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "SplitTestHelper.hpp"
7
Sadik Armagan34fa1bd2020-11-27 12:40:52 +00008#include <doctest/doctest.h>
9
10namespace armnnDelegate
11{
12
13// SPLIT Operator
Colm Donelan7bcae3c2024-01-22 10:07:14 +000014void SplitUint8Test()
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000015{
16 std::vector<int32_t> axisShape { 1 };
17 std::vector<int32_t> inputShape { 2, 2, 2, 2} ;
18 std::vector<int32_t> outputShape0 { 2, 2, 2, 1 };
19 std::vector<int32_t> outputShape1 { 2, 2, 2, 1 };
20 std::vector<std::vector<int32_t>> outputShapes{ outputShape0, outputShape1 };
21
22 std::vector<int32_t> axisData { 3 }; // Axis
23 std::vector<uint8_t> inputValues { 1, 2, 3, 4, 5, 6, 7, 8,
24 9, 10, 11, 12, 13, 14, 15, 16 }; // Input
25
26
27 std::vector<uint8_t> expectedOutputValues0 { 1, 3, 5, 7, 9, 11, 13, 15 };
28 std::vector<uint8_t> expectedOutputValues1 { 2, 4, 6, 8, 10, 12, 14, 16 };
29 std::vector<std::vector<uint8_t>> expectedOutputValues{ expectedOutputValues0, expectedOutputValues1 };
30
31 int32_t numSplits = 2;
32
33 SplitTest<uint8_t>(::tflite::TensorType_UINT8,
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000034 axisShape,
35 inputShape,
36 outputShapes,
37 axisData,
38 inputValues,
39 expectedOutputValues,
40 numSplits);
41}
42
Colm Donelan7bcae3c2024-01-22 10:07:14 +000043void SplitFp32Test()
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000044{
45 std::vector<int32_t> axisShape { 1 };
46 std::vector<int32_t> inputShape { 2, 2, 2, 2 };
47 std::vector<int32_t> outputShape0 { 2, 1, 2, 2 };
48 std::vector<int32_t> outputShape1 { 2, 1, 2, 2 };
49 std::vector<std::vector<int32_t>> outputShapes{ outputShape0, outputShape1 };
50
51 std::vector<int32_t> axisData { 1 }; // Axis
52 std::vector<float> inputValues { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
53 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; // Input
54
55
56 std::vector<float> expectedOutputValues0 { 1.0f, 2.0f, 3.0f, 4.0f, 9.0f, 10.0f, 11.0f, 12.0f };
57 std::vector<float> expectedOutputValues1 { 5.0f, 6.0f, 7.0f, 8.0f, 13.0f, 14.0f, 15.0f, 16.0f };
58 std::vector<std::vector<float>> expectedOutputValues{ expectedOutputValues0, expectedOutputValues1 };
59
60 int32_t numSplits = 2;
61
62 SplitTest<float>(::tflite::TensorType_FLOAT32,
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000063 axisShape,
64 inputShape,
65 outputShapes,
66 axisData,
67 inputValues,
68 expectedOutputValues,
69 numSplits);
70}
71
72// SPLIT Test Suite
Colm Donelan7bcae3c2024-01-22 10:07:14 +000073TEST_SUITE("SPLITTests")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000074{
75
Colm Donelan7bcae3c2024-01-22 10:07:14 +000076TEST_CASE ("SPLIT_Uint8_Test")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000077{
Colm Donelan7bcae3c2024-01-22 10:07:14 +000078 SplitUint8Test();
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000079}
80
Colm Donelan7bcae3c2024-01-22 10:07:14 +000081TEST_CASE ("SPLIT_Fp32_Test")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000082{
Colm Donelan7bcae3c2024-01-22 10:07:14 +000083 SplitFp32Test();
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000084}
85
86}
87// End of SPLIT Test Suite
88
89// SPLIT_V Operator
Colm Donelan7bcae3c2024-01-22 10:07:14 +000090void SplitVUint8Test()
Sadik Armagan34fa1bd2020-11-27 12:40:52 +000091{
92 std::vector<int32_t> axisShape { 1 };
93 std::vector<int32_t> inputShape { 2, 4, 2, 2 };
94 std::vector<int32_t> splitsShape { 2 };
95 std::vector<int32_t> outputShape0 { 2, 3, 2, 2 };
96 std::vector<int32_t> outputShape1 { 2, 1, 2, 2 };
97 std::vector<std::vector<int32_t>> outputShapes{ outputShape0, outputShape1 };
98
99 std::vector<int32_t> axisData { 1 }; // Axis
100 std::vector<int32_t> splitsData { 3, 1 }; // Splits
101 std::vector<uint8_t> inputValues { 1, 2, 3, 4, 5, 6, 7, 8,
102 9, 10, 11, 12, 13, 14, 15, 16,
103 17, 18, 19, 20, 21, 22, 23, 24,
104 25, 26, 27, 28, 29, 30, 31, 32 }; // Input
105
106
107 std::vector<uint8_t> expectedOutputValues0 { 1, 2, 3, 4, 5, 6, 7, 8,
108 9, 10, 11, 12, 17, 18, 19, 20,
109 21, 22, 23, 24, 25, 26, 27, 28 };
110 std::vector<uint8_t> expectedOutputValues1 { 13, 14, 15, 16, 29, 30, 31, 32 };
111 std::vector<std::vector<uint8_t>> expectedOutputValues{ expectedOutputValues0, expectedOutputValues1 };
112
113 int32_t numSplits = 2;
114
115 SplitVTest<uint8_t>(::tflite::TensorType_UINT8,
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000116 inputShape,
117 splitsShape,
118 axisShape,
119 outputShapes,
120 inputValues,
121 splitsData,
122 axisData,
123 expectedOutputValues,
124 numSplits);
125}
126
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000127void SplitVFp32Test()
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000128{
129 std::vector<int32_t> axisShape { 1 };
130 std::vector<int32_t> inputShape { 2, 4, 2, 2 };
131 std::vector<int32_t> splitsShape { 2 };
132 std::vector<int32_t> outputShape0 { 2, 3, 2, 2 };
133 std::vector<int32_t> outputShape1 { 2, 1, 2, 2 };
134 std::vector<std::vector<int32_t>> outputShapes{ outputShape0, outputShape1 };
135
136 std::vector<int32_t> axisData { 1 }; // Axis
137 std::vector<int32_t> splitsData { 3, 1 }; // Splits
138 std::vector<float> inputValues { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
139 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f,
140 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f,
141 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f }; // Input
142
143
144 std::vector<float> expectedOutputValues0 { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
145 9.0f, 10.0f, 11.0f, 12.0f, 17.0f, 18.0f, 19.0f, 20.0f,
146 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f };
147 std::vector<float> expectedOutputValues1 { 13.0f, 14.0f, 15.0f, 16.0f, 29.0f, 30.0f, 31.0f, 32.0f };
148 std::vector<std::vector<float>> expectedOutputValues{ expectedOutputValues0, expectedOutputValues1 };
149
150 int32_t numSplits = 2;
151
152 SplitVTest<float>(::tflite::TensorType_FLOAT32,
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000153 inputShape,
154 splitsShape,
155 axisShape,
156 outputShapes,
157 inputValues,
158 splitsData,
159 axisData,
160 expectedOutputValues,
161 numSplits);
162}
163
164// SPLIT_V Test Suite
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000165TEST_SUITE("SPLIT_VTests")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000166{
167
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000168TEST_CASE ("SPLIT_V_Uint8_Test")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000169{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000170 SplitVUint8Test();
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000171}
172
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000173TEST_CASE ("SPLIT_V_Fp32_Test")
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000174{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000175 SplitVFp32Test();
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000176}
177
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000178} // End of SPLIT_V Test Suite
Sadik Armagan34fa1bd2020-11-27 12:40:52 +0000179
180} // namespace armnnDelegate