diff --git a/include/etl/byte_stream.h b/include/etl/byte_stream.h index 17d58f4e..ceb152af 100644 --- a/include/etl/byte_stream.h +++ b/include/etl/byte_stream.h @@ -143,7 +143,7 @@ namespace etl { write_unchecked(value); } - + return success; } @@ -168,7 +168,7 @@ namespace etl if (success) { - write_unchecked(value); + write_unchecked(value); } return success; @@ -812,6 +812,14 @@ namespace etl return available(); } + //*************************************************************************** + /// Gets the endianness of the stream. + //*************************************************************************** + etl::endian get_endianness() const + { + return stream_endianness; + } + private: //*************************************************************************** diff --git a/test/test_byte_stream.cpp b/test/test_byte_stream.cpp index f6c461af..5bd892eb 100644 --- a/test/test_byte_stream.cpp +++ b/test/test_byte_stream.cpp @@ -171,12 +171,28 @@ namespace CHECK_EQUAL(7U, reader.size_bytes()); } + //************************************************************************* + TEST(byte_stream_endianness) + { + std::array storage; + + etl::byte_stream_reader reader_big(storage.data(), storage.size(), etl::endian::big); + etl::byte_stream_reader reader_little(storage.data(), storage.size(), etl::endian::little); + etl::byte_stream_writer writer_big(storage.data(), storage.size(), etl::endian::big); + etl::byte_stream_writer writer_little(storage.data(), storage.size(), etl::endian::little); + + CHECK(writer_big.get_endianness() == etl::endian::big); + CHECK(writer_little.get_endianness() == etl::endian::little); + CHECK(reader_big.get_endianness() == etl::endian::big); + CHECK(reader_little.get_endianness() == etl::endian::little); + } + //************************************************************************* TEST(write_bool) { char storage[8]; char result[8] = { 0, 1, 0, 1, 1, 0, 1, 0 }; - + etl::byte_stream_writer byte_stream(storage, 8U, etl::endian::big); CHECK(byte_stream.write(false)); @@ -489,28 +505,29 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); CHECK_EQUAL(0U, writer.available()); etl::byte_stream_reader reader(storage.data(), writer.size_bytes(), etl::endian::big); + CHECK(!reader.empty()); CHECK_EQUAL(4U, reader.available()); CHECK_EQUAL(4U, reader.available_bytes()); @@ -546,22 +563,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -602,22 +619,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -658,22 +675,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -714,22 +731,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -770,22 +787,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -826,22 +843,22 @@ namespace CHECK(!writer.full()); CHECK_EQUAL(4U, writer.available()); CHECK_EQUAL(0U, writer.size_bytes()); - + writer.write(put_data[0]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(3U, writer.available()); - + writer.write(put_data[1]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(2U, writer.available()); - + writer.write(put_data[2]); CHECK(!writer.empty()); CHECK(!writer.full()); CHECK_EQUAL(1U, writer.available()); - + writer.write(put_data[3]); CHECK(!writer.empty()); CHECK(writer.full()); @@ -1131,7 +1148,7 @@ namespace //************************************************************************* TEST(write_read_object) - { + { std::array storage; etl::byte_stream_writer writer(storage.data(), storage.size(), etl::endian::big); @@ -1283,9 +1300,9 @@ namespace { std::array storage; std::array put_data = { int32_t(0x00000001), int32_t(0xA55AA55A), int32_t(0x5AA55AA5), int32_t(0xFFFFFFFF) }; - std::vector expected = { char(0x00), char(0x00), char(0x00), char(0x01), - char(0xA5), char(0x5A), char(0xA5), char(0x5A), - char(0x5A), char(0xA5), char(0x5A), char(0xA5), + std::vector expected = { char(0x00), char(0x00), char(0x00), char(0x01), + char(0xA5), char(0x5A), char(0xA5), char(0x5A), + char(0x5A), char(0xA5), char(0x5A), char(0xA5), char(0xFF), char(0xFF), char(0xFF), char(0xFF) }; std::vector result; @@ -1314,12 +1331,12 @@ namespace char(0xA5), char(0x5A), char(0xA5), char(0x5A), char(0x5A), char(0xA5), char(0x5A), char(0xA5), char(0xFF), char(0xFF), char(0xFF), char(0xFF) }; - + static std::vector result; - auto lambda = [&](etl::byte_stream_writer::callback_parameter_type sp) - { + auto lambda = [&](etl::byte_stream_writer::callback_parameter_type sp) + { std::copy(sp.begin(), sp.end(), std::back_inserter(result)); };