Exemplo n.º 1
0
Arquivo: endian.hpp Projeto: pmed/yas
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;
}
Exemplo n.º 2
0
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;
}