return -1; /* Not Found */
}
+
+/**
+ * @brief Parse tensor dimension parameter string
+ * @return The Rank. 0 if error.
+ * @param param The parameter string in the format of d1:d2:d3:d4, d1:d2:d3, d1:d2, or d1, where dN is a positive integer and d1 is the innermost dimension; i.e., dim[d4][d3][d2][d1];
+ */
+int get_tensor_dimension(const gchar* param, uint32_t dim[NNS_TENSOR_RANK_LIMIT]) {
+ gchar **strv = g_strsplit(param, ":", NNS_TENSOR_RANK_LIMIT);
+ int i, retval = 0;
+ guint64 val;
+
+ g_assert(strv != NULL);
+
+ for (i = 0; i < NNS_TENSOR_RANK_LIMIT; i++) {
+ if (strv[i] == NULL)
+ break;
+ val = g_ascii_strtoull(strv[i], NULL, 10);
+ dim[i] = val;
+ retval = i + 1;
+ }
+ for (; i < NNS_TENSOR_RANK_LIMIT; i++)
+ dim[i] = 1;
+
+ g_strfreev(strv);
+ return retval;
+}
}
+TEST(common_get_tensor_dimension, case1) {
+ uint32_t dim[NNS_TENSOR_RANK_LIMIT];
+ int rank = get_tensor_dimension("345:123:433:177", dim);
+ EXPECT_EQ(rank, 4);
+ EXPECT_EQ(dim[0], 345);
+ EXPECT_EQ(dim[1], 123);
+ EXPECT_EQ(dim[2], 433);
+ EXPECT_EQ(dim[3], 177);
+}
+
+
+TEST(common_get_tensor_dimension, case2) {
+ uint32_t dim[NNS_TENSOR_RANK_LIMIT];
+ int rank = get_tensor_dimension("345:123:433", dim);
+ EXPECT_EQ(rank, 3);
+ EXPECT_EQ(dim[0], 345);
+ EXPECT_EQ(dim[1], 123);
+ EXPECT_EQ(dim[2], 433);
+ EXPECT_EQ(dim[3], 1);
+}
+
+TEST(common_get_tensor_dimension, case3) {
+ uint32_t dim[NNS_TENSOR_RANK_LIMIT];
+ int rank = get_tensor_dimension("345:123", dim);
+ EXPECT_EQ(rank, 2);
+ EXPECT_EQ(dim[0], 345);
+ EXPECT_EQ(dim[1], 123);
+ EXPECT_EQ(dim[2], 1);
+ EXPECT_EQ(dim[3], 1);
+}
+
+TEST(common_get_tensor_dimension, case4) {
+ uint32_t dim[NNS_TENSOR_RANK_LIMIT];
+ int rank = get_tensor_dimension("345", dim);
+ EXPECT_EQ(rank, 1);
+ EXPECT_EQ(dim[0], 345);
+ EXPECT_EQ(dim[1], 1);
+ EXPECT_EQ(dim[2], 1);
+ EXPECT_EQ(dim[3], 1);
+}
+
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
#define __GST_TENSOR_COMMON_H__
#include <glib.h>
+#include <stdint.h>
G_BEGIN_DECLS
*/
extern int find_key_strv(const gchar **strv, const gchar *key);
+/**
+ * @brief Parse tensor dimension parameter string
+ * @return The Rank.
+ * @param param The parameter string in the format of d1:d2:d3:d4, d1:d2:d3, d1:d2, or d1, where dN is a positive integer and d1 is the innermost dimension; i.e., dim[d4][d3][d2][d1];
+ */
+extern int get_tensor_dimension(const gchar* param, uint32_t dim[NNS_TENSOR_RANK_LIMIT]);
+
G_END_DECLS
#endif /* __GST_TENSOR_COMMON_H__ */