cpp: fixes test/streaming_c.cc #42

This commit is contained in:
frsyuki 2011-04-17 08:21:52 +09:00
parent 8446549ed8
commit 3384dbc92d

View File

@ -7,9 +7,21 @@ TEST(streaming, basic)
msgpack_sbuffer* buffer = msgpack_sbuffer_new(); msgpack_sbuffer* buffer = msgpack_sbuffer_new();
msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write); msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write);
// 1, 2, 3, "raw", ["data"], {0.3: 0.4}
EXPECT_EQ(0, msgpack_pack_int(pk, 1)); EXPECT_EQ(0, msgpack_pack_int(pk, 1));
EXPECT_EQ(0, msgpack_pack_int(pk, 2)); EXPECT_EQ(0, msgpack_pack_int(pk, 2));
EXPECT_EQ(0, msgpack_pack_int(pk, 3)); EXPECT_EQ(0, msgpack_pack_int(pk, 3));
EXPECT_EQ(0, msgpack_pack_raw(pk, 3));
EXPECT_EQ(0, msgpack_pack_raw_body(pk, "raw", 3));
EXPECT_EQ(0, msgpack_pack_array(pk, 1));
EXPECT_EQ(0, msgpack_pack_raw(pk, 4));
EXPECT_EQ(0, msgpack_pack_raw_body(pk, "data", 4));
EXPECT_EQ(0, msgpack_pack_map(pk, 1));
EXPECT_EQ(0, msgpack_pack_float(pk, 0.4));
EXPECT_EQ(0, msgpack_pack_double(pk, 0.8));
int max_count = 6;
msgpack_packer_free(pk); msgpack_packer_free(pk);
const char* input = buffer->data; const char* input = buffer->data;
@ -22,36 +34,65 @@ TEST(streaming, basic)
msgpack_unpacked_init(&result); msgpack_unpacked_init(&result);
int count = 0; int count = 0;
while(count < 3) { while(count < max_count) {
bool unpacked = false;
msgpack_unpacker_reserve_buffer(&pac, 32*1024); msgpack_unpacker_reserve_buffer(&pac, 32*1024);
/* read buffer into msgpack_unapcker_buffer(&pac) upto while(!unpacked) {
* msgpack_unpacker_buffer_capacity(&pac) bytes. */ /* read buffer into msgpack_unapcker_buffer(&pac) upto
size_t len = 1; * msgpack_unpacker_buffer_capacity(&pac) bytes. */
memcpy(msgpack_unpacker_buffer(&pac), input, len); memcpy(msgpack_unpacker_buffer(&pac), input, 1);
input += len; input += 1;
msgpack_unpacker_buffer_consumed(&pac, len); EXPECT_TRUE(input <= eof);
while(msgpack_unpacker_next(&pac, &result)) { msgpack_unpacker_buffer_consumed(&pac, 1);
msgpack_object obj = result.data;
switch(count++) { while(msgpack_unpacker_next(&pac, &result)) {
case 0: unpacked = 1;
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); msgpack_object obj = result.data;
EXPECT_EQ(1, result.data.via.u64); msgpack_object e;
break; switch(count++) {
case 1: case 0:
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
EXPECT_EQ(2, result.data.via.u64); EXPECT_EQ(1, obj.via.u64);
break; break;
case 2: case 1:
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
EXPECT_EQ(3, result.data.via.u64); EXPECT_EQ(2, obj.via.u64);
return; break;
case 2:
EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type);
EXPECT_EQ(3, obj.via.u64);
break;
case 3:
EXPECT_EQ(MSGPACK_OBJECT_RAW, obj.type);
EXPECT_EQ(std::string("raw",3), std::string(obj.via.raw.ptr, obj.via.raw.size));
break;
case 4:
EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
EXPECT_EQ(1, obj.via.array.size);
e = obj.via.array.ptr[0];
EXPECT_EQ(MSGPACK_OBJECT_RAW, e.type);
EXPECT_EQ(std::string("data",4), std::string(e.via.raw.ptr, e.via.raw.size));
break;
case 5:
EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type);
EXPECT_EQ(1, obj.via.map.size);
e = obj.via.map.ptr[0].key;
EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, e.type);
ASSERT_FLOAT_EQ(0.4, (float)e.via.dec);
e = obj.via.map.ptr[0].val;
EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, e.type);
ASSERT_DOUBLE_EQ(0.8, e.via.dec);
break;
}
} }
} }
EXPECT_TRUE(input < eof);
} }
msgpack_unpacker_destroy(&pac);
msgpack_unpacked_destroy(&result);
} }