summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcpp/preprocess2
-rw-r--r--cpp/test/Makefile.am5
-rw-r--r--cpp/test/cases.cc36
-rw-r--r--test/cases_gen.rb15
4 files changed, 58 insertions, 0 deletions
diff --git a/cpp/preprocess b/cpp/preprocess
index aab89f5..1a5e6a3 100755
--- a/cpp/preprocess
+++ b/cpp/preprocess
@@ -25,4 +25,6 @@ cp -f ../msgpack/pack_define.h src/msgpack/
cp -f ../msgpack/pack_template.h src/msgpack/
cp -f ../msgpack/unpack_define.h src/msgpack/
cp -f ../msgpack/unpack_template.h src/msgpack/
+cp -f ../test/cases.mpac test/
+cp -f ../test/cases_compact.mpac test/
diff --git a/cpp/test/Makefile.am b/cpp/test/Makefile.am
index 3670d7f..f9c5f22 100644
--- a/cpp/test/Makefile.am
+++ b/cpp/test/Makefile.am
@@ -10,6 +10,7 @@ check_PROGRAMS = \
object \
convert \
buffer \
+ cases \
msgpackc_test \
msgpack_test
@@ -28,7 +29,11 @@ convert_SOURCES = convert.cc
buffer_SOURCES = buffer.cc
buffer_LDADD = -lz
+cases_SOURCES = cases.cc
+
msgpackc_test_SOURCES = msgpackc_test.cpp
msgpack_test_SOURCES = msgpack_test.cpp
+EXTRA_DIST = cases.mpac cases_compact.mpac
+
diff --git a/cpp/test/cases.cc b/cpp/test/cases.cc
new file mode 100644
index 0000000..b408876
--- /dev/null
+++ b/cpp/test/cases.cc
@@ -0,0 +1,36 @@
+#include <msgpack.hpp>
+#include <fstream>
+#include <gtest/gtest.h>
+
+static void feed_file(msgpack::unpacker& pac, const char* path)
+{
+ std::ifstream fin(path);
+ while(true) {
+ pac.reserve_buffer(32*1024);
+ fin.read(pac.buffer(), pac.buffer_capacity());
+ if(fin.bad()) {
+ throw std::runtime_error("read failed");
+ }
+ pac.buffer_consumed(fin.gcount());
+ if(fin.fail()) {
+ break;
+ }
+ }
+}
+
+TEST(cases, format)
+{
+ msgpack::unpacker pac;
+ msgpack::unpacker pac_compact;
+
+ feed_file(pac, "cases.mpac");
+ feed_file(pac_compact, "cases_compact.mpac");
+
+ msgpack::unpacked result;
+ while(pac.next(&result)) {
+ msgpack::unpacked result_compact;
+ EXPECT_TRUE( pac_compact.next(&result_compact) );
+ EXPECT_EQ(result_compact.get(), result.get());
+ }
+}
+
diff --git a/test/cases_gen.rb b/test/cases_gen.rb
index 2fb7273..7efbfe7 100644
--- a/test/cases_gen.rb
+++ b/test/cases_gen.rb
@@ -63,14 +63,29 @@ EOF
source.gsub!(/\#.+$/,'')
bytes = source.strip.split(/\s+/).map {|x| x.to_i(16) }.pack('C*')
+objs = []
compact_bytes = ""
pac = MessagePack::Unpacker.new
pac.feed(bytes)
pac.each {|obj|
p obj
+ objs << obj
compact_bytes << obj.to_msgpack
}
+# self check
+cpac = MessagePack::Unpacker.new
+cpac.feed(compact_bytes)
+cpac.each {|cobj|
+ obj = objs.shift
+ if obj != cobj
+ puts "** SELF CHECK FAILED **"
+ puts "expected: #{obj.inspect}"
+ puts "actual: #{cobj.inspect}"
+ exit 1
+ end
+}
+
File.open("cases.mpac","w") {|f| f.write(bytes) }
File.open("cases_compact.mpac","w") {|f| f.write(compact_bytes) }