1/*
2 *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/base/byteorder.h"
12
13#include "webrtc/base/basictypes.h"
14#include "webrtc/base/gunit.h"
15
16namespace rtc {
17
18// Test memory set functions put values into memory in expected order.
19TEST(ByteOrderTest, TestSet) {
20  uint8 buf[8] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u };
21  Set8(buf, 0, 0xfb);
22  Set8(buf, 1, 0x12);
23  EXPECT_EQ(0xfb, buf[0]);
24  EXPECT_EQ(0x12, buf[1]);
25  SetBE16(buf, 0x1234);
26  EXPECT_EQ(0x12, buf[0]);
27  EXPECT_EQ(0x34, buf[1]);
28  SetLE16(buf, 0x1234);
29  EXPECT_EQ(0x34, buf[0]);
30  EXPECT_EQ(0x12, buf[1]);
31  SetBE32(buf, 0x12345678);
32  EXPECT_EQ(0x12, buf[0]);
33  EXPECT_EQ(0x34, buf[1]);
34  EXPECT_EQ(0x56, buf[2]);
35  EXPECT_EQ(0x78, buf[3]);
36  SetLE32(buf, 0x12345678);
37  EXPECT_EQ(0x78, buf[0]);
38  EXPECT_EQ(0x56, buf[1]);
39  EXPECT_EQ(0x34, buf[2]);
40  EXPECT_EQ(0x12, buf[3]);
41  SetBE64(buf, UINT64_C(0x0123456789abcdef));
42  EXPECT_EQ(0x01, buf[0]);
43  EXPECT_EQ(0x23, buf[1]);
44  EXPECT_EQ(0x45, buf[2]);
45  EXPECT_EQ(0x67, buf[3]);
46  EXPECT_EQ(0x89, buf[4]);
47  EXPECT_EQ(0xab, buf[5]);
48  EXPECT_EQ(0xcd, buf[6]);
49  EXPECT_EQ(0xef, buf[7]);
50  SetLE64(buf, UINT64_C(0x0123456789abcdef));
51  EXPECT_EQ(0xef, buf[0]);
52  EXPECT_EQ(0xcd, buf[1]);
53  EXPECT_EQ(0xab, buf[2]);
54  EXPECT_EQ(0x89, buf[3]);
55  EXPECT_EQ(0x67, buf[4]);
56  EXPECT_EQ(0x45, buf[5]);
57  EXPECT_EQ(0x23, buf[6]);
58  EXPECT_EQ(0x01, buf[7]);
59}
60
61// Test memory get functions get values from memory in expected order.
62TEST(ByteOrderTest, TestGet) {
63  uint8 buf[8];
64  buf[0] = 0x01u;
65  buf[1] = 0x23u;
66  buf[2] = 0x45u;
67  buf[3] = 0x67u;
68  buf[4] = 0x89u;
69  buf[5] = 0xabu;
70  buf[6] = 0xcdu;
71  buf[7] = 0xefu;
72  EXPECT_EQ(0x01u, Get8(buf, 0));
73  EXPECT_EQ(0x23u, Get8(buf, 1));
74  EXPECT_EQ(0x0123u, GetBE16(buf));
75  EXPECT_EQ(0x2301u, GetLE16(buf));
76  EXPECT_EQ(0x01234567u, GetBE32(buf));
77  EXPECT_EQ(0x67452301u, GetLE32(buf));
78  EXPECT_EQ(UINT64_C(0x0123456789abcdef), GetBE64(buf));
79  EXPECT_EQ(UINT64_C(0xefcdab8967452301), GetLE64(buf));
80}
81
82}  // namespace rtc
83
84