blob: ee3a4af0fa53ff96cc0d5aa92e4935c4c9bafe4e [file] [edit]
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// Unittests for netinet/in.h
///
//===----------------------------------------------------------------------===//
#include "src/arpa/inet/htonl.h"
#include "src/arpa/inet/htons.h"
#include "src/string/memcmp.h"
#include "test/UnitTest/Test.h"
#include "hdr/types/struct_in6_addr.h"
TEST(LlvmLibcNetinetInTest, In6AddrLayout) {
EXPECT_EQ(sizeof(struct in6_addr), size_t(16));
struct in6_addr addr = {};
// Using parenthesis to suppress htons-as-a-macro in overlay mode.
addr.s6_addr16[0] = (LIBC_NAMESPACE::htons)(0x1122);
addr.s6_addr16[1] = (LIBC_NAMESPACE::htons)(0x3344);
addr.s6_addr16[2] = (LIBC_NAMESPACE::htons)(0x5566);
addr.s6_addr16[3] = (LIBC_NAMESPACE::htons)(0x7788);
addr.s6_addr16[4] = (LIBC_NAMESPACE::htons)(0x99aa);
addr.s6_addr16[5] = (LIBC_NAMESPACE::htons)(0xbbcc);
addr.s6_addr16[6] = (LIBC_NAMESPACE::htons)(0xddee);
addr.s6_addr16[7] = (LIBC_NAMESPACE::htons)(0xff00);
EXPECT_EQ(
LIBC_NAMESPACE::memcmp(
&addr,
"\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x00",
16),
0);
addr.s6_addr32[0] = (LIBC_NAMESPACE::htonl)(0x12345678);
addr.s6_addr32[1] = (LIBC_NAMESPACE::htonl)(0x9abcdef0);
addr.s6_addr32[2] = (LIBC_NAMESPACE::htonl)(0x12345678);
addr.s6_addr32[3] = (LIBC_NAMESPACE::htonl)(0x9abcdef0);
EXPECT_EQ(
LIBC_NAMESPACE::memcmp(
&addr,
"\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78\x9a\xbc\xde\xf0",
16),
0);
}