1 // Copyright (C) 2018 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
8 #include <gtest/gtest.h>
9 #include <ie_layouts.h>
11 using namespace testing;
12 using namespace InferenceEngine;
14 class LayoutTest : public ::testing::Test {
19 TEST_F(LayoutTest, offsetNCHW) {
20 size_t N = 2, C = 3, H = 4, W = 5;
21 SizeVector dims = { W, H, C, N };
23 LayoutOffsetCounter loc(InferenceEngine::Layout::NCHW, dims);
25 size_t p = loc.Offset({ 0, 0, 0, 0 });
28 p = loc.Offset({ 1, 1, 1, 1 });
31 p = loc.Offset({ 4, 3, 2, 1 });
36 TEST_F(LayoutTest, offsetNCHW2) {
37 size_t N = 1, C = 2, H = 3, W = 2;
38 SizeVector dims = { W, H, C, N };
40 LayoutOffsetCounter loc(InferenceEngine::Layout::NCHW, dims);
42 size_t p = loc.Offset({ 0, 1, 0, 0 });
48 TEST_F(LayoutTest, offsetNHWC) {
49 size_t N = 1, C = 2, H = 3, W = 2;
50 SizeVector dims = { W, H, C, N };
52 LayoutOffsetCounter loc(InferenceEngine::Layout::NHWC, dims);
54 size_t p = loc.Offset({ 0, 0, 0, 0 });
57 p = loc.Offset({ 0, 0, 1, 0 });
60 p = loc.Offset({ 1, 0, 0, 0 });
63 p = loc.Offset({ 1, 0, 1, 0 });
66 p = loc.Offset({ 0, 1, 0, 0 });
72 TEST_F(LayoutTest, convertNCHWtoNHWC) {
73 const size_t N = 1, C = 2, H = 3, W = 2;
74 SizeVector dims = { W, H, C, N };
76 float sourceBuf[N*C*H*W], destBuf[N*C*H*W], destBuf2[N*C*H*W];
78 for (int nc = 0; nc < N*C; nc++) {
80 for (int hw = 0; hw < H*W; hw++) {
81 sourceBuf[nc*H*W + hw] = v + p;
87 ConvertLayout<float>(InferenceEngine::Layout::NCHW, InferenceEngine::Layout::NCHW, sourceBuf, destBuf, dims);
88 EXPECT_TRUE( 0 == memcmp( sourceBuf, destBuf, N*C*H*W * sizeof(float) ) );
90 ConvertLayout(InferenceEngine::Layout::NCHW, InferenceEngine::Layout::NHWC, sourceBuf, destBuf, dims);
91 ConvertLayout(InferenceEngine::Layout::NHWC, InferenceEngine::Layout::NCHW, destBuf, destBuf2, dims);
92 EXPECT_TRUE( 0 == memcmp( sourceBuf, destBuf2, N*C*H*W * sizeof(float) ) );