# 1) fopen for writing and write

f = fopen(".tmp12345", "w+");
w = fwrite(f, "foo");
fclose(f);

if (is_void(f) || !is_file_resource(f) || w != 3) exit(1);


# 2) fopen and read

f = fopen(".tmp12345", "r");
r = fread(f, 1000);
fclose(f);

if (is_void(f) || r != "foo") exit(2);


# 3) fopen for appending and write

f = fopen(".tmp12345", "a+");
w = fwrite(f, "bar");
fclose(f);

if (is_void(f) || w != 3) exit(3);


# 4) open invalid name

f = fopen("foo\0bar", "r");

if (!is_void(f)) exit(4);


# 5) read from appended file

f = fopen(".tmp12345", "r");
r = fread(f, 1000);

if (r != "foobar") exit(5);


# 6) fseek and ftell

s = fseek(f, -2);
t = ftell(f);
p = fseek(f, 3);
q = ftell(f);

if (!p || q != 3 || !s || t != 4) exit(6);


# 7) fread from new position

r = fread(f, 1000);

if (r != "bar") exit(7);


# 8) check eof

p = feof(f);

if (!p) exit(8);


# 9) clear status indicators

clearerr(f);
p = feof(f);
q = ferror(f);
fclose(f);

if (p || q) exit(9);


# 10) rename file

p = rename(".tmp12345", ".tmp54321");

if (!p) exit(10);


# 11) try opening old name

f = fopen(".tmp12345", "r");

if (!is_void(f)) exit(11);


# 12) try opening new name

f = fopen(".tmp54321", "r");
fclose(f);

if (is_void(f)) exit(12);


# 13) remove file

p = remove(".tmp54321");

if (!p) exit(13);


# 14) try opening removed file

f = fopen(".tmp54321", "r");

if (!is_void(f)) exit(14);


# 15) get character from file

f = fopen(".tmp12345", "w+");
fwrite(f, "foo");
fseek(f, 0);
c = fgetc(f);
fclose(f);
remove(".tmp12345");

if (c != "f") exit(15);


# 16) get line from file

f = fopen(".tmp12345", "w+");
fwrite(f, "foo\nbar\n");
fseek(f, 0);
c = fgets(f);
fclose(f);
remove(".tmp12345");

if (c != "foo\n") exit(16);


print("16 subtests ");
