mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 05:42:29 +00:00
parent
937d921018
commit
c3ed8d6c7f
11 changed files with 141 additions and 73 deletions
|
@ -17,14 +17,56 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/fmt/fmt.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/math.h"
|
||||
#include "libc/runtime/gc.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
TEST(RealFormatting, g) {
|
||||
TEST(fmt, d) {
|
||||
EXPECT_STREQ("-123", gc(xasprintf("%d", -123)));
|
||||
EXPECT_STREQ("-1", gc(xasprintf("%d", -1)));
|
||||
EXPECT_STREQ("1", gc(xasprintf("%d", 1)));
|
||||
EXPECT_STREQ("16", gc(xasprintf("%d", 16)));
|
||||
EXPECT_STREQ("2147483647", gc(xasprintf("%d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("%d", INT_MIN)));
|
||||
EXPECT_STREQ(" -123", gc(xasprintf("%10d", -123)));
|
||||
EXPECT_STREQ(" -1", gc(xasprintf("%10d", -1)));
|
||||
EXPECT_STREQ(" 1", gc(xasprintf("%10d", 1)));
|
||||
EXPECT_STREQ(" 16", gc(xasprintf("%10d", 16)));
|
||||
EXPECT_STREQ("2147483647", gc(xasprintf("%10d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("%10d", INT_MIN)));
|
||||
EXPECT_STREQ("-000000123", gc(xasprintf("%010d", -123)));
|
||||
EXPECT_STREQ("-000000001", gc(xasprintf("%010d", -1)));
|
||||
EXPECT_STREQ("0000000001", gc(xasprintf("%010d", 1)));
|
||||
EXPECT_STREQ("0000000016", gc(xasprintf("%010d", 16)));
|
||||
EXPECT_STREQ("2147483647", gc(xasprintf("%010d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("%010d", INT_MIN)));
|
||||
EXPECT_STREQ("-123 ", gc(xasprintf("%-10d", -123)));
|
||||
EXPECT_STREQ("-1 ", gc(xasprintf("%-10d", -1)));
|
||||
EXPECT_STREQ("1 ", gc(xasprintf("%-10d", 1)));
|
||||
EXPECT_STREQ("16 ", gc(xasprintf("%-10d", 16)));
|
||||
EXPECT_STREQ("2147483647", gc(xasprintf("%-10d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("%-10d", INT_MIN)));
|
||||
EXPECT_STREQ(" -123", gc(xasprintf("%+10d", -123)));
|
||||
EXPECT_STREQ(" -1", gc(xasprintf("%+10d", -1)));
|
||||
EXPECT_STREQ(" +1", gc(xasprintf("%+10d", 1)));
|
||||
EXPECT_STREQ(" +16", gc(xasprintf("%+10d", 16)));
|
||||
EXPECT_STREQ("+2147483647", gc(xasprintf("%+10d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("%+10d", INT_MIN)));
|
||||
EXPECT_STREQ("-123", gc(xasprintf("% d", -123)));
|
||||
EXPECT_STREQ("-1", gc(xasprintf("% d", -1)));
|
||||
EXPECT_STREQ(" 1", gc(xasprintf("% d", 1)));
|
||||
EXPECT_STREQ(" 16", gc(xasprintf("% d", 16)));
|
||||
EXPECT_STREQ(" 2147483647", gc(xasprintf("% d", INT_MAX)));
|
||||
EXPECT_STREQ("-2147483648", gc(xasprintf("% d", INT_MIN)));
|
||||
}
|
||||
|
||||
TEST(fmt, g) {
|
||||
EXPECT_STREQ("1", gc(xasprintf("%g", 1.)));
|
||||
EXPECT_STREQ(" 1", gc(xasprintf("% g", 1.)));
|
||||
EXPECT_STREQ("+1", gc(xasprintf("%+g", 1.)));
|
||||
EXPECT_STREQ("-1", gc(xasprintf("%g", -1.)));
|
||||
EXPECT_STREQ("10", gc(xasprintf("%g", 10.)));
|
||||
EXPECT_STREQ("10", gc(xasprintf("%.0g", 10.)));
|
||||
|
@ -68,7 +110,7 @@ TEST(RealFormatting, g) {
|
|||
EXPECT_STREQ(" 1.79769E+308", gc(xasprintf("%13G", __DBL_MAX__)));
|
||||
}
|
||||
|
||||
TEST(RealFormatting, f) {
|
||||
TEST(fmt, f) {
|
||||
EXPECT_STREQ("3.141593", gc(xasprintf("%f", 0x1.921fb54442d1846ap+1)));
|
||||
EXPECT_STREQ("3.1415926535897931",
|
||||
gc(xasprintf("%.16f", 0x1.921fb54442d1846ap+1)));
|
||||
|
@ -133,7 +175,7 @@ TEST(RealFormatting, f) {
|
|||
gc(xasprintf("%10F", __DBL_MAX__)));
|
||||
}
|
||||
|
||||
TEST(RealFormatting, e) {
|
||||
TEST(fmt, e) {
|
||||
EXPECT_STREQ("3.14159", gc(xasprintf("%g", 0x1.921fb54442d1846ap+1)));
|
||||
EXPECT_STREQ("3.141592653589793",
|
||||
gc(xasprintf("%.16g", 0x1.921fb54442d1846ap+1)));
|
||||
|
@ -173,7 +215,7 @@ TEST(RealFormatting, e) {
|
|||
EXPECT_STREQ(" +1.797693E+308", gc(xasprintf("%+24E", __DBL_MAX__)));
|
||||
}
|
||||
|
||||
TEST(RealFormatting, a) {
|
||||
TEST(fmt, a) {
|
||||
EXPECT_STREQ("0x1.921fb54442d18p+1",
|
||||
gc(xasprintf("%a", 0x1.921fb54442d1846ap+1)));
|
||||
EXPECT_STREQ("0X1.921FB54442D18P+1",
|
||||
|
@ -197,3 +239,40 @@ TEST(RealFormatting, a) {
|
|||
EXPECT_STREQ(" 0X1.E9A488E8A71DEP+14", gc(xasprintf("%24A", 31337.1337)));
|
||||
EXPECT_STREQ(" -0X1.E9A488E8A71DEP+14", gc(xasprintf("%24A", -31337.1337)));
|
||||
}
|
||||
|
||||
TEST(fmt, p) {
|
||||
EXPECT_STREQ("0x1", gc(xasprintf("%p", 1)));
|
||||
EXPECT_STREQ("0x10", gc(xasprintf("%p", 16)));
|
||||
EXPECT_STREQ("0x31337", gc(xasprintf("%p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("%p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337", gc(xasprintf("%p", 0xffff800000031337)));
|
||||
EXPECT_STREQ(" 0x1", gc(xasprintf("%10p", 1)));
|
||||
EXPECT_STREQ(" 0x10", gc(xasprintf("%10p", 16)));
|
||||
EXPECT_STREQ(" 0x31337", gc(xasprintf("%10p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("%10p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337", gc(xasprintf("%10p", 0xffff800000031337)));
|
||||
EXPECT_STREQ("0x00000001", gc(xasprintf("%010p", 1)));
|
||||
EXPECT_STREQ("0x00000010", gc(xasprintf("%010p", 16)));
|
||||
EXPECT_STREQ("0x00031337", gc(xasprintf("%010p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("%010p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337",
|
||||
gc(xasprintf("%010p", 0xffff800000031337)));
|
||||
EXPECT_STREQ("0x1 ", gc(xasprintf("%-10p", 1)));
|
||||
EXPECT_STREQ("0x10 ", gc(xasprintf("%-10p", 16)));
|
||||
EXPECT_STREQ("0x31337 ", gc(xasprintf("%-10p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("%-10p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337",
|
||||
gc(xasprintf("%-10p", 0xffff800000031337)));
|
||||
EXPECT_STREQ(" 0x1", gc(xasprintf("%+10p", 1)));
|
||||
EXPECT_STREQ(" 0x10", gc(xasprintf("%+10p", 16)));
|
||||
EXPECT_STREQ(" 0x31337", gc(xasprintf("%+10p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("%+10p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337",
|
||||
gc(xasprintf("%+10p", 0xffff800000031337)));
|
||||
EXPECT_STREQ(" 0x1", gc(xasprintf("% 10p", 1)));
|
||||
EXPECT_STREQ(" 0x10", gc(xasprintf("% 10p", 16)));
|
||||
EXPECT_STREQ(" 0x31337", gc(xasprintf("% 10p", 0x31337)));
|
||||
EXPECT_STREQ("0xffffffff", gc(xasprintf("% 10p", 0xffffffff)));
|
||||
EXPECT_STREQ("0xffff800000031337",
|
||||
gc(xasprintf("% 10p", 0xffff800000031337)));
|
||||
}
|
||||
|
|
|
@ -482,34 +482,6 @@ TEST(sprintf, testOverflow_truncationNotSaturation) {
|
|||
EXPECT_STREQ("Test16 65535", Format("%s%hhi %hu", "Test", 10000, 0xFFFFFFFF));
|
||||
}
|
||||
|
||||
TEST(sprintf, test_pointer) {
|
||||
sprintf(buffer, "%p", (void *)0x1234U);
|
||||
if (sizeof(void *) == 4U) {
|
||||
EXPECT_STREQ("00001234", buffer);
|
||||
} else {
|
||||
EXPECT_STREQ("000000001234", buffer);
|
||||
}
|
||||
sprintf(buffer, "%p", (void *)0x12345678U);
|
||||
if (sizeof(void *) == 4U) {
|
||||
EXPECT_STREQ("12345678", buffer);
|
||||
} else {
|
||||
EXPECT_STREQ("000012345678", buffer);
|
||||
}
|
||||
sprintf(buffer, "%p-%p", (void *)0x12345678U, (void *)0x7EDCBA98U);
|
||||
if (sizeof(void *) == 4U) {
|
||||
EXPECT_STREQ("12345678-7edcba98", buffer);
|
||||
} else {
|
||||
EXPECT_STREQ("000012345678-00007edcba98", buffer);
|
||||
}
|
||||
if (sizeof(uintptr_t) == sizeof(uint64_t)) {
|
||||
sprintf(buffer, "%p", (void *)(uintptr_t)0xFFFFFFFFU);
|
||||
EXPECT_STREQ("0000ffffffff", buffer);
|
||||
} else {
|
||||
sprintf(buffer, "%p", (void *)(uintptr_t)0xFFFFFFFFU);
|
||||
EXPECT_STREQ("ffffffff", buffer);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(sprintf, test_unknown_flag) {
|
||||
EXPECT_STREQ("kmarco", Format("%kmarco", 42, 37));
|
||||
}
|
||||
|
@ -595,22 +567,6 @@ TEST(xasprintf, test) {
|
|||
free(pp);
|
||||
}
|
||||
|
||||
TEST(xasprintf, nullPointer) {
|
||||
ASSERT_STREQ("000000000000", gc(xasprintf("%p", NULL)));
|
||||
}
|
||||
|
||||
TEST(xasprintf, pointer_doesntShowNonCanonicalZeroes) {
|
||||
ASSERT_STREQ("100000000010", gc(xasprintf("%p", 0x0000100000000010)));
|
||||
ASSERT_STREQ("0x100000000010", gc(xasprintf("%#p", 0x0000100000000010)));
|
||||
}
|
||||
|
||||
TEST(xasprintf, nonCanonicalPointer_discardsHighBits_ratherThanSaturate) {
|
||||
ASSERT_STREQ("100000000010", gc(xasprintf("%p", 0x1000100000000010)));
|
||||
ASSERT_STREQ("0x100000000010", gc(xasprintf("%#p", 0x1000100000000010)));
|
||||
ASSERT_STREQ("7fffffffffff", gc(xasprintf("%p", 0x7fffffffffff)));
|
||||
ASSERT_STREQ("0x7fffffffffff", gc(xasprintf("%#p", 0x7fffffffffff)));
|
||||
}
|
||||
|
||||
TEST(xasprintf, hugeNtoa) {
|
||||
ASSERT_STREQ(
|
||||
"0b1111111111111111111111111111111111111111111111111111111111111111111111"
|
||||
|
|
32
test/libc/stdio/fgets_test.c
Normal file
32
test/libc/stdio/fgets_test.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
TEST(fgets, test) {
|
||||
FILE *f;
|
||||
char buf[29];
|
||||
f = fmemopen(strdup(kHyperion), kHyperionSize, "r+");
|
||||
ASSERT_STREQ("The fall of Hyperion - a Dre", fgets(buf, sizeof(buf), f));
|
||||
ASSERT_STREQ("am\n", fgets(buf, sizeof(buf), f));
|
||||
ASSERT_STREQ("John Keats\n", fgets(buf, sizeof(buf), f));
|
||||
fclose(f);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue