bool endian_test(const char* archive_type, const char* io_type) { typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type, io_type); typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type, io_type); if ( ia->is_big_endian() != oa->is_big_endian() || oa->is_big_endian() != YAS_BIG_ENDIAN() ) { std::cout << "ENDIAN test failed! endianness is not equal! [1]" << std::endl; return false; } if ( ia->is_little_endian() != oa->is_little_endian() || oa->is_little_endian() != YAS_LITTLE_ENDIAN() ) { std::cout << "ENDIAN test failed! endianness is not equal! [2]" << std::endl; return false; } return true; }
bool buffer_test(const char* archive_type, const char* io_type) { // binary: 4(header) + 4(string length) +21(string)= 29 // text : 5(header) +1(space) + 2(string length) + 1(space) +21(string) = 30 static const char str1[] = "intrusive buffer test"; yas::intrusive_buffer buf1(str1, sizeof(str1)-1); typename archive_traits::oarchive oa1; archive_traits::ocreate(oa1, archive_type, io_type); oa1 & buf1; // binary if ( yas::is_binary_archive<typename archive_traits::oarchive_type>::value ) { static const unsigned char _res64_le[] = { _HEADER_BYTES(),0x43,0x15,0x00,0x00,0x00,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res32_le[] = { _HEADER_BYTES(),0x03,0x15,0x00,0x00,0x00,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res64_be[] = { _HEADER_BYTES(),0x44,0x00,0x00,0x00,0x15,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res32_be[] = { _HEADER_BYTES(),0x03,0x00,0x00,0x00,0x15,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; const unsigned char *res_ptr = ( YAS_PLATFORM_BITS_IS_64() ? oa1.is_little_endian() ? _res64_le : _res64_be : oa1.is_little_endian() ? _res32_le : _res32_be ); const unsigned int res_size= ( YAS_PLATFORM_BITS_IS_64() ? oa1.is_little_endian() ? sizeof(_res64_le) : sizeof(_res64_be) : oa1.is_little_endian() ? sizeof(_res32_le) : sizeof(_res32_be) ); if ( oa1.size() != res_size ) { std::cout << "BUFFER intrusive serialization error! [1]" << std::endl; return false; } if ( !oa1.compare(res_ptr, res_size) ) { std::cout << "BUFFER intrusive serialization error! [2]" << std::endl; return false; } // text } else if ( yas::is_text_archive<typename archive_traits::oarchive_type>::value ) { static const unsigned char res64[] = { // "yas49 0221intrusive buffer test" _HEADER_BYTES(),0x34,0x39,0x20,0x30,0x32,0x32,0x31,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char res32[] = { // "yas09 0221intrusive buffer test" _HEADER_BYTES(),0x30,0x39,0x20,0x30,0x32,0x32,0x31,0x69,0x6e,0x74,0x72,0x75,0x73 ,0x69,0x76,0x65,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; const unsigned char *res_ptr = (YAS_PLATFORM_BITS_IS_64()) ? res64 : res32; const unsigned int res_size = (YAS_PLATFORM_BITS_IS_64()) ? sizeof(res64) : sizeof(res32); if ( oa1.size() != res_size ) { std::cout << "BUFFER intrusive serialization error! [3]" << std::endl; return false; } if ( !oa1.compare(res_ptr, res_size) ) { std::cout << "BUFFER intrusive serialization error! [4]" << std::endl; return false; } // json } else if ( yas::is_json_archive<typename archive_traits::oarchive_type>::value ) { std::cout << "BUFFER intrusive serialization error! json is not implemented!" << std::endl; return false; } static const char str2[] = "shared buffer test"; // 18 + 4(header) + 4(size of array) = 26 yas::shared_buffer buf2(str2, sizeof(str2)-1); typename archive_traits::oarchive oa2; archive_traits::ocreate(oa2, archive_type, io_type); oa2 & buf2; if ( yas::is_binary_archive<typename archive_traits::oarchive_type>::value ) { static const unsigned char _res64_le[] = { _HEADER_BYTES(),0x43,0x12,0x00,0x00,0x00,0x73,0x68,0x61 ,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res32_le[] = { _HEADER_BYTES(),0x03,0x12,0x00,0x00,0x00,0x73,0x68,0x61 ,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res64_be[] = { _HEADER_BYTES(),0x44,0x00,0x00,0x00,0x12,0x73,0x68,0x61 ,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char _res32_be[] = { _HEADER_BYTES(),0x03,0x00,0x00,0x00,0x12,0x73,0x68,0x61 ,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; const unsigned char *res_ptr = ( YAS_PLATFORM_BITS_IS_64() ? oa2.is_little_endian() ? _res64_le : _res64_be : oa2.is_little_endian() ? _res32_le : _res32_be ); const unsigned int res_size= ( YAS_PLATFORM_BITS_IS_64() ? oa2.is_little_endian() ? sizeof(_res64_le) : sizeof(_res64_be) : oa2.is_little_endian() ? sizeof(_res32_le) : sizeof(_res32_be) ); if ( oa2.size() != res_size ) { std::cout << "BUFFER shared serialization error! [5]" << std::endl; return false; } if ( !oa2.compare(res_ptr, res_size) ) { std::cout << "BUFFER shared serialization error! [6]" << std::endl; return false; } } else if ( yas::is_text_archive<typename archive_traits::oarchive_type>::value ) { static const unsigned char res64[] = { // "yas4A 0218shared buffer test" _HEADER_BYTES(),0x34,0x39,0x20,0x30,0x32,0x31,0x38,0x73,0x68 ,0x61,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; static const unsigned char res32[] = { // "yas09 0218shared buffer test" _HEADER_BYTES(),0x30,0x39,0x20,0x30,0x32,0x31,0x38,0x73,0x68 ,0x61,0x72,0x65,0x64,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x74,0x65,0x73,0x74 }; const unsigned char* res_ptr = (YAS_PLATFORM_BITS_IS_64() ? res64 : res32); const unsigned int res_size= (YAS_PLATFORM_BITS_IS_64() ? sizeof(res64) : sizeof(res32)); if ( oa2.size() != res_size ) { std::cout << "BUFFER shared serialization error! [7]" << std::endl; return false; } if ( !oa2.compare(res_ptr, res_size) ) { std::cout << "BUFFER shared serialization error! [8]" << std::endl; return false; } typename archive_traits::iarchive ia1; archive_traits::icreate(ia1, oa2, archive_type, io_type); yas::shared_buffer buf4; ia1 & buf4; if ( buf4.size != sizeof(str2)-1 || memcmp(str2, buf4.data.get(), buf4.size) ) { std::cout << "BUFFER shared deserialization error! [9]" << std::endl; return false; } } return true; }