/*=========================================================================
 * 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)

