From 68f0d7b98f023eec5a698bc7feebc34bd296533f Mon Sep 17 00:00:00 2001 From: Geoffrey Allott Date: Sat, 3 Sep 2022 15:19:14 +0100 Subject: [PATCH] add integration tests --- Makefile | 3 +- itest/empty | 0 itest/random | Bin 0 -> 65536 bytes itest/repeating | 1 + itest/test_roundtrip.sh | 31 + itest/text | 1 + itest/yes | 10000 ++++++++++++++++++++++++++++++++++++++ itest/zero | Bin 0 -> 65536 bytes src/tANS.c | 25 +- 9 files changed, 10049 insertions(+), 12 deletions(-) create mode 100644 itest/empty create mode 100644 itest/random create mode 100644 itest/repeating create mode 100755 itest/test_roundtrip.sh create mode 100644 itest/text create mode 100644 itest/yes create mode 100644 itest/zero diff --git a/Makefile b/Makefile index 415b915..47cbedd 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,8 @@ BIN = src/tANS OBJS = $(patsubst %.c, %.o, $(wildcard src/*.c)) TEST_OBJS = $(patsubst %.c, %.o, $(wildcard test/*.c)) TESTS = $(patsubst %.c, %, $(wildcard test/*.c)) -RUN_TESTS = $(addprefix run_, $(TESTS)) +ITESTS = $(wildcard itest/*.sh) +RUN_TESTS = $(addprefix run_, $(TESTS)) $(addprefix run_, $(ITESTS)) TOOLS = $(patsubst %.c, %, $(wildcard tools/*.c)) default: $(BIN) $(RUN_TESTS) $(TOOLS) diff --git a/itest/empty b/itest/empty new file mode 100644 index 0000000..e69de29 diff --git a/itest/random b/itest/random new file mode 100644 index 0000000000000000000000000000000000000000..1f471884aa8595ca76dc4472300dfc8dde6de838 GIT binary patch literal 65536 zcmV(lK=i-UqUovv3I~mI5YF>vQt_D2nF*}U0;bLDcZH&C2F3E-Z5PSeW3P;#5e7ENb&&RJKT;5uo7eG>%?O*6&;j|sb>}Nzq zehzhEF_iI3kRr%HW2lGptC*Gfl})gdr}`;ENXo$}k+v$KwSR61@quh$@_AcT)n_7( z2UJ(g;zKFwWstoIPj^HEGx{eh4aeYJSiP8X?&3B;X@uk(HQ6D>+>Y*ZO4_95^B=+( znWzAckR@c5FWwzDGTi)d!nx^8Pdyps2V~kJHUa{NW;s{3D9C^<s_?xQtT3j+N_Earss?n&U<7fQI=(LN%Lz z_?lDFT!#>;_aSp|Dxz53)t0D1`&!niZVOR&8zmiOKbujtu}i1ab*HGWbq3KmAJr^f z+~5bt1zQ*3I9?_^Y(0^!sjk#Lh>e@=J>zhydrpEP83h|@%?tIXB%HC(^@XigqeyLd zoK6<$BD&AwWxK3KhsF@ebQ2qqS%f;u!l6s)4feIE4}*h{Sz$}#C15@^syI&mgW~f> zr_{Eh86WXY1%oGj*Z5WS9p`IPGd zJKN#kBmFo5#{L60`hcDTIod}MR6O)(NjL&|A6u}23~ogD%_Yb}A05Z$0|d3hc@h?7 zfOijQMdqc9uhTLnv#4@!k(yE(r)7gKy|j1Sd{LSl?V%Ok^#|v<9YhY^{&O)BY5I-? zq|R;6gMeL6qR>BBU&R@Z`EKgQlFa?Rh1&Gly&OTP6AMi~^m6}O0#F=Ix2vDhBBPW zx%4XxkCyH`)yrrIf)$WB55`q`mO<@5C^rJYgUd3<#nZUYj{`7(kKp%ZB;(l^W3?bH zQIg!ia;Rq%YWKW95H}PMD8O8o8kI-T7xxUW)|P2I9>5+g>CQ^k0aADuvtC$&K+}=d zrXC!7?KT=cFRJ_M&@^RE&y8e=U9FDb6U~Pq>C`_olj66vnlKI$VAF3;)Bb#6=^CW; zuZnwsKQH&w-U-tB9!e{MW)oOF)9TI}pGJ)dt(9RwLy*_kEj7c>9cNcTB*>+TJuX!j zCGf}O6oaHvdU6qX>Mz{Kg*8qWdMsE^m!x}Aysl4dQzhM7NlXX^@)jgd%tchandMfb4j(>^NvIq4pLQ5^qzQRhU-khb+?vvOLL_VlsC zF4Oxv1*SYxy_j?e-Au=0;v{OJXC5X&K%Ipr++Dp4E6=P?SQtKHObiccpY4OqA9~R4 z(h?1Ru!jP5^h5R5DNE3@Wgm3#wMDPK^tU?MT0kjK=O-}|)hAE)aF~k1ML?)WGwaB*7PEe@$UD zFLY&4QYhlh9^REc>R3U@7rYUw$Tg2IyJ`3!t8SG2ifVWJ`|d}gHeB-fbw8d`2kMNI zqZhhQ!xvmo(j)iqNNt5~uBbzd-)i7{o@RaP=|&6ob1vMO7ei-Bqfw!_T>1?;B^Z$u zAA5#gMe#>3MyH?5^|uw{PRWs|zve z*9aPw>>Mg!>i%Z$-kD-(zX#a1J9C{$bj@bC3&v#>_wzn3I$*UVWEJd%mW`|5&m&W& z>g(or)=xGRR|uLyez$loD^KDTZb^uL=l;ru5R&EVr#IFaxel7eMS$toWMev1g<6nJ zefRQTjIv`U*7bPQTIMy>o!h(NW)R>OUKpqDDZcS@i7%-u6+&+8S}bTB;y%eeyh!Qh zZKF49(-3PbFo?-f3_K3q<{l#bp892N%!yhu?_#Y$+gz?hXhHEc@k$>yHSNo5{qG+* zTm*%LKTUduj)(#yW|7hwfcJJjGrOECWN@A!?Js?irp^hy=?;YoHq-*8ZQ@E>1sXxT zJSLkxw6J=;qV_ll;N{PdoF12`eBUX?O?~1K|9(~ea`-Vf%y=eWZIgp50|wH<0>-$u z49vvBX@6C4>IEsX`nT39#Vkr@Dsdb%kS0nFu%_P%p0v+0;0d0(47x^%0VcBn+fKQtO~^s zj4KQGFw#58|1#V+8iAvc_+8YmAi8eL)89>Wa8gSILAb1(jpC6y0}Zua(u4Dc0_bl? z|7VR8NIqs|<0Xy2jek0*#R7R>CyU&2)GcnA%vx9C4+fd`YYK(2MFS-`n!jT2^k`%5 zK5I#VaoyJ9>mh)Cn>V+p*a#JAb2%yQpWQu>2-N86rxXVA34%^uxGxVSIFUxN6NlM! z($4d~i)Zvv#B}y@RcVK#>(XmI>5`(oJ_l0m0h*=R82ndkYT&UNBzo_ttD(KVl~K)C zp_WEH%DH05!y2*V9@-o;!kp?m=}aZ=Pk~XFyMgh-$y=oFk`A*{GUrWw)hw?NB%vF* zaa=lAKICiE1Z?HuqG1s^)%8#GcpQdim1Gf^xDO&>Bi5+%>lUkxb!w*$o@R!l^sY@2 zjZ&QIC`2JAsmZlCAoxT$&hDv8Ix|d({f|eS*Qb0Cl^ML3X%syc+`;AhN`1}P7T2xC zuhH**_vtFNID5MkCe2Z8emi{1`(;f3j>8=LS$HwzQ1`v&_m|6IU`ycl%E-!4ENnVC*_m{Kz~1@#{*$F6A(93@y{&L?PaX*|d7J7v2lI8Pq&p;E zrvPE*7UAuhY3y37Z9yuhKmNJS35tZfLcCNr2;S96^ima`^kMxu30VzSY6^+TSud3y zVmv5{A&};0qjn6Kp+hhRy9CE^99T5XwJ1M279f_)556|s!!0k(iY^VzPIyfNF0k0< zjGx=x3`%j(Nw+X@vn$%C>H-{(K$%Xc6f3qidI8BGvu~5Dl+f#61oCYiW|Lfbq|rqW zm{IT4D7_1S5Kyz|$>hu7S^`(Bg-L?m)}t^y={Zs7Tax^STf~Jswc!94fo4%(j&;05 zd%Q4NUc3SEN1RkNB7-f(?&)jwMzBnTho%Q8kghL2$iq&%&X3>YfiU93q)bdg@Sj?4 zK}r@dWh(Oy-(580LK9Q3ZDTb#TK5XyAB7ma=9FLT2E+3O9nXpW@2N^wKu%FsIqAlW z)qP09XrV0NRxjUZys(-|>|c%g4;Iu};J&Oxz)61-GN-Ju=(Bb(20~dLNHdId}CqUjrw`5%gnWB=YNtxXJ33{Rk;Q*pCqf*0VP!-Qy}1 z#z(~Wx#HRNhz@w_ol0)!;fPfr<=+i;;-mz}>oTQm;?;Hc#RhOqU_!P*;?|&EJdDHM7Cy)R$2K{TZYy*4Vv`6hKo4Z&)P( znb?FOZH9%UPEqp@=U=J{J$BEO`F}i^LFTS=@7lyjNz2ucHA)=viKLd(uT-7_FO+_| z7*j5Msa=s?9wuU0jQS38{h|<5SXO&tX*?K4D>9LFtNF3DYZx*89#hRM5t2>tt7 zV=KXp72dW62W~+Q3hx95GX=%mld9_5b{%PFP3Uem@xwJO{fRXZ? zQ&5yLtXMqx1^gz9<|^&#O9^FEgPTrS!o#j>OwLRIki{RGgfT>NU|{@Q1(f*K*$7s^ ztr}$=Fv1y3GW|ot$l|D(8~I$JoxOrjLJv}Omfs$O@O@nWf@CCtmJd($R8qpg^C9s$ z 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 pu2`4Xk-qF{-)Q&qJ2Z~US=54@I#Js&2; rm -f $TEMP" EXIT + $TANS -cs $1 | $TANS -ds > $TEMP + diff $1 $TEMP + echo "PASS: compare_stree_only_roundtrip $1" >&2 + rm -f $TEMP + trap '' EXIT +} + +compare_roundtrip() { + TEMP=$(mktemp) + trap "echo 'FAIL: compare_roundtrip $1' >&2; rm -f $TEMP" EXIT + $TANS -c $1 | $TANS -d > $TEMP + diff $1 $TEMP + echo "PASS: compare_roundtrip $1" >&2 + rm -f $TEMP + trap '' EXIT +} + +for FILE in $TEST_FILES; do + compare_stree_only_roundtrip itest/$FILE + compare_roundtrip itest/$FILE +done diff --git a/itest/text b/itest/text new file mode 100644 index 0000000..1b37687 --- /dev/null +++ b/itest/text @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/itest/yes b/itest/yes new file mode 100644 index 0000000..e9708f5 --- /dev/null +++ b/itest/yes @@ -0,0 +1,10000 @@ +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y +y diff --git a/itest/zero b/itest/zero new file mode 100644 index 0000000000000000000000000000000000000000..c97c12f9b0a24bfc19c74a2b265a97c924137775 GIT binary patch literal 65536 zcmeIufdBvi0Dz$VsTV1P3IhfV7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ u0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFi-;k4*&rG literal 0 HcmV?d00001 diff --git a/src/tANS.c b/src/tANS.c index bb3f1d4..e06911c 100644 --- a/src/tANS.c +++ b/src/tANS.c @@ -15,10 +15,6 @@ ref: https://arxiv.org/abs/1311.2540 #include #include - -//FIXME -#include - #define MAX_BUFSZ 1048576 #define INIT_READSZ 1024 #define N_SYMBOLS 256 @@ -83,6 +79,7 @@ static int tANS_compress_file(FILE* input, FILE *output) tANS_rl_encode_st_init(st, symbol_tbls); len = (uint32_t) fread(read_buf, 1, read_sz, input); + if (len == 0) break; if (stree_encode(len, read_buf, enc_buf, aux_buf) != 0) goto fail; for (i = 0; i < len; ++i) { @@ -109,6 +106,8 @@ static int tANS_compress_file(FILE* input, FILE *output) if (read_sz > MAX_BUFSZ) read_sz = MAX_BUFSZ; } + if (ferror(input)) goto fail; + free(freq_tbls); free(symbol_tbls); free(st); @@ -166,7 +165,7 @@ static int tANS_decompress_file(FILE* input, FILE *output) } tANS_rl_decode_st_init(st, symbol_tbls); - if (fread(&len, sizeof len, 1, input) != 1) goto fail; + if (fread(&len, sizeof len, 1, input) != 1) break; if (fread(&bits, sizeof bits, 1, input) != 1) goto fail; if (fread(&st->x, sizeof st->x, 1, input) != 1) goto fail; if (fread(read_buf + 4, (bits + 7) / 8, 1, input) != 1) goto fail; @@ -224,11 +223,13 @@ static int stree_compress_file(FILE *input, FILE *output, uint32_t read_sz) if (!read_buf || !write_buf || !aux_buf) goto fail; - while (!feof(input)) { + do { len = (uint32_t) fread(read_buf, 1, read_sz, input); if (stree_encode(len, read_buf, write_buf, aux_buf) != 0) goto fail; - if (fwrite(write_buf, len, 1, output) != 1) goto fail; - } + if (len > 0 && fwrite(write_buf, len, 1, output) != 1) goto fail; + } while (len > 0); + + if (ferror(input)) goto fail; free(read_buf); free(write_buf); @@ -255,11 +256,13 @@ static int stree_decompress_file(FILE *input, FILE *output, uint32_t read_sz) if (!read_buf || !write_buf || !aux_buf) goto fail; - while (!feof(input)) { + do { len = (uint32_t) fread(read_buf, 1, read_sz, input); if (stree_decode(len, read_buf, write_buf, aux_buf) != 0) goto fail; - if (fwrite(write_buf, len, 1, output) != 1) goto fail; - } + if (len > 0 && fwrite(write_buf, len, 1, output) != 1) goto fail; + } while (len > 0); + + if (ferror(input)) goto fail; free(read_buf); free(write_buf); -- 2.34.1