Pārlūkot izejas kodu

Merged feature/PROTO-18-complete-unit-tests-varint-fixed into develop

Bart Hertog 6 gadi atpakaļ
vecāks
revīzija
9c08ffd345
3 mainītis faili ar 153 papildinājumiem un 17 dzēšanām
  1. 1 1
      src/Field.h
  2. 89 0
      test/test_FieldFixed.cpp
  3. 63 16
      test/test_FieldVarInt.cpp

+ 1 - 1
src/Field.h

@@ -232,7 +232,7 @@ namespace EmbeddedProto
         // Loop until the end of the encoded varint or until there is nomore data in the buffer.
         for(uint8_t i = 0; (i < N_BYTES_IN_VARINT) && result; ++i) 
         {
-          temp_value |= (byte & ~VARINT_MSB_BYTE) << (i * VARINT_SHIFT_N_BITS);
+          temp_value |= static_cast<VARINT_TYPE>(byte & (~VARINT_MSB_BYTE)) << (i * VARINT_SHIFT_N_BITS);
           if(byte & VARINT_MSB_BYTE) 
           {
             // Continue

+ 89 - 0
test/test_FieldFixed.cpp

@@ -318,4 +318,93 @@ namespace test_EmbeddedAMS_FieldFixed
   }
 
 
+  TEST_F(FieldFixedTest, deserialize_max)
+  {
+    InSequence s;
+
+    Mocks::MessageBufferMock buffer;
+
+    ON_CALL(buffer, get_size()).WillByDefault(Return(8));
+
+    EXPECT_CALL(buffer, pop(_)).Times(8).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, a.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<uint64_t>::max(), a.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(7).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<int64_t>::max(), b.get());
+    
+    EXPECT_CALL(buffer, pop(_)).Times(6).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true))); 
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0xEF), Return(true)));   
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, c.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<double>::max(), c.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(4).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, d.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<uint32_t>::max(), d.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(3).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, e.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<int32_t>::max(), e.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(2).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(2).WillRepeatedly(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, f.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<float>::max(), f.get());
+
+    /*
+      0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+      0x11, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 
+      0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7F, 
+
+      0x25, 0xFF, 0xFF, 0xFF, 0xFF, 
+      0x2D, 0xFF, 0xFF, 0xFF, 0x7F, 
+      0x35, 0xFF, 0xFF, 0x7F, 0x7F
+    */
+  }
+
+  TEST_F(FieldFixedTest, deserialize_min) 
+  {
+    InSequence s;
+
+    Mocks::MessageBufferMock buffer;
+
+    ON_CALL(buffer, get_size()).WillByDefault(Return(8));
+
+    EXPECT_CALL(buffer, pop(_)).Times(7).WillRepeatedly(DoAll(SetArgReferee<0>(0x00), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x80), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<int64_t>::min(), b.get());
+    
+    EXPECT_CALL(buffer, pop(_)).Times(6).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true))); 
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0xEF), Return(true)));   
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, c.deserialize(buffer));
+    double dans = std::numeric_limits<double>::lowest();
+    EXPECT_EQ(dans, c.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(3).WillRepeatedly(DoAll(SetArgReferee<0>(0x00), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x80), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, e.deserialize(buffer));
+    EXPECT_EQ(std::numeric_limits<int32_t>::min(), e.get());
+
+    EXPECT_CALL(buffer, pop(_)).Times(2).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, f.deserialize(buffer));
+    float fans = std::numeric_limits<float>::lowest();
+    EXPECT_EQ(fans, f.get());
+
+    /*
+      b 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 
+      c 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 
+
+      e 0x2D, 0x00, 0x00, 0x00, 0x80, 
+      f 0x35, 0xFF, 0xFF, 0x7F, 0xFF
+    */
+  }
+
 } // End of namespace test_EmbeddedAMS_Fields

+ 63 - 16
test/test_FieldVarInt.cpp

@@ -190,14 +190,10 @@ namespace test_EmbeddedAMS_FieldVarInt
     EXPECT_CALL(buffer, push(0x10)).Times(1).WillOnce(Return(true));
     EXPECT_CALL(buffer, push(0x80)).Times(9).WillRepeatedly(Return(true));
     EXPECT_CALL(buffer, push(0x01)).Times(1).WillOnce(Return(true));
-    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.serialize(buffer));
-
 
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.serialize(buffer));
     EXPECT_EQ(EmbeddedProto::Field::Result::OK, c.serialize(buffer));
-
     EXPECT_EQ(EmbeddedProto::Field::Result::OK, d.serialize(buffer));
-
-
   }
 
 
@@ -219,23 +215,74 @@ namespace test_EmbeddedAMS_FieldVarInt
     EXPECT_EQ(EmbeddedProto::Field::Result::OK, c.deserialize(buffer));
     EXPECT_EQ(EmbeddedProto::Field::Result::OK, d.deserialize(buffer));
 
-
-    EXPECT_EQ(1U, a.get());
+    EXPECT_EQ(1, a.get());
     EXPECT_EQ(1, b.get());
-    EXPECT_EQ(1.0, c.get());
+    EXPECT_EQ(1U, c.get());
     EXPECT_EQ(1U, d.get());    
+  }
 
+  TEST_F(FieldVarIntTest, deserialize_max)
+  {
+    InSequence s;
 
-    /* 
-      0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-      0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-      0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 
+    Mocks::MessageBufferMock buffer;
+
+    EXPECT_CALL(buffer, pop(_)).Times(4).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x07), Return(true)));
+
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, a.deserialize(buffer));
+
+    EXPECT_CALL(buffer, pop(_)).Times(8).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x7F), Return(true)));
+    
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.deserialize(buffer));
+
+    EXPECT_CALL(buffer, pop(_)).Times(4).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x0F), Return(true)));
+    
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, c.deserialize(buffer));
 
-      0x25, 0x01, 0x00, 0x00, 0x00, 
-      0x2D, 0x01, 0x00, 0x00, 0x00, 
-      0x35, 0x00, 0x00, 0x80, 0x3F 
-    */
+    EXPECT_CALL(buffer, pop(_)).Times(9).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x01), Return(true)));
+
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, d.deserialize(buffer));
+
+
+    EXPECT_EQ(std::numeric_limits<int32_t>::max(), a.get());
+    EXPECT_EQ(std::numeric_limits<int64_t>::max(), b.get());
+    EXPECT_EQ(std::numeric_limits<uint32_t>::max(), c.get());
+    EXPECT_EQ(std::numeric_limits<uint64_t>::max(), d.get());    
+
+/*
+    0xFF, 0xFF, 0xFF, 0xFF, 0x07, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01
+*/
   }
 
+  TEST_F(FieldVarIntTest, deserialize_min)
+  {
+    InSequence s;
+
+    Mocks::MessageBufferMock buffer;
+
+    EXPECT_CALL(buffer, pop(_)).Times(4).WillRepeatedly(DoAll(SetArgReferee<0>(0x80), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0xF8), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(4).WillRepeatedly(DoAll(SetArgReferee<0>(0xFF), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x01), Return(true)));
+
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, a.deserialize(buffer));
+
+    EXPECT_CALL(buffer, pop(_)).Times(9).WillRepeatedly(DoAll(SetArgReferee<0>(0x80), Return(true)));
+    EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x01), Return(true)));
+    
+    EXPECT_EQ(EmbeddedProto::Field::Result::OK, b.deserialize(buffer));
+
+    EXPECT_EQ(std::numeric_limits<int32_t>::min(), a.get());
+    EXPECT_EQ(std::numeric_limits<int64_t>::min(), b.get());
+    EXPECT_EQ(std::numeric_limits<uint32_t>::min(), c.get());
+    EXPECT_EQ(std::numeric_limits<uint64_t>::min(), d.get());
+  }
 
 } // End of namespace test_EmbeddedAMS_Fields