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