diff options
Diffstat (limited to 'winpr/libwinpr/utils/test/TestBitStream.c')
-rw-r--r-- | winpr/libwinpr/utils/test/TestBitStream.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/winpr/libwinpr/utils/test/TestBitStream.c b/winpr/libwinpr/utils/test/TestBitStream.c new file mode 100644 index 0000000..83c911c --- /dev/null +++ b/winpr/libwinpr/utils/test/TestBitStream.c @@ -0,0 +1,86 @@ + +#include <winpr/crt.h> +#include <winpr/print.h> +#include <winpr/stream.h> +#include <winpr/bitstream.h> + +static void BitStrGen(void) +{ + char str[64] = { 0 }; + + for (DWORD i = 0; i < 256;) + { + printf("\t"); + + for (DWORD j = 0; j < 4; j++) + { + if (0) + { + /* Least Significant Bit First */ + str[0] = (i & (1 << 7)) ? '1' : '0'; + str[1] = (i & (1 << 6)) ? '1' : '0'; + str[2] = (i & (1 << 5)) ? '1' : '0'; + str[3] = (i & (1 << 4)) ? '1' : '0'; + str[4] = (i & (1 << 3)) ? '1' : '0'; + str[5] = (i & (1 << 2)) ? '1' : '0'; + str[6] = (i & (1 << 1)) ? '1' : '0'; + str[7] = (i & (1 << 0)) ? '1' : '0'; + str[8] = '\0'; + } + else + { + /* Most Significant Bit First */ + str[7] = (i & (1 << 7)) ? '1' : '0'; + str[6] = (i & (1 << 6)) ? '1' : '0'; + str[5] = (i & (1 << 5)) ? '1' : '0'; + str[4] = (i & (1 << 4)) ? '1' : '0'; + str[3] = (i & (1 << 3)) ? '1' : '0'; + str[2] = (i & (1 << 2)) ? '1' : '0'; + str[1] = (i & (1 << 1)) ? '1' : '0'; + str[0] = (i & (1 << 0)) ? '1' : '0'; + str[8] = '\0'; + } + + printf("\"%s\",%s", str, j == 3 ? "" : " "); + i++; + } + + printf("\n"); + } +} + +int TestBitStream(int argc, char* argv[]) +{ + wBitStream* bs = NULL; + BYTE buffer[1024] = { 0 }; + + WINPR_UNUSED(argc); + WINPR_UNUSED(argv); + + bs = BitStream_New(); + if (!bs) + return 1; + BitStream_Attach(bs, buffer, sizeof(buffer)); + BitStream_Write_Bits(bs, 0xAF, 8); /* 11110101 */ + BitStream_Write_Bits(bs, 0xF, 4); /* 1111 */ + BitStream_Write_Bits(bs, 0xA, 4); /* 0101 */ + BitStream_Flush(bs); + BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); + BitStream_Write_Bits(bs, 3, 2); /* 11 */ + BitStream_Write_Bits(bs, 0, 3); /* 000 */ + BitStream_Write_Bits(bs, 0x2D, 6); /* 101101 */ + BitStream_Write_Bits(bs, 0x19, 5); /* 11001 */ + // BitStream_Flush(bs); /* flush should be done automatically here (32 bits written) */ + BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); + BitStream_Write_Bits(bs, 3, 2); /* 11 */ + BitStream_Flush(bs); + BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); + BitStream_Write_Bits(bs, 00, 2); /* 00 */ + BitStream_Write_Bits(bs, 0xF, 4); /* 1111 */ + BitStream_Write_Bits(bs, 0, 20); + BitStream_Write_Bits(bs, 0xAFF, 12); /* 111111110101 */ + BitStream_Flush(bs); + BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); + BitStream_Free(bs); + return 0; +} |