summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-04 17:30:30 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-04 17:30:30 -0400
commit0a291040676bdb8eac311948db06bc8632f7db2b (patch)
treef3ee7c397a05342dec50edc2029051fe333eecb4
parent23818fb196a33770d48a6b0bd1acf5aaae50bb63 (diff)
downloadlibc-testsuite-0a291040676bdb8eac311948db06bc8632f7db2b.tar.gz
test fmemopen
-rw-r--r--memstream.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/memstream.c b/memstream.c
index 99be094..cdb4b0c 100644
--- a/memstream.c
+++ b/memstream.c
@@ -25,6 +25,7 @@ int test_memstream(void)
FILE *f;
char *s;
size_t l;
+ char buf[100];
int i;
s = 0;
@@ -53,5 +54,43 @@ int test_memstream(void)
fclose(f);
free(s);
+ TEST_E(f = fmemopen(buf, 10, "r+"));
+ TEST_E(fputs("hello", f) >= 0);
+ TEST_E(fputc(0, f)==0);
+ TEST_E(fseek(f, 0, SEEK_SET)>=0);
+ i=0;
+ TEST_E(fscanf(f, "hello%n", &i)==0);
+ TEST(i, i, 5, "%d != %d");
+ TEST(i, ftell(f), 5, "%d != %d");
+ errno = 0;
+ TEST(i, fseek(f, 6, SEEK_CUR)<0, 1, "");
+ TEST(i, errno!=0, 1, "");
+ TEST(i, ftell(f), 5, "%d != %d");
+ TEST_S(buf, "hello", "");
+ fclose(f);
+
+ TEST_E(f = fmemopen(buf, 10, "a+"));
+ TEST(i, ftell(f), 5, "%d != %d");
+ TEST_E(fseek(f, 0, SEEK_SET)>=0);
+ TEST(i, getc(f), 'h', "%d != %d");
+ TEST(i, getc(f), 'e', "%d != %d");
+ TEST(i, getc(f), 'l', "%d != %d");
+ TEST(i, getc(f), 'l', "%d != %d");
+ TEST(i, getc(f), 'o', "%d != %d");
+ TEST(i, getc(f), EOF, "%d != %d");
+ TEST_E(fseek(f, 6, SEEK_SET)>=0);
+ TEST(i, ftell(f), 6, "%d != %d");
+ TEST(i, getc(f), EOF, "%d != %d");
+ TEST(i, ftell(f), 6, "%d != %d");
+ TEST_E(fseek(f, 0, SEEK_SET)>=0);
+ TEST(i, getc(f), 'h', "%d != %d");
+ TEST_E(fseek(f, 0, SEEK_CUR)>=0);
+ buf[7] = 'x';
+ TEST_E(fprintf(f, "%d", i)==3);
+ TEST_E(fflush(f)==0);
+ TEST(i, ftell(f), 8, "%d != %d");
+ TEST_S(buf, "hello104", "");
+ fclose(f);
+
return err;
}