#include <assert.h>
#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#undef NDEBUG
#define TMPFILENAME "test___freading.tmp"
void setup(void);
void test___freading0(void);
void test___freading1(void);
void test___freading2(void);
void
setup(void)
{
FILE *fp;
unlink(TMPFILENAME);
fp = fopen(TMPFILENAME, "w+");
assert(fp != NULL);
fputs("Hello world\n", fp);
fclose(fp);
}
void
test___freading0(void)
{
FILE *fp;
int r;
char buf[80];
fp = popen("echo Hello world", "r");
assert(fp != NULL);
assert(__freading(fp) != 0);
assert(fgets(buf, sizeof(buf), fp) != NULL);
assert(strcmp(buf, "Hello world\n") == 0);
r = pclose(fp);
assert(r == 0);
}
void
test___freading1(void)
{
FILE *fp;
int r;
fp = fopen(TMPFILENAME, "w+");
assert(fp != NULL);
assert(__freading(fp) == 0);
r = fputs("Hello world\n", fp);
assert(r >= 0);
assert(__freading(fp) == 0);
rewind(fp);
assert(fgetc(fp) == 'H');
assert(__freading(fp) != 0);
fseek(fp, 0, SEEK_END);
r = fputs("\n", fp);
assert(__freading(fp) == 0);
rewind(fp);
assert(ungetc('X', fp) != 0);
assert(__freading(fp) != 0);
r = fclose(fp);
assert(r == 0);
}
void
test___freading2(void)
{
int r;
FILE *fp;
fp = fopen(TMPFILENAME, "r+");
assert(fp != NULL);
assert(fgetc(fp) == 'H');
fpurge(fp);
fseek(fp, 0, SEEK_CUR);
assert(fputc('X', fp) == 'X');
assert(__freading(fp) == 0);
r = fclose(fp);
assert(r == 0);
}
int
main(int argc, char *argv[])
{
test___freading0();
test___freading1();
test___freading2();
exit(0);
}