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:
Aleksandra Tsvetkova 2015-02-27 15:01:59 +03:00 committed by Elliott Hughes
parent c1f6219c32
commit 608b4514cb
6 changed files with 216 additions and 14 deletions

View File

@ -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",

28
tests/alloca_test.cpp Normal file
View File

@ -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);
}

43
tests/byteswap_test.cpp Normal file
View File

@ -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));
}

View File

@ -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));
}

0
tests/pthread_test.cpp Executable file → Normal file
View File

View File

@ -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;