blob: 37d38328df285ffb1ec393fee0fa17604ac2f919 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
#include "fw_helper.hpp"
#include <gfcpp/DataOutput.hpp>
#include <gfcpp/DataInput.hpp>
using namespace gemfire;
using namespace test;
void dumpnbytes(const uint8_t* buf, uint32_t length)
{
for( uint32_t i = 0; i < length; i++ ) {
cout << "buf[" << i << "] = " << hex << (int16_t) buf[i] << dec << " " << (char)buf[i] << endl;
}
}
void dumpnshorts(const uint16_t* buf, uint32_t length)
{
for( uint32_t i = 0; i < length; i++ ) {
cout << "buf[" << i << "] = " << hex << (uint16_t) buf[i] << dec << endl;
}
}
void dumpnwords(const uint32_t* buf, uint32_t length)
{
for( uint32_t i = 0; i < length; i++ ) {
cout << "buf[" << i << "] = " << hex << (uint32_t) buf[i] << dec << endl;
}
}
BEGIN_TEST(Byte)
{
DataOutput dataOutput;
dataOutput.write( (uint8_t)0x11 );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t) 0x11, "expected 0x11." );
int8_t result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.read( &result );
ASSERT( result == (uint8_t) 0x11, "expected 0x11" );
}
END_TEST(Byte)
BEGIN_TEST(Boolean)
{
DataOutput dataOutput;
dataOutput.writeBoolean( true );
dataOutput.writeBoolean( false );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t)0x1, "expected 0x1." );
ASSERT( buffer[1] == (uint8_t)0x0, "expected 0x0." );
bool result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.readBoolean( &result );
ASSERT( result, "expected true" );
dataInput.readBoolean( &result );
ASSERT( result == false, "expected false" );
}
END_TEST(Boolean)
BEGIN_TEST(Short)
{
DataOutput dataOutput;
dataOutput.writeInt( (int16_t) 0x1122 );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t) 0x11, "expected 0x11." );
ASSERT( buffer[1] == (uint8_t) 0x22, "expected 0x11." );
int16_t result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.readInt( &result );
ASSERT( result == 0x1122, "expected 0x1122" );
}
END_TEST(Short)
BEGIN_TEST(int_t)
{
DataOutput dataOutput;
dataOutput.writeInt( (int32_t) 0x11223344 );
const uint8_t* buffer = dataOutput.getBuffer();
dumpnbytes( buffer, 4 );
ASSERT( buffer[0] == (uint8_t) 0x11, "expected 0x11." );
ASSERT( buffer[1] == (uint8_t) 0x22, "expected 0x22." );
ASSERT( buffer[2] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[3] == (uint8_t) 0x44, "expected 0x44." );
DataInput dataInput(buffer, dataOutput.getBufferLength());
int32_t result;
dataInput.readInt( &result );
ASSERT( result == 0x11223344, "expected 0x11223344" );
}
END_TEST(int_t)
BEGIN_TEST(Long)
{
DataOutput dataOutput;
int64_t value = (((int64_t) 0x11223344) << 32) | 0x55667788;
dataOutput.writeInt( value );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t) 0x11, "expected 0x11." );
ASSERT( buffer[1] == (uint8_t) 0x22, "expected 0x22." );
ASSERT( buffer[2] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[3] == (uint8_t) 0x44, "expected 0x44." );
ASSERT( buffer[4] == (uint8_t) 0x55, "expected 0x55." );
ASSERT( buffer[5] == (uint8_t) 0x66, "expected 0x66." );
ASSERT( buffer[6] == (uint8_t) 0x77, "expected 0x77." );
ASSERT( buffer[7] == (uint8_t) 0x88, "expected 0x88." );
DataInput dataInput(buffer, dataOutput.getBufferLength());
int64_t result;
dataInput.readInt( (int64_t*) &result );
ASSERT( result == value, "expected 0x1122334455667788" );
}
END_TEST(Long)
BEGIN_TEST(Float)
{
DataOutput dataOutput;
dataOutput.writeFloat( 1.2f );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t) 0x3f, "expected 0x3f." );
ASSERT( buffer[1] == (uint8_t) 0x99, "expected 0x99." );
ASSERT( buffer[2] == (uint8_t) 0x99, "expected 0x99." );
ASSERT( buffer[3] == (uint8_t) 0x9a, "expected 0x9a." );
DataInput dataInput(buffer, dataOutput.getBufferLength());
float result;
dataInput.readFloat( &result );
ASSERT( result == 1.2f, "expected 1.2f" );
}
END_TEST(Float)
BEGIN_TEST(Double)
{
DataOutput dataOutput;
dataOutput.writeDouble( 1.2 );
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT( buffer[0] == (uint8_t) 0x3f, "expected 0x3f." );
ASSERT( buffer[1] == (uint8_t) 0xf3, "expected 0xf3." );
ASSERT( buffer[2] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[3] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[4] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[5] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[6] == (uint8_t) 0x33, "expected 0x33." );
ASSERT( buffer[7] == (uint8_t) 0x33, "expected 0x33." );
DataInput dataInput(buffer, dataOutput.getBufferLength());
double result;
dataInput.readDouble( &result );
ASSERT( result == 1.2, "expected 1.2" );
}
END_TEST(Double)
// Test data output numbers.
BEGIN_TEST(Numbers)
{
DataOutput dataOutput;
dataOutput.write( (uint8_t)0x11 );
dataOutput.write( (uint8_t)0xAA );
dataOutput.writeInt( (int16_t)0x1122 );
dataOutput.write( (uint8_t)0xAA );
dataOutput.writeInt( 0x11223344 );
dataOutput.write( (uint8_t)0xAA );
dataOutput.writeInt( (((int64_t) 0x11223344) << 32) | 0x55667788 );
dataOutput.write( (uint8_t)0xAA );
dataOutput.writeFloat( 1.2f );
dataOutput.write( (uint8_t)0xAA );
dataOutput.writeDouble( 1.2 );
dataOutput.write( (uint8_t)0xAA );
// test data
}
END_TEST(Numbers)
BEGIN_TEST(NarrowStrings)
{
DataOutput dataOutput;
const char* strOrig = "This is fun.";
dataOutput.writeASCII( strOrig );
const uint8_t* buffer = dataOutput.getBuffer();
cout << "Wrote to buffer..." << endl;
dumpnbytes( buffer, 14 );
ASSERT( buffer[0] == 0x00, "wrong utf encoding." );
ASSERT( buffer[1] == 0x0c, "wrong utf encoding." );
ASSERT( buffer[2] == 'T', "wrong utf encoding." );
ASSERT( buffer[3] == 'h', "wrong utf encoding." );
ASSERT( buffer[4] == 'i', "wrong utf encoding." );
ASSERT( buffer[5] == 's', "wrong utf encoding." );
ASSERT( buffer[6] == ' ', "wrong utf encoding." );
ASSERT( buffer[7] == 'i', "wrong utf encoding." );
ASSERT( buffer[8] == 's', "wrong utf encoding." );
ASSERT( buffer[9] == ' ', "wrong utf encoding." );
ASSERT( buffer[10] == 'f', "wrong utf encoding." );
ASSERT( buffer[11] == 'u', "wrong utf encoding." );
ASSERT( buffer[12] == 'n', "wrong utf encoding." );
ASSERT( buffer[13] == '.', "wrong utf encoding." );
DataInput dataInput(buffer, dataOutput.getBufferLength());
char* str = NULL;
uint16_t res_length;
dataInput.readASCII( &str, &res_length );
cout << "Read from buffer..." << endl;
ASSERT( str != NULL, "expected non-null str" );
ASSERT( res_length == 12, "expected length 12." );
dumpnbytes((uint8_t*) str, 12);
int res = strncmp( str, strOrig, 12 );
ASSERT( res == 0, "expected a match." );
dataInput.freeUTFMemory(str);
}
END_TEST(NarrowStrings)
BEGIN_TEST(WideStrings)
{
DataOutput dataOutput;
wchar_t* strOrig = new wchar_t[40];
strOrig[0] = 0;
strOrig[1] = 0x7f;
strOrig[2] = 0x80;
strOrig[3] = 0x81;
strOrig[4] = 0xffff;
dumpnshorts( (uint16_t*)strOrig, 5 );
dataOutput.writeUTF( strOrig, 5 );
const uint8_t* buffer = dataOutput.getBuffer();
cout << "Wrote to buffer..." << endl;
dumpnbytes( buffer, 12 );
ASSERT( buffer[0] == 0x00, "wrong utf encoding." );
ASSERT( buffer[1] == 0x0a, "wrong utf encoding." );
ASSERT( buffer[2] == 0xc0, "wrong utf encoding." );
ASSERT( buffer[3] == 0x80, "wrong utf encoding." );
ASSERT( buffer[4] == 0x7f, "wrong utf encoding." );
ASSERT( buffer[5] == 0xc2, "wrong utf encoding." );
ASSERT( buffer[6] == 0x80, "wrong utf encoding." );
ASSERT( buffer[7] == 0xc2, "wrong utf encoding." );
ASSERT( buffer[8] == 0x81, "wrong utf encoding." );
ASSERT( buffer[9] == 0xef, "wrong utf encoding." );
ASSERT( buffer[10] == 0xbf, "wrong utf encoding." );
ASSERT( buffer[11] == 0xbf, "wrong utf encoding." );
cout << "sizeof wchar_t " << sizeof( wchar_t ) << endl;
DataInput dataInput(buffer, dataOutput.getBufferLength());
wchar_t* str = NULL;
uint16_t res_length;
dataInput.readUTF( &str, &res_length );
ASSERT( str != NULL, "expected non-null str" );
ASSERT( res_length == 5, "expected length 5." );
cout << "Read from buffer..." << endl;
dumpnshorts( (uint16_t*)str, 5 );
ASSERT( str[0] == 0x00, "wrong decoded value" );
ASSERT( str[1] == 0x7f, "wrong decoded value" );
ASSERT( str[2] == 0x80, "wrong decoded value" );
ASSERT( str[3] == 0x81, "wrong decoded value" );
ASSERT( str[4] == 0xffff, "wrong decoded value" );
dataInput.freeUTFMemory(str);
delete [] strOrig;
}
END_TEST(WideStrings)