From 1e2cfcfd6992468f42b6742be9ef4c430ce123c7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 25 Apr 2018 10:31:54 +0900 Subject: [PATCH] [nncc.core] Add 'ADT::tensor::Shape' class (#134) This commit adds 'tensor::Shape' class inside nncc::core::ADT::tensor. Signed-off-by: Jonghyun Park --- libs/core/include/nncc/core/ADT/tensor/Shape.h | 37 +++++++++++++++ libs/core/src/nncc/core/ADT/tensor/Shape.cpp | 21 +++++++++ libs/core/src/nncc/core/ADT/tensor/Shape.test.cpp | 57 +++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 libs/core/include/nncc/core/ADT/tensor/Shape.h create mode 100644 libs/core/src/nncc/core/ADT/tensor/Shape.cpp create mode 100644 libs/core/src/nncc/core/ADT/tensor/Shape.test.cpp diff --git a/libs/core/include/nncc/core/ADT/tensor/Shape.h b/libs/core/include/nncc/core/ADT/tensor/Shape.h new file mode 100644 index 0000000..7e707cf --- /dev/null +++ b/libs/core/include/nncc/core/ADT/tensor/Shape.h @@ -0,0 +1,37 @@ +#ifndef __NNCC_CORE_ADT_TENSOR_SHAPE_H__ +#define __NNCC_CORE_ADT_TENSOR_SHAPE_H__ + +#include +#include + +namespace nncc +{ +namespace core +{ +namespace ADT +{ +namespace tensor +{ + +class Shape +{ +public: + uint32_t rank(void) const; + +public: + Shape &resize(uint32_t size); + +public: + uint32_t &dim(uint32_t axis); + uint32_t dim(uint32_t axis) const; + +private: + std::vector _dims; +}; + +} // namespace tensor +} // namespace ADT +} // namespace core +} // namespace nncc + +#endif // __NNCC_CORE_ADT_TENSOR_SHAPE_H__ diff --git a/libs/core/src/nncc/core/ADT/tensor/Shape.cpp b/libs/core/src/nncc/core/ADT/tensor/Shape.cpp new file mode 100644 index 0000000..fc94d12 --- /dev/null +++ b/libs/core/src/nncc/core/ADT/tensor/Shape.cpp @@ -0,0 +1,21 @@ +#include "nncc/core/ADT/tensor/Shape.h" + +namespace nncc +{ +namespace core +{ +namespace ADT +{ +namespace tensor +{ + +uint32_t Shape::rank(void) const { return _dims.size(); } +Shape &Shape::resize(uint32_t size) { _dims.resize(size); } + +uint32_t &Shape::dim(uint32_t axis) { return _dims.at(axis); } +uint32_t Shape::dim(uint32_t axis) const { return _dims.at(axis); } + +} // namespace tensor +} // namespace ADT +} // namespace core +} // namespace nncc diff --git a/libs/core/src/nncc/core/ADT/tensor/Shape.test.cpp b/libs/core/src/nncc/core/ADT/tensor/Shape.test.cpp new file mode 100644 index 0000000..5a7b055 --- /dev/null +++ b/libs/core/src/nncc/core/ADT/tensor/Shape.test.cpp @@ -0,0 +1,57 @@ +#include "nncc/core/ADT/tensor/Shape.h" + +#include + +TEST(ADT_TENSOR_SHAPE, ctor) +{ + nncc::core::ADT::tensor::Shape shape; + + ASSERT_EQ(shape.rank(), 0); +} + +TEST(ADT_TENSOR_SHAPE, resize) +{ + nncc::core::ADT::tensor::Shape shape; + + shape.resize(4); + + ASSERT_EQ(shape.rank(), 4); +} + +TEST(ADT_TENSOR_SHAPE, dim) +{ + nncc::core::ADT::tensor::Shape shape; + + shape.resize(4); + + uint32_t dims[4] = {3, 5, 2, 7}; + + for (uint32_t axis = 0; axis < 4; ++axis) + { + shape.dim(axis) = dims[axis]; + ASSERT_EQ(shape.dim(axis), dims[axis]); + } +} + +TEST(ADT_TENSOR_SHAPE, copy) +{ + nncc::core::ADT::tensor::Shape original; + + original.resize(4); + + uint32_t dims[4] = {3, 5, 2, 7}; + + for (uint32_t axis = 0; axis < 4; ++axis) + { + original.dim(axis) = dims[axis]; + } + + const nncc::core::ADT::tensor::Shape copied{original}; + + ASSERT_EQ(original.rank(), copied.rank()); + + for (uint32_t axis = 0; axis < 4; ++axis) + { + ASSERT_EQ(original.dim(axis), copied.dim(axis)); + } +} -- 2.7.4