From 2426088a05a74e2f4986f99aac5a8c05e61b6c56 Mon Sep 17 00:00:00 2001
From: Muhamed <Muhamedalici@hotmail.de>
Date: Sun, 25 May 2025 22:52:08 +0200
Subject: [PATCH] =?UTF-8?q?feat:=20F=C3=BCge=20einen=20neuen=20Test=20f?=
 =?UTF-8?q?=C3=BCr=20das=20Singleton-Pattern=20der=20Mars-Klasse=20hinzu?=
 =?UTF-8?q?=20und=20behebe=20fehlerhafte=20Testf=C3=A4lle?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .aider.chat.history.md               | 111 +++++++++++++++++++++++++++
 .aider.input.history                 |  27 +++++++
 .aider.tags.cache.v4/cache.db-wal    | Bin 1573872 -> 1907592 bytes
 __pycache__/Unittest.cpython-312.pyc | Bin 21971 -> 22901 bytes
 __pycache__/mars.cpython-312.pyc     | Bin 3070 -> 3070 bytes
 5 files changed, 138 insertions(+)

diff --git a/.aider.chat.history.md b/.aider.chat.history.md
index 746890c..94722ea 100644
--- a/.aider.chat.history.md
+++ b/.aider.chat.history.md
@@ -9964,3 +9964,114 @@ This JSON object represents a commit message with a type of "feat" and a descrip
 >  
 >  
 > ^C again to exit  
+
+#### Update the Unittest.py and implement a new test for the singelton pattern from mars.py  
+
+Ich werde einen neuen Test für das Singleton-Pattern der Mars-Klasse hinzufügen. Dieser Test sollte überprüfen, ob mehrere Instanziierungen der Mars-Klasse tatsächlich die gleiche Instanz zurückgeben.
+
+Unittest.py
+```python
+<<<<<<< SEARCH
+    def test_observe_returns_empty_list(self):
+        real_plateau = Plateau(3, 3)
+        telescope = Telescope(real_plateau)
+        telescope.plateau.grid = None  # Setze das Grid auf None    
+        observed_grid = telescope.observe()
+        self.assertEqual(observed_grid, [])
+        print("Test observe_returns_empty_list erfolgreich!")
+
+
+if __name__ == '__main__':
+=======
+    def test_observe_returns_empty_list(self):
+        real_plateau = Plateau(3, 3)
+        telescope = Telescope(real_plateau)
+        telescope.plateau.grid = None  # Setze das Grid auf None    
+        observed_grid = telescope.observe()
+        self.assertEqual(observed_grid, [])
+        print("Test observe_returns_empty_list erfolgreich!")
+
+    def test_mars_singleton(self):
+        """
+        Test ob Mars wirklich als Singleton implementiert ist.
+        Überprüft ob mehrere Instanziierungen die gleiche Instanz zurückgeben.
+        """
+        plateau1 = Plateau(5, 5)
+        plateau2 = Plateau(3, 3)
+        
+        # Erstelle zwei Mars-Instanzen
+        mars1 = Mars(plateau1)
+        mars2 = Mars(plateau2)
+        
+        # Überprüfe ob es sich um die gleiche Instanz handelt
+        self.assertIs(mars1, mars2, "Mars-Instanzen sollten identisch sein (Singleton)")
+        
+        # Überprüfe ob das Plateau der ersten Instanzierung beibehalten wurde
+        self.assertEqual(mars1.plateau.width, 5)
+        self.assertEqual(mars2.plateau.width, 5)
+
+
+if __name__ == '__main__':
+>>>>>>> REPLACE
+```
+
+Dieser neue Test:
+1. Erstellt zwei verschiedene Plateaus
+2. Versucht zwei Mars-Instanzen zu erstellen
+3. Prüft ob beide Instanzen identisch sind (Singleton-Verhalten)
+4. Prüft ob das erste Plateau beibehalten wurde
+
+Führen Sie die Tests aus mit:
+```cmd
+python -m unittest Unittest.py -v
+```
+
+Der neue Test sollte das Singleton-Verhalten der Mars-Klasse bestätigen.
+
+> Tokens: 27k sent, 527 received. Cost: $0.09 message, $0.79 session.  
+> Applied edit to Unittest.py  
+> Commit 26363e3 feat: Füge einen neuen Test für das Singleton-Pattern der Mars-Klasse hinzu.  
+> python -m unittest Unittest.py -v  
+> Run shell command? (Y)es/(N)o/(D)on't ask again [Yes]: y  
+> Running python -m unittest Unittest.py -v  
+> Add command output to the chat? (Y)es/(N)o/(D)on't ask again [Yes]: y  
+> Added 66 lines of output to the chat.  
+> You can use /undo to undo and discard each aider commit.  
+
+#### can you please fix the failing test  
+
+Ich werde den fehlschlagenden Test reparieren. Der Fehler liegt darin, dass wir versuchen auf das Attribut `width` zuzugreifen, aber in der Plateau-Klasse verwenden wir stattdessen `size_x`. Hier ist die Korrektur:
+
+Unittest.py
+```python
+<<<<<<< SEARCH
+        # Überprüfe ob das Plateau der ersten Instanzierung beibehalten wurde
+        self.assertEqual(mars1.plateau.width, 5)
+        self.assertEqual(mars2.plateau.width, 5)
+=======
+        # Überprüfe ob das Plateau der ersten Instanzierung beibehalten wurde
+        self.assertEqual(mars1.plateau.size_x, 5)
+        self.assertEqual(mars2.plateau.size_x, 5)
+>>>>>>> REPLACE
+```
+
+Führen Sie die Tests erneut aus mit:
+```cmd
+python -m unittest Unittest.py -v
+```
+
+Die Tests sollten jetzt alle erfolgreich durchlaufen.
+
+> Tokens: 29k sent, 213 received. Cost: $0.09 message, $0.89 session.  
+> Applied edit to Unittest.py  
+> Commit 564a782 ```json
+{
+  "commit_message": "fix: Fehlerbehebung in der Benutzeroberfläche"
+}
+```  
+> python -m unittest Unittest.py -v  
+> Run shell command? (Y)es/(N)o/(D)on't ask again [Yes]: y  
+> Running python -m unittest Unittest.py -v  
+>  
+>  
+> ^C again to exit  
diff --git a/.aider.input.history b/.aider.input.history
index a4903fe..b91ad8c 100644
--- a/.aider.input.history
+++ b/.aider.input.history
@@ -870,3 +870,30 @@
 
 # 2025-05-24 19:36:45.317709
 +es schagen immernoch 2 tests fehl, behebe diese 2 fehler
+
+# 2025-05-25 22:37:15.510250
++Update the Unittest.py and implement a new test for the singelton pattern from mars.py
+
+# 2025-05-25 22:37:32.464521
++y
+
+# 2025-05-25 22:37:32.472589
++/run python -m unittest Unittest.py -v
+
+# 2025-05-25 22:37:32.472589
++/run python -m unittest Unittest.py -v
+
+# 2025-05-25 22:43:57.989623
++y
+
+# 2025-05-25 22:44:10.449294
++can you please fix the failing test
+
+# 2025-05-25 22:44:26.378899
++y
+
+# 2025-05-25 22:44:26.386728
++/run python -m unittest Unittest.py -v
+
+# 2025-05-25 22:44:26.386728
++/run python -m unittest Unittest.py -v
diff --git a/.aider.tags.cache.v4/cache.db-wal b/.aider.tags.cache.v4/cache.db-wal
index 91d513c253eeedaf83abc69120a1753817d72d98..7992b02280aa6cd864b6958e9e0cbfac0d7755fa 100644
GIT binary patch
delta 24803
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
I6U^iP1B*Q5g#Z8m

delta 57
zcmV~$R}F(u006+0y+_NEhX@4laR~?_!Pb+|yZb%DwVysBu|z79E0ij=Myt~sjJ|#*
Kv&H&sA^rnFWfHmo

diff --git a/__pycache__/Unittest.cpython-312.pyc b/__pycache__/Unittest.cpython-312.pyc
index f33339448a8d7fc3bd69b3d71874450576363de6..1af38f4749fd023e053cce54075d26c16a174b37 100644
GIT binary patch
delta 1428
zcmZ9Me@t6d6vy9veXWn$vX=I({1EmQI!9qtTirC7!zqSQV+R8kaM6%LpXIss!R~u?
zT`lP_sJN)ByGsU}*^dz8u*M8uqKO(a-Tu%Rli_BVb;j_QnfeDh{Et7p=e1PkP2T68
zcfRMGd)~QCujkP}AEV0e>~<?d*OrNgM!xT!uY44-EFzs~)f)9pG6!0YH2YfgPWD@Y
zjMb(bbL?%F2ICM#f$e!xKU*DekXc79x!v>>@wRwKxb1#&uC86bw6zlHpEu{&bzbj@
z&71UV4{SsFDZj=dmCRSUi5Peuy+qD8HW&)|Cb*#}=zj)XYcYTLH<14AE`7)LRa8><
zJaUq=Oh7MbeQD=aRJ3DcX=jaob(g@R3BB<6qUpi6Xo!!;)eyN6PzBHcjez5T9N-<m
z34N*kI=c5wu#MDv$f#Rz{6C8Hhc=OiI~=;JV+vW`E@ocXbE$0ihh`AU>3==_JK8);
zWuFPdRzQu$UV1fbJWE!e>9#`;J~OU^TIcm=!vWR;8EHR3VSx;E+sJ&Eck6o~dnpQB
z49iiY^Es}R1)2bOUtjIAv%&{pmotiAnI{cBUsewzDy=OuHB9um(}0L`UwwO7i?UHR
z5BE*iIIBU7u`(!MiWxVp^Ri_xNA@*)9HtBxHRVfLh{=%4g1}}>B(lTJzGx+vEdu%3
zZX;g{E;hs6?XAcj;e6)gX?mPhEUi9C)x^;uF&x3Fcv!{<<MQx`7>TQ5udKx4k~XS{
za$+nlB_u_YC9H|Es`<<5SKb|x@EE@G#S2E2gfxOBEQujS)gnq-rU^+UCMjZ6mc&>*
zE79U*RZJ&o;_$(kG$bkimBcpMAFiZG2cWCgQZZUZ9gW8|y30{$Mx~9alB|eL<yL)r
zeHIL}!5l?_kEkkbIiwnwi>nTR)1u00X)sm#RTTKKctn#T$w1i(7R(8HZlJgYRk%rG
zTKGQ5cWHEFgAg&Ou8k<|CC=TR>|MSm=xwTpX~t1z#mczrrUTOvvTKUJ<*HpXS1gQE
z$PJLnDf2CdyJ#$1m<s!G`y2M0G`;_txBmt|V7M0f>IJ@fS~yofQ@>c#x=_=4@z4!E
zaFe%{m5uA9ANc@opoj1EZ6m+-OlB2o<3oTXAO(0CFb>E9UI9!3UIR=4jsZ>rP61{B
zX8>mb7XTLl9|ArCd_pnD7-t*v!th6k$uGSXXodXNtDz3^Twluix7%WFyW?=0gXE{a
z<d#oqP=QNCWCec)@z8p4-27vS(P%O*wc)Rby5Aoh=TI=0TJ$t6c$!uicw63WWjNbZ
a`Ug|ZP0o3=^Y!pV_|>ju6T{USb^Zm!!HnYo

delta 704
zcmZ9~Ur19?90%~7v%6909izN+wVK7$c8#QIqrey;F}7kRd&pVbhe2Ql8k}ZoMwS^B
zk!}4FDuQW@aI8P8^CA+xM^EB|u$Ov^Bq*{Tf<1J<+YstLe9rH8f8TTOxp05KWh({d
z_^7H|Eavrvcbxkid*e9Fc-cY`R#wJ!y-oJ;4;sz2*3p`3P*>2Y<@r}`#zoYm#N*v!
zzgftvJK$tVTJ{@koig<<dKGG=IZrbcy-hOP;$ZS!Tbgq*MDsqc+<nl)=#yF}f3{!d
zEJev+16>aoZ1kTg`8u`gP{um9nK_vZcGTi>;m||HK81r!(6DQ}JaeSLs{KHvZwYCf
zP06mKtJVWEW=!8C+(^5?Rxkp5APq9$0U+6ZY=znHp`Ia6c!%@<04+wFXg2JWsqk%P
zzhB+NBgKt+G5VOXjEtXHV|#MuShor+CFZNFwYE}=92v1*6|dKA!h>hc%cWR=vmAXp
zd3^74+-b&UWk3v`t(-Hj)Pk64U_lzaD%T3AH+EFN=><*3-&=e1eKdM%dh!Ai0$c*)
z;0m}3u7MliCb$LefV*H8JOWR^Q;-GEKpwmVuTAn6;YGa@;0LRq+05$Vcbe`?u?YR?
z8?&u9*li)2NQ~4M%~44iN)8SSN#%r_Es@sWuANs{C_T2?=wEL1|FWR_ae6Z)`gi>W
Dr~|!h

diff --git a/__pycache__/mars.cpython-312.pyc b/__pycache__/mars.cpython-312.pyc
index 35b6b396562a5a22ce1cad19b74e24da8df6e352..9b09376962bc66dccec427b8dd8137356eef0c80 100644
GIT binary patch
delta 27
hcmew-{!g6yG%qg~0}yc88ExdQU}kjQ+`?SN0RU(N2G#%o

delta 27
hcmew-{!g6yG%qg~0}wp;ZMc!Uf|)USa|?472LOHq2#5dx

-- 
GitLab