A few new bionic tests.
Trivial tests for <alloca.h> and <byteswap.h>, plus slightly improved test coverage for <inttypes.h> and <stdlib.h>. Bug: N/A Test: ran tests Change-Id: Idac4141ffc760c4f7756332477ce5112950d61a5 Signed-off-by: Aleksandra Tsvetkova <aleksandra.tsvetkova@intel.com>
This commit is contained in:
parent
c1f6219c32
commit
608b4514cb
|
@ -51,11 +51,13 @@ cc_test_library {
|
|||
name: "libBionicStandardTests",
|
||||
defaults: ["bionic_tests_defaults"],
|
||||
srcs: [
|
||||
"alloca_test.cpp",
|
||||
"arpa_inet_test.cpp",
|
||||
"async_safe_test.cpp",
|
||||
"assert_test.cpp",
|
||||
"buffer_tests.cpp",
|
||||
"bug_26110743_test.cpp",
|
||||
"byteswap_test.cpp",
|
||||
"complex_test.cpp",
|
||||
"complex_force_long_double_test.cpp",
|
||||
"ctype_test.cpp",
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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 <alloca.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(alloca, alloca) {
|
||||
// These days, alloca is usually a builtin, so we can't really assert much.
|
||||
void* p = alloca(1024);
|
||||
ASSERT_NE(nullptr, p);
|
||||
memset(p, 0, 1024);
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* 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 <byteswap.h>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
static constexpr uint16_t le16 = 0x1234;
|
||||
static constexpr uint32_t le32 = 0x12345678;
|
||||
static constexpr uint64_t le64 = 0x123456789abcdef0;
|
||||
|
||||
static constexpr uint16_t be16 = 0x3412;
|
||||
static constexpr uint32_t be32 = 0x78563412;
|
||||
static constexpr uint64_t be64 = 0xf0debc9a78563412;
|
||||
|
||||
TEST(byteswap, bswap_16) {
|
||||
EXPECT_EQ(le16, bswap_16(be16));
|
||||
EXPECT_EQ(be16, bswap_16(le16));
|
||||
}
|
||||
|
||||
TEST(byteswap, bswap_32) {
|
||||
EXPECT_EQ(le32, bswap_32(be32));
|
||||
EXPECT_EQ(be32, bswap_32(le32));
|
||||
}
|
||||
|
||||
TEST(byteswap, bswap_64) {
|
||||
EXPECT_EQ(le64, bswap_64(be64));
|
||||
EXPECT_EQ(be64, bswap_64(le64));
|
||||
}
|
||||
|
|
@ -109,6 +109,18 @@ TEST(inttypes, wcstoumax) {
|
|||
EXPECT_EQ(L'x', *end);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoimax_dec) {
|
||||
char* p;
|
||||
EXPECT_EQ(-18737357, strtoimax("-18737357foobar12", &p, 10));
|
||||
EXPECT_STREQ("foobar12", p);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoimax_hex) {
|
||||
char* p;
|
||||
EXPECT_EQ(-0x18737357f, strtoimax("-18737357foobar12", &p, 16));
|
||||
EXPECT_STREQ("oobar12", p);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoimax_EINVAL) {
|
||||
errno = 0;
|
||||
strtoimax("123", NULL, -1);
|
||||
|
@ -121,6 +133,24 @@ TEST(inttypes, strtoimax_EINVAL) {
|
|||
ASSERT_EQ(EINVAL, errno);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoumax_dec) {
|
||||
char* p;
|
||||
EXPECT_EQ(18737357U, strtoumax("18737357foobar12", &p, 10));
|
||||
EXPECT_STREQ("foobar12", p);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoumax_hex) {
|
||||
char* p;
|
||||
EXPECT_EQ(0x18737357fU, strtoumax("18737357foobar12", &p, 16));
|
||||
EXPECT_STREQ("oobar12", p);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoumax_negative) {
|
||||
char* p;
|
||||
EXPECT_EQ(UINTMAX_MAX - 18737357 + 1, strtoumax("-18737357foobar12", &p, 10));
|
||||
EXPECT_STREQ("foobar12", p);
|
||||
}
|
||||
|
||||
TEST(inttypes, strtoumax_EINVAL) {
|
||||
errno = 0;
|
||||
strtoumax("123", NULL, -1);
|
||||
|
@ -158,30 +188,88 @@ TEST(inttypes, wcstoumax_EINVAL) {
|
|||
}
|
||||
|
||||
TEST(inttypes, div) {
|
||||
div_t r = div(-5, 3);
|
||||
ASSERT_EQ(-1, r.quot);
|
||||
ASSERT_EQ(-2, r.rem);
|
||||
div_t r;
|
||||
|
||||
r = div(5, 3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = div(5, -3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = div(-5, 3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
|
||||
r = div(-5, -3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
}
|
||||
|
||||
TEST(inttypes, ldiv) {
|
||||
ldiv_t r = ldiv(-5, 3);
|
||||
ASSERT_EQ(-1, r.quot);
|
||||
ASSERT_EQ(-2, r.rem);
|
||||
ldiv_t r;
|
||||
|
||||
r = ldiv(5, 3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = ldiv(5, -3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = ldiv(-5, 3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
|
||||
r = ldiv(-5, -3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
}
|
||||
|
||||
TEST(inttypes, lldiv) {
|
||||
lldiv_t r = lldiv(-5, 3);
|
||||
ASSERT_EQ(-1, r.quot);
|
||||
ASSERT_EQ(-2, r.rem);
|
||||
lldiv_t r;
|
||||
|
||||
r = lldiv(5, 3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = lldiv(5, -3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = lldiv(-5, 3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
|
||||
r = lldiv(-5, -3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
}
|
||||
|
||||
TEST(inttypes, imaxdiv) {
|
||||
imaxdiv_t r = imaxdiv(-5, 3);
|
||||
ASSERT_EQ(-1, r.quot);
|
||||
ASSERT_EQ(-2, r.rem);
|
||||
imaxdiv_t r;
|
||||
|
||||
r = imaxdiv(5, 3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = imaxdiv(5, -3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(2, r.rem);
|
||||
|
||||
r = imaxdiv(-5, 3);
|
||||
EXPECT_EQ(-1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
|
||||
r = imaxdiv(-5, -3);
|
||||
EXPECT_EQ(1, r.quot);
|
||||
EXPECT_EQ(-2, r.rem);
|
||||
}
|
||||
|
||||
TEST(inttypes, imaxabs) {
|
||||
ASSERT_EQ(INTMAX_MAX, imaxabs(-INTMAX_MAX));
|
||||
ASSERT_EQ(INTMAX_MAX, imaxabs(INTMAX_MAX));
|
||||
EXPECT_EQ(672423489, imaxabs(672423489));
|
||||
EXPECT_EQ(672423489, imaxabs(-672423489));
|
||||
EXPECT_EQ(INTMAX_MAX, imaxabs(-INTMAX_MAX));
|
||||
EXPECT_EQ(INTMAX_MAX, imaxabs(INTMAX_MAX));
|
||||
}
|
||||
|
|
|
@ -138,6 +138,47 @@ TEST(stdlib, mrand48) {
|
|||
EXPECT_EQ(795539493, mrand48());
|
||||
}
|
||||
|
||||
TEST(stdlib, jrand48_distribution) {
|
||||
const int iterations = 4096;
|
||||
const int pivot_low = 1536;
|
||||
const int pivot_high = 2560;
|
||||
|
||||
unsigned short xsubi[3];
|
||||
int bits[32] = {};
|
||||
|
||||
for (int iter = 0; iter < iterations; ++iter) {
|
||||
long rand_val = jrand48(xsubi);
|
||||
for (int bit = 0; bit < 32; ++bit) {
|
||||
bits[bit] += (static_cast<unsigned long>(rand_val) >> bit) & 0x01;
|
||||
}
|
||||
}
|
||||
|
||||
// Check that bit probability is uniform
|
||||
for (int bit = 0; bit < 32; ++bit) {
|
||||
EXPECT_TRUE((pivot_low <= bits[bit]) && (bits[bit] <= pivot_high));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(stdlib, mrand48_distribution) {
|
||||
const int iterations = 4096;
|
||||
const int pivot_low = 1536;
|
||||
const int pivot_high = 2560;
|
||||
|
||||
int bits[32] = {};
|
||||
|
||||
for (int iter = 0; iter < iterations; ++iter) {
|
||||
long rand_val = mrand48();
|
||||
for (int bit = 0; bit < 32; ++bit) {
|
||||
bits[bit] += (static_cast<unsigned long>(rand_val) >> bit) & 0x01;
|
||||
}
|
||||
}
|
||||
|
||||
// Check that bit probability is uniform
|
||||
for (int bit = 0; bit < 32; ++bit) {
|
||||
EXPECT_TRUE((pivot_low <= bits[bit]) && (bits[bit] <= pivot_high));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(stdlib, posix_memalign_sweep) {
|
||||
void* ptr;
|
||||
|
||||
|
|
Loading…
Reference in New Issue