You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
10 KiB
C

#include <tau/tau.h>
#include <libmseed.h>
#include "testdata.h"
extern int cmpfiles (char *fileA, char *fileB);
/* Write test output files. Reference files are at "data/reference-<name>" */
#define TESTFILE_TEXT_V2 "testdata-text.mseed2"
#define TESTFILE_FLOAT32_V2 "testdata-float32.mseed2"
#define TESTFILE_FLOAT64_V2 "testdata-float64.mseed2"
#define TESTFILE_INT16_V2 "testdata-int16.mseed2"
#define TESTFILE_INT32_V2 "testdata-int32.mseed2"
#define TESTFILE_STEIM1_V2 "testdata-steim1.mseed2"
#define TESTFILE_STEIM2_V2 "testdata-steim2.mseed2"
#define TESTFILE_DEFAULTS_V2 "testdata-defaults.mseed2"
#define TESTFILE_TEXT_V3 "testdata-text.mseed3"
#define TESTFILE_FLOAT32_V3 "testdata-float32.mseed3"
#define TESTFILE_FLOAT64_V3 "testdata-float64.mseed3"
#define TESTFILE_INT16_V3 "testdata-int16.mseed3"
#define TESTFILE_INT32_V3 "testdata-int32.mseed3"
#define TESTFILE_STEIM1_V3 "testdata-steim1.mseed3"
#define TESTFILE_STEIM2_V3 "testdata-steim2.mseed3"
#define TESTFILE_DEFAULTS_V3 "testdata-defaults.mseed3"
TEST (write, msr)
{
MS3Record *msr = NULL;
uint32_t flags = MSF_FLUSHDATA; /* Set data flush flag */
int32_t sinedata[SINE_DATA_SAMPLES];
double dsinedata[SINE_DATA_SAMPLES];
int idx;
int rv;
/* Create integer and double sine data sets */
for (idx = 0; idx < SINE_DATA_SAMPLES; idx++)
{
sinedata[idx] = (int32_t)(fsinedata[idx]);
dsinedata[idx] = (double)(fsinedata[idx]);
}
msr = msr3_init (msr);
REQUIRE (msr != NULL, "msr3_init() returned unexpected NULL");
/* Set up record parameters */
msr->reclen = 512;
msr->pubversion = 1;
msr->starttime = ms_timestr2nstime ("2012-05-12T00:00:00");
/* Text encoding */
strcpy (msr->sid, "FDSN:XX_TEST__L_O_G");
msr->samprate = 0;
msr->encoding = DE_TEXT;
msr->numsamples = strlen (textdata);
msr->datasamples = textdata;
msr->sampletype = 't';
rv = msr3_writemseed (msr, TESTFILE_TEXT_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_TEXT_V3, "data/reference-" TESTFILE_TEXT_V3), "Text encoding write mismatch");
strcpy (msr->sid, "FDSN:XX_TEST__B_H_Z");
msr->samprate = 40.0;
/* Float32 encoding*/
msr->encoding = DE_FLOAT32;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = fsinedata;
msr->sampletype = 'f';
rv = msr3_writemseed (msr, TESTFILE_FLOAT32_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_FLOAT32_V3, "data/reference-" TESTFILE_FLOAT32_V3), "Float32 encoding write mismatch");
/* Float64 encoding */
msr->encoding = DE_FLOAT64;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = dsinedata;
msr->sampletype = 'd';
rv = msr3_writemseed (msr, TESTFILE_FLOAT64_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_FLOAT64_V3, "data/reference-" TESTFILE_FLOAT64_V3), "Float64 encoding write mismatch");
/* Int16 encoding */
msr->encoding = DE_INT16;
msr->numsamples = 220; /* Limit to first 220 samples, which can be represented in 16-bits */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_INT16_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_INT16_V3, "data/reference-" TESTFILE_INT16_V3), "Int16 encoding write mismatch");
/* Int32 encoding */
msr->encoding = DE_INT32;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_INT32_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_INT32_V3, "data/reference-" TESTFILE_INT32_V3), "Int32 encoding write mismatch");
/* Steim1 encoding */
msr->encoding = DE_STEIM1;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_STEIM1_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_STEIM1_V3, "data/reference-" TESTFILE_STEIM1_V3), "Steim1 encoding write mismatch");
/* Steim2 encoding */
msr->encoding = DE_STEIM2;
msr->numsamples = SINE_DATA_SAMPLES - 1; /* All but last sample for which the difference cannot be represented */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_STEIM2_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_STEIM2_V3, "data/reference-" TESTFILE_STEIM2_V3), "Steim2 encoding write mismatch");
/* Default encoding (Steim2) and record length (4096) */
msr->encoding = -1;
msr->reclen = -1;
msr->numsamples = SINE_DATA_SAMPLES - 1; /* All but last sample for which the difference cannot be represented */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_DEFAULTS_V3, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_DEFAULTS_V3, "data/reference-" TESTFILE_DEFAULTS_V3), "Default encoding/reclen write mismatch");
/* Set miniSEED v2 flag */
flags |= MSF_PACKVER2;
msr->reclen = 512;
/* Text encoding */
strcpy (msr->sid, "FDSN:XX_TEST__L_O_G");
msr->samprate = 0;
msr->encoding = DE_TEXT;
msr->numsamples = strlen (textdata);
msr->datasamples = textdata;
msr->sampletype = 't';
rv = msr3_writemseed (msr, TESTFILE_TEXT_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_TEXT_V2, "data/reference-" TESTFILE_TEXT_V2), "Text encoding write mismatch");
strcpy (msr->sid, "FDSN:XX_TEST__B_H_Z");
msr->samprate = 40.0;
/* Float32 encoding*/
msr->encoding = DE_FLOAT32;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = fsinedata;
msr->sampletype = 'f';
rv = msr3_writemseed (msr, TESTFILE_FLOAT32_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_FLOAT32_V2, "data/reference-" TESTFILE_FLOAT32_V2), "Float32 encoding write mismatch");
/* Float64 encoding */
msr->encoding = DE_FLOAT64;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = dsinedata;
msr->sampletype = 'd';
rv = msr3_writemseed (msr, TESTFILE_FLOAT64_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_FLOAT64_V2, "data/reference-" TESTFILE_FLOAT64_V2), "Float64 encoding write mismatch");
/* Int16 encoding */
msr->encoding = DE_INT16;
msr->numsamples = 220; /* Limit to first 220 samples, which can be represented in 16-bits */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_INT16_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_INT16_V2, "data/reference-" TESTFILE_INT16_V2), "Int16 encoding write mismatch");
/* Int32 encoding */
msr->encoding = DE_INT32;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_INT32_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_INT32_V2, "data/reference-" TESTFILE_INT32_V2), "Int32 encoding write mismatch");
/* Steim1 encoding */
msr->encoding = DE_STEIM1;
msr->numsamples = SINE_DATA_SAMPLES;
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_STEIM1_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_STEIM1_V2, "data/reference-" TESTFILE_STEIM1_V2), "Steim1 encoding write mismatch");
/* Steim2 encoding */
msr->encoding = DE_STEIM2;
msr->numsamples = SINE_DATA_SAMPLES - 1; /* All but last sample for which the difference cannot be represented */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_STEIM2_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_STEIM2_V2, "data/reference-" TESTFILE_STEIM2_V2), "Steim2 encoding write mismatch");
/* Default encoding (Steim2) and record length (4096) */
msr->encoding = -1;
msr->reclen = -1;
msr->numsamples = SINE_DATA_SAMPLES - 1; /* All but last sample for which the difference cannot be represented */
msr->datasamples = sinedata;
msr->sampletype = 'i';
rv = msr3_writemseed (msr, TESTFILE_DEFAULTS_V2, 1, flags, 0);
REQUIRE (rv > 0, "msr3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_DEFAULTS_V2, "data/reference-" TESTFILE_DEFAULTS_V2), "Default encoding/reclen write mismatch");
msr->datasamples = NULL;
msr3_free (&msr);
}
TEST (write, trace)
{
MS3Record *msr = NULL;
MS3TraceList *mstl = NULL;
MS3TraceSeg *seg = NULL;
uint32_t flags = MSF_FLUSHDATA; /* Set data flush flag */
int32_t sinedata[SINE_DATA_SAMPLES];
int idx;
int64_t rv;
/* Create integer sine data sets */
for (idx = 0; idx < SINE_DATA_SAMPLES; idx++)
{
sinedata[idx] = (int32_t)(fsinedata[idx]);
}
msr = msr3_init (msr);
REQUIRE (msr != NULL, "msr3_init() returned unexpected NULL");
mstl = mstl3_init (mstl);
REQUIRE (mstl != NULL, "mstl3_init() returned unexpected NULL");
/* Set up record parameters */
msr->reclen = 512;
msr->pubversion = 1;
msr->starttime = ms_timestr2nstime ("2012-05-12T00:00:00");
strcpy (msr->sid, "FDSN:XX_TEST__B_H_Z");
msr->samprate = 40.0;
msr->numsamples = SINE_DATA_SAMPLES - 1; /* All but last sample for which the difference cannot be represented */
msr->datasamples = sinedata;
msr->sampletype = 'i';
seg = mstl3_addmsr (mstl, msr, 0, 1, 0, NULL);
REQUIRE (seg != NULL, "mstl3_addmsr() returned unexpected NULL");
rv = mstl3_writemseed (mstl, TESTFILE_STEIM2_V3 ".trace", 1, 512, DE_STEIM2, flags, 0);
REQUIRE (rv == 4, "mstl3_writemseed() return unexpected value");
CHECK (!cmpfiles (TESTFILE_STEIM2_V3 ".trace", "data/reference-" TESTFILE_STEIM2_V3), "Steim2 encoding trace write mismatch");
mstl3_free (&mstl, 0);
msr->datasamples = NULL;
msr3_free (&msr);
}