From fa6788e79c955413da592037d26fce9f412f19ec Mon Sep 17 00:00:00 2001 From: Cyrille Favreau Date: Mon, 18 Apr 2016 17:18:40 +0200 Subject: [PATCH 1/3] Added unit test on ZeroBuf structures made of strings --- tests/serialization.cpp | 35 +++++++++++++++++++++++++++++++++++ tests/testSchema.fbs | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/tests/serialization.cpp b/tests/serialization.cpp index dfa2d6b..6d15c04 100644 --- a/tests/serialization.cpp +++ b/tests/serialization.cpp @@ -195,3 +195,38 @@ BOOST_AUTO_TEST_CASE(compact) copy.fromJSON( schema.toJSON( )); BOOST_CHECK_EQUAL( schema.toBinary().size, copy.toBinary().size ); } + +/** + Helper function to generate random size strings + */ +char get_rand_char() { + static std::string charset("abcdefghijklmnopqrstuvwxyz"); + return charset[rand() % charset.size()]; +} + +std::string generate_random_string(size_t n) +{ + char* rbuf = new char[n]; + std::generate(rbuf, rbuf+n, &get_rand_char); + std::string s = std::string(rbuf, n); + delete [] rbuf; + return s; +} + +BOOST_AUTO_TEST_CASE(test_attribute) +{ + test::Attribute attribute; + + for( size_t i = 0; i<1000; ++i ) + { + const std::string key = generate_random_string(rand()%20); + const std::string value = generate_random_string(rand()%20); + const std::string json = + "{\n \"key\" : \"" + key + + "\",\n \"value\" : \"" + value + "\"\n}\n"; + attribute.fromJSON(json); + attribute.compact(); + const std::string result = attribute.toJSON(); + BOOST_CHECK_EQUAL( result, json ); + } +} diff --git a/tests/testSchema.fbs b/tests/testSchema.fbs index 7e6bc64..931ba27 100644 --- a/tests/testSchema.fbs +++ b/tests/testSchema.fbs @@ -1,6 +1,11 @@ namespace test; +table Attribute { + key: string; + value: string; +} + table TestNested { intvalue: int; uintvalue: uint; From 1e9476d0d6294e1d1c3d1581bd25cb3157870392 Mon Sep 17 00:00:00 2001 From: Stefan Eilemann Date: Tue, 12 Apr 2016 07:55:37 +0200 Subject: [PATCH 2/3] Add Qt signals to presentation --- .../Data/{st2-7603.jpg => st2-7631.jpg} | Bin .../Data/{st3-7520.jpg => st3-7616.jpg} | Bin 9896 -> 9898 bytes .../Data/{st5-7444.jpg => st5-7630.jpg} | Bin 15015 -> 16717 bytes doc/ZeroBuf.key/Index.zip | Bin 84567 -> 84589 bytes doc/ZeroBuf.key/Metadata/Properties.plist | Bin 340 -> 340 bytes doc/ZeroBuf.pdf | Bin 92451 -> 92494 bytes 6 files changed, 0 insertions(+), 0 deletions(-) rename doc/ZeroBuf.key/Data/{st2-7603.jpg => st2-7631.jpg} (100%) rename doc/ZeroBuf.key/Data/{st3-7520.jpg => st3-7616.jpg} (88%) rename doc/ZeroBuf.key/Data/{st5-7444.jpg => st5-7630.jpg} (77%) diff --git a/doc/ZeroBuf.key/Data/st2-7603.jpg b/doc/ZeroBuf.key/Data/st2-7631.jpg similarity index 100% rename from doc/ZeroBuf.key/Data/st2-7603.jpg rename to doc/ZeroBuf.key/Data/st2-7631.jpg diff --git a/doc/ZeroBuf.key/Data/st3-7520.jpg b/doc/ZeroBuf.key/Data/st3-7616.jpg similarity index 88% rename from doc/ZeroBuf.key/Data/st3-7520.jpg rename to doc/ZeroBuf.key/Data/st3-7616.jpg index fa0ccb87d7fe885620a3986008f59c49d402cc7f..fb555c1d3c91dc8cda78b412b340682d406fe0c5 100644 GIT binary patch delta 1030 zcmZ4CyUKUNCxv?bo5v5|id&iY$V06wIw85>b~FEcN%jd<&*i4*eigp$d}GZ&wI9rZ z4R>x-YaS62I0Kic1P z&FbjaGjE=S&%14;7TESDL3poo@jM4h6Q+${nrfUrgmi6kf8=ZAaU;cOr(*jGi{L1+yB~kL9;rEOG46POIeQWob{;2l;@OAnjUw!9GUrvbX%;JsvWH6EGqdV6zB?VTl z$vH}|>Te&fGyL%OSo_lGipvMg*Q*riEnRZ|X6+)|wR0Dry|csO;E9*cQtp}m894tl zG}pgKy!@Zx{o;QjXx0_ZW83!edW#9ime`={$KtGaM#>)jx4J&{Tho#cEyuSA*cQ%u zW54}R@P7s;+5Zgx*l+)5_!x4d{XYYmIT4#au5UG!ejRIeKJN1J{c|=Q7N{{uNvOkTl>~n7Ai=Ro1Sn(~r#WlB?&xl9wBFmu>p0oTjT&C$_80+cONV+VwT^zKjYN;oF~5~$JUBWPuyOxUh8B2p)DWd zwpXs}m;dAW;m)UEGV- zeIYi*k9V%qv%7R%>g}UDp4>U1nsQfSJG`ddKF2MSkihq=OLKdnYQmx}O`ebWVt=G} ze2ni|Taze%^nTAiF+m$XlfCL;ebVfP-!f*Y-H{O9A$+d*3e)7}s^+rGBmR{AU1+l7 evHIC*@&f&44=URnCnYNu{CHs*xMA{d)wKXpP6&Pg delta 1011 zcmZw9dobGv0KoBI8CK7t>55f1jd^5IbSSl`s^Xl+!mKHR+0m-kT94@Kr`1tfZ)*>g z)N3SH5k(g2DpEwKM?98L7m~R1>aTuL>UTtb`**kPkMCdKyALy{If%Xa73ei9cr!<7 zN|yV7QxG2gbLzVsBf6PR$<1ZU3jDSXC$EjH3WBxk4|K7WafP>1Uiw!y?vXgKfB69rZ)<_8R5=W^HD^P z$EDAplK6!aRUeBVdcoi{Or=c{^TY)G4*2bGQWBJ2=`)TO2CHLx5*?W)5mp-E*Ovj) zvy+5uE>aJFm<+wYF?d<)1$3W*=UqsArmra!D%J;_)VSNO=gC;5AXo9Y_lX&+LSv5u zjkBnN2qncu-g}RNL8{VPLgc;tEoEzd?aM&2LtJ+@^V&{yj;F(Be|#yeGmoKu3+mqv zY+l=KEl}%STK{6_RC^`mR^m|Q1q)^N#chMJEMRFuS0Gwd>h+QAd+uVVemUoC7E$8Y ze7XtbgNqBhN7GPXZv_Q@qvjR0ymmprKzREpKk}r{wB= zv+LVn-q0TK-BUIf1&S>y0DDfrh+)mks|VH&|KJP!Z{WWMMy|F)+->q*l0w2bNTc%F z8xu;Tbw7Kxn_X~p!uQKK+v!?KgCEU({==+LF=yK_G3A_g%&y~m(*O}Ybf#0#!6}-T zMh#=Ty6vB5l{o^ZIL`i>SQ_qffqk{{62Teqm*S?kBNImC!~r9nHPFpfn4A+h-r`i%K$jL2{i zivlt%GIcjwkEn1&%z9?kiV_9-=?3HYGBVbj(zN7l_*b0CgSi_vqlE%b{hMN@=xmXW zZ0BCGr%qFpWd27)At0Qok}DwmuPiCPzl1YDDusL{4;V>3i*1A2z(#Xjb*4#}u5De( z_z`7F->YH_GAJH2Rz)HsvKUjIB5*SOii{1OY(Fn@UF6m9XgAih%Nf>g$NrG0GWMTu faTPYBPmUidc3sTM^)8G3Iu%)Q4-PKhw{H0xI=~MC diff --git a/doc/ZeroBuf.key/Data/st5-7444.jpg b/doc/ZeroBuf.key/Data/st5-7630.jpg similarity index 77% rename from doc/ZeroBuf.key/Data/st5-7444.jpg rename to doc/ZeroBuf.key/Data/st5-7630.jpg index 646d50dc80dfd7bfd3ada2012953faf005d5a7b7..1dbeba4d4b4e703ace91587caac4b3a2b0a39733 100644 GIT binary patch delta 3697 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 delta 2081 zcmciAeIU~b0|)Rqy^2&=USd*=+=!emFB{5Bc{_C~+l_QB8$~nZnzG~fqNzQoWey@dg9MF)(pWC8Ed$rVjm||DY zx|@w0?qcGYj|M1S_Yr+Fpn<_zblXwJoVd@xlDAd#hLxSE`Fk8 zn{Q~(Q)(c64DfrqZ-%ucrutcF4tVs7s+q^5jw`A_gzIXre>=BvtQz_-o6~HaIV!-_ z#FY8{h;Q2V?@$+-s@XSI5_u|^n9xo9<2MDc=%Xagt)mK*7?oFY;HsP@i!86E93DgA zH4vEk1juG4rOc2gRamo)-ONd?>5ln|&h|V0Cgjzzm?Zf|_=gegT{rBz(RE z(Ea6$ow6foqwRGJCIM;H4D#{lkW!=drG+7UF&MjaJ@*jCm?wU1f_R-b)bSArybK5h zhf-K#4J1p^3M>o|82^N|gwRyp^BPD?RJJ;Bx;Ak2PH2W8KWD~1mB2YzJRTeqqbv9< z=)0#o(0wIOPCzDx6M|a`e|haaC#Lwk)j+ODjVSw+@WhA8VbSfINI06}F~-tMP(k%z zZ#rd`ZG3)@`)ILAwDS&t^nygyYbb?!7glUes|h=a{L^yi25hv1q)daN43qxQKsMWe zAN%g@=vmv+EOSIFiPe%|VrA@6SLo5GN!Q%k$kZAIJYeL=`n^@(%+dWh+lrFUVrYJIMu@0u z?Q82=HPjYLX5^Km!Pjfmdec%mV8+rwax@TQ4je4%T5}rrF#2(pOtg6;eHGSwy*ZRv z13Tz;@^E@wfb+#@qp6);Ls=Fy8Oe9Og5nQWtvbtux%B?YguTZ_?i$FR|gd85)>4FLhzFv;Z@kP1$8uY8Jg$s03_b-SmCl)596>C?`X|3VybL=H>AxCL$dk zdG_Zdc$TdvG6Sw(fVzZ3Aa0jCeW-^dp=BXwSp(Fj1|ZDW zNL$CY@`jFF1IcCRxWMv|o5nnLJc~t3vkJ*Wh>*!MBXa=>*LXgBi9HkZymaL4YeVqF zbU;3>IgV*}DAk7wQHy0TwSj`;KZ{ZZIB@YmUZXE_e#7P+hX@#adR>#;BB}DfSxJdl zzc1Lf@AH0#KSPw!Hz zLys1_>5ZN}UCJVu7YeX00$OiGyO+nmEc2%x`1$Y@<2eAXKFb1tgCFQK?rfQPeopjs z9OE{71U*%m^7Hq+%e*mt>DGy8t#&Q$+%e-dB=z}dA+c8Y1tTYFBX`{1*scKIApCn< zr84_j^HI~?iwcnKrb|r^dQdlTygzRkEa4XTk0(%YCo7bBQkK8{LbuaN_P$~SvqBRru=r# z;xYH-w73N!8044{X)D8NAT-KxS@Q}23-I^h|J;rL=h0sWP?}%= E1F;z+CIA2c diff --git a/doc/ZeroBuf.key/Index.zip b/doc/ZeroBuf.key/Index.zip index aebf4924e88db255a3ba0c338c279d94718b9985..088c1354199045accf967123b46bef444c3aee84 100644 GIT binary patch delta 11266 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 delta 11375 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 diff --git a/doc/ZeroBuf.key/Metadata/Properties.plist b/doc/ZeroBuf.key/Metadata/Properties.plist index 8c0c06a4e8241a235a9e42b113106ac5bc8e7752..0f1dc9a100cdbcedcfa8a9e5402c478ecc0b438e 100644 GIT binary patch delta 86 zcmcb@bcJa`fr_DtsfnYpnX9gop@pNaiL<$*uA_yai>|AalZms5k%gt1h3Uj82E?g* Gkplp~FBTU7 delta 86 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 delta 36447 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%0Dnu$<1(fpUr9VwUgWB@;>?LR&gBLsK?hh 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 Ughve|$%|7V32p7|4ptKX15t)y8~^|S From 7e8fe2de8fcf4a76c18aa5fea8fb4a8b38ff0050 Mon Sep 17 00:00:00 2001 From: Stefan Eilemann Date: Mon, 18 Apr 2016 21:17:06 +0200 Subject: [PATCH 3/3] Fix a bug in the Allocator with multiple reallocs --- tests/CMakeLists.txt | 6 +++-- tests/doubleString.cpp | 36 ++++++++++++++++++++++++++++++ tests/doubleString.fbs | 7 ++++++ tests/empty.cpp | 2 +- tests/nestedDynamicZerobuf.cpp | 2 +- tests/serialization.cpp | 35 ----------------------------- tests/serialization.h | 2 +- tests/testSchema.fbs | 7 ------ zerobuf/NonMovingBaseAllocator.cpp | 16 +++++++++++-- 9 files changed, 64 insertions(+), 49 deletions(-) create mode 100644 tests/doubleString.cpp create mode 100644 tests/doubleString.fbs diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 01697bd..8eb5154 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,18 +1,20 @@ # Copyright (c) HBP 2015-2016 Daniel.Nachbaur@epfl.ch -# Change this number when adding tests to force a CMake run: 0 +# Change this number when adding tests to force a CMake run: 1 if(NOT BOOST_FOUND) return() endif() include(zerobufGenerateCxx) -zerobuf_generate_cxx(TESTSCHEMA ${CMAKE_CURRENT_BINARY_DIR} testSchema.fbs) +zerobuf_generate_cxx(TESTSCHEMA ${CMAKE_CURRENT_BINARY_DIR}/testschema + testSchema.fbs doubleString.fbs) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(TESTSCHEMA_LIBRARY_TYPE STATIC) set(TESTSCHEMA_INCLUDE_NAME testschema) set(TESTSCHEMA_LINK_LIBRARIES ZeroBuf) set(TESTSCHEMA_OMIT_EXPORT ON) +set(TESTSCHEMA_OMIT_INSTALL ON) common_library(testschema) set(TEST_LIBRARIES ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} diff --git a/tests/doubleString.cpp b/tests/doubleString.cpp new file mode 100644 index 0000000..159c42a --- /dev/null +++ b/tests/doubleString.cpp @@ -0,0 +1,36 @@ + +/* Copyright (c) 2016, Human Brain Project + * Stefan.Eilemann@epfl.ch + */ + +#define BOOST_TEST_MODULE doubleString + +#include + +#include +#include + +BOOST_AUTO_TEST_CASE(reallocation) +{ + // Repro: allocator bug with a specific order of calls + // https://github.com/HBPVIS/ZeroBuf/pull/50 + test::DoubleString doubleString; + doubleString.setKey( std::string( 1, 1 )); + doubleString.setValue( std::string( 12, 12 )); + doubleString.setKey( std::string( 8, 8 )); + doubleString.setValue( std::string( 16, 16 )); + doubleString.setKey( std::string( 12, 12 )); + doubleString.setValue( std::string( 17, 17 )); + + // Try to find another combination + for( size_t i = 0; i < 1000; ++i ) + { + size_t len = ::rand() % 20; + doubleString.setKey( std::string( len, len )); + + len = ::rand() % 20; + doubleString.setValue( std::string( len, len )); + BOOST_CHECK_LE( doubleString.toBinary().size, + 36/*header*/ + 19/*biggest hole*/ + 40/*20b strings*/ ); + } +} diff --git a/tests/doubleString.fbs b/tests/doubleString.fbs new file mode 100644 index 0000000..a15835b --- /dev/null +++ b/tests/doubleString.fbs @@ -0,0 +1,7 @@ + +namespace test; + +table DoubleString { + key: string; + value: string; +} diff --git a/tests/empty.cpp b/tests/empty.cpp index c4e6c63..4941f50 100644 --- a/tests/empty.cpp +++ b/tests/empty.cpp @@ -6,7 +6,7 @@ #define BOOST_TEST_MODULE empty #include -#include +#include #include BOOST_AUTO_TEST_CASE(empty) diff --git a/tests/nestedDynamicZerobuf.cpp b/tests/nestedDynamicZerobuf.cpp index 381e16a..623f09e 100644 --- a/tests/nestedDynamicZerobuf.cpp +++ b/tests/nestedDynamicZerobuf.cpp @@ -6,7 +6,7 @@ #define BOOST_TEST_MODULE nestedDynamicZerobuf #include -#include +#include #include diff --git a/tests/serialization.cpp b/tests/serialization.cpp index 6d15c04..dfa2d6b 100644 --- a/tests/serialization.cpp +++ b/tests/serialization.cpp @@ -195,38 +195,3 @@ BOOST_AUTO_TEST_CASE(compact) copy.fromJSON( schema.toJSON( )); BOOST_CHECK_EQUAL( schema.toBinary().size, copy.toBinary().size ); } - -/** - Helper function to generate random size strings - */ -char get_rand_char() { - static std::string charset("abcdefghijklmnopqrstuvwxyz"); - return charset[rand() % charset.size()]; -} - -std::string generate_random_string(size_t n) -{ - char* rbuf = new char[n]; - std::generate(rbuf, rbuf+n, &get_rand_char); - std::string s = std::string(rbuf, n); - delete [] rbuf; - return s; -} - -BOOST_AUTO_TEST_CASE(test_attribute) -{ - test::Attribute attribute; - - for( size_t i = 0; i<1000; ++i ) - { - const std::string key = generate_random_string(rand()%20); - const std::string value = generate_random_string(rand()%20); - const std::string json = - "{\n \"key\" : \"" + key + - "\",\n \"value\" : \"" + value + "\"\n}\n"; - attribute.fromJSON(json); - attribute.compact(); - const std::string result = attribute.toJSON(); - BOOST_CHECK_EQUAL( result, json ); - } -} diff --git a/tests/serialization.h b/tests/serialization.h index d7cf75f..c28996e 100644 --- a/tests/serialization.h +++ b/tests/serialization.h @@ -3,7 +3,7 @@ * Daniel Nachbaur */ -#include +#include #define SETVALUES(type, name) \ const std::vector< type > name##Vector { type(1), type(1), type(2), type(3) }; \ diff --git a/tests/testSchema.fbs b/tests/testSchema.fbs index 931ba27..e7db480 100644 --- a/tests/testSchema.fbs +++ b/tests/testSchema.fbs @@ -1,11 +1,6 @@ namespace test; -table Attribute { - key: string; - value: string; -} - table TestNested { intvalue: int; uintvalue: uint; @@ -97,5 +92,3 @@ table TestSchema { nesteddynamic: [TestNested]; nestedMember: TestDynamic; } - -root_type TestSchema; diff --git a/zerobuf/NonMovingBaseAllocator.cpp b/zerobuf/NonMovingBaseAllocator.cpp index b988966..b8afc35 100644 --- a/zerobuf/NonMovingBaseAllocator.cpp +++ b/zerobuf/NonMovingBaseAllocator.cpp @@ -74,7 +74,8 @@ uint8_t* NonMovingBaseAllocator::updateAllocation( } // Check for a big enough hole - typedef std::map< size_t, size_t > ArrayMap; + //-- record allocations + typedef std::map< size_t, size_t > ArrayMap; // offset -> size ArrayMap arrays; // sort arrays by position for( size_t i = 0; i < _numDynamic; ++i ) { @@ -83,8 +84,9 @@ uint8_t* NonMovingBaseAllocator::updateAllocation( arrays[ offset ] = _getSize( i ); } + //-- find hole uint64_t start = _staticSize; - for( ArrayMap::const_iterator i = arrays.begin(); i != arrays.end(); ++i ) + for( auto i = arrays.cbegin(); i != arrays.cend(); ++i ) { assert( i->first >= start ); if( i->first - start >= newSize ) @@ -93,7 +95,17 @@ uint8_t* NonMovingBaseAllocator::updateAllocation( start = i->first + i->second; } + //-- check for space after last allocation + if( getSize() - start >= newSize ) + return _moveAllocation( index, copy, start, newSize ); + // realloc space at the end + if( start + newSize <= getSize( )) + throw std::runtime_error( + "Internal allocator error: allocation shrinks from " + + std::to_string( getSize( )) + " to " + std::to_string( start ) + + " + " + std::to_string( newSize )); + _resize( start + newSize ); return _moveAllocation( index, copy, start, newSize ); }