bits.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include<__vic/bits.h>
  2. #include<iostream>
  3. #include<exception>
  4. #include<cassert>
  5. namespace tests {
  6. void nibble_tests()
  7. {
  8. char ch = '\xFA';
  9. std::cout << std::hex << std::uppercase <<
  10. __vic::hi_nibble(ch) << ' ' << __vic::lo_nibble(ch) << '\n';
  11. assert(__vic::hi_nibble(ch) == 0xF);
  12. assert(__vic::lo_nibble(ch) == 0xA);
  13. }
  14. void ones_test()
  15. {
  16. std::cout << __vic::lsb_ones<int>(5) << '\n';
  17. assert(__vic::lsb_ones<int>(5) == 0x1F);
  18. std::cout << unsigned(__vic::msb_ones<uint8_t>(5)) << '\n';
  19. assert(__vic::msb_ones<uint8_t>(5) == uint8_t('\xF8'));
  20. }
  21. void get_lsbs_test()
  22. {
  23. std::cout << __vic::get_lsbs(~int(0), 6) << '\n';
  24. assert(__vic::get_lsbs(~int(0), 6) == 0x3F);
  25. }
  26. void ord_test()
  27. {
  28. char ch = -20;
  29. std::cout << std::dec << __vic::ord(ch) << '\n';
  30. assert(__vic::ord(ch) == 236);
  31. }
  32. void swap_nibbles_test()
  33. {
  34. assert(__vic::swapped_nibbles(0x12) == 0x21);
  35. }
  36. void rot_tests()
  37. {
  38. assert(__vic::rotl(uint32_t(0x12345678), 8) == uint32_t(0x34567812));
  39. assert(__vic::rotr(uint32_t(0x12345678), 8) == uint32_t(0x78123456));
  40. }
  41. void run()
  42. {
  43. nibble_tests();
  44. ones_test();
  45. get_lsbs_test();
  46. ord_test();
  47. swap_nibbles_test();
  48. rot_tests();
  49. }
  50. } // namespace
  51. int main()
  52. {
  53. try
  54. {
  55. tests::run();
  56. return 0;
  57. }
  58. catch(const std::exception &ex)
  59. {
  60. std::cerr << ex.what() << '\n';
  61. }
  62. return 1;
  63. }