1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <gtest/gtest.h>
6 #include <ie_precision.hpp>
9 using namespace InferenceEngine;
11 class PrecisionTests : public ::testing::Test {};
13 TEST_F(PrecisionTests, ShowsCorrectPrecisionNames) {
14 ASSERT_STREQ(Precision(Precision::FP16).name(), "FP16" );
15 ASSERT_STREQ(Precision(Precision::FP32).name(), "FP32" );
16 ASSERT_STREQ(Precision(Precision::I16).name() , "I16" );
17 ASSERT_STREQ(Precision(Precision::I32).name() , "I32" );
18 ASSERT_STREQ(Precision(Precision::U16).name() , "U16" );
19 ASSERT_STREQ(Precision(Precision::I8).name() , "I8" );
20 ASSERT_STREQ(Precision(Precision::Q78).name() , "Q78" );
21 ASSERT_STREQ(Precision(Precision::U8).name() , "U8" );
22 ASSERT_STREQ(Precision(Precision::MIXED).name(), "MIXED");
23 ASSERT_STREQ(Precision(Precision::UNSPECIFIED).name(), "UNSPECIFIED");
24 ASSERT_STREQ(Precision(static_cast<Precision::ePrecision >(-3)).name(), "UNSPECIFIED");
25 ASSERT_STREQ(Precision(1, "Custom Name").name(), "Custom Name");
28 TEST_F(PrecisionTests, sizeIsCorrect) {
29 ASSERT_EQ(Precision(Precision::FP16).size(), 2);
30 ASSERT_EQ(Precision(Precision::FP32).size(), 4);
31 ASSERT_EQ(Precision(Precision::I32).size(), 4);
32 ASSERT_EQ(Precision(Precision::I16).size(), 2);
33 ASSERT_EQ(Precision(Precision::U16).size(), 2);
34 ASSERT_EQ(Precision(Precision::I8).size(), 1);
35 ASSERT_EQ(Precision(Precision::Q78).size(), 2);
36 ASSERT_EQ(Precision(Precision::U8).size(), 1);
37 ASSERT_EQ(Precision(10*8).size(), 10);
38 ASSERT_ANY_THROW(Precision(Precision::MIXED).size());
39 ASSERT_ANY_THROW(Precision(Precision::UNSPECIFIED).size());
42 TEST_F(PrecisionTests, is_float) {
43 ASSERT_TRUE(Precision(Precision::FP16).is_float());
44 ASSERT_TRUE(Precision(Precision::FP32).is_float());
45 ASSERT_FALSE(Precision(Precision::I32).is_float());
46 ASSERT_FALSE(Precision(Precision::I16).is_float());
47 ASSERT_FALSE(Precision(Precision::U16).is_float());
48 ASSERT_FALSE(Precision(Precision::I8).is_float());
49 ASSERT_FALSE(Precision(Precision::Q78).is_float());
50 ASSERT_FALSE(Precision(Precision::U8).is_float());
51 ASSERT_FALSE(Precision(Precision::MIXED).is_float());
52 ASSERT_FALSE(Precision(10).is_float());
53 ASSERT_FALSE(Precision(static_cast<Precision::ePrecision >(-3)).is_float());
54 ASSERT_FALSE(Precision(Precision::UNSPECIFIED).is_float());
57 TEST_F(PrecisionTests, constructFromSTR) {
58 ASSERT_EQ(Precision(Precision::FP16), Precision::FromStr("FP16"));
59 ASSERT_EQ(Precision(Precision::FP32), Precision::FromStr("FP32" ));
60 ASSERT_EQ(Precision(Precision::I32), Precision::FromStr("I32" ));
61 ASSERT_EQ(Precision(Precision::I16), Precision::FromStr("I16" ));
62 ASSERT_EQ(Precision(Precision::U16), Precision::FromStr("U16" ));
63 ASSERT_EQ(Precision(Precision::I8), Precision::FromStr("I8" ));
64 ASSERT_EQ(Precision(Precision::Q78), Precision::FromStr("Q78" ));
65 ASSERT_EQ(Precision(Precision::U8), Precision::FromStr("U8"));
66 ASSERT_EQ(Precision(Precision::MIXED), Precision::FromStr("MIXED"));
67 ASSERT_EQ(Precision(static_cast<Precision::ePrecision >(-3)), Precision::FromStr("UNSPECIFIED"));
68 ASSERT_EQ(Precision(Precision::UNSPECIFIED), Precision::FromStr("UNSPECIFIED"));
71 TEST_F(PrecisionTests, canCompareCustomPrecisions) {
73 Precision p1 (12, "XXX");
74 ASSERT_FALSE(p == p1);
80 Precision p2 (12, d.c_str());
81 ASSERT_TRUE(p2 == p1);
83 Precision p3 (13, "XXX");
84 ASSERT_FALSE(p3 == p1);
87 ASSERT_FALSE(p4 == p);
94 TEST_F(PrecisionTests, canUseInIfs) {
100 p = Precision(static_cast<Precision::ePrecision >(-3));
104 TEST_F(PrecisionTests, canCreateFromStruct) {
109 auto precision = Precision::fromType<X>();
110 ASSERT_EQ(precision.size(), sizeof(X));
113 TEST_F(PrecisionTests, canCreateMoreThan255bitsPrecisions) {
118 ASSERT_NO_THROW(Precision::fromType<Y>());
119 ASSERT_EQ(Precision::fromType<Y>().size(), 257);