From 843baa36ee2212c351568d0dd5f5a669ddb6f4da 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/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Thu, 19 Jul 2018 08:25:23 +0900 Subject: [PATCH] [nest] Add 'DomainContext' (#700) This commit adds 'DomainContext' class which creates a domain, and manages its information. Signed-off-by: Jonghyun Park --- contrib/nest/include/nest/DomainContext.h | 29 ++++++++++++++++++++++ contrib/nest/src/DomainContext.cpp | 22 +++++++++++++++++ contrib/nest/src/DomainContext.test.cpp | 40 +++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 contrib/nest/include/nest/DomainContext.h create mode 100644 contrib/nest/src/DomainContext.cpp create mode 100644 contrib/nest/src/DomainContext.test.cpp diff --git a/contrib/nest/include/nest/DomainContext.h b/contrib/nest/include/nest/DomainContext.h new file mode 100644 index 0000000..74f3da4 --- /dev/null +++ b/contrib/nest/include/nest/DomainContext.h @@ -0,0 +1,29 @@ +#ifndef __NEST_DOMAIN_CONTEXT_H__ +#define __NEST_DOMAIN_CONTEXT_H__ + +#include "nest/DomainInfo.h" +#include "nest/Domain.h" + +#include + +namespace nest +{ + +class DomainContext +{ +public: + uint32_t count(void) const; + +public: + Domain make(std::initializer_list dims); + +public: + const DomainInfo &info(const Domain &) const; + +private: + std::vector _info; +}; + +} // namespace nest + +#endif // __NEST_DOMAIN_CONTEXT_H__ diff --git a/contrib/nest/src/DomainContext.cpp b/contrib/nest/src/DomainContext.cpp new file mode 100644 index 0000000..c430809 --- /dev/null +++ b/contrib/nest/src/DomainContext.cpp @@ -0,0 +1,22 @@ +#include "nest/DomainContext.h" + +namespace nest +{ + +uint32_t DomainContext::count(void) const { return _info.size(); } + +Domain DomainContext::make(std::initializer_list dims) +{ + const DomainID domain_id{count()}; + + _info.emplace_back(dims); + + return Domain{domain_id}; +} + +const DomainInfo &DomainContext::info(const Domain &dom) const +{ + return _info.at(dom.id().value()); +} + +} // namespace nest diff --git a/contrib/nest/src/DomainContext.test.cpp b/contrib/nest/src/DomainContext.test.cpp new file mode 100644 index 0000000..64df588 --- /dev/null +++ b/contrib/nest/src/DomainContext.test.cpp @@ -0,0 +1,40 @@ +#include "nest/DomainContext.h" + +#include + +TEST(DOMAIN_CONTEXT, usecase) +{ + nest::DomainContext ctx; + + auto dom_0 = ctx.make({1, 3, 4}); + + ASSERT_EQ(ctx.count(), 1); + + auto check_dom_0 = [&](void) { + ASSERT_EQ(ctx.info(dom_0).rank(), 3); + ASSERT_EQ(ctx.info(dom_0).dim(0), 1); + ASSERT_EQ(ctx.info(dom_0).dim(1), 3); + ASSERT_EQ(ctx.info(dom_0).dim(2), 4); + }; + + check_dom_0(); + + auto dom_1 = ctx.make({7, 6, 2, 1}); + + ASSERT_EQ(ctx.count(), 2); + + // Domain ID should be unique for each domain + ASSERT_FALSE(dom_0.id() == dom_1.id()); + + auto check_dom_1 = [&](void) { + ASSERT_EQ(ctx.info(dom_1).rank(), 4); + ASSERT_EQ(ctx.info(dom_1).dim(0), 7); + ASSERT_EQ(ctx.info(dom_1).dim(1), 6); + ASSERT_EQ(ctx.info(dom_1).dim(2), 2); + ASSERT_EQ(ctx.info(dom_1).dim(3), 1); + }; + + // make() SHOULD NOT affect the existing domain information + check_dom_0(); + check_dom_1(); +} -- 2.7.4