diff --git a/bitwise.hpp b/bitwise.hpp index 59e9c225..e79be09a 100644 --- a/bitwise.hpp +++ b/bitwise.hpp @@ -35,7 +35,8 @@ const uint8_t BITMASK_8BITS = 0xFF; template -T rotate_left (const T &value, size_t magnitude) { +T +rotatel (const T &value, size_t magnitude) { magnitude %= sizeof (T) * 8; return (value << magnitude) | (value >> sizeof (value) * 8 - magnitude); } diff --git a/test/.gitignore b/test/.gitignore index c11e95d3..4271c7a7 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,13 +1,13 @@ -/*.log -/*.trs /adler* /backtrace* +/bitwise /checksum* /float* /hton* /ip* /json /json-check* +/*.log /maths* /matrix* /option @@ -15,4 +15,5 @@ /range* /region* /signal* +/*.trs /version* diff --git a/test/Makefile.am b/test/Makefile.am index 6f4799e5..76582941 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -9,6 +9,7 @@ AM_LDFLAGS = $(COMMON_LDFLAGS) TEST_BIN = \ backtrace \ + bitwise \ checksum \ float \ hton \ @@ -31,6 +32,9 @@ backtrace_CPPFLAGS = $(COMMON_CXXFLAGS) backtrace_LDADD = $(builddir)/../libutil.la backtrace_SOURCES = backtrace.cpp +bitwise_LDADD = $(builddir)/../libutil.la +bitwise_SOURCES = bitwise.cpp + checksum_LDADD = $(builddir)/../libutil.la checksum_SOURCES = checksum.cpp diff --git a/test/bitwise.cpp b/test/bitwise.cpp new file mode 100644 index 00000000..7085899a --- /dev/null +++ b/test/bitwise.cpp @@ -0,0 +1,21 @@ +#include "../bitwise.hpp" + +int +main (int, char**) { + CHECK_EQ (rotatel (uint8_t (0x0F), 0), 0x0F); + CHECK_EQ (rotatel (uint8_t (0x0F), 4), 0xF0); + CHECK_EQ (rotatel (uint8_t (0xF0), 4), 0x0F); + CHECK_EQ (rotatel (uint8_t (0x0F), 8), 0x0F); + + CHECK_EQ (rotatel (uint16_t (0xABCD), 0), 0xABCD); + CHECK_EQ (rotatel (uint16_t (0xABCD), 4), 0xBCDA); + CHECK_EQ (rotatel (uint16_t (0xABCD), 8), 0xCDAB); + CHECK_EQ (rotatel (uint16_t (0xABCD), 12), 0xDABC); + CHECK_EQ (rotatel (uint16_t (0xABCD), 16), 0xABCD); + + CHECK_EQ (rotatel (uint32_t (0x12345670), 12), 0x45670123); + + CHECK_EQ (rotatel (uint64_t (0x1234567890ABCDEF), 12), 0x4567890ABCDEF123); + + return 0; +}