run.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include <ccan/endian/endian.h>
  2. #include <stdlib.h>
  3. #include <stddef.h>
  4. #include <ccan/tap/tap.h>
  5. int main(int argc, char *argv[])
  6. {
  7. union {
  8. uint64_t u64;
  9. unsigned char u64_bytes[8];
  10. } u64;
  11. union {
  12. uint32_t u32;
  13. unsigned char u32_bytes[4];
  14. } u32;
  15. union {
  16. uint16_t u16;
  17. unsigned char u16_bytes[2];
  18. } u16;
  19. plan_tests(48);
  20. /* Straight swap tests. */
  21. u64.u64_bytes[0] = 0x00;
  22. u64.u64_bytes[1] = 0x11;
  23. u64.u64_bytes[2] = 0x22;
  24. u64.u64_bytes[3] = 0x33;
  25. u64.u64_bytes[4] = 0x44;
  26. u64.u64_bytes[5] = 0x55;
  27. u64.u64_bytes[6] = 0x66;
  28. u64.u64_bytes[7] = 0x77;
  29. u64.u64 = bswap_64(u64.u64);
  30. ok1(u64.u64_bytes[7] == 0x00);
  31. ok1(u64.u64_bytes[6] == 0x11);
  32. ok1(u64.u64_bytes[5] == 0x22);
  33. ok1(u64.u64_bytes[4] == 0x33);
  34. ok1(u64.u64_bytes[3] == 0x44);
  35. ok1(u64.u64_bytes[2] == 0x55);
  36. ok1(u64.u64_bytes[1] == 0x66);
  37. ok1(u64.u64_bytes[0] == 0x77);
  38. u32.u32_bytes[0] = 0x00;
  39. u32.u32_bytes[1] = 0x11;
  40. u32.u32_bytes[2] = 0x22;
  41. u32.u32_bytes[3] = 0x33;
  42. u32.u32 = bswap_32(u32.u32);
  43. ok1(u32.u32_bytes[3] == 0x00);
  44. ok1(u32.u32_bytes[2] == 0x11);
  45. ok1(u32.u32_bytes[1] == 0x22);
  46. ok1(u32.u32_bytes[0] == 0x33);
  47. u16.u16_bytes[0] = 0x00;
  48. u16.u16_bytes[1] = 0x11;
  49. u16.u16 = bswap_16(u16.u16);
  50. ok1(u16.u16_bytes[1] == 0x00);
  51. ok1(u16.u16_bytes[0] == 0x11);
  52. /* Endian tests. */
  53. u64.u64 = cpu_to_le64(0x0011223344556677ULL);
  54. ok1(u64.u64_bytes[0] == 0x77);
  55. ok1(u64.u64_bytes[1] == 0x66);
  56. ok1(u64.u64_bytes[2] == 0x55);
  57. ok1(u64.u64_bytes[3] == 0x44);
  58. ok1(u64.u64_bytes[4] == 0x33);
  59. ok1(u64.u64_bytes[5] == 0x22);
  60. ok1(u64.u64_bytes[6] == 0x11);
  61. ok1(u64.u64_bytes[7] == 0x00);
  62. ok1(le64_to_cpu(u64.u64) == 0x0011223344556677ULL);
  63. u64.u64 = cpu_to_be64(0x0011223344556677ULL);
  64. ok1(u64.u64_bytes[7] == 0x77);
  65. ok1(u64.u64_bytes[6] == 0x66);
  66. ok1(u64.u64_bytes[5] == 0x55);
  67. ok1(u64.u64_bytes[4] == 0x44);
  68. ok1(u64.u64_bytes[3] == 0x33);
  69. ok1(u64.u64_bytes[2] == 0x22);
  70. ok1(u64.u64_bytes[1] == 0x11);
  71. ok1(u64.u64_bytes[0] == 0x00);
  72. ok1(be64_to_cpu(u64.u64) == 0x0011223344556677ULL);
  73. u32.u32 = cpu_to_le32(0x00112233);
  74. ok1(u32.u32_bytes[0] == 0x33);
  75. ok1(u32.u32_bytes[1] == 0x22);
  76. ok1(u32.u32_bytes[2] == 0x11);
  77. ok1(u32.u32_bytes[3] == 0x00);
  78. ok1(le32_to_cpu(u32.u32) == 0x00112233);
  79. u32.u32 = cpu_to_be32(0x00112233);
  80. ok1(u32.u32_bytes[3] == 0x33);
  81. ok1(u32.u32_bytes[2] == 0x22);
  82. ok1(u32.u32_bytes[1] == 0x11);
  83. ok1(u32.u32_bytes[0] == 0x00);
  84. ok1(be32_to_cpu(u32.u32) == 0x00112233);
  85. u16.u16 = cpu_to_le16(0x0011);
  86. ok1(u16.u16_bytes[0] == 0x11);
  87. ok1(u16.u16_bytes[1] == 0x00);
  88. ok1(le16_to_cpu(u16.u16) == 0x0011);
  89. u16.u16 = cpu_to_be16(0x0011);
  90. ok1(u16.u16_bytes[1] == 0x11);
  91. ok1(u16.u16_bytes[0] == 0x00);
  92. ok1(be16_to_cpu(u16.u16) == 0x0011);
  93. exit(exit_status());
  94. }