From 106bc327311d45c5c58b262e45df13d86fe59920 Mon Sep 17 00:00:00 2001 From: fanasina Date: Tue, 22 Aug 2023 23:11:57 +0200 Subject: [PATCH] add the others expects (EQ,LT,GT,LE,GE,NE), and change print verbose expect if test fails --- isgood | Bin 61944 -> 92152 bytes src/test_t/is_good.c | 9 +- src/test_t/test_t.c | 213 +++++++++++++++------- src/test_t/test_t.h | 414 +++++++++++++++++++++++++++++++++++++------ 4 files changed, 520 insertions(+), 116 deletions(-) diff --git a/isgood b/isgood index 318a0fc6c66b3af89152aab35b5b37191e794b8b..9007a8de4c079534ed21346d765286b2cd4fa140 100644 GIT binary patch literal 92152 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%0DBvT_10MR)_}@Jld$96Z zo{Vle13j7L>fn+DsL|&eXW^?D^UUcd$>|@b>FKvjj=&5DMoaYhz!*w-fvo0&4A)&` zDbs95P2JUz4dwz$>^wDiS@H(gs2~nz!&v1O+c&q`4JZXfl7H; zOjKgNOIn%vhHRNhiFPv+y;Uaa$=ENKB2K`Bdxe>6770D1m0!rMWKuU#Qn+d9fo0B? z4t=FVV?T$A(xHg7D6r|Wz@C#n^`uXIKcCMYFM;)$7__i%`8w}i(ZABK$ec$NX{Ye} zqV#JM^cPT+F185cmu?QHm4{`}sZjjV&3XLN4a{0c=Z)BpU?cA|{Jauz!@Goy2G zkRCqO4vym2cj&ul<@blb{|7BJjYb9gat*!s@h$od8d`7fPs#?>0^2F$4{K?wiq+QA z;kGQN6o_E(#pPN4dqsA1E~h91>yC+YJ$ej&3k92U%jm4MRz@f))CwvL$58K8HkMEq z6${lj%rDfw;B6g3U4aOe_=lSr4HY;v!p@F9OyQq;LWJEqdPPct2v;TmE|G*@`7@bf zwJo|d_3cfkz14vN!UfX2Uz1;8jTfY93)UL;3}a8mn(ji(?JI^Z4LhBC64XvA&7g~3Gp@pMq9{A81V6GbtPv$f^jre~0*;tV5X^k)* z3_7x>HAAZrS~y)Gi)k&$L7x^wB4b(IIq^A-%4JsipjRs zno2OKbxL~XhJGTvC-s>ddzH%bX%5yJ3tMb6 z8JuKWTYN&iSV_A6nhtDr_Gl`~#uY^~;vhZ)@)5unWMr?eSUIP?n0`z2n-HakA5fvI z3*$y&ElhBov_&AgT8P<0I^RjtscXTnVPwA+ltA=LELN~2*m=(qV#Zd4`NLBbCjC-N z`$xOEAR3|4ArG8nQ* zgx&U9Ary&|tt4&|P~q)_jqB&BNK_A@TN-O2%@anhC&`Gf(CbKt&C=mnKZilmA%=`l z|0l%<_QFq-ai;5O>67W_(-b~9{Oo-F6z|8ETO0~h!5O#^w%%JWhAGhNiAnHd8sh#s z@)&L&5yCn;YkG5GVm}~a0EaUT(71wE02gPEj>WExtrgrtOoeMbb%<#Hm zYBY^Xly})vaFK^w(NCwCx1zz!3&n$wzkr5sML(vd?)sjP0NxM=;#PF6GI@uZxStjR zN0FF}9%~?+UG!U@E%6yK7_71x;4m_Nq7eAmqyzp#W+HUQzKBQ9)2E_z*K6EeI#A#Z z@W*R`Nt(++l`bxFNggj*je4tdU*E0p5Ix<3LCEYuR3&$x3;jRPvm zm~LZS&yWVc{~-+U{hPp-TI7ZYG&=owin!+MC$9N~pY8512L+G^TQ5zQ2_xJi>#k=R z?-9bI+ttu%IO>b%^J_nAKJ>`ZgM@6Cf?nL&&FBO2GyJ1T2$_xoIw16#WxTa% zk_7{;}J>>f_p%i;v$B(M>FamCq>}|%Bq-$eAeRHMq2#Z z@QB4o=QHYLxDG*V7G&tIZ^RJzMLfn>6`Beex3i43;;|-{u>>Bw-ZD0u$0}LIHuKoI zIQy9;(^Z{kKiY>X!4<;YeX?7HyPIXV0(ak&T{m|ZQdf6f!`;)e`v7;pk==3J{Zw|B zad(I89^>vB*){Ti6Wy7%CsZ;12N*p(7Ef4QJ;sAHasJEpCj8>_$&=|#@+!LxDY=ej z(j;`3lAASOJn8u0?A%n?&Y02teV`3w&z2$O3C?%~oshuo8- zd(McD(7Bm9_KWtm@}>}%ZTP*VUbMWlyWsmC(3aes1vl6e?3;A$-quac{H-MMmIZBM zg{RzbDMahMkn(|2A;A#(b2O9q5$G>w+Am_l{5Sec*RFAhnttL$CqVptY)QN9EFju0 zM)6z8_?_e}Wx$ws2Tg}iLN|9S5FzLxUpFIAb$@YyOgOqo(Z(a`pxj+VSoC>E9*lmA1NlHhlTQ;g>IIK z*7pcZjra_}7JAm|{fSI1DH!mz{NT?CNSQ~^!0=%bd5(!3ecqQ=!e~CSiHX>u6N`G)9nH`aS<*5PtdU|X#ItxxkoIZ5oeSCn;Pf)~Xb#P^p2!R= z5e+4VSb{B)q?s|S{U>6eOUdZGOc6l_egS^`1#m(C8eEjkjJ|LYDjEtJ^y;{26g#V2 zGpVn$8UNWaN74;*5@^o-+QtHnEBj z20!H}`HK+LmmrLwAF8D{UoF*7 zTMSjdF+}?n;L2cn+^DNJVh@kl?zFr`oCsuC0x~H=CTP2wBg!IV!k>o=bJfQ{0#Z3Y z@>=NW7g57PZj@sx7uJ+I7fYcUxfnx~3*gEifYRo2gsyG#jzk>KKT`i0JYqP$`^fmh zBSQ+m@P2jr*x`{^iRKr1U+flL=D!w=jz1pyLGAqJm<)5M_SldW4CQJrWDXQ3K!97#hw<6H?ld< zhXHq(w*BazaT+V64ewMlY-m4j>jV?wE<|(y_*nX)X=^lnoR1_BWGjU!%gogtN zDHx+TZ9`)z&%6;k$hg>P`#(v^!(#pke~Xe4G5-}xw&TqZ{5Z$|jFJOl{=ZixaS#1h zD7jOH^gp9yGj3?HB!8<)I&}K4P;$Er=|4-!032_Jah()hU>wG$?iI(YI=zTT5jqUy z@f#t+7*nITRj$Ob?JTP@;pn%q)azI(e)<~`nH$SJnA3XV!=6f;EpF*;Cq52zBA&}Q zZ#1jP@zOV%OXutSSy4%s!PkWc{}H|(l7TwZ*FVNr9}&jo)Yskz{t>>`ocTXdUkyYU z6E35^UTOc2@HMSS90>o}`bxxMjO!jeQlO71^TklK+!V}vdfvfs^DnMICW=7DTwB}< z_tg@~wuh~Rq1S&C8|1l6(kz#^#wKPNGOm_BJ^f!OvcE&x10s+Kmq%KY`~MNr78L#; zskAjBkjt#JKcoK<(kjYW|M!RIq@Ts=U0$W--1m==cJQbFBb9bY1ag^`_T0Vy2x+&; zSpWBxw&=(IK&AD$=N}>MmxBLfrIp9q3R$Oy(8&{ziSVQf?>m^M&-?krI88oEmG4EW z8-Q~nk})-lTjeS&+X?hNda@VpC=9v^YBEms^x;ss5s*S$nS!!qlm<;IEz)T!m?K!J%9A_CyVTlwU*!M z^U-@;S+<+MlAmok-+~%3SZdEQWL&+?`GHp4=~>sM-cng=Po-^K^In9)N+Oa8M(r7~ zg6O|N;bU$8ISM=HU)sJGg@=@&zxZGB&>x|smHXnSQ~j`U2SqTI2H-YmN*NZ_=rquEMdy-j;1jb;$NL z_F%~K;<;`VfcYshMP`z2=ZEN9ff8g<7plX;1VZ!B5Ri*VmKvnklfvT!F zRi%0^pD2pp((Xl@el6DQ@-B9dv@8{6m%E!y&kIyvm%5wrn;CzHw7X5M?pJ5Q6Y7n1pz#IP={6-3W2%v5*eJrHN6M9>Y*dOTa zZZY-=jnR(odMix4ZMUr`wEI?Z9u((1>$_N&JQcxqm#~i0(jTGY-NOI$w5LM_tlzX* zlx-Gehz7mYNbk8`|2uua8XqYMM)%*>zYP4#z`qRq%YcP}AdNoGs$Q|tU1K9slE%iz z4UZo&BrUaHYSOTwP3pFCr^ctGx;t%K;cg_1`wbnInixOAUCh+oZ&1Iaq1ttiHfr6p z$&mWy3j;&kjU~+Rekm#O1KkNDh7EDoNpV-Iq&3n~Mhs|3bHt@KOiGCxG;G+w1_Llt zos?E}2DYk`5`hrf^-D@l8xddW;eN?!@$O*>t>9eg?g6Q3{gOp9di3!40jco=MW>RM zIwCDzOX!!J5)T{^Ph*F85&&$C2lgfMV5On4CKxG}zhK9~-^L?8Qi<0^cy!D7NA^pO z>pyH*a%pgz%GeW#CSi{Cge#OgqUg4-U*7^y%lK59VN7PBFODia3t4eNT zWiUpI;4U_TrS7k_ZL2kI&^V93$6CBq3)E&l7_qEA9tsujz}6hsMpZiMq#(5m%HnO?PEk?qYyQB zR~W|+)U1?Yyi)N=TWUjxi6fz&d)UzAG4A02Pc3fNxKRmXjY}BgRFmUVQeqSP4Yj7x zxT%Ie@l!A2Ij&gI#^EK8YiGTzS7$vwLyecvTWXJxjhZv{)^#QWtgrB+c5?xv`gh2_ z@vpFxt3}o=jB!H>y+H(7fPh$S(p}x~|HJtIXyf;=;T7I>jHPAUk-LxBb?p02%CI5v zsfk#B_oxxW@Gt6u)|=5~f20i1>#< zO!OwKaChm}$%^iXpPVM@Dh2z7bxZRL_P&QYMN2r--fv5esFR%F9+FZQ)hk~j9}dTT znf_*;?k;IVhZ3)Kj5r#UG@r6J?c5{!4Q+sJM?~pP9hQn+PPp3QjJdmOS9_iYywmy^ zany4sC#B$2;_e@xJZw}e!QYTdSTHv&bo700sgO@+;eB94jBO`=iseDMGp`rVqpjsI@*}~{-^JrME?xZd5b=mb=L67g@VAe{V%vrh zu(ggZ;kb0fOBxtAEFn%(8W%r0en1+I0=WffjWYrXf@O580q`qXhihv{AAY z9mFZ!y>W8~4f`$r-@@+Rk)Av5k?lf^)2onllg_%oTT?%Z`kFTP&@J988dSYgbfTV( zy72btPdfIG5%%%>_T3$HUD?)qgEg%N{#<2v9emwOMNM0Hi_aGUxdJi@GWS+|VFPT| zNBDf*(LV|~8Zz!SpKl)IWXN@puRtD#+yZ$XvO_(euLg)62H67gLVfr{-p~O4kTWBF zzE>buL2iWXgh$_bkdH%ZS7_QtcoWMF`4eOmM9$Q;O( zkY31xkinJV2N?lb6`#TJK;90S2-yiT9WoJe31lW@4rBs8J68ZX5i%@9(`Iz?`IY@IR$^F zeHOAN{t&%-RZaT^vKizv__O_3$N>rPhdc*42l69)yToe9K8f&$j7)+*SRA<6KEd<}9AA*)|60Tk*$i^VJorNn zcoF`P=OO1n?tcmXkONz&Vl^&9r!~IUIu^2d*6jWT3Mh&9+ZAwPob4%vMz_D#sLA7I~w{04Fz zy(U6lMKZRTfdDQ{S)?ukZ#C&pTHk7 z1F|pV8OTYHT|R|B9_(OgL*_X!i;SX8+2lzwohRlMbk09hho`uwI z$2t|jAM(~8;Sc#PWM9Z$KfxdJ8_0!_9e;*D)gP!np+x%0_`8!~|UTx?3 zlc8@2y_5e8=wG?1WPdk8UIzWE&_7 zY%6DsbIW zjix>a`tP9MZqsit^BpOT5A^4u z|H7uvHT8+muZ;HjUbN|Fn)-C;Z)@l5zXbYkp?C7nfxg%MKHq0H{Jkc=7y7CmpYJ)F z{%KPmTpr)A1-+Ah1oSQ2JNtW}Uk3f>HvErG{6y#nJm8~m+PAF#3{#&D{bA^x{Fgxg z?1Rq!InbBu;Oy^({zK@U<`2ex*r=m3{}IsVL;r#;{%6eiJ<#{<)c z6MComTLOKH7@zNH+x$>pea_tDTh@kh^hT0Y{;p9lKo z&^!4jLLcAV**_inFQIqxUjqHC9?t$b(3kJ&%)b}qq3<2%Tz|n=;Qj%6C;tfO zpY7}H?}0wJpL6{sLca-mr}|BYzEOW?|0U3$gx<+N2m0;zWj<2mqC&^y&{1oUlFoc%q}({oiP{u7~pEY-RG(xLwbdME!S(9=)lIMr_s^wmZ> z*RL1)4bVH)Z!m7sZypsOf9Q`u@5H|c`k2wq@h3uGag1~Qr9(d%ddK{sZ#~x8KL`5N z&^y(y7y6`e&h;0J=kQ0Nck+*be%2Gt{vPPdjd$iR5&93Icj7M{`bHC+{g*)hJ@iig zInei-={>n+t{=s-3Asu=r{v)8L=kreW=Yf75^iKYX&_6!e**_h6FZ4OK{Z-w6 zErEXK6zBTQf&O>sosM5G^ed+Z$p1=ByJebl{1MQ91^tV*_|*NI2m0<$Ir}F(K^zJ*i$ErI^7bm#iZf&P8yo&3Gf56W=%55|MJFQIqhF9P~mPdoGHfxdjEvwtG= zo1k~9-*o7k%y9N!0)0O8PX0O2_tBmC_d-wa=Q!1Ga5&z#fZnNoBcQ+kS!aI_^qZk~ zs^3KD6J|QsZ#wk3&^z(J1p4W-O3vSnn#_Uz0`xcgJ%cHGm3TZUo{tug&1^gyw$<<> z<~?L(yqDJIIXoM-VwC;de7;!^`U`V>z6Wgncbonlpuc6V&sWdpf0OB-41JU5eZC$x zfB7(po)OJ}{xRrvn|`W^zYO}r(7$8Tzh>(9LOz8>_yz2y9isRQ({yo~pDZ2q5`{>jjHpO5Faw)hgw_+~)=HuUXn z`Y2Ps4Ej%?f5@h9XX^JtAGE;dyVo{MP^D%w`Ln@#{f9 z0Q$q$XRc-UiwCZ>ejT8{Zn4joYl|;i#OKCXGV~uoztgIx=Y$^!6H%ixVUzs2&-bG( zhZAOuE1+-rrq8#+ic#h*lY?C7cSE0I^B-*b7eZfi2|nLo^`9u`cVjH<8a&U0zN9rE z7s|64Y?5HplLibP%g8qpNFNLR;sE+o=#N4Fh|Rx~nZq3DtH156Uk&|((D$(UtK;Y( z^iu=q&qBW`fWA5&D4&Bq$%fz8jISB=cP;h#;%xedO?@o%6QF<8rtf0vQ=wlEJxgDu8zZ&}0&?j5c=Sjv(VRuzJpa?=3djk zI^GlS1bqvuewgxa27N*R|5)f}L*Lr!KSKGZLjNxGk6QI*6hCvI_d*|G)yFCS)zB9P z@IMIs?aQzaSpCN;|Fh6{g1)y^UnW)3P`4B#IN{hVJ#AofGck*ureU(kl{;|-fLchs2|7vso zROqX2cJ`kG{V3?2{8vL?eT%dILFmUq|CVk31?K!`p%2Q!XF_fIai+d{Z9FT4-pRii z^aTO@W1)}P>b!ob(0>KJ%fP=3{L8@qzYO%n^Hh2zu?!8D{SGWI;8_#Bmf?8= zy`tPgXn)-*<+yrMKHo^no1046kL3cEM_ATqCiU(sr98Y^${;B;7dP-Wr+nf44tn8j zKk+*HrIfh!7q4~VAswFAaDOyQx^<>kqxupMw@Tv0aM~|_`G(QJ3i`|#Uies%c*T^L zl7*JX`bw;y#PQ*6Xz^lNG^UG3@mXzdHEJjw%5Z-L`{OaLc;VwL;)O?A;AF4@4dH`JEB|vw4teK?#7K9G;7ePe&aOJZ9Jh#lLn2N)#c&9*ipqd6XREz z$D6dq-vFRNIL1C>jHe6xaLqV=jq$h8C@KDx!oHeT_^q@wj^~X$9(KY$p3UQp{Kh}w z@faTG?M*wz^DC~BIC2*GZ%Oe)3Hz%x|Kqm3aKBPp z!EqWmy@Y)Y&Dj5p@evrWhI+WNvmAMj74(^L8h`6?`}h(bZyhJcUu658JYH*+91zdR z(WLh*2&ZR9IsOIP7h$|A>ekJ?Meuk9?5AWuK|BP~G{gRS9)DwlG<=lpoA7vRK97md z97ETR$8X@m(J>#r`t$gzmt=pg6xu{F&K--G$@b5TmxD$;OL+XTXXUuT+cqAbvs8}r zVX4t)#wjn)%W_=2pN6KF$7A=)adGd7W*O`wWdA2mDDEjSUQ3KiTkF5A*#4>}wRyI3DlG1IFD1;P*O&aZx{hIN88=YuDgHgA-!EIk!m#}zxD%< z8`pnEot)$G8#!?Cw;6B^!UY=flb>dv_j(?WX(z`&mqKgK7qG9jLR|Wzi+Vp=N!oYEA3jK5Nzq+fRT;EX5?CJ=cDk%$mC%0mK#sLLj62!e+< zhBZJ4Mjmq5xW~xq3X8I!#}&{1fBoNo@2%<{j_2$>XQuA`?q7fX^}nj_qi?ByJ_7vE zT%p$Z{Uz{k-5|Ky@onJmqruH+Dwpn5)?aJKuco`1ef6Jgfd`(VuDD{s@l zCwsRX+h@JB+e&yH`E#A;&paX|Ae8E-!OMnMC!Bw8Mz#nQ6T;t^$;2*u(<#W5m1&jZGh;X*=YA>!| z0H067PgI`Y0)K3Za3MFa+q=Lw{;M1#-IxpEZ_hj~xaOvgTR`xfv^hJ}8Q6lUyEqK9)z0;r!%1ioj$rJo7>KYImN{VV}K z`zFCv{w(kbYhC{9fj6TrS3Lc7lbZ#rIZ^%H*2p6z=R z1Vr=ZZ@}viD5|&Pj~4o&dBR8aa2D_jd7@66jwADdUwfi@@jiV}yR|a{}nRWggLUzYco& zVFmbXTqE??g3tAkXV+r_sNTK^`Y!nA&7l7#@T;E`K=rd7_?!m8HC~<~oW~J=UR1!m zX#dZJ{vIjJe#-|3vEmT;-#bS@)!ScykJ%=82kIO{{H-2fmotHX0_{$O-ci}< zQQ)&?3ceBie*yfmP65<^{s>&}->F^dj}`t8UnBJD4~-TF(^xSd^k*y-Q2ilEctea% zcZ;B(l@vtnwSn;ZF((Dp z|2YvMi7mgQPuM4*3CT*YI~`SP!eAhYv|J z=26h={ay8k*MZ-3rx4nA3TgLE;N!n9xP4cSc8?qJ$&zHO`EPk{dh;7`C_p9cON@PFCkzXSCD^+O@t2YUOv z1M;i8%L1sM{L0dUC{~Q2`-tp^>%Jx6EjV`y@Z-7!P(IUukDDX7jtiZ@o6Z$n`_*G{ z!Q%f1LI0JCpc;>xfd3wP$fD9J^mhve*nb9oALu``LI9QjY2at=5_~!6Uk3g?*jMN6 zZvlU6kq~Ns|AYLS^>gvdf@{0)kwdcGzvkKH2)a?m`28M!BH_&EG%r7V7Wh}1h5shV z*$Vv9Spw+1VinCp#KXd8k!F;2fpu0q11le4E%BEP4mDHfd9|e+;)G4 zacYE84R4>4!u%BUuc2QT1AiU(skaNT68P_cZ@5eVwfi-Q(;HtD9Og0a{G;gY+`WRU z{*NR%SfBTN)#Y;<@b8`_xc#O9?IwUvdq8lNry2N9mbrW`0lozTpz43u(bBH0{vO?* z83O&99}6FZfw_)w_J`e`KYSbX`)?9@waZT6JMR$u-=#3m0l)uCF8yzSzjKS=D9mBw z#ZUa}-*JSq-gaCk^lJChf$wd1@!7z)trmQf6lOW_3+@%*3&1nLKQ=>vlYp-Q{zh5= zwLAaL!p0Z;P37MTT%WgTp6BmnG5w@Rh0mqnzZdw^F9@Ld_7L#o6v34be`kyN=<`6u zkNv3NPtF#4)z4`bM`N*KHt5eU3b+a9mIGgib|(Pu0bXAgK=p7r@XD)#_k#Xb;2(#* zl>SE+2T`ne4)ixXAfV0z4+8(&je;LQoj(Cz@5y=C@uG*Tk$_bXCjsBuAq+Ny&vf9A z^$DPM>;!%u^r?2?-(Rr)AI5x4`CkFNX_fHNxa*)iz;QI<#nEQa@0}_12pjXrkwRbe z=zjqE+zz3?UkdX$@XJyH+zkA6;Kx8fmH+f(ME>HlLa2G^&!GQvPH^p4-N%H!_Zx!0 z1pa3Lp8$m^{rSN4`Lz1yV&Lm9a`|MG-m~KufdA%cp;!5@1%A|vE`FENFLn7p3|ya& zt33OFe|?|J=eNLL+a>r)Da`x8$HGwCfgg8*=w}25dGkYZ;#A;29g<_H$(&C(`$NBH z-$kHLFA{nk2iE}qCkUc^HUNKZv(UdJg}Dv**|;88`S*<%ImaW<>;(O8(C4 z;0qv#@_z&P&oKc}`o97{`OCuK74Z4UiPG-7z#*=g1pLK~LbwU^t-zOmQGi>3XMkS_ z``!$EoyBnwD{cY(cg_<~+Z}`*XTh)TL!BMUf13dIw=cB22Y4qKs9oLw-gmjn|L~K@ zzI2`Ck6-+I5Y8L3uM~Ri?^(c84T9V6Dbemc=0kq+sOKkbpntGY=iPL}~c<;Ozb297!4zn(9E$~kwe^!Ei^ z?`S@}8ua=ej^>T676;Q<@c`(rxJp3PGyjH!?S9uU1lRi&Zv)r&ew6<>J8z6J#%{vm zb>CJ5?RQ-SZ@B76=a z54QmCxkPZ)!^MPie9iIVs|fo35uraIh1mdnMZe3(bfrp_$%%pqf@IG?P)YU~0?L)a z-d_3wdpc9f^zjF{OF<+}D-LP26a^6u=2JnCn89^q_v~nQ zdbB$&+MOEhPKkD#qTR{SZlhgLBB)UJdxJ7Bypf_VRcO_RvIT=+L1**gmY}75eh`>o z{>t{|#jW$G{=)X9LCXa=d%^rp6D(}&nA_YIbSzlV)zTewH_vTr35=;W{HSqm#1hkD zB0;J^?-d37Y3v|dNG0Q>Eke4Wt)scy%W7h*9zGYfy0)`K|I|9;&97}%{vSK%{h>N{6XtN#>w018Jq5$n) zJdeY(J4q{dkWOf6he{|dE0$KyNEL@2DAZ}og)x5<%ZKM2eM4p8NpfNBgt2}#SSnF$ zTSs(E89BO&UmUEI9cg@DlU{~RIWktCvtrEeSV|#AUb}cnb7xD?F2ccsii4%TjD$$E zs>Sq3N{Y=$O24Djx@`ftFDn|Z;bgx1s>W0e__RCwi=q6QS{w9bD(sD+ZYG~CuI73H z;-|KHyp%yE46PJaaO~aujv81>nSfZ}Sf2Kg$X+ z%KO1&T2qBXLTEJvLWvy@06&|Is+Ktkt2j1AC+#@I;gHQl@yrq8xs6ShAty?^R<_7) zvc^%Mp5d#|Y1-xGbfk)*>R#e7;Os+Qk?LP-^%lCtR0%kn$axV6jL4Az)anq-YRWFe zGMOALlPuX3WpiVgH1j>0Gp#*z`4(EbCDeoZuSi$J;UzSSSh;|bLS~4v6sf!5CZD+B zXI2d~uELy=QW}tGw1Y^Mqo@XXbci=|cB~r+iO?~l4u)r(AzAHTT|v)$P~PKjxepgPD-d=$LM0jxElRfX^Le! z@}tQ9p`g8Xjj-NP)f-iTF@vBlSIA=y8JqoUKSU_9V7U;`nqg_0y?KhQ;m8<@*o-Mm zxq9)5w*WdQ%9pk&F3duusF{lijpzsBq?Bz+rR|7iXvX_n_o9fQ^R*>}W$s@*# zXDGX(SgoMZA;7NWW5-_3W@VO#W=|ep}OejAar6{xA-p%}IIT%xudrTfbDvL5#=oH^1OjXXUU-m2(OCZ~sf&Qg7cJ@@p>?NBO* z!Q|vsq*V34j_Cps-Fj^vG?75O;hWx(k9Hnm*f${OU&C!AI@kySg)qb6=c0 zG86)|5^E@fLmYJqA>|kV62^zD$xXGgixsm*8Wp#9>Nh$$Gj{DXH4;(HW!Y*5Nzr17 zmFT*ZZh?eda$L&snVF*yiKDysUh=dUYSqlt(FeR$C1O8u5{vau+vh6xjJ(K^Z*rp} zpk+{H^C;3k(C}W4K_ZYDd#EZ^tw*e$6$VIVs8UL%DnWiQXGcl8*=gtwD&2F{oG)-B zzT;P--x?m_2fRj#-!s*hmyr~%;hFJ!DVRi{u`q+wc3v4pt*q`%4m1+#PL+i05_fB% znNce?MAH}|YFEr;5 zV>P&i<30Ozs45*Hd~@rxvnH|Y_)g@xr%1|pOgPLOHC20gyq@@0`R|@mTOq>xy`i1> zx*_biBU-h(oKC^#gMe#2AJ|f((ca5_D^3T__!26?(Hmkcx({Fypv}jV-3})4Z^r`!pZ5VI-GYI z6_Yi*ONvmX`%)#RbCCu|$y?xnrc9zdoU0^zsH~Kv?AJY7t2`_=JhyccKjO6H{mF8_Nu-DK)P$6klAO6TQz{P>^3Fj(=SrDu zk}F`Zn5~!u`-n-g)Fmv}|z6tLiVO^Y78ODzyLlJr6Ba z{v*K0mp@53y>b%vU%&UEWf6?IkE}bbPp{wDjb8)cE^GVx{SYljJcWCQhTs3>Z*gdS z{r-lQQ*A5sO=^@%rzOAs!{7GMWBtB|mP=62mmjeCI_}(; zx%9`Ie!nCv(P6I7I`iw_K^T)L|M2|}ya&Sm9p8Na*+M7d^&3!6OT1nYvcT!EnR~qY zOX`JGOQlx^daULBUj5amuVn-JKU)0i_s5d=+mUiOx^*az+@*30e&2RsgUj31Ggj&m~oSILjr^ev+I)R$JuTlS8uneSuiwX* zgZgg^8=E7UpVm{p+X-V5t*_t9Xq+e&_i?4zruDTvg2>|ajXHdT)Yo>Dh1S#KV~C6~ zZNCBa>rlTjbPTD{pcPTpqy0t?*ZQCFaFI%6=2Lv^HDPPaLHjdKwTI^8R7|8lm0$Dk kQG}`NLMi`;=1NPqc>|!fue2Plwd$V`2;~H?f_G^C4=2R-?EnA( literal 61944 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 diff --git a/src/test_t/is_good.c b/src/test_t/is_good.c index 27e7c64..445bad1 100644 --- a/src/test_t/is_good.c +++ b/src/test_t/is_good.c @@ -116,10 +116,17 @@ TEST(){ printf("no test, only print\n"); } +TEST(lessThan){ + long int a=1,b=2; + EXPECT_LT(a,b); + EXPECT_LT(b,a); + +} + int main(){ //run_all_tests(); - run_all_tests_parallel(5); + run_all_tests_parallel(4); //purge_tests(); //run_some_tests(8, 1, 2, 2, 3, 3, 0, 4, 1); diff --git a/src/test_t/test_t.c b/src/test_t/test_t.c index a1fb10e..7180008 100644 --- a/src/test_t/test_t.c +++ b/src/test_t/test_t.c @@ -63,48 +63,6 @@ struct failed_lists{ }; -void append_failed_list(struct failed_lists **fn_failed_list ,const char *name_failed){ - - if(*fn_failed_list){ - - struct failed_lists *tmp_failed_l = *fn_failed_list, *rec_tmp; - - while(tmp_failed_l){ - rec_tmp = tmp_failed_l; - tmp_failed_l = tmp_failed_l->next; - } - tmp_failed_l = malloc(sizeof(struct failed_lists)); - tmp_failed_l->name = malloc(strlen(name_failed)); - strcpy(tmp_failed_l->name, name_failed); - tmp_failed_l->next = NULL; - rec_tmp->next = tmp_failed_l; - - } - else{ - *fn_failed_list = malloc(sizeof(struct failed_lists)); - (*fn_failed_list)->name = malloc(strlen(name_failed)); - strcpy((*fn_failed_list)->name, name_failed); - (*fn_failed_list)->next = NULL; - } - -} - -/* - * print all TESTs failed - */ - -void list_failed_test(struct failed_lists *test_failed){ - struct failed_lists *failed_lst = test_failed; - while(failed_lst){ - PRINT_HK_C(RED_K, HK_FL," %s\n",failed_lst->name); - failed_lst = failed_lst->next; - //if(failed_lst->next) list_failed_test(failed_lst->next); - } - PRINT_HK_C(DEFAULT_K, HK_EQ,"%s\n",""); -} - - - /* * global variables not exported @@ -181,8 +139,41 @@ pthread_mutex_t mut_count_fail_local; * end of the global variables of test_t.c */ +/* + * + */ -size_t id_of_thread_executed(size_t id_from_self){ +void append_failed_list(struct failed_lists **fn_failed_list ,const char *name_failed){ + + if(*fn_failed_list){ + + struct failed_lists *tmp_failed_l = *fn_failed_list, *rec_tmp; + + while(tmp_failed_l){ + rec_tmp = tmp_failed_l; + tmp_failed_l = tmp_failed_l->next; + } + tmp_failed_l = malloc(sizeof(struct failed_lists)); + tmp_failed_l->name = malloc(strlen(name_failed)); + strcpy(tmp_failed_l->name, name_failed); + tmp_failed_l->next = NULL; + rec_tmp->next = tmp_failed_l; + + } + else{ + *fn_failed_list = malloc(sizeof(struct failed_lists)); + (*fn_failed_list)->name = malloc(strlen(name_failed)); + strcpy((*fn_failed_list)->name, name_failed); + (*fn_failed_list)->next = NULL; + } + +} + +/* + * match the id global (gives by OS) of the thread with the local (the program) id of thread + */ +long int id_of_thread_executed(void){ + size_t id_from_self = pthread_self(); for(size_t i=0; iname); + failed_lst = failed_lst->next; + //if(failed_lst->next) list_failed_test(failed_lst->next); + } + }else{ + while(failed_lst){ + PRINT_HK_C(RED_K, HK_FL," %s, on thread[%ld]\n",failed_lst->name,id_thrd); + failed_lst = failed_lst->next; + //if(failed_lst->next) list_failed_test(failed_lst->next); + } + + } + + PRINT_HK_C(DEFAULT_K, HK_EQ,"%s\n",""); +} + + + + + #define INCREMENT_EXPECT(expect,name)\ do{\ size_t num_test=extract_num_test__f(name);\ @@ -252,10 +273,11 @@ EXPECTED_EXPECT_F(true,false) EXPECTED_EXPECT_F(false,true) */ -#define EXPECTED_EQ_TYPE(type) \ + +#define EXPECTED_OP_TYPE(OP,type) \ \ -bool expected_eq_##type(type var1, type var2){ \ - if(COMPARE_N_##type(&var1, &var2) == 0){ \ +bool expected_##OP##_##type(type var1, type var2){ \ + if(COMPARE_N_##type(&var1, &var2) OP 0){ \ INCREMENT(count_pass_local); /*++count_pass_local*/ \ return true; \ }else { \ @@ -263,8 +285,8 @@ bool expected_eq_##type(type var1, type var2){ return false; \ } \ } \ -bool expected_eq_name_##type(type var1, type var2,const char * name){ \ - if(COMPARE_N_##type(&var1, &var2) == 0){ \ +bool expected_##OP##_name_##type(type var1, type var2,const char * name){ \ + if(COMPARE_N_##type(&var1, &var2) OP 0){ \ INCREMENT_EXPECT(pass,name);\ return true; \ }else { \ @@ -273,20 +295,77 @@ bool expected_eq_name_##type(type var1, type var2,const char * name){ } \ } +EXPECTED_OP_TYPE(EQ,TYPE_CHAR) +EXPECTED_OP_TYPE(EQ,TYPE_U_CHAR) +EXPECTED_OP_TYPE(EQ,TYPE_INT) +EXPECTED_OP_TYPE(EQ,TYPE_U_INT) +EXPECTED_OP_TYPE(EQ,TYPE_L_INT) +EXPECTED_OP_TYPE(EQ,TYPE_U_L_INT) +EXPECTED_OP_TYPE(EQ,TYPE_SIZE_T) +EXPECTED_OP_TYPE(EQ,TYPE_FLOAT) +EXPECTED_OP_TYPE(EQ,TYPE_DOUBLE) +EXPECTED_OP_TYPE(EQ,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(EQ,TYPE_STRING) +EXPECTED_OP_TYPE(LT,TYPE_CHAR) +EXPECTED_OP_TYPE(LT,TYPE_U_CHAR) +EXPECTED_OP_TYPE(LT,TYPE_INT) +EXPECTED_OP_TYPE(LT,TYPE_U_INT) +EXPECTED_OP_TYPE(LT,TYPE_L_INT) +EXPECTED_OP_TYPE(LT,TYPE_U_L_INT) +EXPECTED_OP_TYPE(LT,TYPE_SIZE_T) +EXPECTED_OP_TYPE(LT,TYPE_FLOAT) +EXPECTED_OP_TYPE(LT,TYPE_DOUBLE) +EXPECTED_OP_TYPE(LT,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(LT,TYPE_STRING) -EXPECTED_EQ_TYPE(TYPE_CHAR) -EXPECTED_EQ_TYPE(TYPE_U_CHAR) -EXPECTED_EQ_TYPE(TYPE_INT) -EXPECTED_EQ_TYPE(TYPE_U_INT) -EXPECTED_EQ_TYPE(TYPE_L_INT) -EXPECTED_EQ_TYPE(TYPE_U_L_INT) -EXPECTED_EQ_TYPE(TYPE_SIZE_T) -EXPECTED_EQ_TYPE(TYPE_FLOAT) -EXPECTED_EQ_TYPE(TYPE_DOUBLE) -EXPECTED_EQ_TYPE(TYPE_L_DOUBLE) -EXPECTED_EQ_TYPE(TYPE_STRING) +EXPECTED_OP_TYPE(GT,TYPE_CHAR) +EXPECTED_OP_TYPE(GT,TYPE_U_CHAR) +EXPECTED_OP_TYPE(GT,TYPE_INT) +EXPECTED_OP_TYPE(GT,TYPE_U_INT) +EXPECTED_OP_TYPE(GT,TYPE_L_INT) +EXPECTED_OP_TYPE(GT,TYPE_U_L_INT) +EXPECTED_OP_TYPE(GT,TYPE_SIZE_T) +EXPECTED_OP_TYPE(GT,TYPE_FLOAT) +EXPECTED_OP_TYPE(GT,TYPE_DOUBLE) +EXPECTED_OP_TYPE(GT,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(GT,TYPE_STRING) +EXPECTED_OP_TYPE(LE,TYPE_CHAR) +EXPECTED_OP_TYPE(LE,TYPE_U_CHAR) +EXPECTED_OP_TYPE(LE,TYPE_INT) +EXPECTED_OP_TYPE(LE,TYPE_U_INT) +EXPECTED_OP_TYPE(LE,TYPE_L_INT) +EXPECTED_OP_TYPE(LE,TYPE_U_L_INT) +EXPECTED_OP_TYPE(LE,TYPE_SIZE_T) +EXPECTED_OP_TYPE(LE,TYPE_FLOAT) +EXPECTED_OP_TYPE(LE,TYPE_DOUBLE) +EXPECTED_OP_TYPE(LE,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(LE,TYPE_STRING) + +EXPECTED_OP_TYPE(GE,TYPE_CHAR) +EXPECTED_OP_TYPE(GE,TYPE_U_CHAR) +EXPECTED_OP_TYPE(GE,TYPE_INT) +EXPECTED_OP_TYPE(GE,TYPE_U_INT) +EXPECTED_OP_TYPE(GE,TYPE_L_INT) +EXPECTED_OP_TYPE(GE,TYPE_U_L_INT) +EXPECTED_OP_TYPE(GE,TYPE_SIZE_T) +EXPECTED_OP_TYPE(GE,TYPE_FLOAT) +EXPECTED_OP_TYPE(GE,TYPE_DOUBLE) +EXPECTED_OP_TYPE(GE,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(GE,TYPE_STRING) + +EXPECTED_OP_TYPE(NE,TYPE_CHAR) +EXPECTED_OP_TYPE(NE,TYPE_U_CHAR) +EXPECTED_OP_TYPE(NE,TYPE_INT) +EXPECTED_OP_TYPE(NE,TYPE_U_INT) +EXPECTED_OP_TYPE(NE,TYPE_L_INT) +EXPECTED_OP_TYPE(NE,TYPE_U_L_INT) +EXPECTED_OP_TYPE(NE,TYPE_SIZE_T) +EXPECTED_OP_TYPE(NE,TYPE_FLOAT) +EXPECTED_OP_TYPE(NE,TYPE_DOUBLE) +EXPECTED_OP_TYPE(NE,TYPE_L_DOUBLE) +EXPECTED_OP_TYPE(NE,TYPE_STRING) void @@ -361,6 +440,7 @@ stat_end_run(size_t ntst, struct timespec start_t){ if(failed_l != NULL){ PRINT_HK_C(RED_K, HK_FL," %lu tests, listed below:\n",count_fail_global); list_failed_test(failed_l); + PRINT_HK_C("","","\n%ld FAILED TESTS \n",count_fail_global); } } bool is_in_array(size_t *array, size_t sz, size_t num){ @@ -543,8 +623,6 @@ void head_all_parallel_run(struct timespec *start_t){ void head_parallel_run(struct timespec *start_t, size_t id_thrd){ clock_gettime(CLOCK_REALTIME, start_t); PRINT_HK_C(GREEN_K, HK_EQ," Running tests on thread[%ld] ========== ==threadID== %ld \n", id_thrd,pthread_self()); - count_pass_thread[id_thrd] = 0; - count_fail_thread[id_thrd] = 0; } /* @@ -558,9 +636,9 @@ stat_end_parallel_run(size_t ntst, struct timespec start_t, size_t id_thrd){ else if(NANOSECOND) PRINT_HK_C(GREEN_K, HK_EQ," %lu tests ran on thread[%ld]. (%ld ns total)\n",ntst, id_thrd, diff_timespec_nanoseconds(end_t, start_t)); else PRINT_HK_C(GREEN_K, HK_EQ," %lu tests ran on thread[%ld]. (%lf ms total)\n",ntst, id_thrd, diff_timespec_milliseconds(end_t, start_t)); - PRINT_HK_C(GREEN_K, HK_PS," %lu tests\n", count_pass_test[id_thrd]); + PRINT_HK_C(GREEN_K, HK_PS," %lu tests passed on thread[%ld]\n", count_pass_thread[id_thrd], id_thrd); if(thread_test_failed_l[id_thrd] != NULL){ - PRINT_HK_C(RED_K, HK_FL," %lu tests, listed below:\n",count_fail_test[id_thrd]); + PRINT_HK_C(RED_K, HK_FL," %lu tests failed on thread[%ld], listed below:\n",count_fail_thread[id_thrd],id_thrd); list_failed_test(thread_test_failed_l[id_thrd]); } } @@ -582,6 +660,7 @@ stat_end_all_parallel_run(size_t ntst, struct timespec start_t){ if(failed_l != NULL){ PRINT_HK_C(RED_K, HK_FL," %lu tests, listed below:\n",count_fail_global); list_failed_test(failed_l); + PRINT_HK_C("","","\n%ld FAILED TESTS \n",count_fail_global); } } @@ -604,7 +683,7 @@ void end_execute_func_parallel(char *fun_ame, struct timespec start_t, size_t id if(count_fail_test[num_test]){ INCREMENT(count_fail_global); /*++count_fail_global*/ append_failed_list(&thread_test_failed_l[id_thrd], fun_ame); - ++count_fail_thread[id_thrd]; + ++(count_fail_thread[id_thrd]); LOCK(mut_global_list_fail); append_failed_list(&failed_l, fun_ame); UNLOCK(mut_global_list_fail); @@ -613,7 +692,7 @@ void end_execute_func_parallel(char *fun_ame, struct timespec start_t, size_t id } else { - ++count_pass_thread[id_thrd]; + ++(count_pass_thread[id_thrd]); INCREMENT(count_pass_global); /*++count_pass_global*/ PRINT_TIMESTAMP_STAT_PARALLEL(GREEN_K); } @@ -674,6 +753,8 @@ init_parallel_test_() for(size_t i=0; i +#define LE <= +#define GE >= +#define NE != + +#define DESCRIPTION_EQ "equality" +#define DESCRIPTION_LT "less than" +#define DESCRIPTION_GT "greate than" +#define DESCRIPTION_LE "less than or equality" +#define DESCRIPTION_GE "greate than or equality" +#define DESCRIPTION_NE "inequality" + /* // F_OUT file (stream) to log #ifndef F_OUT @@ -59,8 +76,6 @@ #endif #endif -#define LOCK(mutex_var) pthread_mutex_lock(&mutex_var); -#define UNLOCK(mutex_var) pthread_mutex_unlock(&mutex_var); /* @@ -103,84 +118,383 @@ bool expected_false_f(bool val); bool expected_true_f_name(bool val, const char *name); bool expected_false_f_name(bool val, const char *name); -#define GEN_EXPECTED_EQ_TYPE_FUNC(type)\ - bool expected_eq_##type(type var1, type var2);\ - bool expected_eq_name_##type(type var1, type var2, const char *name); +#define GEN_EXPECTED_OP_TYPE_FUNC(OP,type)\ + bool expected_##OP##_##type(type var1, type var2);\ + bool expected_##OP##_name_##type(type var1, type var2, const char *name); + + +/* + * ***** generate signature of expected functions EQ *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(EQ, TYPE_STRING) +/* + * ******************** end EQ generation ************************ + */ + + +/* + * ***** generate signature of expected functions LT *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(LT, TYPE_STRING) +/* + * ******************** end LT generation ************************ + */ + + +/* + * ***** generate signature of expected functions GT *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(GT, TYPE_STRING) +/* + * ******************** end GT generation ************************ + */ + + +/* + * ***** generate signature of expected functions LE *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(LE, TYPE_STRING) +/* + * ******************** end LE generation ************************ + */ + + +/* + * ***** generate signature of expected functions GE *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(GE, TYPE_STRING) +/* + * ******************** end GE generation ************************ + */ + + +/* + * ***** generate signature of expected functions NE *********** + */ +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_U_CHAR) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_INT) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_U_INT) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_U_L_INT) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_SIZE_T) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_FLOAT) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_L_DOUBLE) +GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_STRING) +/* + * ******************** end NE generation ************************ + */ -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_CHAR) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_U_CHAR) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_INT) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_U_INT) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_L_INT) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_U_L_INT) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_SIZE_T) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_FLOAT) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_DOUBLE) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_L_DOUBLE) -GEN_EXPECTED_EQ_TYPE_FUNC(TYPE_STRING) /** * is_assert : 0 for EXPECT and 1 for ASSERT */ -#define HANDLE_EXPECT_ASSERT(type,var1,var2,is_assert) \ +#define HANDLE_OP_EXPECT_ASSERT(OP,type,var1,var2,is_assert) \ do{ \ - if(is_parallel==0){\ - if(expected_eq_##type(var1, var2)){ \ + if(is_parallel == 0){\ + if(expected_##OP##_##type(var1, var2)){ \ PRINT_HK_C(GREEN_K,HK_TR," 1 test passed from %s \n\n",__func__); \ } \ else{ \ - PRINT_LOC("Failure\nExpected equality of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ - ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ + /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ + ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ + PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ + ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ PRINT_HK_C(RED_K,HK_TR," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }else { \ - if(expected_eq_name_##type(var1, var2, __func__)){ \ + if(expected_##OP##_name_##type(var1, var2, __func__)){ \ PRINT_HK_C(GREEN_K,HK_TR," 1 test passed from %s \n\n",__func__); \ } \ else{ \ - PRINT_LOC("Failure\nExpected equality of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ - ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ + /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ + ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ + PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ + ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ PRINT_HK_C(RED_K,HK_TR," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ }while(0); +// *********************** begin EQ ************************ +// ============== EXPECT ============================== -// ============== EXPECT =================== +#define EXPECT_EQ_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_CHAR,var1, var2, 0) +#define EXPECT_EQ_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_EQ_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_INT,var1, var2, 0) +#define EXPECT_EQ_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_INT,var1, var2, 0) +#define EXPECT_EQ_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_INT,var1, var2, 0) +#define EXPECT_EQ_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_EQ_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_EQ_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_EQ_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_EQ_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_EQ_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_STRING,var1, var2, 0) -#define EXPECT_EQ_TYPE_CHAR(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_CHAR,var1, var2, 0) -#define EXPECT_EQ_TYPE_U_CHAR(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_CHAR,var1, var2, 0) -#define EXPECT_EQ_TYPE_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_INT,var1, var2, 0) -#define EXPECT_EQ_TYPE_U_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_INT,var1, var2, 0) -#define EXPECT_EQ_TYPE_L_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_INT,var1, var2, 0) -#define EXPECT_EQ_TYPE_U_L_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_L_INT,var1, var2, 0) -#define EXPECT_EQ_TYPE_SIZE_T(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_SIZE_T,var1, var2, 0) -#define EXPECT_EQ_TYPE_FLOAT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_FLOAT,var1, var2, 0) -#define EXPECT_EQ_TYPE_DOUBLE(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_DOUBLE,var1, var2, 0) -#define EXPECT_EQ_TYPE_L_DOUBLE(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_DOUBLE,var1, var2, 0) -#define EXPECT_EQ_TYPE_STRING(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_STRING,var1, var2, 0) - -#define EXPECT_EQ(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_INT,var1, var2, 0) +#define EXPECT_EQ(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_INT,var1, var2, 0) // ============== ASERT ===================== -#define ASSERT_EQ_TYPE_CHAR(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_CHAR,var1, var2, 1) -#define ASSERT_EQ_TYPE_U_CHAR(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_CHAR,var1, var2, 1) -#define ASSERT_EQ_TYPE_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_INT,var1, var2, 1) -#define ASSERT_EQ_TYPE_U_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_INT,var1, var2, 1) -#define ASSERT_EQ_TYPE_L_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_INT,var1, var2, 1) -#define ASSERT_EQ_TYPE_U_L_INT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_U_L_INT,var1, var2, 1) -#define ASSERT_EQ_TYPE_SIZE_T(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_SIZE_T,var1, var2, 1) -#define ASSERT_EQ_TYPE_FLOAT(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_FLOAT,var1, var2, 1) -#define ASSERT_EQ_TYPE_DOUBLE(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_DOUBLE,var1, var2, 1) -#define ASSERT_EQ_TYPE_L_DOUBLE(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_DOUBLE,var1, var2, 1) -#define ASSERT_EQ_TYPE_STRING(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_STRING,var1, var2, 1) +#define ASSERT_EQ_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_CHAR,var1, var2, 1) +#define ASSERT_EQ_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_EQ_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_INT,var1, var2, 1) +#define ASSERT_EQ_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_INT,var1, var2, 1) +#define ASSERT_EQ_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_INT,var1, var2, 1) +#define ASSERT_EQ_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_EQ_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_EQ_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_EQ_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_EQ_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_EQ_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_STRING,var1, var2, 1) -#define ASSERT_EQ(var1, var2) HANDLE_EXPECT_ASSERT(TYPE_L_INT,var1, var2, 1) +#define ASSERT_EQ(var1, var2) HANDLE_OP_EXPECT_ASSERT(EQ, TYPE_L_INT,var1, var2, 1) + +// ************************ end EQ ********************** + + +// *********************** begin LT ************************ +// ============== EXPECT ============================== + +#define EXPECT_LT_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_CHAR,var1, var2, 0) +#define EXPECT_LT_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_LT_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_INT,var1, var2, 0) +#define EXPECT_LT_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_INT,var1, var2, 0) +#define EXPECT_LT_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_INT,var1, var2, 0) +#define EXPECT_LT_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_LT_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_LT_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_LT_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_LT_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_LT_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_STRING,var1, var2, 0) + +#define EXPECT_LT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_INT,var1, var2, 0) + + + +// ============== ASERT ===================== + +#define ASSERT_LT_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_CHAR,var1, var2, 1) +#define ASSERT_LT_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_LT_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_INT,var1, var2, 1) +#define ASSERT_LT_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_INT,var1, var2, 1) +#define ASSERT_LT_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_INT,var1, var2, 1) +#define ASSERT_LT_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_LT_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_LT_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_LT_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_LT_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_LT_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_STRING,var1, var2, 1) + +#define ASSERT_LT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LT, TYPE_L_INT,var1, var2, 1) + +// ************************ end LT ********************** + + +// *********************** begin GT ************************ +// ============== EXPECT ============================== + +#define EXPECT_GT_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_CHAR,var1, var2, 0) +#define EXPECT_GT_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_GT_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_INT,var1, var2, 0) +#define EXPECT_GT_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_INT,var1, var2, 0) +#define EXPECT_GT_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_INT,var1, var2, 0) +#define EXPECT_GT_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_GT_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_GT_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_GT_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_GT_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_GT_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_STRING,var1, var2, 0) + +#define EXPECT_GT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_INT,var1, var2, 0) + + + +// ============== ASERT ===================== + +#define ASSERT_GT_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_CHAR,var1, var2, 1) +#define ASSERT_GT_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_GT_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_INT,var1, var2, 1) +#define ASSERT_GT_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_INT,var1, var2, 1) +#define ASSERT_GT_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_INT,var1, var2, 1) +#define ASSERT_GT_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_GT_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_GT_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_GT_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_GT_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_GT_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_STRING,var1, var2, 1) + +#define ASSERT_GT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GT, TYPE_L_INT,var1, var2, 1) + +// ************************ end GT ********************** + + +// *********************** begin LE ************************ +// ============== EXPECT ============================== + +#define EXPECT_LE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_CHAR,var1, var2, 0) +#define EXPECT_LE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_LE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_INT,var1, var2, 0) +#define EXPECT_LE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_INT,var1, var2, 0) +#define EXPECT_LE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_INT,var1, var2, 0) +#define EXPECT_LE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_LE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_LE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_LE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_LE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_LE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_STRING,var1, var2, 0) + +#define EXPECT_LE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_INT,var1, var2, 0) + + + +// ============== ASERT ===================== + +#define ASSERT_LE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_CHAR,var1, var2, 1) +#define ASSERT_LE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_LE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_INT,var1, var2, 1) +#define ASSERT_LE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_INT,var1, var2, 1) +#define ASSERT_LE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_INT,var1, var2, 1) +#define ASSERT_LE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_LE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_LE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_LE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_LE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_LE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_STRING,var1, var2, 1) + +#define ASSERT_LE(var1, var2) HANDLE_OP_EXPECT_ASSERT(LE, TYPE_L_INT,var1, var2, 1) + +// ************************ end LE ********************** + + +// *********************** begin GE ************************ +// ============== EXPECT ============================== + +#define EXPECT_GE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_CHAR,var1, var2, 0) +#define EXPECT_GE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_GE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_INT,var1, var2, 0) +#define EXPECT_GE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_INT,var1, var2, 0) +#define EXPECT_GE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_INT,var1, var2, 0) +#define EXPECT_GE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_GE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_GE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_GE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_GE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_GE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_STRING,var1, var2, 0) + +#define EXPECT_GE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_INT,var1, var2, 0) + + + +// ============== ASERT ===================== + +#define ASSERT_GE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_CHAR,var1, var2, 1) +#define ASSERT_GE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_GE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_INT,var1, var2, 1) +#define ASSERT_GE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_INT,var1, var2, 1) +#define ASSERT_GE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_INT,var1, var2, 1) +#define ASSERT_GE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_GE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_GE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_GE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_GE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_GE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_STRING,var1, var2, 1) + +#define ASSERT_GE(var1, var2) HANDLE_OP_EXPECT_ASSERT(GE, TYPE_L_INT,var1, var2, 1) + +// ************************ end GE ********************** + + +// *********************** begin NE ************************ +// ============== EXPECT ============================== + +#define EXPECT_NE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_CHAR,var1, var2, 0) +#define EXPECT_NE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_CHAR,var1, var2, 0) +#define EXPECT_NE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_INT,var1, var2, 0) +#define EXPECT_NE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_INT,var1, var2, 0) +#define EXPECT_NE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_INT,var1, var2, 0) +#define EXPECT_NE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_L_INT,var1, var2, 0) +#define EXPECT_NE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_SIZE_T,var1, var2, 0) +#define EXPECT_NE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_FLOAT,var1, var2, 0) +#define EXPECT_NE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_DOUBLE,var1, var2, 0) +#define EXPECT_NE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_DOUBLE,var1, var2, 0) +#define EXPECT_NE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_STRING,var1, var2, 0) + +#define EXPECT_NE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_INT,var1, var2, 0) + + + +// ============== ASERT ===================== + +#define ASSERT_NE_TYPE_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_CHAR,var1, var2, 1) +#define ASSERT_NE_TYPE_U_CHAR(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_CHAR,var1, var2, 1) +#define ASSERT_NE_TYPE_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_INT,var1, var2, 1) +#define ASSERT_NE_TYPE_U_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_INT,var1, var2, 1) +#define ASSERT_NE_TYPE_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_INT,var1, var2, 1) +#define ASSERT_NE_TYPE_U_L_INT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_U_L_INT,var1, var2, 1) +#define ASSERT_NE_TYPE_SIZE_T(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_SIZE_T,var1, var2, 1) +#define ASSERT_NE_TYPE_FLOAT(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_FLOAT,var1, var2, 1) +#define ASSERT_NE_TYPE_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_DOUBLE,var1, var2, 1) +#define ASSERT_NE_TYPE_L_DOUBLE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_DOUBLE,var1, var2, 1) +#define ASSERT_NE_TYPE_STRING(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_STRING,var1, var2, 1) + +#define ASSERT_NE(var1, var2) HANDLE_OP_EXPECT_ASSERT(NE, TYPE_L_INT,var1, var2, 1) + +// ************************ end NE ********************** /* * ============== bool ===================