blob: a69b115f478884b12d89e960d9b670413d083dc1 [file] [log] [blame] [raw]
/*
* test for fio routines
*/
#include <io.h>
#include <stdio.h>
#include "../fio.h"
#define FNAME "fiotest.dat"
int main(void) {
FILE *f;
int i;
struct fiofile_t f;
long pos;
static unsigned char buff[1024];
/* delete the test file, just in case it would exist from a previous test */
unlink(FNAME);
/* try opening a non-existing file - should fail */
if (fio_open(FNAME, FIO_OPEN_RD, &f) == 0) {
printf("ERR: opening " FNAME " should have failed (supposed not to exist)\n");
fio_close(&f);
return(1);
}
/* create a test file of 2000 bytes */
f = fopen(FNAME, "wb");
if (f == NULL) {
printf("ERR: fopen()\n");
return(1);
}
for (i = 0; i < 2000; i++) {
fprintf(f, "%c", i & 0xff);
}
fclose(f);
/* open the file */
if (fio_open(FNAME, FIO_OPEN_RD, &f) != 0) {
printf("ERR: opening " FNAME " should have failed (supposed not to exist)\n");
return(1);
}
/* read 200 bytes 1 byte a time, and verify them */
for (i = 0; i < 200; i++) {
fio_read(&f, buff, 1);
if (*buff != (i & 0xff)) {
fio_close(&f);
printf("ERR: unexpected data at offset %d (1 by 1 test, %d != %d)\n", i, *buff, i);
return(1);
}
}
/* read 1024 bytes again and verify them (this time in one go) */
fio_seek(&f, FIO_SEEK_START, 0);
i = fio_read(&f, buff, 1024);
if (i != 1024) {
printf("ERR: tried to read 1024 bytes but got something else (%d)\n", i);
fio_close(&f);
return(1);
}
for (i = 0; i < 1024; i++) {
if (buff[i] != (i & 0xff)) {
fio_close(&f);
printf("ERR: unexpected data\n");
return(1);
}
}
/* seek to offset 999 */
pos = fio_seek(&f, FIO_SEEK_START, 999);
if (pos != 999) {
printf("ERR: forward seek failure (%ld)\n", pos);
fio_close(&f);
return(1);
}
/* seek to last offset */
pos = fio_seek(&f, FIO_SEEK_END, 0);
if (pos != 2000) {
printf("ERR: eof seek failure (%ld)\n", pos);
fio_close(&f);
return(1);
}
/* seek back 500 bytes - should land at 1500 */
pos = fio_seek(&f, FIO_SEEK_END, -500);
if (pos != 1500) {
printf("ERR: backward seek failure (%ld)\n", pos);
fio_close(&f);
return(1);
}
/* read 100 bytes and seek to 0 - should return offset 1600 */
fio_read(&f, buff, 100);
pos = fio_seek(&f, FIO_SEEK_CUR, 0);
if (pos != 1600) {
printf("ERR: ftell-like seek failure (%ld)\n", pos);
fio_close(&f);
return(1);
}
/* try reading 500 bytes - should succeed only for 400 */
pos = fio_read(&f, buff, 500);
if (pos != 400) {
printf("ERR: fio_read() read an unexpected amount of bytes (%ld instead of 400)\n", pos);
fio_close(&f);
return(1);
}
/* go back 3 bytes, and read 4 bytes (only 3 should succeed) */
fio_seek(&f, FIO_SEEK_CUR, -3);
pos = fio_read(&f, buff, 4);
if (pos != 3) {
printf("ERR: fio_read() read an unexpected amount of bytes (%ld instead of 3)\n", pos);
fio_close(&f);
return(1);
}
fio_close(&f);
/* delete the test file */
unlink(FNAME);
printf("OK\n");
return(0);
}