diff options
author | Christopher Ferris <cferris@google.com> | 2017-04-20 13:38:49 -0700 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2017-04-21 20:59:53 -0700 |
commit | ee1e0a34ae01aa01a207f00f0fe6cfb09852e44e (patch) | |
tree | d5f1778781d90388619c6a23977bad9f9ce6b5a8 /tests/linux_swab_test.cpp | |
parent | 627ed9162538d847ea4e530fd443570d37f57d65 (diff) |
Update static functions/macro definitions.
Fix the list of static functions coming from swab.h to match the
ones exported by glibc.
Force the definition of __HAVE_BUILTIN_BSWAP{16,32,64}__ so the headers
use the builtin.
Add a unit test to guarantee that kernel header updates do not break this.
Test: Built and booted angler.
Test: Built the bionic unit tests for arm, arm64, mips, x86, x86_64.
Test: Ran the new test on angler and glibc.
Change-Id: I4ce229e3f198c204186d72bf22dd97b5cdf239e4
Diffstat (limited to 'tests/linux_swab_test.cpp')
-rw-r--r-- | tests/linux_swab_test.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/linux_swab_test.cpp b/tests/linux_swab_test.cpp new file mode 100644 index 000000000..6b964dc89 --- /dev/null +++ b/tests/linux_swab_test.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <gtest/gtest.h> + +#include <linux/swab.h> + +// This test makes sure that references to all of the kernel swab +// macros/inline functions that are exported work properly. +// Verifies that any kernel header updates do not break these macros. +TEST(swab, fswa) { + EXPECT_EQ(0x3412U, __swab16(0x1234)); + EXPECT_EQ(0x78563412U, __swab32(0x12345678U)); + EXPECT_EQ(0xbaefcdab78563412ULL, __swab64(0x12345678abcdefbaULL)); + + __u16 bval16 = 0x1234; + EXPECT_EQ(0x3412U, __swab16p(&bval16)); + __u32 bval32 = 0x12345678U; + EXPECT_EQ(0x78563412U, __swab32p(&bval32)); + __u64 bval64 = 0x12345678abcdefbaULL; + EXPECT_EQ(0xbaefcdab78563412ULL, __swab64p(&bval64)); + + __u16 sval16 = 0x1234; + __swab16s(&sval16); + EXPECT_EQ(0x3412U, sval16); + __u32 sval32 = 0x12345678U; + __swab32s(&sval32); + EXPECT_EQ(0x78563412U, sval32); + __u64 sval64 = 0x12345678abcdefbaULL; + __swab64s(&sval64); + EXPECT_EQ(0xbaefcdab78563412ULL, sval64); + + EXPECT_EQ(0x56781234U, __swahw32(0x12345678U)); + EXPECT_EQ(0x34127856U, __swahb32(0x12345678U)); + + __u32 hval32 = 0x12345678U; + EXPECT_EQ(0x56781234U, __swahw32p(&hval32)); + hval32 = 0x12345678U; + EXPECT_EQ(0x34127856U, __swahb32p(&hval32)); + + __u32 hsval32 = 0x12345678U; + __swahw32s(&hsval32); + EXPECT_EQ(0x56781234U, hsval32); + hsval32 = 0x12345678U; + __swahb32s(&hsval32); + EXPECT_EQ(0x34127856U, hsval32); +} |