Make major improvements to stdio
Buffering now has optimal performance, bugs have been fixed, and some missing apis have been introduced. This implementation is also now more production worthy since it's less brittle now in terms of system errors. That's going to help redbean since lua i/o is all based on stdio. See #97
This commit is contained in:
@ -23,10 +23,35 @@
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
FILE *f;
|
||||
char buf[512];
|
||||
char testlib_enable_tmp_setup_teardown;
|
||||
|
||||
TEST(fputs, test) {
|
||||
ASSERT_NE(NULL, (f = fopen("hog", "w")));
|
||||
EXPECT_EQ(5, fputs("hello", f));
|
||||
EXPECT_NE(-1, fclose(f));
|
||||
ASSERT_NE(NULL, (f = fopen("hog", "r")));
|
||||
EXPECT_EQ(5, fread(buf, 1, 512, f));
|
||||
EXPECT_TRUE(!memcmp(buf, "hello", 5));
|
||||
EXPECT_TRUE(feof(f));
|
||||
EXPECT_NE(-1, fclose(f));
|
||||
}
|
||||
|
||||
TEST(puts, test) {
|
||||
ASSERT_NE(NULL, (f = fopen("hog", "w")));
|
||||
EXPECT_EQ(5, fputs("hello", f));
|
||||
EXPECT_EQ('\n', fputc('\n', f));
|
||||
EXPECT_NE(-1, fclose(f));
|
||||
ASSERT_NE(NULL, (f = fopen("hog", "r")));
|
||||
EXPECT_EQ(6, fread(buf, 1, 512, f));
|
||||
EXPECT_TRUE(!memcmp(buf, "hello\n", 6));
|
||||
EXPECT_TRUE(feof(f));
|
||||
EXPECT_NE(-1, fclose(f));
|
||||
}
|
||||
|
||||
BENCH(fputs, bench) {
|
||||
FILE *f;
|
||||
char *buf;
|
||||
buf = gc(malloc(kHyperionSize));
|
||||
char *buf = gc(malloc(kHyperionSize));
|
||||
EZBENCH2("fputs", f = fmemopen(buf, kHyperionSize, "r+"),
|
||||
fputs(kHyperion, f));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user