Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / tests / unit / inference_engine_tests / data_test.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <gtest/gtest.h>
6 #include <gmock/gmock-spec-builders.h>
7
8 #include <ie_data.h>
9
10 using namespace ::testing;
11 using namespace std;
12 using namespace InferenceEngine;
13 using namespace InferenceEngine::details;
14
15 class DataTests : public ::testing::Test {
16 protected:
17     const std::string data_name = "test_data_name";
18     const Precision precision = Precision::FP32;
19
20     const SizeVector notEmptyDims = {1, 1, 1, 1};
21     const SizeVector emptyDims = {};
22     const size_t batchSize = 1;
23
24     class BlockingDescTest : public BlockingDesc {
25     public:
26         BlockingDescTest(const SizeVector &blocked_dims, const SizeVector &order) : BlockingDesc(blocked_dims, order) {}
27
28         void fillDescTest(const SizeVector &blocked_dims, const SizeVector &order) {
29             fillDesc(blocked_dims, order);
30         }
31     };
32 };
33
34 TEST_F(DataTests, canSetEmptyDimsForDataDefault) {
35     Data data(data_name, precision);
36     ASSERT_NO_THROW(data.setDims(emptyDims));
37     ASSERT_FALSE(data.isInitialized());
38 }
39
40 TEST_F(DataTests, canSetEmptyDimsForDataBlocked) {
41     Data data(data_name, precision, BLOCKED);
42     ASSERT_NO_THROW(data.setDims(emptyDims));
43 }
44
45 TEST_F(DataTests, canSetNotEmptyDimsForDataBlocked) {
46     Data data(data_name, precision, BLOCKED);
47     ASSERT_NO_THROW(data.setDims(notEmptyDims));
48 }
49
50 TEST_F(DataTests, canSetNotEmptyDimsForDataNCHW) {
51     Data data(data_name, precision, NCHW);
52     ASSERT_NO_THROW(data.setDims(notEmptyDims));
53     ASSERT_TRUE(data.isInitialized());
54 }
55
56 TEST_F(DataTests, canSetEmptyDimsForTensorDescNCHW) {
57     TensorDesc desc(precision, emptyDims, NCHW);
58     ASSERT_NO_THROW(desc.setDims(emptyDims));
59 }
60
61 TEST_F(DataTests, canSetEmptyDimsForTensorDescBlocked) {
62     TensorDesc desc(precision, emptyDims, BLOCKED);
63     ASSERT_NO_THROW(desc.setDims(emptyDims));
64 }
65
66 TEST_F(DataTests, canSetNotEmptyDimsForTensorDescBlocked) {
67     TensorDesc desc(precision, notEmptyDims, BLOCKED);
68     ASSERT_NO_THROW(desc.setDims(notEmptyDims));
69 }
70
71 TEST_F(DataTests, canSetEmptyDimsForBlockingDescOrder) {
72     ASSERT_NO_THROW(BlockingDesc(emptyDims, emptyDims));
73 }
74
75 TEST_F(DataTests, throwOnFillDescByEmptyDimsForBlockingDesc) {
76     BlockingDescTest desc(emptyDims, emptyDims);
77     ASSERT_THROW(desc.fillDescTest(emptyDims, emptyDims), InferenceEngineException);
78 }
79
80 TEST_F(DataTests, throwOnSetEmptyDimsForBlockingDescBlocked) {
81     ASSERT_NO_THROW(BlockingDesc(emptyDims, BLOCKED));
82 }
83
84 TEST_F(DataTests, throwOnSetEmptyDimsForBlockingDescNCHW) {
85     ASSERT_NO_THROW(BlockingDesc(emptyDims, NCHW));
86 }
87
88 TEST_F(DataTests, canSetNotEmptyDimsForBlockingDescBlocked) {
89     ASSERT_NO_THROW(BlockingDesc(notEmptyDims, BLOCKED));
90 }
91
92 TEST_F(DataTests, canSetNotEmptyDimsForBlockingDescNCHW) {
93     ASSERT_NO_THROW(BlockingDesc(notEmptyDims, NCHW));
94 }
95
96 TEST_F(DataTests, setPrecision) {
97     Data data(data_name, emptyDims, Precision::FP32, Layout::NCHW);
98
99     EXPECT_EQ(Precision::FP32, data.precision);
100     EXPECT_EQ(Precision::FP32, data.getPrecision());
101     EXPECT_EQ(Precision::FP32, data.getTensorDesc().getPrecision());
102
103     data.setPrecision(Precision::FP16);
104     EXPECT_EQ(Precision::FP16, data.precision);
105     EXPECT_EQ(Precision::FP16, data.getPrecision());
106     EXPECT_EQ(Precision::FP16, data.getTensorDesc().getPrecision());
107
108     data.precision = Precision::Q78;
109     EXPECT_EQ(Precision::Q78, data.precision);
110     EXPECT_EQ(Precision::Q78, data.getPrecision());
111     EXPECT_EQ(Precision::Q78, data.getTensorDesc().getPrecision());
112 }