u16_test.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. *******************************************************************************
  3. \file u16_test.c
  4. \brief Tests for operations on 16-bit words
  5. \project bee2/test
  6. \author (C) Sergey Agievich [agievich@{bsu.by|gmail.com}]
  7. \created 2017.01.11
  8. \version 2019.07.08
  9. \license This program is released under the GNU General Public License
  10. version 3. See Copyright Notices in bee2/info.h.
  11. *******************************************************************************
  12. */
  13. #include <bee2/core/u16.h>
  14. /*
  15. *******************************************************************************
  16. Тестирование
  17. *******************************************************************************
  18. */
  19. bool_t u16Test()
  20. {
  21. u16 w = 0x0102;
  22. u16 a[2] = {0x0102, 0x0201};
  23. octet b[4];
  24. // rot
  25. if (u16RotHi(w, 1) != 0x0204 ||
  26. u16RotHi(w, 4) != 0x1020 ||
  27. u16RotHi(w, 8) != 0x0201 ||
  28. u16RotLo(u16RotHi(w, 7), 7) != w ||
  29. u16RotLo(u16RotHi(w, 9), 9) != w ||
  30. u16RotLo(u16RotHi(w, 13), 13) != w)
  31. return FALSE;
  32. // reverse
  33. if (u16Rev(w) != a[1] || u16Rev(a[1]) != w)
  34. return FALSE;
  35. u16Rev2(a, 2), u16Rev2(a, 2);
  36. if (a[0] != w || a[1] != u16Rev(w))
  37. return FALSE;
  38. // weight / parity
  39. if (u16Weight(0) != 0 || u16Parity(0) || !u16Parity(1) ||
  40. u16Weight(0xA001) != 3 || !u16Parity(0xA001) ||
  41. u16Weight(0xFFFF) != 16 || u16Parity(0xFFFF) ||
  42. u16Weight(0xFFF8) != 13)
  43. return FALSE;
  44. // CTZ / CLZ
  45. if (SAFE(u16CTZ)(0) != 16 || FAST(u16CTZ)(0) != 16 ||
  46. SAFE(u16CLZ)(0) != 16 || FAST(u16CLZ)(0) != 16 ||
  47. SAFE(u16CTZ)(1) != 0 || FAST(u16CTZ)(1) != 0 ||
  48. SAFE(u16CLZ)(1) != 15 || FAST(u16CLZ)(1) != 15 ||
  49. SAFE(u16CTZ)(0xFFF8) != 3 || FAST(u16CTZ)(0xFFF8) != 3 ||
  50. SAFE(u16CLZ)(0xFFF8) != 0 || FAST(u16CLZ)(0xFFF8) != 0
  51. )
  52. return FALSE;
  53. // shuffle
  54. if (u16Deshuffle(0) != 0 || u16Deshuffle(1) != 1 ||
  55. u16Deshuffle(2) != 0x0100 ||
  56. u16Deshuffle(0xAAAA) != 0xFF00 ||
  57. u16Shuffle(u16Deshuffle(0x3210)) != 0x3210 ||
  58. u16Deshuffle(u16Shuffle(0xDCBA)) != 0xDCBA)
  59. return FALSE;
  60. // negInv
  61. if (u16NegInv(1) != U16_MAX ||
  62. u16NegInv(5) != 13107 || u16NegInv(13107) != 5)
  63. return FALSE;
  64. // from / to
  65. u16To(b, 3, a), u16From(a, b, 3);
  66. if (a[0] != w || a[1] != 0x0001)
  67. return FALSE;
  68. // все нормально
  69. return TRUE;
  70. }