//
// sio_8211Converter_t.cpp
//
#include <cstdlib>
#include <cassert>
#include <sdts++/container/sc_Subfield.h>
#include <sdts++/io/sio_Buffer.h>
#include <sdts++/io/sio_8211Converter.h>
#include <sdts++/io/sio_8211Utils.h>
using namespace std;
int
main()
{
// For each converter, start with a subfield value, convert it to a
// fixed length and then variable length buffers; for each
// conversion, insure that the converted data matches the original
// subfield value.
const string str_data = "ABCDE";
const long long_data = 42;
sc_Subfield subfield;
sio_Buffer buffer;
sio_8211Converter_A A_converter;
subfield.setA( str_data );
A_converter.addSubfield( subfield, buffer );
assert( equal( buffer.data().begin(), buffer.data().end(),
str_data.begin() ) );
{
// now remake an entirely new subfield from the data buffer
// created from the original subfield. They _should_ be
// identical.
sc_Subfield subfield;
A_converter.makeFixedSubfield( subfield,
&buffer.data()[0],
buffer.length() );
string s;
assert( subfield.getA( s ) );
assert( s == str_data );
}
buffer.reset(); // set up for next test by clearing out all old
// data
sio_8211Converter_I I_converter;
subfield.setI( long_data );
I_converter.addSubfield( subfield, buffer );
{
// now remake an entirely new subfield from the data buffer
// created from the original subfield. They _should_ be
// identical.
sc_Subfield subfield;
I_converter.makeFixedSubfield( subfield,
&buffer.data()[0],
buffer.length() );
long l;
assert( subfield.getI( l ) );
assert( long_data == l );
// the variable length function
// requires a unit terminator to know
// when there's no more data
buffer.addData( sio_8211UnitTerminator );
I_converter.makeVarSubfield( subfield,
&buffer.data()[0],
buffer.length(),
sio_8211UnitTerminator );
assert( subfield.getI( l ) );
assert( long_data == l );
}
buffer.reset();
float float_data = 123.45789;
sio_8211Converter_BFP32 BFP32_converter;
subfield.setBFP32( float_data );
BFP32_converter.addSubfield( subfield, buffer );
{
// now remake an entirely new subfield from the data buffer
// created from the original subfield. They _should_ be
// identical.
sc_Subfield subfield;
BFP32_converter.makeFixedSubfield( subfield,
&buffer.data()[0],
buffer.length() * 8 );
// BFP32 requires field length to be
// in bits not bytes, which is why we
// multiply by eight
float f;
assert( subfield.getBFP32( f ) );
assert( float_data == f );
}
exit( 0 );
}
syntax highlighted by Code2HTML, v. 0.9.1