diff --git a/Doc/changelog.docu b/Doc/changelog.docu index f3c542e1..f336bf26 100644 --- a/Doc/changelog.docu +++ b/Doc/changelog.docu @@ -109,6 +109,7 @@ IO VectorT diff --git a/src/OpenMesh/Core/IO/SR_binary_spec.hh b/src/OpenMesh/Core/IO/SR_binary_spec.hh index 25e2a1e6..956b6e8f 100644 --- a/src/OpenMesh/Core/IO/SR_binary_spec.hh +++ b/src/OpenMesh/Core/IO/SR_binary_spec.hh @@ -238,8 +238,6 @@ template <> struct binary< std::string > { { length_t len = length_t(_v.size()); - if (_swap) reverse_byte_order(len); - size_t bytes = binary::store( _os, len, _swap ); _os.write( _v.data(), len ); return _os.good() ? len+bytes : 0; @@ -252,8 +250,6 @@ template <> struct binary< std::string > { { length_t len; size_t bytes = binary::restore( _is, len, _swap ); - if (_swap) - reverse_byte_order(len); _val.resize(len); _is.read( const_cast(_val.data()), len ); diff --git a/src/Unittests/unittests_sr_binary.cc b/src/Unittests/unittests_sr_binary.cc new file mode 100644 index 00000000..36115d86 --- /dev/null +++ b/src/Unittests/unittests_sr_binary.cc @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include + + +namespace { + +class OpenMeshSRBinary : public testing::Test { + + protected: + + // This function is called before each test is run + virtual void SetUp() { + + // Do some initial stuff with the member data here... + } + + // This function is called after all tests are through + virtual void TearDown() { + + // Do some final stuff with the member data here... + } + +}; + + + +/* + * ==================================================================== + * Define tests below + * ==================================================================== + */ + +/* Check if len is swapped correctly + * when storing strings using the binary serializer. + * + */ +TEST_F(OpenMeshSRBinary, CheckStringSwap) { + std::string testString = "OpenMesh String"; + std::stringstream stream(""); + OpenMesh::IO::binary::store(stream,testString,true); + std::stringstream stream2(""); + OpenMesh::IO::binary::store(stream2,testString,false); + std::string res2 = stream2.str(); + std::string res = stream.str(); + uint16_t len, len2; + stream.read((char*)&len,2); + + stream2.read( (char*)&len2,2); + + EXPECT_EQ(len2,testString.length()); + EXPECT_EQ(len,(testString.length()>>8)|(testString.length()<<8)); + EXPECT_NE(len,len2); +} + +/* Check if storing and restoring a string gives proper result + * Do that with and without swapping the byte order + */ +TEST_F(OpenMeshSRBinary, StringStoreRestore) { + + + std::string testString = "OpenMesh String"; + std::stringstream stream(""); + OpenMesh::IO::binary::store(stream,testString,true); + std::stringstream stream2(""); + OpenMesh::IO::binary::store(stream2,testString,false); + + + std::string restored1, restored2; + OpenMesh::IO::binary::restore(stream, restored1 , true); + OpenMesh::IO::binary::restore(stream2, restored2 , false); + + EXPECT_EQ(restored1.length(), restored2.length()); + EXPECT_EQ(restored1.length(), testString.length()); + for(size_t i = 0 ; i < testString.length() ; ++i) + { + EXPECT_EQ(restored1[i] , testString[i]); + EXPECT_EQ(restored2[i] , testString[i]); + } + + +} + + + +}