From 385c5974341a30bd9dae5728fff6bd468a14d57f Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 5 May 2016 21:27:36 +0200 Subject: [PATCH] UnitTests: Fix errors Former-commit-id: fb2340e5c7c264193f1ac363d6387486215aef7e --- include/Nazara/Core.hpp | 2 +- include/Nazara/Core/Algorithm.hpp | 2 +- include/Nazara/Core/Algorithm.inl | 13 ++----- include/Nazara/Core/ByteStream.hpp | 2 +- ...alization.hpp => SerializationContext.hpp} | 8 ++++- include/Nazara/Core/SerializationContext.inl | 24 +++++++++++++ include/Nazara/Core/String.hpp | 2 +- src/Nazara/Core/File.cpp | 32 ++++++++--------- src/Nazara/Core/SerializationContext.cpp | 35 +++++++++++++++++++ src/Nazara/Utility/Formats/DDSConstants.hpp | 2 +- tests/Engine/Core/Bitset.cpp | 2 +- tests/Engine/Core/File.cpp | 6 ++-- tests/Engine/Core/Serialization.cpp | 3 +- 13 files changed, 96 insertions(+), 37 deletions(-) rename include/Nazara/Core/{Serialization.hpp => SerializationContext.hpp} (79%) create mode 100644 include/Nazara/Core/SerializationContext.inl create mode 100644 src/Nazara/Core/SerializationContext.cpp diff --git a/include/Nazara/Core.hpp b/include/Nazara/Core.hpp index a9a93d45c..f2be4f231 100644 --- a/include/Nazara/Core.hpp +++ b/include/Nazara/Core.hpp @@ -73,7 +73,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/include/Nazara/Core/Algorithm.hpp b/include/Nazara/Core/Algorithm.hpp index 5f8b8aa7f..f031854c5 100644 --- a/include/Nazara/Core/Algorithm.hpp +++ b/include/Nazara/Core/Algorithm.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/include/Nazara/Core/Algorithm.inl b/include/Nazara/Core/Algorithm.inl index c45147d79..821a9069f 100644 --- a/include/Nazara/Core/Algorithm.inl +++ b/include/Nazara/Core/Algorithm.inl @@ -209,14 +209,8 @@ namespace Nz template std::enable_if_t::value, bool> Serialize(SerializationContext& context, T value) { - // Flush bits if a writing is in progress - if (context.currentBitPos != 8) - { - context.currentBitPos = 8; - - if (!Serialize(context, context.currentByte)) - NazaraWarning("Failed to flush bits"); - } + // Flush bits in case a writing is in progress + context.FlushBits(); if (context.endianness != Endianness_Unknown && context.endianness != GetPlatformEndianness()) SwapBytes(&value, sizeof(T)); @@ -269,8 +263,7 @@ namespace Nz { NazaraAssert(value, "Invalid data pointer"); - // Reset bit position - context.currentBitPos = 8; + context.ResetBitPosition(); if (context.stream->Read(value, sizeof(T)) == sizeof(T)) { diff --git a/include/Nazara/Core/ByteStream.hpp b/include/Nazara/Core/ByteStream.hpp index e26382cf4..fe1516b06 100644 --- a/include/Nazara/Core/ByteStream.hpp +++ b/include/Nazara/Core/ByteStream.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include diff --git a/include/Nazara/Core/Serialization.hpp b/include/Nazara/Core/SerializationContext.hpp similarity index 79% rename from include/Nazara/Core/Serialization.hpp rename to include/Nazara/Core/SerializationContext.hpp index 47339b0a2..64c558a7b 100644 --- a/include/Nazara/Core/Serialization.hpp +++ b/include/Nazara/Core/SerializationContext.hpp @@ -8,6 +8,7 @@ #define NAZARA_SERIALIZATION_HPP #include +#include #include #include #include @@ -17,13 +18,18 @@ namespace Nz { class Stream; - struct SerializationContext + struct NAZARA_CORE_API SerializationContext { Stream* stream; Endianness endianness = Endianness_BigEndian; //< Default to Big Endian encoding UInt8 currentBitPos = 8; //< 8 means no bit is currently wrote UInt8 currentByte; //< Undefined value, will be initialized at the first bit write + + void FlushBits(); + inline void ResetBitPosition(); }; } +#include + #endif // NAZARA_SERIALIZATION_HPP diff --git a/include/Nazara/Core/SerializationContext.inl b/include/Nazara/Core/SerializationContext.inl new file mode 100644 index 000000000..47f56e5c2 --- /dev/null +++ b/include/Nazara/Core/SerializationContext.inl @@ -0,0 +1,24 @@ +// Copyright (C) 2015 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + /*! + * \brief Reset the current bit cursor + + * \remark This function only reset the cursor position, it doesn't do any writing + if you wish to write all bits and reset bit position, call FlushBits + + \see FlushBits + */ + inline void SerializationContext::ResetBitPosition() + { + currentBitPos = 8; + } +} + +#include diff --git a/include/Nazara/Core/String.hpp b/include/Nazara/Core/String.hpp index 70673ae8a..765ef8b85 100644 --- a/include/Nazara/Core/String.hpp +++ b/include/Nazara/Core/String.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/Nazara/Core/File.cpp b/src/Nazara/Core/File.cpp index 8505e42f9..97504b0ee 100644 --- a/src/Nazara/Core/File.cpp +++ b/src/Nazara/Core/File.cpp @@ -454,24 +454,24 @@ namespace Nz return true; } - /*! - * \brief Sets the size of the file - * \return true if the file size has correctly changed - * - * \param size The size the file should have after this call - * - * \remark The cursor position is not affected by this call - * \remark The file must be open in write mode - */ - bool File::SetSize(UInt64 size) - { - NazaraLock(m_mutex) + /*! + * \brief Sets the size of the file + * \return true if the file size has correctly changed + * + * \param size The size the file should have after this call + * + * \remark The cursor position is not affected by this call + * \remark The file must be open in write mode + */ + bool File::SetSize(UInt64 size) + { + NazaraLock(m_mutex) - NazaraAssert(IsOpen(), "File is not open"); - NazaraAssert(IsWritable(), "File is not writable"); + NazaraAssert(IsOpen(), "File is not open"); + NazaraAssert(IsWritable(), "File is not writable"); - return m_impl->SetSize(size); - } + return m_impl->SetSize(size); + } /*! * \brief Sets the file path diff --git a/src/Nazara/Core/SerializationContext.cpp b/src/Nazara/Core/SerializationContext.cpp new file mode 100644 index 000000000..734b3b23d --- /dev/null +++ b/src/Nazara/Core/SerializationContext.cpp @@ -0,0 +1,35 @@ +// Copyright (C) 2015 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include + +namespace Nz +{ + + /*! + * \ingroup core + * \class Nz::SerializationContext + * \brief Structure containing a serialization/unserialization context states + */ + + /*! + * Write bits to the stream (if any) and reset the current bit cursor + + * \see ResetBitPosition + */ + void SerializationContext::FlushBits() + { + if (currentBitPos != 8) + { + ResetBitPosition(); + + // Serialize will reset the bit position + if (!Serialize(*this, currentByte)) + NazaraWarning("Failed to flush bits"); + } + } +} diff --git a/src/Nazara/Utility/Formats/DDSConstants.hpp b/src/Nazara/Utility/Formats/DDSConstants.hpp index 47a1766a4..4839df800 100644 --- a/src/Nazara/Utility/Formats/DDSConstants.hpp +++ b/src/Nazara/Utility/Formats/DDSConstants.hpp @@ -8,7 +8,7 @@ #define NAZARA_LOADERS_DDS_CONSTANTS_HPP #include -#include +#include #include namespace Nz diff --git a/tests/Engine/Core/Bitset.cpp b/tests/Engine/Core/Bitset.cpp index 76c35c886..cb870f7a4 100644 --- a/tests/Engine/Core/Bitset.cpp +++ b/tests/Engine/Core/Bitset.cpp @@ -7,7 +7,7 @@ SCENARIO("Bitset", "[CORE][BITSET]") { GIVEN("Allocate and constructor") { - Nz::Bitset<> bitset(3); + Nz::Bitset<> bitset(3, false); THEN("Capacity is 3 and size is 3") { diff --git a/tests/Engine/Core/File.cpp b/tests/Engine/Core/File.cpp index 2a87c8495..2ddbfebbf 100644 --- a/tests/Engine/Core/File.cpp +++ b/tests/Engine/Core/File.cpp @@ -78,9 +78,9 @@ SCENARIO("File", "[CORE][FILE]") THEN("The relative positioning should disappear") { - Nz::String containingNoMoreDot = "/resources/Spaceship/spaceship.mtl"; - REQUIRE(Nz::File::AbsolutePath(containingDot) == containingNoMoreDot); - REQUIRE(Nz::File::AbsolutePath(containingDoubleDot) == containingNoMoreDot); + Nz::String containingNoMoreDot = Nz::File::NormalizePath("/resources/Spaceship/spaceship.mtl"); + REQUIRE(Nz::File::AbsolutePath(containingDot).EndsWith(containingNoMoreDot)); + REQUIRE(Nz::File::AbsolutePath(containingDoubleDot).EndsWith(containingNoMoreDot)); } } } diff --git a/tests/Engine/Core/Serialization.cpp b/tests/Engine/Core/Serialization.cpp index a4d8ff75e..cc556dec8 100644 --- a/tests/Engine/Core/Serialization.cpp +++ b/tests/Engine/Core/Serialization.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -35,6 +35,7 @@ SCENARIO("Serialization", "[CORE][SERIALIZATION]") { context.stream->SetCursorPos(0); REQUIRE(Serialize(context, true)); + context.FlushBits(); //< Don't forget to flush bits (it is NOT done by the stream) context.stream->SetCursorPos(0); bool value = false; REQUIRE(Unserialize(context, &value));