• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2019 Huawei Technologies Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include <string>
17 #include "./securec.h"
18 #include "minddata/dataset/core/data_type.h"
19 #include "common/common.h"
20 #include "gtest/gtest.h"
21 #include <opencv2/opencv.hpp>
22 #include "minddata/dataset/include/dataset/constants.h"
23 
24 using namespace mindspore::dataset;
25 
26 class MindDataTestDatatype : public UT::Common {
27  public:
28     MindDataTestDatatype() = default;
29 };
30 
31 
TEST_F(MindDataTestDatatype,TestSizes)32 TEST_F(MindDataTestDatatype, TestSizes) {
33   uint8_t x = DataType::kTypeInfo[DataType::DE_BOOL].sizeInBytes_;
34   DataType d = DataType(DataType::DE_BOOL);
35   ASSERT_EQ(x, 1);
36   ASSERT_EQ(d.SizeInBytes(), x);
37   x = DataType::kTypeInfo[DataType::DE_INT8].sizeInBytes_;
38   d = DataType(DataType::DE_INT8);
39   ASSERT_EQ(x, 1);
40   ASSERT_EQ(d.SizeInBytes(), x);
41   x = DataType::kTypeInfo[DataType::DE_UINT8].sizeInBytes_;
42   d = DataType(DataType::DE_UINT8);
43   ASSERT_EQ(x, 1);
44   ASSERT_EQ(d.SizeInBytes(), x);
45   x = DataType::kTypeInfo[DataType::DE_INT16].sizeInBytes_;
46   d = DataType(DataType::DE_INT16);
47   ASSERT_EQ(x, 2);
48   ASSERT_EQ(d.SizeInBytes(), x);
49   x = DataType::kTypeInfo[DataType::DE_UINT16].sizeInBytes_;
50   d = DataType(DataType::DE_UINT16);
51   ASSERT_EQ(x, 2);
52   ASSERT_EQ(d.SizeInBytes(), x);
53   x = DataType::kTypeInfo[DataType::DE_INT32].sizeInBytes_;
54   d = DataType(DataType::DE_INT32);
55   ASSERT_EQ(x, 4);
56   ASSERT_EQ(d.SizeInBytes(), x);
57   x = DataType::kTypeInfo[DataType::DE_UINT32].sizeInBytes_;
58   d = DataType(DataType::DE_UINT32);
59   ASSERT_EQ(x, 4);
60   ASSERT_EQ(d.SizeInBytes(), x);
61   x = DataType::kTypeInfo[DataType::DE_INT64].sizeInBytes_;
62   d = DataType(DataType::DE_INT64);
63   ASSERT_EQ(x, 8);
64   ASSERT_EQ(d.SizeInBytes(), x);
65   x = DataType::kTypeInfo[DataType::DE_UINT64].sizeInBytes_;
66   d = DataType(DataType::DE_UINT64);
67   ASSERT_EQ(x, 8);
68   ASSERT_EQ(d.SizeInBytes(), x);
69   x = DataType::kTypeInfo[DataType::DE_FLOAT32].sizeInBytes_;
70   d = DataType(DataType::DE_FLOAT32);
71   ASSERT_EQ(x, 4);
72   ASSERT_EQ(d.SizeInBytes(), x);
73   x = DataType::kTypeInfo[DataType::DE_FLOAT64].sizeInBytes_;
74   d = DataType(DataType::DE_FLOAT64);
75   ASSERT_EQ(x, 8);
76   ASSERT_EQ(d.SizeInBytes(), x);
77 }
78 
FromDT(DataType d,uint8_t cv_type,std::string str)79 void FromDT(DataType d, uint8_t cv_type, std::string str) {
80   if (d == DataType::DE_UNKNOWN || d == DataType::DE_UINT32 || d == DataType::DE_UINT64 || d == DataType::DE_INT64) {
81     ASSERT_EQ(d.AsCVType(), kCVInvalidType);
82   } else {
83     ASSERT_EQ(d.AsCVType(), cv_type);
84   }
85   ASSERT_EQ(d.ToString(), str);
86 }
87 
TEST_F(MindDataTestDatatype,TestConstructors)88 TEST_F(MindDataTestDatatype, TestConstructors) {
89   // Default constructor
90   DataType d;
91   ASSERT_EQ(d, DataType::DE_UNKNOWN);
92   DataType d3 = DataType();
93   ASSERT_EQ(d3, DataType::DE_UNKNOWN);
94 
95   // DataType(Type d)
96   DataType d4(DataType::DE_FLOAT32);
97   ASSERT_EQ(d4, DataType::DE_FLOAT32);
98   DataType d5 = DataType(DataType::DE_UINT32);
99   ASSERT_EQ(d5, DataType::DE_UINT32);
100 
101   // != operator
102   ASSERT_NE(d4, d5);
103 
104   // == operator
105   d5 = DataType(DataType::DE_FLOAT32);
106   ASSERT_EQ(d4, d5);
107 }
108 
TEST_F(MindDataTestDatatype,TestFromTypes)109 TEST_F(MindDataTestDatatype, TestFromTypes) {
110   FromDT(DataType(DataType::DE_BOOL), CV_8U, "bool");
111   FromDT(DataType(DataType::DE_UINT8), CV_8U, "uint8");
112   FromDT(DataType(DataType::DE_INT8), CV_8S, "int8");
113   FromDT(DataType(DataType::DE_UINT16), CV_16U, "uint16");
114   FromDT(DataType(DataType::DE_INT16), CV_16S, "int16");
115   FromDT(DataType(DataType::DE_UINT32), 0, "uint32");
116   FromDT(DataType(DataType::DE_INT32), CV_32S, "int32");
117   FromDT(DataType(DataType::DE_UINT64), 0, "uint64");
118   FromDT(DataType(DataType::DE_INT64), 0, "int64");
119   FromDT(DataType(DataType::DE_FLOAT32), CV_32F, "float32");
120   FromDT(DataType(DataType::DE_FLOAT64), CV_64F, "float64");
121   FromDT(DataType(DataType::DE_UNKNOWN), CV_8U, "unknown");
122 }
123 
TEST_F(MindDataTestDatatype,TestCompatible)124 TEST_F(MindDataTestDatatype, TestCompatible) {
125   ASSERT_TRUE(DataType(DataType::DE_BOOL).IsCompatible<bool>());
126   ASSERT_TRUE(DataType(DataType::DE_UINT8).IsCompatible<uint8_t>());
127   ASSERT_TRUE(DataType(DataType::DE_INT8).IsCompatible<int8_t>());
128   ASSERT_TRUE(DataType(DataType::DE_UINT16).IsCompatible<uint16_t>());
129   ASSERT_TRUE(DataType(DataType::DE_INT16).IsCompatible<int16_t>());
130   ASSERT_TRUE(DataType(DataType::DE_UINT32).IsCompatible<uint32_t>());
131   ASSERT_TRUE(DataType(DataType::DE_INT32).IsCompatible<int32_t>());
132   ASSERT_TRUE(DataType(DataType::DE_UINT64).IsCompatible<uint64_t>());
133   ASSERT_TRUE(DataType(DataType::DE_INT64).IsCompatible<int64_t>());
134   ASSERT_TRUE(DataType(DataType::DE_FLOAT32).IsCompatible<float>());
135   ASSERT_TRUE(DataType(DataType::DE_FLOAT64).IsCompatible<double>());
136 
137   ASSERT_FALSE(DataType(DataType::DE_UINT8).IsCompatible<bool>());
138   ASSERT_FALSE(DataType(DataType::DE_BOOL).IsCompatible<uint8_t>());
139   ASSERT_FALSE(DataType(DataType::DE_UINT8).IsCompatible<int8_t>());
140   ASSERT_FALSE(DataType(DataType::DE_UINT32).IsCompatible<uint16_t>());
141   ASSERT_FALSE(DataType(DataType::DE_INT64).IsCompatible<double>());
142 
143   ASSERT_TRUE(DataType(DataType::DE_BOOL).IsLooselyCompatible<bool>());
144   ASSERT_FALSE(DataType(DataType::DE_INT16).IsLooselyCompatible<bool>());
145 
146   ASSERT_TRUE(DataType(DataType::DE_UINT8).IsLooselyCompatible<uint8_t>());
147   ASSERT_FALSE(DataType(DataType::DE_UINT64).IsLooselyCompatible<uint8_t>());
148 
149   ASSERT_TRUE(DataType(DataType::DE_UINT64).IsLooselyCompatible<uint64_t>());
150   ASSERT_TRUE(DataType(DataType::DE_UINT32).IsLooselyCompatible<uint64_t>());
151   ASSERT_TRUE(DataType(DataType::DE_UINT16).IsLooselyCompatible<uint64_t>());
152   ASSERT_TRUE(DataType(DataType::DE_UINT8).IsLooselyCompatible<uint64_t>());
153 
154 
155 }
156 
TEST_F(MindDataTestDatatype,TestCVTypes)157 TEST_F(MindDataTestDatatype, TestCVTypes) {
158   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8U).value());
159   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8UC1).value());
160   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8UC2).value());
161   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8UC3).value());
162   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8UC4).value());
163   ASSERT_EQ(DataType::DE_UINT8, DataType::FromCVType(CV_8UC(5)).value());
164   ASSERT_EQ(DataType::DE_INT8, DataType::FromCVType(CV_8S).value());
165   ASSERT_EQ(DataType::DE_INT8, DataType::FromCVType(CV_8SC1).value());
166   ASSERT_EQ(DataType::DE_INT8, DataType::FromCVType(CV_8SC2).value());
167   ASSERT_EQ(DataType::DE_INT8, DataType::FromCVType(CV_8SC3).value());
168   ASSERT_EQ(DataType::DE_INT8, DataType::FromCVType(CV_8SC(5)).value());
169   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16U).value());
170   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16UC1).value());
171   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16UC2).value());
172   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16UC3).value());
173   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16UC4).value());
174   ASSERT_EQ(DataType::DE_UINT16, DataType::FromCVType(CV_16UC(5)).value());
175   ASSERT_EQ(DataType::DE_INT16, DataType::FromCVType(CV_16S).value());
176   ASSERT_EQ(DataType::DE_INT16, DataType::FromCVType(CV_16SC1).value());
177   ASSERT_EQ(DataType::DE_INT16, DataType::FromCVType(CV_16SC2).value());
178   ASSERT_EQ(DataType::DE_INT16, DataType::FromCVType(CV_16SC3).value());
179   ASSERT_EQ(DataType::DE_INT16, DataType::FromCVType(CV_16SC(5)).value());
180   ASSERT_EQ(DataType::DE_INT32, DataType::FromCVType(CV_32S).value());
181   ASSERT_EQ(DataType::DE_INT32, DataType::FromCVType(CV_32SC1).value());
182   ASSERT_EQ(DataType::DE_INT32, DataType::FromCVType(CV_32SC2).value());
183   ASSERT_EQ(DataType::DE_INT32, DataType::FromCVType(CV_32SC3).value());
184   ASSERT_EQ(DataType::DE_INT32, DataType::FromCVType(CV_32SC(5)).value());
185   ASSERT_EQ(DataType::DE_FLOAT32, DataType::FromCVType(CV_32F).value());
186   ASSERT_EQ(DataType::DE_FLOAT32, DataType::FromCVType(CV_32FC1).value());
187   ASSERT_EQ(DataType::DE_FLOAT32, DataType::FromCVType(CV_32FC2).value());
188   ASSERT_EQ(DataType::DE_FLOAT32, DataType::FromCVType(CV_32FC3).value());
189   ASSERT_EQ(DataType::DE_FLOAT32, DataType::FromCVType(CV_32FC(5)).value());
190   ASSERT_EQ(DataType::DE_FLOAT64, DataType::FromCVType(CV_64F).value());
191   ASSERT_EQ(DataType::DE_FLOAT64, DataType::FromCVType(CV_64FC1).value());
192   ASSERT_EQ(DataType::DE_FLOAT64, DataType::FromCVType(CV_64FC2).value());
193   ASSERT_EQ(DataType::DE_FLOAT64, DataType::FromCVType(CV_64FC3).value());
194   ASSERT_EQ(DataType::DE_FLOAT64, DataType::FromCVType(CV_64FC(5)).value());
195 }
196