[nncc.core] Add 'ADT::tensor::Index' class (#135)
author박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 25 Apr 2018 01:33:17 +0000 (10:33 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Wed, 25 Apr 2018 01:33:17 +0000 (10:33 +0900)
This commit adds 'tensor::Index' class which indicates the element in a
tensor.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
libs/core/include/nncc/core/ADT/tensor/Index.h [new file with mode: 0644]
libs/core/src/nncc/core/ADT/tensor/Index.cpp [new file with mode: 0644]
libs/core/src/nncc/core/ADT/tensor/Index.test.cpp [new file with mode: 0644]

diff --git a/libs/core/include/nncc/core/ADT/tensor/Index.h b/libs/core/include/nncc/core/ADT/tensor/Index.h
new file mode 100644 (file)
index 0000000..3137d5f
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef __NNCC_CORE_ADT_TENSOR_INDEX_H__
+#define __NNCC_CORE_ADT_TENSOR_INDEX_H__
+
+#include <vector>
+#include <cstdint>
+
+namespace nncc
+{
+namespace core
+{
+namespace ADT
+{
+namespace tensor
+{
+
+class Index
+{
+public:
+  uint32_t rank(void) const;
+
+public:
+  Index &resize(uint32_t size);
+
+public:
+  uint32_t &at(uint32_t axis);
+  uint32_t at(uint32_t axis) const;
+
+private:
+  std::vector<uint32_t> _indices;
+};
+
+} // namespace tensor
+} // namespace ADT
+} // namespace core
+} // namespace nncc
+
+#endif // __NNCC_CORE_ADT_TENSOR_INDEX_H__
diff --git a/libs/core/src/nncc/core/ADT/tensor/Index.cpp b/libs/core/src/nncc/core/ADT/tensor/Index.cpp
new file mode 100644 (file)
index 0000000..2ec1767
--- /dev/null
@@ -0,0 +1,21 @@
+#include "nncc/core/ADT/tensor/Index.h"
+
+namespace nncc
+{
+namespace core
+{
+namespace ADT
+{
+namespace tensor
+{
+
+uint32_t Index::rank(void) const { return _indices.size(); }
+Index &Index::resize(uint32_t size) { _indices.resize(size); }
+
+uint32_t &Index::at(uint32_t axis) { return _indices.at(axis); }
+uint32_t Index::at(uint32_t axis) const { return _indices.at(axis); }
+
+} // namespace tensor
+} // namespace ADT
+} // namespace core
+} // namespace nncc
diff --git a/libs/core/src/nncc/core/ADT/tensor/Index.test.cpp b/libs/core/src/nncc/core/ADT/tensor/Index.test.cpp
new file mode 100644 (file)
index 0000000..87276f5
--- /dev/null
@@ -0,0 +1,57 @@
+#include "nncc/core/ADT/tensor/Index.h"
+
+#include <gtest/gtest.h>
+
+TEST(ADT_TENSOR_INDEX, ctor)
+{
+  nncc::core::ADT::tensor::Index index;
+
+  ASSERT_EQ(index.rank(), 0);
+}
+
+TEST(ADT_TENSOR_INDEX, resize)
+{
+  nncc::core::ADT::tensor::Index index;
+
+  index.resize(4);
+
+  ASSERT_EQ(index.rank(), 4);
+}
+
+TEST(ADT_TENSOR_INDEX, at)
+{
+  nncc::core::ADT::tensor::Index index;
+
+  index.resize(4);
+
+  uint32_t indices[4] = {3, 5, 2, 7};
+
+  for (uint32_t axis = 0; axis < 4; ++axis)
+  {
+    index.at(axis) = indices[axis];
+    ASSERT_EQ(index.at(axis), indices[axis]);
+  }
+}
+
+TEST(ADT_TENSOR_INDEX, copy)
+{
+  nncc::core::ADT::tensor::Index original;
+
+  original.resize(4);
+
+  uint32_t indices[4] = {3, 5, 2, 7};
+
+  for (uint32_t axis = 0; axis < 4; ++axis)
+  {
+    original.at(axis) = indices[axis];
+  }
+
+  const nncc::core::ADT::tensor::Index copied{original};
+
+  ASSERT_EQ(original.rank(), copied.rank());
+
+  for (uint32_t axis = 0; axis < 4; ++axis)
+  {
+    ASSERT_EQ(original.at(axis), copied.at(axis));
+  }
+}