commit 348ca93a0687f28ccbd687e1c3841384aa4bbc1f
parent 5178802a0749116983a05e43804924bafb55e18b
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 15 Jun 2022 10:51:50 +0200
Refactor load tests
Diffstat:
| M | src/test_sck_load.c | | | 194 | +++++++++++++++++++++++++++---------------------------------------------------- |
1 file changed, 66 insertions(+), 128 deletions(-)
diff --git a/src/test_sck_load.c b/src/test_sck_load.c
@@ -20,12 +20,12 @@
#include <rsys/mem_allocator.h>
#include <math.h>
-static INLINE float
+static INLINE double
rand_canonic(void)
{
int r;
while((r = rand()) == RAND_MAX);
- return (float)r / (float)RAND_MAX;
+ return (double)r / (double)RAND_MAX;
}
/*******************************************************************************
@@ -142,19 +142,15 @@ check_sck_load
}
static void
-test_load(struct sck* sck)
+write_sck
+ (FILE* fp,
+ const uint64_t pagesize,
+ const uint64_t nbands,
+ const uint64_t nnodes)
{
- FILE* fp = NULL;
- const char* filename = "test_file.sck";
- const uint64_t pagesize = 16384;
- const uint64_t nbands = 11;
- const uint64_t nnodes = 1000;
uint64_t iband;
const char byte = 0;
- fp = fopen(filename, "w+");
- CHK(fp);
-
/* Write the header */
CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
@@ -206,172 +202,111 @@ test_load(struct sck* sck)
/* Padding. Write one char to position the EOF indicator */
CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize)-1, SEEK_SET) == 0);
CHK(fwrite(&byte, sizeof(byte), 1, fp) == 1);
+}
+
+static void
+test_load(struct sck* sck)
+{
+ FILE* fp = NULL;
+ const char* filename = "test_file.sck";
+ const uint64_t pagesize = 16384;
+ const uint64_t nbands = 11;
+ const uint64_t nnodes = 1000;
+
+ CHK(fp = fopen(filename, "w+"));
+ write_sck(fp, pagesize, nbands, nnodes);
rewind(fp);
CHK(sck_load_stream(NULL, fp, filename) == RES_BAD_ARG);
CHK(sck_load_stream(sck, NULL, filename) == RES_BAD_ARG);
CHK(sck_load_stream(sck, fp, NULL) == RES_OK);
check_sck_load(sck, nbands, nnodes);
-
rewind(fp);
+
CHK(sck_load_stream(sck, fp, filename) == RES_OK);
+ CHK(fclose(fp) == 0);
CHK(sck_load(NULL, filename) == RES_BAD_ARG);
CHK(sck_load(sck, NULL) == RES_BAD_ARG);
CHK(sck_load(sck, "nop") == RES_IO_ERR);
CHK(sck_load(sck, filename) == RES_OK);
-
- CHK(fclose(fp) == 0);
+ check_sck_load(sck, nbands, nnodes);
}
static void
test_load_fail(struct sck* sck)
{
- const char byte = 1;
FILE* fp = NULL;
- uint64_t pagesize;
- uint64_t nnodes;
- uint64_t nbands;
- uint64_t nqpts;
double low;
double upp;
- double weight;
- float ks;
- float ka;
-
- /* Wrong pagesize */
- fp = tmpfile();
- CHK(fp);
- pagesize = 2048;
- nnodes = 1;
- nbands = 1;
- CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
- CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
- CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1);
- low = 0;
- upp = 1;
- nqpts = 1;
- CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
- CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
- CHK(fwrite(&nqpts, sizeof(nqpts), 1, fp) == 1);
- weight = 1;
- CHK(fwrite(&weight, sizeof(weight), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ks = 1;
- CHK(fwrite(&ks, sizeof(ka), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ka = 1;
- CHK(fwrite(&ka, sizeof(ka), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize)-1, SEEK_SET) == 0);
- CHK(fwrite(&byte, sizeof(byte), 1, fp) == 1); /* Positioned the EOF */
+
+ /* The pagesize is less than the operating system page size*/
+ CHK(fp = tmpfile());
+ write_sck(fp, 2048, 1, 1);
rewind(fp);
+ CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
+ CHK(fclose(fp) == 0);
+ /* The pagesize is not a power of two */
+ CHK(fp = tmpfile());
+ write_sck(fp, 4100, 1, 1);
+ rewind(fp);
CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
CHK(fclose(fp) == 0);
/* Wrong #bands */
- fp = tmpfile();
- CHK(fp);
- pagesize = 4096;
- nnodes = 1;
- nbands = 0;
- CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
- CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
- CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1);
+ CHK(fp = tmpfile());
+ write_sck(fp, 4096, 0, 1);
rewind(fp);
-
CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
CHK(fclose(fp) == 0);
/* Wrong #nodes */
- fp = tmpfile();
- CHK(fp);
- pagesize = 4096;
- nnodes = 0;
- nbands = 1;
- CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
- CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
- CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1);
- low = 0;
- upp = 1;
- nqpts = 1;
- CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
- CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
- CHK(fwrite(&nqpts, sizeof(nqpts), 1, fp) == 1);
- weight = 1;
- CHK(fwrite(&weight, sizeof(weight), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize)-1, SEEK_SET) == 0);
- CHK(fwrite(&byte, sizeof(byte), 1, fp) == 1); /* Positioned the EOF */
+ CHK(fp = tmpfile());
+ write_sck(fp, 4096, 1, 0);
rewind(fp);
-
CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
CHK(fclose(fp) == 0);
/* Wrong band boundaries */
- fp = tmpfile();
- CHK(fp);
- pagesize = 16384;
- nnodes = 1;
- nbands = 1;
- CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
- CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
- CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1);
low = 1;
upp = 0;
- nqpts = 1;
+ CHK(fp = tmpfile());
+ write_sck(fp, 4096, 1, 1);
+ CHK(fseek(fp, 24, SEEK_SET) == 0);
CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
- CHK(fwrite(&nqpts, sizeof(nqpts), 1, fp) == 1);
- weight = 1;
- CHK(fwrite(&weight, sizeof(weight), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ks = 1;
- CHK(fwrite(&ka, sizeof(ks), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ka = 1;
- CHK(fwrite(&ka, sizeof(ka), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize)-1, SEEK_SET) == 0);
- CHK(fwrite(&byte, sizeof(byte), 1, fp) == 1); /* Positioned the EOF */
rewind(fp);
-
CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
CHK(fclose(fp) == 0);
/* Unsorted bands */
- fp = tmpfile();
- CHK(fp);
- pagesize = 16384;
- nnodes = 1;
- nbands = 2;
- CHK(fwrite(&pagesize, sizeof(pagesize), 1, fp) == 1);
- CHK(fwrite(&nbands, sizeof(nbands), 1, fp) == 1);
- CHK(fwrite(&nnodes, sizeof(nnodes), 1, fp) == 1);
- low = 1;
- upp = 2;
- nqpts = 1;
+ CHK(fp = tmpfile());
+ write_sck(fp, 4096, 2, 1);
+ CHK(fseek(fp, 24, SEEK_SET) == 0);
+ low = 1; upp = 2;
CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
- CHK(fwrite(&nqpts, sizeof(nqpts), 1, fp) == 1);
- weight = 1;
- CHK(fwrite(&weight, sizeof(weight), 1, fp) == 1);
- low = 0;
- upp = 1;
- nqpts = 1;
+ CHK(fseek(fp, 56, SEEK_SET) == 0);
+ low = 0; upp = 1;
CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
- CHK(fwrite(&nqpts, sizeof(nqpts), 1, fp) == 1);
- weight = 1;
- CHK(fwrite(&weight, sizeof(weight), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ks = 1;
- CHK(fwrite(&ka, sizeof(ks), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize), SEEK_SET) == 0);
- ka = 1;
- CHK(fwrite(&ka, sizeof(ka), 1, fp) == 1);
- CHK(fseek(fp, (long)ALIGN_SIZE((size_t)ftell(fp), pagesize)-1, SEEK_SET) == 0);
- CHK(fwrite(&byte, sizeof(byte), 1, fp) == 1); /* Positioned the EOF */
rewind(fp);
+ CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
+ CHK(fclose(fp) == 0);
+ /* Bands overlap */
+ CHK(fp = tmpfile());
+ write_sck(fp, 4096, 2, 1);
+ CHK(fseek(fp, 24, SEEK_SET) == 0);
+ low = 0; upp = 1;
+ CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
+ CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
+ CHK(fseek(fp, 56, SEEK_SET) == 0);
+ low = 0.5; upp = 1.5;
+ CHK(fwrite(&low, sizeof(low), 1, fp) == 1);
+ CHK(fwrite(&upp, sizeof(upp), 1, fp) == 1);
+ rewind(fp);
CHK(sck_load_stream(sck, fp, NULL) == RES_BAD_ARG);
CHK(fclose(fp) == 0);
}
@@ -442,9 +377,12 @@ main(int argc, char** argv)
args.verbose = 1;
CHK(sck_create(&args, &sck) == RES_OK);
- test_load(sck);
- test_load_fail(sck);
- test_load_files(sck, argc, argv);
+ if(argc > 1) {
+ test_load_files(sck, argc, argv);
+ } else {
+ test_load(sck);
+ test_load_fail(sck);
+ }
CHK(sck_ref_put(sck) == RES_OK);
CHK(mem_allocated_size() == 0);