From a731d3ebc4c7b8313e0dc3829a357fc1b60541ee Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 2 Apr 2026 02:01:17 +0200 Subject: [PATCH] push de test --- .gitea/workflows/test.yaml | 22 ++++ .../Fundamentals/basics/basics.c | 96 ++++++++++++++++-- .../Fundamentals/basics/test | Bin 16752 -> 20608 bytes tests/tests.c | 48 +++++++++ 4 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 .gitea/workflows/test.yaml create mode 100644 tests/tests.c diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml new file mode 100644 index 0000000..aa1aff5 --- /dev/null +++ b/.gitea/workflows/test.yaml @@ -0,0 +1,22 @@ +name: Tests C avec Criterion + +on: [push] + +jobs: + test: + runs-on: ubuntu-latest + container: + image: alpine:latest + + steps: + - name: Récupérer le code + uses: actions/checkout@v4 + + - name: Installer GCC et Criterion + run: apk add --no-cache gcc musl-dev criterion-dev + + - name: Compiler + run: gcc -Wall -Wextra -I./Chains_across_the_Island/Fundamentals/basics/ -o tests Chains_across_the_Island/Fundamentals/basics/basics.c tests/tests.c -lcriterion + + - name: Executer + run: ./tests diff --git a/Chains_across_the_Island/Fundamentals/basics/basics.c b/Chains_across_the_Island/Fundamentals/basics/basics.c index 7910492..0165a96 100644 --- a/Chains_across_the_Island/Fundamentals/basics/basics.c +++ b/Chains_across_the_Island/Fundamentals/basics/basics.c @@ -1,16 +1,16 @@ #include "basics.h" #include +#include #include struct list *list_append(struct list *l, int e) { - if (!l) return NULL; - struct list *tmp = l; + struct list *tmp = l; struct list *new_node = calloc(1, sizeof(struct list)); if (!new_node) return NULL; new_node->data = e; - if(!tmp) return new_node; + if(!l) return new_node; while (tmp->next) tmp = tmp->next; tmp->next = new_node; @@ -84,17 +84,99 @@ void list_destroy(struct list *l){ free(l); } +struct list *list_find(struct list *l, int e){ + + if(!l) return NULL; + + struct list *tmp = l; + + while (tmp->data != e) tmp = tmp->next; + + return tmp; + +} + +struct list *list_delete_at(struct list **l, size_t index){ + + struct list *old = *l; + + if ( index == 0){ + *l = old->next; + return old; + } + + struct list *tmp = *l; + + size_t ind = 0; + while(tmp->next != NULL && ind < index - 1){ + + tmp = tmp->next; + ind ++; + } + + if (ind < index) { + old = tmp->next; + tmp->next = old->next; + return old; + } + return NULL; + +} +int list_remove(struct list **l, int e){ + + struct list *old = *l; + struct list *tmp = *l; + + while (tmp->next != NULL && tmp->data != e){ + + tmp = tmp->next; + } + + if(tmp->data == e) { + + old = tmp->next; + tmp->next = old->next; + return 1; + } + return 0; +} + +void list_print(struct list *l){ + + if(!l) { + printf("\n"); + return ; + } + + struct list *tmp = l; + + while (tmp != NULL){ + + printf("%i",tmp->data); + + if (tmp->next != NULL) printf(" -> "); + + tmp = tmp->next; + + } + printf("\n"); +} + int main(void) { struct list *l = NULL; l = list_append(l, 42); // l = [42] -> NULL + list_print(l); l = list_append(l, 7); // l = [7] -> [42] -> NULL - list_count(NULL); // 0 - list_count(l); // 3 + list_print(l); - // Here, you should call "list_destroy(l);" when it will be implemented to - // prevent any memory leak + // l = [1] -> [2] -> [3] + list_insert(&l, 1, 99); // l = [1] -> [99] -> [2] -> [3], and list_insert returns 0 + list_insert(&l, 9, 99); // list unchanged, returns 1 + + + list_destroy(l); return 0; } diff --git a/Chains_across_the_Island/Fundamentals/basics/test b/Chains_across_the_Island/Fundamentals/basics/test index 9c3ddc3737a9e44990216f443298fa32367e53c1..350dd97199f19c4f27e352cbfed0706dce767603 100755 GIT binary patch literal 20608 zcmeHPYm`*gl|HwsZ+A8Qq?@-v3I&6PuBt{LjffVHhQgrsC>X@(rMjxGK!qFLc2XHr(yxRztsObkd2*`MSS z`gLi2Zn%JikQfp#C4%&ubtPdJ!l(X`Q1Zf42w!k38tD9(w-HgZ~E}^v6BuJ3RF7_26IcL4V$Z z-sYhnWD&&Ao#uiNbQ6Iu_Mi)EsUnn2T-KM{Nfst9O!V(YSsaDXmoAD# zJd?>Kn3PZT=TM_UF_%v*brCbUc(OzEdGdFN9r+X)mddpz5?U(y^Qij{E-GcYsa8)W z*B#FkxMXK4Ur56*ed$79yqM^<61}O!`>mZF%y5BVe+g{yJjyY36WXDD@pKlH#ICrt zBMpbadjiE&FPh68gd`}pTx{61am`w5N$A?8c6LcHUM(?XJrd{fLV`s`vY2F8XrK|AdQvO!Ge! zRr**z zo#SMdgU)*%aRwc9=l-|ILB~L`Q^Y}^VpE0aaL}E8i#q7_4*r;f-r%5jIp~cJ`c?;B z4=Gu?-9evd|8l69%uae>(gTwonDoG(;DI-qF8^(8-~R++2h7u9Az}{<6@BG1v3>s* zpomt8^0IG(TweGhu1)iz$PwO4MI&d+NDH4MoVKu$GZOy>;k0#)3`zV+!fDGIIWF;k zBAm9Wkz*474B@o(jvSKsrwOMmYh*y;A0wQ$y^(&2KTJ4n?<3nK{vpC?D;w#O_N?m;k->uSqqo8}D=-}4%R|Lc-}8Tlc0 z^;@yQ(b&n?Z;YKB^T&)AVlTZ_oCXD3w1PnS?2e{+>&E4&egmsYkQJqCx5W0XngUJ{ z8$4HRh#gq<0+90bF+3|6PM|R_n47?8-2MD`eNm67*fEZizL6gAZh;PTd@we+XLzvm zYV1JgaBQ%1^ce~)pQY{`{`8rKz2E3D7Y(fFe6{pR61VFW;kg5<_dNN%QlZBp`R0r$bzHR0 zr?u7C0UAP3El1Kw%iB%K!xg43b=cpfq$-E~#pcO14grjf%E|Ew)Ob`b1aaiNC)>F( z=~-=6^^4b7`MTl-6FCApr9aM_6HFF+Bk`Ey*$d3-8jPN&apXNAmMOu}OW6x*9lUVR zTB-Qb2i>+`OV^AZkb|!2fux!nqkqJ>omrux)P2#WvAs*#O+res?h3f8S#B2-_Jx|S zP0vy&G<@z?Ig`c^G8jE$VhWtme zva48ZP{FyyK?-MST7N##&`u1hPwi|+P&*jZ=O=#2F zh`>vgbfOSS2twP5+qlfXlHT<;;@A80a``x5Y_wcH0=W7YX!p(UzYRVRd8kgTA#5)xMv?f-0wWN6<#P6B#dm*e*W`@}nq!1og4Y z{eNo^1L;43-`qFKWxAKQ%Y9$8<$nnBmr=gCqWo67{P&>$1m)!Garuwi1$uyZk81??L$-XZaRc ztlE$AttemMEVooSktopvstA6FP~>}j-+&k*8dZssA&d&#=fa7XI-dCHI{->Vqu*qj z^uVMCCOt6efk_WcdSKE6lOCA#0DFMH&*JZ~`1>pV-iqT-8Cye$af*2<+27*GyAC1v z8=Rv4jw>j+@LjV0o@>6w`Fp9^8t3oEw3z+9nT)By!{3R~{RAa#PWGg_CSqf#q&UkAJ_7D`Y3TNE^yl>@xRjLxRsPRw@X*&&kp$e zakt^+y5rVsc!!2NG~B7-gBpHH!^brInuafE_+J{nrs1zNblY{~4@KP+g$IKQa=%9v zDvoLTV;XAm1z@`_=W!U-9ADP-x0BzncI|b+MYw~zI@rD}v?SCXToPHbJhCLRLVl8~ zhMyWlztP{XeSpW1HpO58?)^+*Nap$ysB`@rX86TXT|SYxKVa5iWHr!eG|$ak58w~f zyav!%W#VI3V5ScY{^qLd0h(y`H~Xps4*^b@hf7ThWyO?rxCCl%rmLv#2JlzaoCjzQ z_>BPF=lgv%l5AApAu;o6QfpM-4QwhsD5(BA(E~OA4N!9h73Ph4Quqpf<}V?EIg@n1q?el%@|29D zcYxQ(h{t8Se205Q-4N)9zN^i=1tSL4O1w*{js=>DdD(Sf@*R#!<*5qg8I5f<(%GcQ)+^5KqUt*kd9So`nYMC- zOd%OZKc%d^ccE@P8t~r5+yHXKU2H?twLzlmlwN0PC{QwvKC4u81(k|kQMCZ{s5CfT zbIS)vl6xlRCz=&qpbg4qMMJ8xUD8XP>?PTd^|~R@`=8LTQ1-;V`iolm;7aO!Sm|A; zdqTNu;nmt*Xx74|)GYtu6MJi~g(u&|?UE)V6~1d9_uWRwObd{f;TBwwKB@p3{(WU~ znr`^kT4I|a=Z^1iQtF+}R^;P8VVKe@Jb{01tAa<&caC>~8FF?(%~VygT~@r-Rw<07 zm}l3`H&)iIsN2};!|3#xZi;__sH?l7&X32RRUzZX+5Sc?@XpyATc;W=HPKo3&oNlg_uru{4 z*@_mLsjZa_P}QGi6X7(c4RLQAsWG(@eByL_fO^_)3(zZnRG&C7(Z$|zQEHK$c?Gi!XS zTFq8Pxk(oJsv~9-5qyhV%zBww)M7T>Y1V(yG&Y%6gw5I$W}swFV>K-hnDT(x8a5l= zV>bF0H=EOakf^`gG`5+`BW6t?!WOogwXhkGN+T`iB4m6!P?Nb-lOLFKSS8i0#kXpj zS?^oiYEId2Hbf{hbBno9vY0aoe8`-gF{hEOCf}k~v;IqDa48JFIc~3|`YyA6pE+fp z*$^fbjdz%HAwlA>TT}fRb1vl{0a9NbmJN)UffJ@#@*;bs7gcN2D90JpKq~Yn*Q1^n8u^+X3IXa zcE4!`-ecDOD}fVc{R!v`1rGTZV5DYn!pDmD_ouKCP@YfK6masyDvE4sS5eZf9vs_| z%*j-tn9uDN+3viR%>fh1crmWZ61frrh*GwY?#ZT-L3zHV(2H|9L7PSq211|U+9lVz zqn}_~U$K-;t?Ef-Q~7iPXgr_jU8Rn)1>1UpZ9Dj6(5iScnNJl8%B(!3qp~SV4&$D;J% zBJH6}s+h9kMG@}J^`*j@QX*amugfJ$eW`4*5H2KgnRq&%3U_vG+`Kvrr{xRb{(P<{ zyk==Q)t@fL+xl?`Dc+XI_2HCID&JN}q*K{M3glc*TYF?_TYp<*N!yahwUIWdJk*C% zPnq!AUK}4PSn)(YS14G;-jubmkcnrL;q|3#GET;EVkxX%e2u^V3WdV>D;3i?%@i&b z^5Jwgktrop3c-P+a8Du;MlV>)VK|`=81`gKVHLgF{M7hDs8|mOEsPEhnZh4?qZGz zu2vMPA0>)r4ctZY`6WrjWeK(9WpUV!c89Z+db&-_n`MndcAN5<@C<4SxK$JBr_>`p2 z5sOw=(w~-kDrtnhY)+@GjwFm!Al3sto9p#;%2U*wwOCI$7 z9`r}Fe)o;ExIK|Cwuf?bG`2f!72`bugl?QR&fX5{_`zeV*k>i^=rJ9$P3H8OTPuk( zzS!kTy98~JwAUs>k%>9z6m8my=kxL17Pi0qZk+VRMrb8VeSLJA*n!DI#TBgj;H`zt zm<}9Mg|}^bx5mczPpeSsw$@pZNMywd3-us$qek1QWr(e)U6!@}w$(RxTAjD7ql42H zq9Cg?rirn2w+Uqj*dG(r2oh0Ero~#c#SDsJ4 z;E=J3a45#p(TtUHM{6= z9BbEop@TPlpj=wh(IbW(f?HL2ff1Ax`q;MJ2y%y4<<*IGj#(!<2Jdzn)xI0Cn>=2R zye#)VTP~}bOmVpR|8j0$>QoW62o-ks731B2#k_*OoXh5lsStv|PbcvSge+qsWLFEJazEn#-I}y|&BiubXhM4Ws)?>FaDIHPkTs6?r4y)S4z_U#$qFgs z=phlp+CvdFSX14l9_WZ?d$3SxG@ad%<9xikJD=Lg82&#;it}(LXNin%&pX!JKQ&A5 zSLjs%whx)S{%?yeMl4vFLO>BJ*z#WgM~9_|*O`_B!8gx2w$JZv81nlaw#)G?>xd$Q z2Q;>Qey_uj|4$7)e<#~4ub;V!7--mfY3i&-1!w%hGk|&?J zcxXDd5#+y77+qE6U#I0Bgi=I za~#aDff+S)*Z*T$p8YR^no+}l(I^8=W>kC{IkM04e1F97ew$Ne-1eVv$#=|Gd<=g` z${mUOk4aA=xUpq%=I<{%}0FUa@0E{TqWo_mOJkqq`97Baf0lFo0h?`~ z$DtqnLtVu3{Qp3P!o)4aA_eR#*V~3Jd44ZFtmOx6NtLnXG<~W|ejus}1|kX`Q^39k z?VQTYggoiw`t$u$uw9k2Jr<+3I@3F}eQnMzVtM!a!SW0jYI$2wXI5(aZoMqW{7XIL z->>BtxdyCTKI$R=@ny}-ZW>Acgf>Q`)4VV!^a9>(THf8xFRV}k_qdcZ z$}r_2KV_wor`Lnd#HbUxswmlm*J~-gFks6bv$;ogapAg3j0S_A=_nM UdQ9MAkwvFF6-UV>;6la!0qOUPNB{r; delta 2817 zcmZ`*eM}Tb6rWk{;O@f7-ErrAh#U(_jn=#K8rk!mh$@imwUk;rSu{5nYdV z=4&k>5J$r1OVK%6-CwA8*zqNS)$H~fCTM@2pq&C?)TT|)4o}e9;7xOxmxqhS@kDeg zn=J)?G`pz@?wEttR9&pqc~EU}_wLA1QV!aB4%(+xS&f9Ku7?3aM(P7;{yiE?IS_6L z5~3V1Ze)=Eq}ipk8?PZr`KZ6ytPZF7cQN7sN95;g{6+I&n>~Xbh5h!-IggM}S{AHT zTEpvEQ)#=?Y*pIB%#P|(u#Rt1RrP!0l>iLd^JcW}jFT2iA2a;NO~!98jVo=XiL>lX z&oMv7yCB0+<}m%Es;GR@zV>!ol}TycnSd5YE)Bt_jyco-7afhJ!++}(P~9`=HmFNq zN7LbS`Yd`Georr>#W34BTYB#~RJs?^B4~G(N~5E2)tO5Ho;n+8J=D8GbP*hOZOH!h znQlsH#~u6-KZ8qVle2aMs{W)g_{rz5IWdazHk708EIR^5ILw9TuutM`&&P-E#J0B8 zO9N}sG4UB_Dqf4#>jUIrTIMsQ^)Bx0f@z@l?VPX7EWB6KX-Uhf&<@5i$w;UwJF63j zjfh9@tLh1c4^;IE;=+fjdKdBPh^nTd>-IcS)fW+m5GxRak8vD@#d7xaJT#GuR8o?n zCC>~t9KYB-RgFQ5oFm^y24Vg$nqu24t*|Cbqp2wv@EIuDf!`pUmiRCKZ;;do4M8ExrAg{dC?~O7c__DaTgA%2M7C z{W7>T*KaT3iJYZza2xP+uAg>-H{iF6BxVa|#RSoSpDNIR^;T#L6iWRBE(bERpYV(o ziEH8waa$w^Sb_m*C>fRpGp#*53!kd$cG7Xu5B-+S5D(T^^jRz@~kPzBKY|Y+YZta>=m!IP5@0d3F8`mD^!G|u;${jA> z&(|Pcze3y*+o^c@wT!|M545?gOeOhUS{n+5^7Cs$kh)^S)cSX}Y$3HsWY44@dnG{Z0ieXpTu+&LmqY|(y_#Uw$a4U2xLA%H>f!T0N30j7D-eDU0 zqKoZgNy?Ko0kYzT_oE(%NN0hV<)33T#Xw#ebchoZ2u9erGGGxwQ!*8ftPHq#0FOl` z$-+f;oJ@zFGSflHFq5tM2!8BX&_P-e`6O@+$mKzMO_r_|SO9h9LCg407aS>HY#sk4 zLo#$2(;-owWfuPwG4NI_F^gZAPI$Fq$=Ka?jQdU~MI3rn2(DKymk@j}=R*G~kE=;=`GHKwp)UAq)g1G#MY +#include "../Chains_across_the_Island/Fundamentals/basics/basics.h" + +// Test pour list_append +Test(basics_suite, test_append) { + struct list *l = NULL; + + l = list_append(l, 42); + cr_assert_not_null(l, "La liste ne doit pas être NULL après le premier ajout."); + cr_assert_eq(l->data, 42, "La donnée du premier nœud doit être 42."); + + l = list_append(l, 7); + cr_assert_not_null(l->next, "Le deuxième nœud doit exister."); + cr_assert_eq(l->next->data, 7, "La donnée du deuxième nœud doit être 7."); + + list_destroy(l); +} + +// Test pour list_count +Test(basics_suite, test_count) { + struct list *l = NULL; + + cr_assert_eq(list_count(l), 0, "Une liste vide doit avoir une taille de 0."); + + l = list_append(l, 10); + l = list_append(l, 20); + l = list_append(l, 30); + + cr_assert_eq(list_count(l), 3, "La liste doit contenir 3 éléments."); + + list_destroy(l); +} + +// Test pour list_insert +Test(basics_suite, test_insert) { + struct list *l = NULL; + + // Insertion dans une liste vide + int res1 = list_insert(&l, 0, 100); + cr_assert_eq(res1, 0, "L'insertion à l'index 0 doit réussir."); + cr_assert_eq(l->data, 100, "La valeur insérée doit être 100."); + + // Insertion hors limite + int res2 = list_insert(&l, 5, 200); + cr_assert_eq(res2, 1, "L'insertion hors limite doit échouer et renvoyer 1."); + + list_destroy(l); +}