ProteoWizard
Functions | Variables
BinaryDataEncoderTest.cpp File Reference
#include "BinaryDataEncoder.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include "boost/filesystem.hpp"
#include "pwiz/utility/misc/Std.hpp"
#include <cstring>

Go to the source code of this file.

Functions

const char * regressionTest (const BinaryDataEncoder::Config &config)
void testConfiguration (const BinaryDataEncoder::Config &config)
void test ()
void testBadFile (const string &filename)
int main (int argc, char *argv[])

Variables

ostream * os_ = 0
double sampleData_ []
const int sampleDataSize_ = sizeof(sampleData_)/sizeof(double)
const char * sampleEncoded32Big_ = "Q0gADAAAAABDSAAcAAAAAENIACwAAAAAQ0gAPAAAAABDSRtCAAAAAENJG1IAAAAAQ0kbYgAAAABDSRtyAAAAAENJG4JEYyvTQ0kbkkSeSJ5DSRuiRJ1DqkNJG7JEVDLHQ0kbwgAAAABDSRvSAAAAAENJG+IAAAAAQ0gAAAAAAABDlgAAP4AAAEPIAABBIAAAQ/oAAELIAABEFgAARHoAAA=="
const char * sampleEncoded32Little_ = "DABIQwAAAAAcAEhDAAAAACwASEMAAAAAPABIQwAAAABCG0lDAAAAAFIbSUMAAAAAYhtJQwAAAAByG0lDAAAAAIIbSUPTK2NEkhtJQ55InkSiG0lDqkOdRLIbSUPHMlREwhtJQwAAAADSG0lDAAAAAOIbSUMAAAAAAABIQwAAAAAAAJZDAACAPwAAyEMAACBBAAD6QwAAyEIAABZEAAB6RA=="
const char * sampleEncoded64Little_ = "/xedigEAaUAAAAAAAAAAAIV5fYYDAGlAAAAAAAAAAACkK16CBQBpQAAAAAAAAAAAXy4/fgcAaUAAAAAAAAAAAK4HNjVoI2lAAAAAAAAAAACrvLg2aiNpQAAAAAAAAAAAnMM7OGwjaUAAAAAAAAAAAIIcvzluI2lAAAAAAAAAAABax0I7cCNpQAAAAGB6ZYxAJcTGPHIjaUAAAADAE8mTQOUSSz50I2lAAAAAQHWok0CYs88/diNpQAAAAOBYhopAP6ZUQXgjaUAAAAAAAAAAANvq2UJ6I2lAAAAAAAAAAABpgV9EfCNpQAAAAAAAAAAAAAAAAAAAaUAAAAAAAAAAAAAAAAAAwHJAAAAAAAAA8D8AAAAAAAB5QAAAAAAAACRAAAAAAABAf0AAAAAAAABZQAAAAAAAwIJAAAAAAABAj0A="
const char * sampleEncoded64Big_ = "QGkAAYqdF/8AAAAAAAAAAEBpAAOGfXmFAAAAAAAAAABAaQAFgl4rpAAAAAAAAAAAQGkAB34/Ll8AAAAAAAAAAEBpI2g1NgeuAAAAAAAAAABAaSNqNri8qwAAAAAAAAAAQGkjbDg7w5wAAAAAAAAAAEBpI245vxyCAAAAAAAAAABAaSNwO0LHWkCMZXpgAAAAQGkjcjzGxCVAk8kTwAAAAEBpI3Q+SxLlQJOodUAAAABAaSN2P8+zmECKhljgAAAAQGkjeEFUpj8AAAAAAAAAAEBpI3pC2erbAAAAAAAAAABAaSN8RF+BaQAAAAAAAAAAQGkAAAAAAAAAAAAAAAAAAEBywAAAAAAAP/AAAAAAAABAeQAAAAAAAEAkAAAAAAAAQH9AAAAAAABAWQAAAAAAAECCwAAAAAAAQI9AAAAAAAA="
const char * sampleEncoded32LittleZlib_ = "eJzjYfBwZgACGSitA6VtoLSTtCeYDoLSSVC6CEo3AenL2skuk4D0PI95LouA9CrnuS6bgPRxoxCXQ1B1l6D0IyjNADWfgWEakG6wZ2A4AaQVHBkYfgHpE04MDGIuDAxVLgB7LB3q"
const char * sampleEncoded32BigZlib_ = "eJxz9mDgYQACZw8GGSitA6VtwLSntBOUDoLSSVC6CEo3uSRrXwbSk1zmecwD0otc5jqvAtKbXEKMjgPpQ1B1l6D0I6j5YOA8jYHBvgFIn2BgcFQA0r8YGJyAbBcxIK5iYAAAfLkd6g=="
const char * sampleEncoded64LittleZlib_ = "eJz7Lz63i5Eh04EBClora9uYkfhLtOOaWJH48Xr2dexI/HXsZqYZygj+6j07zLKQ+HMOW1vkIPGbZPZb5iHxo447WRdA+AlVqT0OqkeO2RRB+AeET052eCrkbVcC4TuUrpjsMGPzefsyCP9BRFuXg/2yEMcKJPNuv7rpVIXEz2yMd6lB4kNFUfkHiqD8D/YQuhLKV4HQDvVQfiSEPtAEFe93AACmsz1+"
const char * sampleEncoded64BigZlib_ = "eJxzyGRg7Jor/p8BChwyGZjbaitbkfisTXHaS5D47HX2evEIvnKGqRn7OiR+ltmOPauR+DkW1ofnIPHzLPfLNCHxC6ydjkc59KRWJUD4RTbHjqg6TD4pfADCL7HzFnrqMHlFqQOEX2Z/fvMMh662iAcQfoVjyDJ7JPOqnG6+uo3Er3GJb8xEcj8KcCg6AKbtP0D5lVBaBUrXO0DoSCi/CaLeoR8iDgC0Qj1+"

Function Documentation

const char* regressionTest ( const BinaryDataEncoder::Config config)

Definition at line 80 of file BinaryDataEncoderTest.cpp.

References pwiz::msdata::BinaryDataEncoder::Config::byteOrder, pwiz::msdata::BinaryDataEncoder::Config::compression, pwiz::msdata::BinaryDataEncoder::Config::precision, sampleEncoded32Big_, sampleEncoded32BigZlib_, sampleEncoded32Little_, sampleEncoded32LittleZlib_, sampleEncoded64Big_, sampleEncoded64BigZlib_, sampleEncoded64Little_, and sampleEncoded64LittleZlib_.

Referenced by testConfiguration().

{
if (config.precision == BinaryDataEncoder::Precision_32 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_LittleEndian &&
config.compression == BinaryDataEncoder::Compression_None)
if (config.precision == BinaryDataEncoder::Precision_32 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_BigEndian &&
config.compression == BinaryDataEncoder::Compression_None)
if (config.precision == BinaryDataEncoder::Precision_64 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_LittleEndian &&
config.compression == BinaryDataEncoder::Compression_None)
if (config.precision == BinaryDataEncoder::Precision_64 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_BigEndian &&
config.compression == BinaryDataEncoder::Compression_None)
if (config.precision == BinaryDataEncoder::Precision_32 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_LittleEndian &&
config.compression == BinaryDataEncoder::Compression_Zlib)
if (config.precision == BinaryDataEncoder::Precision_32 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_BigEndian &&
config.compression == BinaryDataEncoder::Compression_Zlib)
if (config.precision == BinaryDataEncoder::Precision_64 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_LittleEndian &&
config.compression == BinaryDataEncoder::Compression_Zlib)
if (config.precision == BinaryDataEncoder::Precision_64 &&
config.byteOrder == BinaryDataEncoder::ByteOrder_BigEndian &&
config.compression == BinaryDataEncoder::Compression_Zlib)
throw runtime_error("[BinaryDataEncoderTest::regressionTest()] Untested configuration.");
}
void testConfiguration ( const BinaryDataEncoder::Config config)

Definition at line 126 of file BinaryDataEncoderTest.cpp.

References pwiz::msdata::BinaryDataEncoder::decode(), e(), pwiz::msdata::BinaryDataEncoder::encode(), epsilon, os_, pwiz::msdata::BinaryDataEncoder::Config::precision, regressionTest(), sampleData_, sampleDataSize_, unit_assert, and unit_assert_equal.

{
if (os_)
*os_ << "testConfiguration: " << config << endl;
// initialize scan data
vector<double> binary(sampleDataSize_);
copy(sampleData_, sampleData_+sampleDataSize_, binary.begin());
if (os_)
{
*os_ << "original: " << binary.size() << endl;
*os_ << setprecision(20) << fixed;
copy(binary.begin(), binary.end(), ostream_iterator<double>(*os_, "\n"));
}
// instantiate encoder
BinaryDataEncoder encoder(config);
// encode
string encoded;
encoder.encode(binary, encoded);
if (os_)
*os_ << "encoded: " << encoded.size() << endl << encoded << endl;
// regression testing for encoding
unit_assert(encoded == regressionTest(config));
// decode
vector<double> decoded;
encoder.decode(encoded, decoded);
if (os_)
{
*os_ << "decoded: " << decoded.size() << endl;
copy(decoded.begin(), decoded.end(), ostream_iterator<double>(*os_, "\n"));
}
// validate by comparing scan data before/after encode/decode
unit_assert(binary.size() == decoded.size());
const double epsilon = config.precision == BinaryDataEncoder::Precision_64 ? 1e-14 : 1e-5 ;
for (vector<double>::const_iterator it=binary.begin(), jt=decoded.begin();
it!=binary.end(); ++it, ++jt)
{
unit_assert_equal(*it, *jt, epsilon);
}
if (os_) *os_ << "validated with epsilon: " << fixed << setprecision(1) << scientific << epsilon << "\n\n";
}
void test ( )

Definition at line 186 of file BinaryDataEncoderTest.cpp.

References pwiz::msdata::BinaryDataEncoder::Config::byteOrder, pwiz::msdata::BinaryDataEncoder::Config::compression, pwiz::msdata::BinaryDataEncoder::Config::precision, and testConfiguration().

{
config.precision = BinaryDataEncoder::Precision_32;
config.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian;
config.precision = BinaryDataEncoder::Precision_32;
config.byteOrder = BinaryDataEncoder::ByteOrder_BigEndian;
config.precision = BinaryDataEncoder::Precision_64;
config.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian;
config.precision = BinaryDataEncoder::Precision_64;
config.byteOrder = BinaryDataEncoder::ByteOrder_BigEndian;
config.precision = BinaryDataEncoder::Precision_32;
config.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian;
config.compression = BinaryDataEncoder::Compression_Zlib;
config.precision = BinaryDataEncoder::Precision_32;
config.byteOrder = BinaryDataEncoder::ByteOrder_BigEndian;
config.compression = BinaryDataEncoder::Compression_Zlib;
config.precision = BinaryDataEncoder::Precision_64;
config.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian;
config.compression = BinaryDataEncoder::Compression_Zlib;
config.precision = BinaryDataEncoder::Precision_64;
config.byteOrder = BinaryDataEncoder::ByteOrder_BigEndian;
config.compression = BinaryDataEncoder::Compression_Zlib;
}
void testBadFile ( const string &  filename)

Definition at line 228 of file BinaryDataEncoderTest.cpp.

References pwiz::msdata::BinaryDataEncoder::Config::byteOrder, pwiz::msdata::BinaryDataEncoder::Config::compression, pwiz::msdata::BinaryDataEncoder::decode(), pwiz::msdata::BinaryDataEncoder::encode(), os_, pwiz::msdata::BinaryDataEncoder::Config::precision, and unit_assert.

Referenced by main().

{
if (os_) *os_ << "testBadFile: " << filename << flush;
size_t filesize = 0;
try
{
filesize = (size_t) bfs::file_size(filename);
}
catch (exception&)
{
cerr << "\nUnable to find file " << filename << endl;
return;
}
if (os_) *os_ << " (" << filesize << " bytes)\n";
unit_assert(filesize%sizeof(double) == 0);
// read data from file into memory
vector<double> data(filesize/sizeof(double));
ifstream is(filename.c_str(), ios::binary);
is.read((char*)&data[0], filesize);
// set configuration to produce the error
if (filename.find("BinaryDataEncoderTest.bad.bin")!=string::npos)
{
// zlib compression encoding error with this configuration
config.precision = BinaryDataEncoder::Precision_32;
config.byteOrder = BinaryDataEncoder::ByteOrder_LittleEndian;
config.compression = BinaryDataEncoder::Compression_Zlib;
}
// encode and decode
BinaryDataEncoder encoder(config);
string encoded;
encoder.encode(data, encoded);
vector<double> decoded;
encoder.decode(encoded, decoded);
// verify
unit_assert(decoded.size() == data.size());
for (size_t i=0; i<decoded.size(); i++)
unit_assert(decoded[i] == data[i]);
}
int main ( int  argc,
char *  argv[] 
)

Definition at line 283 of file BinaryDataEncoderTest.cpp.

References e(), filenames, os_, test(), TEST_EPILOG, TEST_FAILED, TEST_PROLOG, and testBadFile().

{
TEST_PROLOG(argc, argv)
try
{
vector<string> filenames;
for (int i=1; i<argc; i++)
{
if (!strcmp(argv[i],"-v")) os_ = &cout;
else if (bal::starts_with(argv[i], "--")) continue;
else filenames.push_back(argv[i]);
}
if (os_) *os_ << "BinaryDataEncoderTest\n\n";
test();
for_each(filenames.begin(), filenames.end(), testBadFile);
}
catch (exception& e)
{
TEST_FAILED(e.what())
}
catch (...)
{
TEST_FAILED("Caught unknown exception.")
}
}

Variable Documentation

ostream* os_ = 0

Definition at line 37 of file BinaryDataEncoderTest.cpp.

double sampleData_[]
Initial value:
{
200.00018816645022000000, 0.00000000000000000000,
200.00043034083151000000, 0.00000000000000000000,
200.00067251579924000000, 0.00000000000000000000,
200.00091469135347000000, 0.00000000000000000000,
201.10647068550810000000, 0.00000000000000000000,
201.10671554643099000000, 0.00000000000000000000,
201.10696040795017000000, 0.00000000000000000000,
201.10720527006566000000, 0.00000000000000000000,
201.10745013277739000000, 908.68475341796875000000,
201.10769499608537000000, 1266.26928710937500000000,
201.10793985998967000000, 1258.11450195312500000000,
201.10818472449023000000, 848.79339599609375000000,
201.10842958958708000000, 0.00000000000000000000,
201.10867445528024000000, 0.00000000000000000000,
201.10891932156963000000, 0.0000000000000000000,
200, 0,
300, 1,
400, 10,
500, 100,
600, 1000,
}

Definition at line 40 of file BinaryDataEncoderTest.cpp.

Referenced by testConfiguration(), and testData().

const int sampleDataSize_ = sizeof(sampleData_)/sizeof(double)

Definition at line 65 of file BinaryDataEncoderTest.cpp.

Referenced by testConfiguration().

const char* sampleEncoded32Big_ = "Q0gADAAAAABDSAAcAAAAAENIACwAAAAAQ0gAPAAAAABDSRtCAAAAAENJG1IAAAAAQ0kbYgAAAABDSRtyAAAAAENJG4JEYyvTQ0kbkkSeSJ5DSRuiRJ1DqkNJG7JEVDLHQ0kbwgAAAABDSRvSAAAAAENJG+IAAAAAQ0gAAAAAAABDlgAAP4AAAEPIAABBIAAAQ/oAAELIAABEFgAARHoAAA=="

Definition at line 69 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded32Little_ = "DABIQwAAAAAcAEhDAAAAACwASEMAAAAAPABIQwAAAABCG0lDAAAAAFIbSUMAAAAAYhtJQwAAAAByG0lDAAAAAIIbSUPTK2NEkhtJQ55InkSiG0lDqkOdRLIbSUPHMlREwhtJQwAAAADSG0lDAAAAAOIbSUMAAAAAAABIQwAAAAAAAJZDAACAPwAAyEMAACBBAAD6QwAAyEIAABZEAAB6RA=="

Definition at line 70 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded64Little_ = "/xedigEAaUAAAAAAAAAAAIV5fYYDAGlAAAAAAAAAAACkK16CBQBpQAAAAAAAAAAAXy4/fgcAaUAAAAAAAAAAAK4HNjVoI2lAAAAAAAAAAACrvLg2aiNpQAAAAAAAAAAAnMM7OGwjaUAAAAAAAAAAAIIcvzluI2lAAAAAAAAAAABax0I7cCNpQAAAAGB6ZYxAJcTGPHIjaUAAAADAE8mTQOUSSz50I2lAAAAAQHWok0CYs88/diNpQAAAAOBYhopAP6ZUQXgjaUAAAAAAAAAAANvq2UJ6I2lAAAAAAAAAAABpgV9EfCNpQAAAAAAAAAAAAAAAAAAAaUAAAAAAAAAAAAAAAAAAwHJAAAAAAAAA8D8AAAAAAAB5QAAAAAAAACRAAAAAAABAf0AAAAAAAABZQAAAAAAAwIJAAAAAAABAj0A="

Definition at line 71 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded64Big_ = "QGkAAYqdF/8AAAAAAAAAAEBpAAOGfXmFAAAAAAAAAABAaQAFgl4rpAAAAAAAAAAAQGkAB34/Ll8AAAAAAAAAAEBpI2g1NgeuAAAAAAAAAABAaSNqNri8qwAAAAAAAAAAQGkjbDg7w5wAAAAAAAAAAEBpI245vxyCAAAAAAAAAABAaSNwO0LHWkCMZXpgAAAAQGkjcjzGxCVAk8kTwAAAAEBpI3Q+SxLlQJOodUAAAABAaSN2P8+zmECKhljgAAAAQGkjeEFUpj8AAAAAAAAAAEBpI3pC2erbAAAAAAAAAABAaSN8RF+BaQAAAAAAAAAAQGkAAAAAAAAAAAAAAAAAAEBywAAAAAAAP/AAAAAAAABAeQAAAAAAAEAkAAAAAAAAQH9AAAAAAABAWQAAAAAAAECCwAAAAAAAQI9AAAAAAAA="

Definition at line 72 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded32LittleZlib_ = "eJzjYfBwZgACGSitA6VtoLSTtCeYDoLSSVC6CEo3AenL2skuk4D0PI95LouA9CrnuS6bgPRxoxCXQ1B1l6D0IyjNADWfgWEakG6wZ2A4AaQVHBkYfgHpE04MDGIuDAxVLgB7LB3q"

Definition at line 73 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded32BigZlib_ = "eJxz9mDgYQACZw8GGSitA6VtwLSntBOUDoLSSVC6CEo3uSRrXwbSk1zmecwD0otc5jqvAtKbXEKMjgPpQ1B1l6D0I6j5YOA8jYHBvgFIn2BgcFQA0r8YGJyAbBcxIK5iYAAAfLkd6g=="

Definition at line 74 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded64LittleZlib_ = "eJz7Lz63i5Eh04EBClora9uYkfhLtOOaWJH48Xr2dexI/HXsZqYZygj+6j07zLKQ+HMOW1vkIPGbZPZb5iHxo447WRdA+AlVqT0OqkeO2RRB+AeET052eCrkbVcC4TuUrpjsMGPzefsyCP9BRFuXg/2yEMcKJPNuv7rpVIXEz2yMd6lB4kNFUfkHiqD8D/YQuhLKV4HQDvVQfiSEPtAEFe93AACmsz1+"

Definition at line 75 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().

const char* sampleEncoded64BigZlib_ = "eJxzyGRg7Jor/p8BChwyGZjbaitbkfisTXHaS5D47HX2evEIvnKGqRn7OiR+ltmOPauR+DkW1ofnIPHzLPfLNCHxC6ydjkc59KRWJUD4RTbHjqg6TD4pfADCL7HzFnrqMHlFqQOEX2Z/fvMMh662iAcQfoVjyDJ7JPOqnG6+uo3Er3GJb8xEcj8KcCg6AKbtP0D5lVBaBUrXO0DoSCi/CaLeoR8iDgC0Qj1+"

Definition at line 76 of file BinaryDataEncoderTest.cpp.

Referenced by regressionTest().