static void pack_test(void) { /*************** Test of pack *****************/ cw_pack_context pc; cmp_ctx_t cc; mpack_writer_t mw; int ii, itemSize; for (ii=0; ii<BUF_Length; ii++) buffer[ii] = 0; /*Load pages in memory*/ uint8_t item[40]; BEFORE_PTEST(cw_pack_nil(&pc)); PTEST("CMP",cmp_write_nil(&cc)); PTEST("MPack", mpack_write_nil(&mw)); PTEST("CWPack", cw_pack_nil(&pc)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, -1)); PTEST("CMP",cmp_write_integer(&cc, -1)); PTEST("MPack", mpack_write_i64(&mw, -1)); PTEST("CWPack", cw_pack_signed(&pc, -1)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 200)); PTEST("CMP",cmp_write_integer(&cc, 200)); PTEST("MPack", mpack_write_i64(&mw, 200)); PTEST("CWPack", cw_pack_signed(&pc, 200)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 10000)); PTEST("CMP",cmp_write_integer(&cc, 10000)); PTEST("MPack", mpack_write_i64(&mw, 10000)); PTEST("CWPack", cw_pack_signed(&pc, 10000)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 100000)); PTEST("CMP",cmp_write_integer(&cc, 100000)); PTEST("MPack", mpack_write_i64(&mw, 100000)); PTEST("CWPack", cw_pack_signed(&pc, 100000)); AFTER_PTEST; BEFORE_PTEST(cw_pack_float(&pc, (float)3.14)); PTEST("CMP",cmp_write_float(&cc, (float)3.14)); PTEST("MPack", mpack_write_float(&mw, (float)3.14)); PTEST("CWPack", cw_pack_float(&pc, (float)3.14)); AFTER_PTEST; BEFORE_PTEST(cw_pack_double(&pc, 3.14)); PTEST("CMP",cmp_write_decimal(&cc, 3.14)); PTEST("MPack", mpack_write_double(&mw, 3.14)); PTEST("CWPack", cw_pack_double(&pc, 3.14)); AFTER_PTEST; BEFORE_PTEST(cw_pack_str(&pc, "Claes",5)); PTEST("CMP",cmp_write_str(&cc, "Claes",5)); PTEST("MPack", mpack_write_str(&mw, "Claes",5)); PTEST("CWPack", cw_pack_str(&pc, "Claes",5)); AFTER_PTEST; BEFORE_PTEST(cw_pack_str(&pc, "Longer string than the other one.",33)); PTEST("CMP",cmp_write_str(&cc, "Longer string than the other one.",33)); PTEST("MPack", mpack_write_str(&mw, "Longer string than the other one.",33)); PTEST("CWPack", cw_pack_str(&pc, "Longer string than the other one.",33)); AFTER_PTEST; }
void mpack_write_i32(mpack_writer_t* writer, int32_t value) { #if MPACK_OPTIMIZE_FOR_SIZE mpack_write_i64(writer, value); #else mpack_writer_track_element(writer); if (value >= -32) { if (value <= 127) { // we encode positive and negative fixints together MPACK_WRITE_ENCODED(mpack_encode_fixint, MPACK_TAG_SIZE_FIXINT, (int8_t)value); } else if (value <= UINT8_MAX) { MPACK_WRITE_ENCODED(mpack_encode_u8, MPACK_TAG_SIZE_U8, (uint8_t)value); } else if (value <= UINT16_MAX) { MPACK_WRITE_ENCODED(mpack_encode_u16, MPACK_TAG_SIZE_U16, (uint16_t)value); } else { MPACK_WRITE_ENCODED(mpack_encode_u32, MPACK_TAG_SIZE_U32, (uint32_t)value); } } else if (value >= INT8_MIN) { MPACK_WRITE_ENCODED(mpack_encode_i8, MPACK_TAG_SIZE_I8, (int8_t)value); } else if (value >= INT16_MIN) { MPACK_WRITE_ENCODED(mpack_encode_i16, MPACK_TAG_SIZE_I16, (int16_t)value); } else { MPACK_WRITE_ENCODED(mpack_encode_i32, MPACK_TAG_SIZE_I32, value); } #endif }
void mpack_write_i8(mpack_writer_t* writer, int8_t value) { #if MPACK_OPTIMIZE_FOR_SIZE mpack_write_i64(writer, value); #else mpack_writer_track_element(writer); if (value >= -32) { // we encode positive and negative fixints together MPACK_WRITE_ENCODED(mpack_encode_fixint, MPACK_TAG_SIZE_FIXINT, (int8_t)value); } else { MPACK_WRITE_ENCODED(mpack_encode_i8, MPACK_TAG_SIZE_I8, (int8_t)value); } #endif }