From ec97c6023dda631862baab0aefc0189927cbf260 Mon Sep 17 00:00:00 2001 From: adrija Date: Tue, 20 Jan 2026 22:30:56 +0100 Subject: [PATCH] Final submission with tests, coverage, and tox.toml --- .coverage | Bin 0 -> 53248 bytes __pycache__/diffusion2d.cpython-311.pyc | Bin 0 -> 7237 bytes coverage-report.pdf | Bin 0 -> 104988 bytes diffusion2d.py | 13 +++- requirements.txt | 4 + ...t_diffusion2d.cpython-311-pytest-9.0.2.pyc | Bin 0 -> 2758 bytes .../test_diffusion2d.cpython-311.pyc | Bin 0 -> 2623 bytes tests/integration/test_diffusion2d.py | 69 +++++++++++++---- ...n2d_functions.cpython-311-pytest-9.0.2.pyc | Bin 0 -> 2941 bytes ...test_diffusion2d_functions.cpython-311.pyc | Bin 0 -> 2806 bytes tests/unit/test_diffusion2d_functions.py | 73 ++++++++++++++---- tox.toml | 12 +++ 12 files changed, 140 insertions(+), 31 deletions(-) create mode 100644 .coverage create mode 100644 __pycache__/diffusion2d.cpython-311.pyc create mode 100644 coverage-report.pdf create mode 100644 requirements.txt create mode 100644 tests/integration/__pycache__/test_diffusion2d.cpython-311-pytest-9.0.2.pyc create mode 100644 tests/integration/__pycache__/test_diffusion2d.cpython-311.pyc create mode 100644 tests/unit/__pycache__/test_diffusion2d_functions.cpython-311-pytest-9.0.2.pyc create mode 100644 tests/unit/__pycache__/test_diffusion2d_functions.cpython-311.pyc create mode 100644 tox.toml diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..e2acd64fb89db8ed37d0c853beb390ec60079548 GIT binary patch literal 53248 zcmeI)%WoS+90%}Suj`E+hYgA%6GF*cAdMQkxK#yh50JKzsHg;m7FEK+UEAY$TYJ~t zUFUH?$fZ(&BezOixWJ7AckcZQ5J$N6QdAI}+5^AeKKw}HzAjbm?<%(UF*7^!nU~j& z_md0fEnkYd-LQ#|qJ!a?;FFLIx;|+RM2i8ZeW|YF_H#5ekN;Y*_ zF+QJp)yQWzvVTv1pM58NY1-0P(*-(!1p*L&00hQHpnD;!=N1;!8(;Wlr73;atV%b0 zo;maJ`r5^HadGYR`E?QQ6NfT_mV92U3D?;YZRv`-)s(`rYgX0tEqg=w4H<{-c(TTG z7VV>1ivt#d_`FuOY81Jhts}l8nwA|D)AlUia%>^DWwqnW+P(!`Wwdx9yus2?T35J0SHhUl zxdwFlk@txi1&<=vDRZ_Hv-TtMsVQ=hXS>s?5c$w3^on5SH^e6P2X9%?kb-6NU~A0ORrxR(q!67EIK zrf}*(m*LnVtQ>01gMH>mjA6Rm(S#EPq?|t2*2bBoJcvrusSLNZpv8ESItYygaj<&F zu5wrLxC~WiQ@ZAcEJR1cVc~fPbB} zKd*Mf9>L=hKMo8Pg7@^hz^;kl$+O=!{f5|^civ4IUp|n^otht&an3@y$j_;pvxy+f zUu%JWiw1puXhT`%J^d_yAb0YcW|KyfwrRQ4WoZl!X8^$gYbFIYD^AA`+AnVg&6DSz zetyFQ`rENRg<1)MQ}_PJ@jQ#BRi3uIlkr}$+%P>Jg}h}^ah#?!?Qm|O80S1Xr{#$t z4|`{&cl&90JDkSG=5mmycyi%k{vvg{xPQ?~t7Y1?XujfUI82qse(s!no^TMMh+>&K zrAJ+KSDJC6(NP|;;`9q`GT~HPW-aXQTqy%7ZZ+hdUR z)s=KGnoEO>kyvAQuEJ#Arz7zg8kS~dS$kC5;VLc{`I)bhr}(X0cS+TAhYzdWPSk_L z!Kv)gJAsxNmo?f<47IFX2m6ieLmH*&Ez)4)V(^qtndZC zYCKTr4+{h!009U<00Izz00bZa0SG_<0^=v3sR>o*>;HuDhhqFiPgo!T0SG_<0uX=z z1Rwwb2tWV=5O^U4vI*^=5&v7rTeGURxDfphz}to5u|kpm$vAO-h-+|JMv%F>1z7^nwKf5P$##AOHafKmY;|fB*y_FwO#{WcQT% zOxM?szy8-wC%gL7CO&-qpSYat9#210{vLDvkNf|PbF)U-AOHafKmY;|fB*y_009U< z00N4pYRU|M|F0Sk75c*h0SG_<0uX=z1Rwwb2tWV=5P-lK3TWC)I{f|r9mV*^_}#cO zhJ{3tAOHafKmY;|fB*y_009U<00Ltq@RF8P)30m4{CWHKogcoPOTUt!?W2hs3-ve8 z{aW7o?cuzVn3|#ji>#VVr(gT|{+YwI?@r8xzyH6d7!QnpjeBDRf}%hG0uX=z1Rwwb z2tWV=5P$##CRHFsp9!d%7Q7@9N%|Zh`2Js+om3E%8v+o300bZa0SG_<0uX=z1RyXO z0{s0yuKy>au2D(|KmY;|fB*y_009U<00I!0Tmk<5Kd%2LxBgLb2tWV=5P$##AOHaf MKmY;|m<)mc0b2?M82|tP literal 0 HcmV?d00001 diff --git a/__pycache__/diffusion2d.cpython-311.pyc b/__pycache__/diffusion2d.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01034aeeacb5996b8e7fde6501d3d3024142bdb7 GIT binary patch literal 7237 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 literal 0 HcmV?d00001 diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1d399d4550c1b55d38a267ad52a86690062ff05d GIT binary patch literal 104988 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 S0^ekWVK977PFXcM{QnPKqwTB! literal 0 HcmV?d00001 diff --git a/diffusion2d.py b/diffusion2d.py index 51a07f2..1196c5e 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -38,6 +38,12 @@ def __init__(self): self.dt = None def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): + + assert isinstance(w, float), "w must be a float" + assert isinstance(h, float), "h must be a float" + assert isinstance(dx, float), "dx must be a float" + assert isinstance(dy, float), "dy must be a float" + self.w = w self.h = h self.dx = dx @@ -45,7 +51,12 @@ def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): self.nx = int(w / dx) self.ny = int(h / dy) - def initialize_physical_parameters(self, d=4., T_cold=300, T_hot=700): + def initialize_physical_parameters(self, d=4., T_cold=300.0, T_hot=700.0): + + assert isinstance(d, float), "d must be a float" + assert isinstance(T_cold, float), "T_cold must be a float" + assert isinstance(T_hot, float), "T_hot must be a float" + self.D = d self.T_cold = T_cold self.T_hot = T_hot diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8f87fb4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +numpy +matplotlib +pytest +coverage \ No newline at end of file diff --git a/tests/integration/__pycache__/test_diffusion2d.cpython-311-pytest-9.0.2.pyc b/tests/integration/__pycache__/test_diffusion2d.cpython-311-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0caf251e50a5bbe8ce896490e87f6538d0cc367 GIT binary patch literal 2758 zcma)7&2JM&6rWx1+GEFQz7s+la0!UI5L1i<2+|T13Q|=ewWOk0saA_;6K~=#X4fRP z?3M!uA2=ix5;;)GT+&qGkYkVi1A4F{OR+|(gw#XD%~gt2aq630@8Sd(81KBDc^^N| z%)a-VpS!yQ2-53{c`b`C zhT$zH{i#4KARrN4L&S3*5lQndbUD!L9)vcb+btF(!VMIbpY!SUu)un6WRiEaEBf4A z&d@XI=#_ZO(|QT5$?icIJVKharkF^C`zYoiB1nmN08e5)Gn!$x!#JTF!3&))VfS|s zkC54BTL;Z1bi0)VB9s8W1mGnJx=cJJFOf>VqEKmza{Li0ibYRRD$45;;6S&VfWTjL zX6^5y_o=)NNSiJi_@at?Kzn?J1sAdCTL-*N7ZW~(7dGxIr)LwqvqvgDr13COd0F3cbH*edG1M@v^rO>@5qn=%fvRG*b=IEqK2b&9IfK$GaTH(hqm#dwY!h= z8z*Y`Y#pDiI?pbw0L9(3g^62MTcCY&S^Z!65GXhz67i|$T?>dvM1JbsUkrfXv4r-O zw@4(@&-Y=s1&8+#@$D_j0$55Ov)l1Rh~T{*SI~EpCFw05AD84J(1?ZREy}HtujnQI z0wgI36d*B+zV=xG{<4INm~<^#e@=Zwwkc*#oCM8-6AwN$c{;b+0#6UCRob+U&L*h+ zr$vH59o>ahx0K&X9rK!-+KNLkZuFb^BBZ8CJBxIvau$izXQ7KjPipH4@YKr;MLmisuP=|%pY z7Au_D7~eYbYkw7oYIw4aC#!h!6*0{GHfT}9)jGaf#aAJ2@ZiqCsqKMNwSm+1fzxFS zs^Ry4`ug$B%D1(#NPR3)8;X&w$Ksqr6)lAf~+{}%TUf1mf!;;3gVvoYf6Lixh8VO$;0ww z6TL2MI1Ui*X83kaPr{XBu;5fSueh^O1+E~tO(J%VK_W(|wnTMPV}4h~e2y*v!B*0! z6w(eZc|KusI+x1k>0$UQ*41`b*;g^@xQs@pAJ@QdH(^3YPszI literal 0 HcmV?d00001 diff --git a/tests/integration/__pycache__/test_diffusion2d.cpython-311.pyc b/tests/integration/__pycache__/test_diffusion2d.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33c78538d6a357fa30cbd9fb7f0963061b18715e GIT binary patch literal 2623 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 E2Pf{u?EnA( literal 0 HcmV?d00001 diff --git a/tests/unit/__pycache__/test_diffusion2d_functions.cpython-311.pyc b/tests/unit/__pycache__/test_diffusion2d_functions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a5246af7e581444e3720ee3f19757612f407007 GIT binary patch literal 2806 zcmb7`%}*Og6u@Wp%M-H{oAA{@Q!AvwP6Ux0no1RFNJ(iWB-ASOBM510d6uxm*mQSE zv9+j3&B2EpdMX@p;6z=KLykT6Pp~bkSbK`pLz|l`noCZ7v-S=KZ-_eHeLFjE-rF}b zzj@}HDrE2?hNqYj*2F~-BLRJisPqU? zS;woAZ@e!ebO3j=EXq{4ixNuVdU!#%Y%8{$Gh@pe*|crsvR2H<#?qOTWyS91G7t4T z#`5xp1&ZXI@C#-?pTKV9v?|?l?LBbo>s*ZCbw_ zAqP8xBRbMP%+mp%D~uepCmi=Wt~sGqK8KFH4}A`Jzca14Z$~+8MHQHWP+=|{Yb!G= zdinuhk&bnkFtUbiq%uZ9*Jy4nWn@oS-)}}dIsI3&a@nt-=@*Qz7YwEOglw|GxX})0 zZWk=RZrY!Gw~@-YLUt4Ge1f==rDv91{Jo1;T!BI>&AVOt=DMD?b*e$PwwJuCSd1Ri z0*;YCv{zrxe7N)___mf()HGI?sBS&5bL&es0AOVAkFV$Lm0WgQ-_*^tVd-AGwX^}l z^{N`>Fj9>JJF%X32bc$~VR@YVVs_Mw@ zS5NMhx+>~qO`R;OlXW!`*bXYVjvx$lVhb>Qye&|I$__dMbw~vc);R3m8%NaNHV)q7 z7_)Er#SxxL`(S&(?LDYDyna9SbnvR5kdPyGKrMUe<#UeZ{{VV@C2tw&R7P7*nW;71 z23WWoldV$=@5pqkQoaQV3Dfz6;sI^;LLc)y2=`(e4*_o7Xp{5XnYEnd(@yP#WcDx@ z156AvKgV2C+hWtfcs2)_YVst`p=p{kDmnzZGT6DCi09E}% zMdk6idf%Y;PnE0c0DI=9g^`X8GnY$WV}L>HIgioJF?^JP(795 z1<2UJmlIGJw(+|qe=($cvsh5QXiEjKqq5Mhhw z#w{Q)0`F#&36671eXqs+^bgYs!BrN(U52{yg0_;g6N1SSyeFW}cD^V4WN&t{mJtwc ze_%wW3c7@Nya8OiVXYz4*8)Kg?tBBhT0et01$do79IKMp-i^}evrE7A zmPxEarfOuWOr|`gNBF|;eIDbpH8NW!vn<)3KUCvYHC|D#*3_%8DF`~(eMp9?WN0_K zJNaaA@4X6%*GRlf;?VuII#9#qZ41aLF443s>oSvqgVzh^DvOEX?S=S?Of`q~k$D~3*nYOsAQ~dZxFHBw nY9J;Qgd^KM>{mze^2w_qO<{<&Q~b128yNeCDgF)6dO`dLW2~2x literal 0 HcmV?d00001 diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ff..e2c66f3 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -1,26 +1,67 @@ """ Tests for functions in class SolveDiffusion2D """ - +import unittest from diffusion2d import SolveDiffusion2D +class TestDiffusion2D(unittest.TestCase): + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + # Fixture (Input data) + w = 20.0 + h = 10.0 + dx = 2.0 + dy = 2.0 + + # Expected Result (Manual calculation) + expected_nx = 10 # 20 / 2 + expected_ny = 5 # 10 / 2 + + # Action (Call the function) + solver = SolveDiffusion2D() + solver.initialize_domain(w, h, dx, dy) + + # Assertion (Check if code matches expectation) + self.assertEqual(solver.nx, expected_nx) + self.assertEqual(solver.ny, expected_ny) + + + def test_initialize_physical_parameters(self): + """ + Check function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() -def test_initialize_domain(): - """ - Check function SolveDiffusion2D.initialize_domain - """ - solver = SolveDiffusion2D() + # Manually set the state (mocking domain initialization) + solver.dx = 2.0 + solver.dy = 2.0 + d = 4.0 + # Expected dt calculation: + # dt = (dx*dx * dy*dy) / (2 * d * (dx*dx + dy*dy)) + # dt = (4 * 4) / (2 * 4 * (4 + 4)) = 16 / 64 = 0.25 + expected_dt = 0.25 -def test_initialize_physical_parameters(): - """ - Checks function SolveDiffusion2D.initialize_domain - """ - solver = SolveDiffusion2D() + solver.initialize_physical_parameters(d=d) + self.assertAlmostEqual(solver.dt, expected_dt) -def test_set_initial_condition(): - """ - Checks function SolveDiffusion2D.get_initial_function - """ - solver = SolveDiffusion2D() + def test_set_initial_conditions(self): + """ + Check function SolveDiffusion2D.set_initial_conditions + """ + solver = SolveDiffusion2D() + solver.initialize_domain(w=10., h=10., dx=1., dy=1.) + solver.initialize_physical_parameters(T_cold=100., T_hot=500.) + + # Action + u = solver.set_initial_condition() + + # Assertion: Check a known hot spot (center) and cold spot (corner) + # Center should be 500.0 (Hot) + self.assertEqual(u[5, 5], 500.0) + + # Corner (0,0) should be 100.0 (Cold) + self.assertEqual(u[0, 0], 100.0) diff --git a/tox.toml b/tox.toml new file mode 100644 index 0000000..46ed8ad --- /dev/null +++ b/tox.toml @@ -0,0 +1,12 @@ + +[tox] +env_list = ["test_env"] +no_package = true + +[testenv] +deps = [ + "-rrequirements.txt" +] +commands = [ + ["pytest"] +] \ No newline at end of file