diff --git a/ci-reports/markdown/TEST-REPORT.md b/ci-reports/markdown/TEST-REPORT.md
index f0b8e1de..454f12fd 100644
--- a/ci-reports/markdown/TEST-REPORT.md
+++ b/ci-reports/markdown/TEST-REPORT.md
@@ -1,5 +1,5 @@
# ๐งช Test Report
-*Generated on 2025-07-14 14:43:16*
+*Generated on 2025-07-14 14:49:21*
## ๐ Summary
- **Passed**: `31`
@@ -7,7 +7,7 @@
- **Xfailed**: `2`
- **Total**: `43`
- **Collected**: `43`
-- **Total Duration**: `0.315`s
+- **Total Duration**: `0.336`s
## ๐ Tests
@@ -23,7 +23,7 @@
โ
#1
- **Status:** โ
`passed`
-- **Duration:** `0.000583` s
+- **Duration:** `0.000756` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -32,7 +32,7 @@
๐ Duration
```
-0.00464572396595031
+0.004617957049049437
```
@@ -51,7 +51,7 @@ passed
๐ Duration
```
-0.0005834490293636918
+0.0007563600083813071
```
@@ -70,7 +70,7 @@ passed
๐ Duration
```
-0.0015040939906612039
+0.001968709984794259
```
@@ -93,7 +93,7 @@ passed
โ
#2
- **Status:** โ
`passed`
-- **Duration:** `0.000364` s
+- **Duration:** `0.000401` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -102,7 +102,7 @@ passed
๐ Duration
```
-0.0008129210909828544
+0.0008771360153332353
```
@@ -121,7 +121,7 @@ passed
๐ Duration
```
-0.00036360800731927156
+0.0004011469427496195
```
@@ -140,7 +140,7 @@ passed
๐ Duration
```
-0.000704035977832973
+0.0007910049753263593
```
@@ -163,7 +163,7 @@ passed
โ
#3
- **Status:** โ
`passed`
-- **Duration:** `0.000371` s
+- **Duration:** `0.000389` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -172,7 +172,7 @@ passed
๐ Duration
```
-0.00019856798462569714
+0.00020500796381384134
```
@@ -191,7 +191,7 @@ passed
๐ Duration
```
-0.0003709479933604598
+0.00038874102756381035
```
@@ -210,7 +210,7 @@ passed
๐ Duration
```
-0.00021130393724888563
+0.00022134999744594097
```
@@ -233,7 +233,7 @@ passed
โ
#4
- **Status:** โ
`passed`
-- **Duration:** `0.000211` s
+- **Duration:** `0.000257` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -242,7 +242,7 @@ passed
๐ Duration
```
-0.00018894602544605732
+0.0002105889143422246
```
@@ -261,7 +261,7 @@ passed
๐ Duration
```
-0.00021124305203557014
+0.0002573719248175621
```
@@ -280,7 +280,7 @@ passed
๐ Duration
```
-0.00020395196042954922
+0.00020847294945269823
```
@@ -303,7 +303,7 @@ passed
โ
#5
- **Status:** โ
`passed`
-- **Duration:** `0.000227` s
+- **Duration:** `0.000229` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -312,7 +312,7 @@ passed
๐ Duration
```
-0.00038915302138775587
+0.0003949750680476427
```
@@ -331,7 +331,7 @@ passed
๐ Duration
```
-0.0002270030090585351
+0.00022938300389796495
```
@@ -350,7 +350,7 @@ passed
๐ Duration
```
-0.000662944046780467
+0.0006894280668348074
```
@@ -373,7 +373,7 @@ passed
โ
#6
- **Status:** โ
`passed`
-- **Duration:** `0.008752` s
+- **Duration:** `0.008985` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -382,7 +382,7 @@ passed
๐ Duration
```
-0.0003695060731843114
+0.0003616049652919173
```
@@ -401,7 +401,7 @@ passed
๐ Duration
```
-0.008751561981625855
+0.008984648040495813
```
@@ -420,7 +420,7 @@ passed
๐ Duration
```
-0.0009123190538957715
+0.0010357450228184462
```
@@ -443,7 +443,7 @@ passed
โ
#7
- **Status:** โ
`passed`
-- **Duration:** `0.000194` s
+- **Duration:** `0.000381` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -452,7 +452,7 @@ passed
๐ Duration
```
-0.00020920601673424244
+0.0003494380507618189
```
@@ -471,7 +471,7 @@ passed
๐ Duration
```
-0.00019406399223953485
+0.00038097798824310303
```
@@ -490,7 +490,7 @@ passed
๐ Duration
```
-0.00020421401131898165
+0.00035712902899831533
```
@@ -513,7 +513,7 @@ passed
โ
#8
- **Status:** โ
`passed`
-- **Duration:** `0.000220` s
+- **Duration:** `0.000248` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -522,7 +522,7 @@ passed
๐ Duration
```
-0.00040839205030351877
+0.0004639779217541218
```
@@ -541,7 +541,7 @@ passed
๐ Duration
```
-0.00021960202138870955
+0.0002484070137143135
```
@@ -560,7 +560,7 @@ passed
๐ Duration
```
-0.0011805809335783124
+0.0008254030253738165
```
@@ -583,7 +583,7 @@ passed
โ
#10
- **Status:** โ
`passed`
-- **Duration:** `0.000225` s
+- **Duration:** `0.000277` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -592,7 +592,7 @@ passed
๐ Duration
```
-0.00022048188839107752
+0.0003002990270033479
```
@@ -611,7 +611,7 @@ passed
๐ Duration
```
-0.00022530299611389637
+0.00027706497348845005
```
@@ -630,7 +630,7 @@ passed
๐ Duration
```
-0.0002069410402327776
+0.0002547380281612277
```
@@ -658,7 +658,7 @@ passed
โ
#12
- **Status:** โ
`passed`
-- **Duration:** `0.000209` s
+- **Duration:** `0.000204` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -667,7 +667,7 @@ passed
๐ Duration
```
-0.0002209460362792015
+0.00020222098100930452
```
@@ -686,7 +686,7 @@ passed
๐ Duration
```
-0.0002094949595630169
+0.00020369794219732285
```
@@ -705,7 +705,7 @@ passed
๐ Duration
```
-0.00021691399160772562
+0.0002168810460716486
```
@@ -728,7 +728,7 @@ passed
โ
#13
- **Status:** โ
`passed`
-- **Duration:** `0.000172` s
+- **Duration:** `0.000173` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -737,7 +737,7 @@ passed
๐ Duration
```
-0.00018034595996141434
+0.0001713009551167488
```
@@ -756,7 +756,7 @@ passed
๐ Duration
```
-0.00017179199494421482
+0.00017264601774513721
```
@@ -775,7 +775,7 @@ passed
๐ Duration
```
-0.0002088670153170824
+0.00019882700871676207
```
@@ -798,7 +798,7 @@ passed
โ
#15
- **Status:** โ
`passed`
-- **Duration:** `0.000207` s
+- **Duration:** `0.000218` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -807,7 +807,7 @@ passed
๐ Duration
```
-0.00019831606186926365
+0.00021640502382069826
```
@@ -826,7 +826,7 @@ passed
๐ Duration
```
-0.00020710192620754242
+0.00021836801897734404
```
@@ -845,7 +845,7 @@ passed
๐ Duration
```
-0.00020438898354768753
+0.000205551041290164
```
@@ -868,7 +868,7 @@ passed
โ
#18
- **Status:** โ
`passed`
-- **Duration:** `0.000205` s
+- **Duration:** `0.000213` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -877,7 +877,7 @@ passed
๐ Duration
```
-0.0001924070529639721
+0.00021353899501264095
```
@@ -896,7 +896,7 @@ passed
๐ Duration
```
-0.00020459899678826332
+0.00021349499002099037
```
@@ -915,7 +915,7 @@ passed
๐ Duration
```
-0.0002061479026451707
+0.0002029439201578498
```
@@ -938,7 +938,7 @@ passed
โ
#19
- **Status:** โ
`passed`
-- **Duration:** `0.000185` s
+- **Duration:** `0.000195` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -947,7 +947,7 @@ passed
๐ Duration
```
-0.0002001129323616624
+0.00018743996042758226
```
@@ -966,7 +966,7 @@ passed
๐ Duration
```
-0.00018545100465416908
+0.00019482697825878859
```
@@ -985,7 +985,7 @@ passed
๐ Duration
```
-0.0001969150034710765
+0.00019577005878090858
```
@@ -1008,7 +1008,7 @@ passed
โ
#20
- **Status:** โ
`passed`
-- **Duration:** `0.000969` s
+- **Duration:** `0.000970` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1017,7 +1017,7 @@ passed
๐ Duration
```
-0.0001715359976515174
+0.0001702549634501338
```
@@ -1036,7 +1036,7 @@ passed
๐ Duration
```
-0.0009691390441730618
+0.0009700659429654479
```
@@ -1055,7 +1055,7 @@ passed
๐ Duration
```
-0.00022587704006582499
+0.00021042500156909227
```
@@ -1087,7 +1087,7 @@ passed
๐ Duration
```
-0.00018580409232527018
+0.00017369503621011972
```
@@ -1106,7 +1106,7 @@ passed
๐ Duration
```
-0.0001717110862955451
+0.00017163902521133423
```
@@ -1125,7 +1125,7 @@ passed
๐ Duration
```
-0.00019159005023539066
+0.00019572698511183262
```
@@ -1148,7 +1148,7 @@ passed
โ
#22
- **Status:** โ
`passed`
-- **Duration:** `0.000177` s
+- **Duration:** `0.000195` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1157,7 +1157,7 @@ passed
๐ Duration
```
-0.00017693801783025265
+0.00018243491649627686
```
@@ -1176,7 +1176,7 @@ passed
๐ Duration
```
-0.0001772330142557621
+0.00019519601482897997
```
@@ -1195,7 +1195,7 @@ passed
๐ Duration
```
-0.00018927804194390774
+0.00018651701975613832
```
@@ -1218,7 +1218,7 @@ passed
โ
#23
- **Status:** โ
`passed`
-- **Duration:** `0.000184` s
+- **Duration:** `0.000181` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1227,7 +1227,7 @@ passed
๐ Duration
```
-0.00016618194058537483
+0.00017865491099655628
```
@@ -1246,7 +1246,7 @@ passed
๐ Duration
```
-0.00018387194722890854
+0.00018100603483617306
```
@@ -1265,7 +1265,7 @@ passed
๐ Duration
```
-0.00019145605619996786
+0.00019195699132978916
```
@@ -1288,7 +1288,7 @@ passed
โ
#24
- **Status:** โ
`passed`
-- **Duration:** `0.000167` s
+- **Duration:** `0.000178` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1297,7 +1297,7 @@ passed
๐ Duration
```
-0.00016783899627625942
+0.00016721209976822138
```
@@ -1316,7 +1316,7 @@ passed
๐ Duration
```
-0.00016651395708322525
+0.000178205082193017
```
@@ -1335,7 +1335,7 @@ passed
๐ Duration
```
-0.00020786002278327942
+0.00019070098642259836
```
@@ -1358,7 +1358,7 @@ passed
โ
#26
- **Status:** โ
`passed`
-- **Duration:** `0.000194` s
+- **Duration:** `0.000217` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1367,7 +1367,7 @@ passed
๐ Duration
```
-0.00020283402409404516
+0.00023506605066359043
```
@@ -1386,7 +1386,7 @@ passed
๐ Duration
```
-0.00019422895275056362
+0.00021719001233577728
```
@@ -1405,7 +1405,7 @@ passed
๐ Duration
```
-0.00019317097030580044
+0.00021374609787017107
```
@@ -1428,7 +1428,7 @@ passed
โ
#30
- **Status:** โ
`passed`
-- **Duration:** `0.000222` s
+- **Duration:** `0.000340` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1437,7 +1437,7 @@ passed
๐ Duration
```
-0.00022388994693756104
+0.0004258720437064767
```
@@ -1456,7 +1456,7 @@ passed
๐ Duration
```
-0.00022210099268704653
+0.00033950200304389
```
@@ -1475,7 +1475,7 @@ passed
๐ Duration
```
-0.00022886402439326048
+0.0003007430350407958
```
@@ -1498,7 +1498,7 @@ passed
โ
#31
- **Status:** โ
`passed`
-- **Duration:** `0.000211` s
+- **Duration:** `0.000301` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1507,7 +1507,7 @@ passed
๐ Duration
```
-0.00045825005508959293
+0.0005719750188291073
```
@@ -1526,7 +1526,7 @@ passed
๐ Duration
```
-0.0002114559756591916
+0.00030105304904282093
```
@@ -1545,7 +1545,7 @@ passed
๐ Duration
```
-0.0007276840042322874
+0.0009949709055945277
```
@@ -1568,7 +1568,7 @@ passed
โ
#33
- **Status:** โ
`passed`
-- **Duration:** `0.000259` s
+- **Duration:** `0.000298` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1577,7 +1577,7 @@ passed
๐ Duration
```
-0.00041261897422373295
+0.0005372470477595925
```
@@ -1596,7 +1596,7 @@ passed
๐ Duration
```
-0.0002588090719655156
+0.00029834092129021883
```
@@ -1615,7 +1615,7 @@ passed
๐ Duration
```
-0.0007083290256559849
+0.0008468080777674913
```
@@ -1638,7 +1638,7 @@ passed
โ
#34
- **Status:** โ
`passed`
-- **Duration:** `0.000525` s
+- **Duration:** `0.000556` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1647,7 +1647,7 @@ passed
๐ Duration
```
-0.00020659796427935362
+0.00022685702424496412
```
@@ -1666,7 +1666,7 @@ passed
๐ Duration
```
-0.0005250299582257867
+0.0005564079619944096
```
@@ -1685,7 +1685,7 @@ passed
๐ Duration
```
-0.0002294060541316867
+0.0002461819676682353
```
@@ -1713,7 +1713,7 @@ passed
โ
#35
- **Status:** โ
`passed`
-- **Duration:** `0.000180` s
+- **Duration:** `0.000200` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1722,7 +1722,7 @@ passed
๐ Duration
```
-0.00018892192747443914
+0.00020473904442042112
```
@@ -1741,7 +1741,7 @@ passed
๐ Duration
```
-0.00018038798589259386
+0.00019969302229583263
```
@@ -1760,7 +1760,7 @@ passed
๐ Duration
```
-0.00020029803272336721
+0.00021990295499563217
```
@@ -1783,7 +1783,7 @@ passed
โ
#36
- **Status:** โ
`passed`
-- **Duration:** `0.000187` s
+- **Duration:** `0.000204` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1792,7 +1792,7 @@ passed
๐ Duration
```
-0.00017741392366588116
+0.0001893759472295642
```
@@ -1811,7 +1811,7 @@ passed
๐ Duration
```
-0.00018671411089599133
+0.00020406197290867567
```
@@ -1830,7 +1830,7 @@ passed
๐ Duration
```
-0.00019175501074641943
+0.00021910399664193392
```
@@ -1853,7 +1853,7 @@ passed
โ
#37
- **Status:** โ
`passed`
-- **Duration:** `0.000173` s
+- **Duration:** `0.000177` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1862,7 +1862,7 @@ passed
๐ Duration
```
-0.0001810770481824875
+0.00019783899188041687
```
@@ -1881,7 +1881,7 @@ passed
๐ Duration
```
-0.0001728840870782733
+0.00017716700676828623
```
@@ -1900,7 +1900,7 @@ passed
๐ Duration
```
-0.00019152299501001835
+0.00021673704031854868
```
@@ -1923,7 +1923,7 @@ passed
โ
#38
- **Status:** โ
`passed`
-- **Duration:** `0.000168` s
+- **Duration:** `0.000179` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1932,7 +1932,7 @@ passed
๐ Duration
```
-0.00017047300934791565
+0.00018432794604450464
```
@@ -1951,7 +1951,7 @@ passed
๐ Duration
```
-0.0001679499400779605
+0.0001793659757822752
```
@@ -1970,7 +1970,7 @@ passed
๐ Duration
```
-0.000202854978851974
+0.00020071305334568024
```
@@ -1993,7 +1993,7 @@ passed
โ
#40
- **Status:** โ
`passed`
-- **Duration:** `0.000198` s
+- **Duration:** `0.000226` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2002,7 +2002,7 @@ passed
๐ Duration
```
-0.00019435002468526363
+0.00019783200696110725
```
@@ -2021,7 +2021,7 @@ passed
๐ Duration
```
-0.0001980530796572566
+0.00022565096151083708
```
@@ -2040,7 +2040,7 @@ passed
๐ Duration
```
-0.00019169494044035673
+0.00021274294704198837
```
@@ -2063,7 +2063,7 @@ passed
โ
#41
- **Status:** โ
`passed`
-- **Duration:** `0.000179` s
+- **Duration:** `0.000198` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2072,7 +2072,7 @@ passed
๐ Duration
```
-0.00018288800492882729
+0.00018940994050353765
```
@@ -2091,7 +2091,7 @@ passed
๐ Duration
```
-0.0001792029943317175
+0.0001975309569388628
```
@@ -2110,7 +2110,7 @@ passed
๐ Duration
```
-0.00019428995437920094
+0.00021336192730814219
```
@@ -2133,7 +2133,7 @@ passed
โ
#42
- **Status:** โ
`passed`
-- **Duration:** `0.000177` s
+- **Duration:** `0.000253` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2142,7 +2142,7 @@ passed
๐ Duration
```
-0.00019613502081483603
+0.00018640700727701187
```
@@ -2161,7 +2161,7 @@ passed
๐ Duration
```
-0.0001768539659678936
+0.0002527860924601555
```
@@ -2180,7 +2180,7 @@ passed
๐ Duration
```
-0.00020290003158152103
+0.00025885901413857937
```
@@ -2213,7 +2213,7 @@ passed
โ #9
- **Status:** โ `failed`
-- **Duration:** `0.001070` s
+- **Duration:** `0.001408` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2222,7 +2222,7 @@ passed
๐ Duration
```
-0.0008122080471366644
+0.0008101530838757753
```
@@ -2241,7 +2241,7 @@ passed
๐ Duration
```
-0.001069621997885406
+0.0014078549575060606
```
@@ -2300,7 +2300,7 @@ tests/test_io_utils.py:72: Failed
๐ Duration
```
-0.0008879059460014105
+0.0011783690424636006
```
@@ -2328,7 +2328,7 @@ passed
โ #11
- **Status:** โ `failed`
-- **Duration:** `0.000180` s
+- **Duration:** `0.000201` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2337,7 +2337,7 @@ passed
๐ Duration
```
-0.00019576610065996647
+0.00021702505182474852
```
@@ -2356,7 +2356,7 @@ passed
๐ Duration
```
-0.00017970602493733168
+0.00020137301180511713
```
@@ -2408,7 +2408,7 @@ tests/test_math_utils.py:16: NameError
๐ Duration
```
-0.00031367898918688297
+0.0002840820234268904
```
@@ -2431,7 +2431,7 @@ passed
โ #14
- **Status:** โ `failed`
-- **Duration:** `0.000507` s
+- **Duration:** `0.000517` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2440,7 +2440,7 @@ passed
๐ Duration
```
-0.00019698194228112698
+0.00017807807307690382
```
@@ -2459,7 +2459,7 @@ passed
๐ Duration
```
-0.0005074499640613794
+0.0005174310645088553
```
@@ -2513,7 +2513,7 @@ tests/test_math_utils.py:29: AssertionError
๐ Duration
```
-0.00027086702175438404
+0.0002676490694284439
```
@@ -2536,7 +2536,7 @@ passed
โ #17
- **Status:** โ `failed`
-- **Duration:** `0.000193` s
+- **Duration:** `0.000192` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2545,7 +2545,7 @@ passed
๐ Duration
```
-0.00019688194151967764
+0.0001908650156110525
```
@@ -2564,7 +2564,7 @@ passed
๐ Duration
```
-0.00019348703790456057
+0.0001916420878842473
```
@@ -2616,7 +2616,7 @@ tests/test_math_utils.py:43: RuntimeError
๐ Duration
```
-0.00026913301553577185
+0.00028797995764762163
```
@@ -2639,7 +2639,7 @@ passed
โ #25
- **Status:** โ `failed`
-- **Duration:** `0.000179` s
+- **Duration:** `0.000182` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2648,7 +2648,7 @@ passed
๐ Duration
```
-0.00017340504564344883
+0.00016916892491281033
```
@@ -2667,7 +2667,7 @@ passed
๐ Duration
```
-0.00017853407189249992
+0.00018182303756475449
```
@@ -2719,7 +2719,7 @@ tests/test_math_utils.py:84: Exception
๐ Duration
```
-0.00026646105106920004
+0.00032364693470299244
```
@@ -2742,7 +2742,7 @@ passed
โ #27
- **Status:** โ `failed`
-- **Duration:** `0.000177` s
+- **Duration:** `0.000195` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2751,7 +2751,7 @@ passed
๐ Duration
```
-0.000183618045412004
+0.00018157996237277985
```
@@ -2770,7 +2770,7 @@ passed
๐ Duration
```
-0.00017739005852490664
+0.0001949709840118885
```
@@ -2846,7 +2846,7 @@ tests/test_math_utils.py:93: StopIteration
The above exception was the direct cause of the following exception:
cls =
-func = . at 0x7f74c38aff70>
+func = . at 0x7f44671f3f70>
when = 'call'
reraise = (, )
@@ -2916,7 +2916,7 @@ E RuntimeError: generator raised StopIteration
๐ Duration
```
-0.0004587490111589432
+0.00045209890231490135
```
@@ -2939,7 +2939,7 @@ passed
โ #28
- **Status:** โ `failed`
-- **Duration:** `0.000237` s
+- **Duration:** `0.000225` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2948,7 +2948,7 @@ passed
๐ Duration
```
-0.000270336982794106
+0.00028916297014802694
```
@@ -2967,7 +2967,7 @@ passed
๐ Duration
```
-0.00023671297822147608
+0.0002249880926683545
```
@@ -3019,7 +3019,7 @@ tests/test_math_utils.py:97: GeneratorExit
๐ Duration
```
-0.0003299450036138296
+0.00042971898801624775
```
@@ -3042,7 +3042,7 @@ passed
โ #29
- **Status:** โ `failed`
-- **Duration:** `0.000222` s
+- **Duration:** `0.000251` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3051,7 +3051,7 @@ passed
๐ Duration
```
-0.0005128619959577918
+0.0005874220514670014
```
@@ -3070,7 +3070,7 @@ passed
๐ Duration
```
-0.00022203498519957066
+0.0002511070342734456
```
@@ -3106,7 +3106,7 @@ message: RecursionError
๐ Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f74c3ced190>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4466ebfbb0>
def test_recursion_limit(monkeypatch):
# Lower recursion limit to force RecursionError on deep recursion
@@ -3125,7 +3125,7 @@ tests/test_math_utils.py:108: RecursionError
๐ Duration
```
-0.000988241983577609
+0.0011272020637989044
```
@@ -3148,7 +3148,7 @@ passed
โ #32
- **Status:** โ `failed`
-- **Duration:** `0.000196` s
+- **Duration:** `0.000241` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3157,7 +3157,7 @@ passed
๐ Duration
```
-0.00036576204001903534
+0.0004778510192409158
```
@@ -3176,7 +3176,7 @@ passed
๐ Duration
```
-0.00019559694919735193
+0.00024109298828989267
```
@@ -3212,7 +3212,7 @@ message: AttributeError
๐ Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f74c3b141f0>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4466cd3370>
def test_broken_function(monkeypatch):
# Simulate broken function raising TypeError
@@ -3232,7 +3232,7 @@ tests/test_math_utils.py:132: AttributeError
๐ Duration
```
-0.000836986000649631
+0.0011143990559503436
```
@@ -3260,7 +3260,7 @@ passed
โ #39
- **Status:** โ `failed`
-- **Duration:** `0.000214` s
+- **Duration:** `0.000219` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3269,7 +3269,7 @@ passed
๐ Duration
```
-0.00016937695909291506
+0.00020313996355980635
```
@@ -3288,7 +3288,7 @@ passed
๐ Duration
```
-0.0002137790434062481
+0.00021908094640821218
```
@@ -3341,7 +3341,7 @@ tests/test_string_utils.py:28: Failed
๐ Duration
```
-0.0002529839985072613
+0.00027646799571812153
```
@@ -3374,7 +3374,7 @@ passed
โ #16
- **Status:** โ `xfailed`
-- **Duration:** `0.000321` s
+- **Duration:** `0.000336` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3383,7 +3383,7 @@ passed
๐ Duration
```
-0.00023584009613841772
+0.00019142404198646545
```
@@ -3402,7 +3402,7 @@ passed
๐ Duration
```
-0.0003208710113540292
+0.00033608300145715475
```
@@ -3457,7 +3457,7 @@ tests/test_math_utils.py:39: AssertionError
๐ Duration
```
-0.0003000239375978708
+0.00027862098067998886
```
@@ -3485,7 +3485,7 @@ passed
โ #43
- **Status:** โ `xfailed`
-- **Duration:** `0.000706` s
+- **Duration:** `0.000876` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3494,7 +3494,7 @@ passed
๐ Duration
```
-0.00018242094665765762
+0.0002366849221289158
```
@@ -3513,7 +3513,7 @@ passed
๐ Duration
```
-0.0007056340109556913
+0.0008762630168348551
```
@@ -3574,7 +3574,7 @@ tests/test_string_utils.py:50: AssertionError
๐ Duration
```
-0.0006596279563382268
+0.0012361010303720832
```
diff --git a/ci-reports/markdown/pytest-report.json b/ci-reports/markdown/pytest-report.json
index 965d5958..794d182b 100644
--- a/ci-reports/markdown/pytest-report.json
+++ b/ci-reports/markdown/pytest-report.json
@@ -1 +1 @@
-{"created": 1752504194.3117373, "duration": 0.31458091735839844, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 31, "failed": 10, "xfailed": 2, "total": 43, "collected": 43}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": ".", "type": "Dir"}]}, {"nodeid": "allure-results", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/allure", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/coverage", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/markdown", "outcome": "passed", "result": []}, {"nodeid": "ci-reports", "outcome": "passed", "result": [{"nodeid": "ci-reports/allure", "type": "Dir"}, {"nodeid": "ci-reports/coverage", "type": "Dir"}, {"nodeid": "ci-reports/markdown", "type": "Dir"}]}, {"nodeid": "functions", "outcome": "passed", "result": []}, {"nodeid": "tests/test_broken_fct.py", "outcome": "passed", "result": []}, {"nodeid": "tests/test_collector_error.py", "outcome": "passed", "result": []}, {"nodeid": "tests/test_io_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_io_utils.py::test_read_file", "type": "Function", "lineno": 9}, {"nodeid": "tests/test_io_utils.py::test_write_file", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_io_utils.py::test_cause_io_error", "type": "Function", "lineno": 22}, {"nodeid": "tests/test_io_utils.py::test_file_not_found", "type": "Function", "lineno": 27}, {"nodeid": "tests/test_io_utils.py::test_permission_error", "type": "Function", "lineno": 32}, {"nodeid": "tests/test_io_utils.py::test_mock_open_error", "type": "Function", "lineno": 40}, {"nodeid": "tests/test_io_utils.py::test_file_handle_closed_error", "type": "Function", "lineno": 49}, {"nodeid": "tests/test_io_utils.py::test_os_error", "type": "Function", "lineno": 56}, {"nodeid": "tests/test_io_utils.py::test_write_file_readonly", "type": "Function", "lineno": 64}, {"nodeid": "tests/test_io_utils.py::test_file_not_found_error", "type": "Function", "lineno": 73}]}, {"nodeid": "tests/test_math_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_math_utils.py::test_broken", "type": "Function", "lineno": 13}, {"nodeid": "tests/test_math_utils.py::test_call_missing_function", "type": "Function", "lineno": 17}, {"nodeid": "tests/test_math_utils.py::test_addition_pass", "type": "Function", "lineno": 22}, {"nodeid": "tests/test_math_utils.py::test_addition_fail", "type": "Function", "lineno": 26}, {"nodeid": "tests/test_math_utils.py::test_division_zero", "type": "Function", "lineno": 30}, {"nodeid": "tests/test_math_utils.py::test_multiply_xfail", "type": "Function", "lineno": 35}, {"nodeid": "tests/test_math_utils.py::test_runtime_error", "type": "Function", "lineno": 40}, {"nodeid": "tests/test_math_utils.py::test_memory_error", "type": "Function", "lineno": 44}, {"nodeid": "tests/test_math_utils.py::test_timeout_error", "type": "Function", "lineno": 49}, {"nodeid": "tests/test_math_utils.py::test_recursion_error", "type": "Function", "lineno": 54}, {"nodeid": "tests/test_math_utils.py::test_floating_point_error", "type": "Function", "lineno": 61}, {"nodeid": "tests/test_math_utils.py::test_floating_point_overflow", "type": "Function", "lineno": 66}, {"nodeid": "tests/test_math_utils.py::test_value_error", "type": "Function", "lineno": 71}, {"nodeid": "tests/test_math_utils.py::test_type_error", "type": "Function", "lineno": 76}, {"nodeid": "tests/test_math_utils.py::test_unhandled_exception", "type": "Function", "lineno": 81}, {"nodeid": "tests/test_math_utils.py::test_custom_error", "type": "Function", "lineno": 85}, {"nodeid": "tests/test_math_utils.py::test_stop_iteration_direct", "type": "Function", "lineno": 90}, {"nodeid": "tests/test_math_utils.py::test_generator_exit_direct", "type": "Function", "lineno": 94}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "type": "Function", "lineno": 104}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "type": "Function", "lineno": 114}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "type": "Function", "lineno": 119}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "type": "Function", "lineno": 127}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "type": "Function", "lineno": 135}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "type": "Function", "lineno": 146}]}, {"nodeid": "tests/test_string_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_string_utils.py::test_uppercase_normal", "type": "Function", "lineno": 7}, {"nodeid": "tests/test_string_utils.py::test_uppercase_type_error", "type": "Function", "lineno": 11}, {"nodeid": "tests/test_string_utils.py::test_reverse_string", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_string_utils.py::test_warning_emit", "type": "Function", "lineno": 20}, {"nodeid": "tests/test_string_utils.py::test_unicode_encode_error", "type": "Function", "lineno": 24}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_error", "type": "Function", "lineno": 29}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_surrogateescape", "type": "Function", "lineno": 34}, {"nodeid": "tests/test_string_utils.py::test_import_warning", "type": "Function", "lineno": 39}, {"nodeid": "tests/test_string_utils.py::test_xfail_uppercase_digits", "type": "Function", "lineno": 46}]}, {"nodeid": "tests", "outcome": "passed", "result": [{"nodeid": "tests/test_broken_fct.py", "type": "Module"}, {"nodeid": "tests/test_collector_error.py", "type": "Module"}, {"nodeid": "tests/test_io_utils.py", "type": "Module"}, {"nodeid": "tests/test_math_utils.py", "type": "Module"}, {"nodeid": "tests/test_string_utils.py", "type": "Module"}]}, {"nodeid": ".", "outcome": "passed", "result": [{"nodeid": "allure-results", "type": "Dir"}, {"nodeid": "ci-reports", "type": "Dir"}, {"nodeid": "functions", "type": "Package"}, {"nodeid": "tests", "type": "Package"}]}], "tests": [{"nodeid": "tests/test_io_utils.py::test_read_file", "lineno": 9, "outcome": "passed", "keywords": ["test_read_file", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00464572396595031, "outcome": "passed"}, "call": {"duration": 0.0005834490293636918, "outcome": "passed"}, "teardown": {"duration": 0.0015040939906612039, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_write_file", "lineno": 16, "outcome": "passed", "keywords": ["test_write_file", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0008129210909828544, "outcome": "passed"}, "call": {"duration": 0.00036360800731927156, "outcome": "passed"}, "teardown": {"duration": 0.000704035977832973, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_cause_io_error", "lineno": 22, "outcome": "passed", "keywords": ["test_cause_io_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019856798462569714, "outcome": "passed"}, "call": {"duration": 0.0003709479933604598, "outcome": "passed"}, "teardown": {"duration": 0.00021130393724888563, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_not_found", "lineno": 27, "outcome": "passed", "keywords": ["test_file_not_found", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018894602544605732, "outcome": "passed"}, "call": {"duration": 0.00021124305203557014, "outcome": "passed"}, "teardown": {"duration": 0.00020395196042954922, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_permission_error", "lineno": 32, "outcome": "passed", "keywords": ["test_permission_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00038915302138775587, "outcome": "passed"}, "call": {"duration": 0.0002270030090585351, "outcome": "passed"}, "teardown": {"duration": 0.000662944046780467, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_mock_open_error", "lineno": 40, "outcome": "passed", "keywords": ["test_mock_open_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003695060731843114, "outcome": "passed"}, "call": {"duration": 0.008751561981625855, "outcome": "passed"}, "teardown": {"duration": 0.0009123190538957715, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_handle_closed_error", "lineno": 49, "outcome": "passed", "keywords": ["test_file_handle_closed_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020920601673424244, "outcome": "passed"}, "call": {"duration": 0.00019406399223953485, "outcome": "passed"}, "teardown": {"duration": 0.00020421401131898165, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_os_error", "lineno": 56, "outcome": "passed", "keywords": ["test_os_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00040839205030351877, "outcome": "passed"}, "call": {"duration": 0.00021960202138870955, "outcome": "passed"}, "teardown": {"duration": 0.0011805809335783124, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_write_file_readonly", "lineno": 64, "outcome": "failed", "keywords": ["test_write_file_readonly", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0008122080471366644, "outcome": "passed"}, "call": {"duration": 0.001069621997885406, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_io_utils.py", "lineno": 72, "message": "Failed: DID NOT RAISE "}, "traceback": [{"path": "tests/test_io_utils.py", "lineno": 72, "message": "Failed"}], "longrepr": "tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_write_file_readonly0')\n\n def test_write_file_readonly(tmp_path):\n # Writing to read-only file raises PermissionError\n file = tmp_path / \"readonly.txt\"\n file.write_text(\"data\")\n os.chmod(file, 0o444)\n with pytest.raises(PermissionError):\n with open(file, \"w\") as f:\n> f.write(\"new content\")\nE Failed: DID NOT RAISE \n\ntests/test_io_utils.py:72: Failed"}, "teardown": {"duration": 0.0008879059460014105, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_not_found_error", "lineno": 73, "outcome": "passed", "keywords": ["test_file_not_found_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00022048188839107752, "outcome": "passed"}, "call": {"duration": 0.00022530299611389637, "outcome": "passed"}, "teardown": {"duration": 0.0002069410402327776, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken", "lineno": 13, "outcome": "failed", "keywords": ["test_broken", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019576610065996647, "outcome": "passed"}, "call": {"duration": 0.00017970602493733168, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 16, "message": "NameError: name 'want_the_test_to_fail' is not defined"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 16, "message": "NameError"}], "longrepr": "def test_broken():\n # simulating a broken or faulty test implementation that will cause the test to error\n> want_the_test_to_fail\nE NameError: name 'want_the_test_to_fail' is not defined\n\ntests/test_math_utils.py:16: NameError"}, "teardown": {"duration": 0.00031367898918688297, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_call_missing_function", "lineno": 17, "outcome": "passed", "keywords": ["test_call_missing_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0002209460362792015, "outcome": "passed"}, "call": {"duration": 0.0002094949595630169, "outcome": "passed"}, "teardown": {"duration": 0.00021691399160772562, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_addition_pass", "lineno": 22, "outcome": "passed", "keywords": ["test_addition_pass", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018034595996141434, "outcome": "passed"}, "call": {"duration": 0.00017179199494421482, "outcome": "passed"}, "teardown": {"duration": 0.0002088670153170824, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_addition_fail", "lineno": 26, "outcome": "failed", "keywords": ["test_addition_fail", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019698194228112698, "outcome": "passed"}, "call": {"duration": 0.0005074499640613794, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 29, "message": "assert 4 == 5\n + where 4 = addition(2, 2)"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 29, "message": "AssertionError"}], "longrepr": "def test_addition_fail():\n # Assertion failure: expected incorrect result\n> assert addition(2, 2) == 5\nE assert 4 == 5\nE + where 4 = addition(2, 2)\n\ntests/test_math_utils.py:29: AssertionError"}, "teardown": {"duration": 0.00027086702175438404, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_division_zero", "lineno": 30, "outcome": "passed", "keywords": ["test_division_zero", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019831606186926365, "outcome": "passed"}, "call": {"duration": 0.00020710192620754242, "outcome": "passed"}, "teardown": {"duration": 0.00020438898354768753, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_multiply_xfail", "lineno": 35, "outcome": "xfailed", "keywords": ["test_multiply_xfail", "xfail", "pytestmark", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00023584009613841772, "outcome": "passed"}, "call": {"duration": 0.0003208710113540292, "outcome": "skipped", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 39, "message": "assert 4 == 5\n + where 4 = multiply(2, 2)"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 39, "message": "AssertionError"}], "longrepr": "@pytest.mark.xfail(reason=\"Expected failure\")\n def test_multiply_xfail():\n # Expected fail test (xfail): incorrect expected multiply result\n> assert multiply(2, 2) == 5\nE assert 4 == 5\nE + where 4 = multiply(2, 2)\n\ntests/test_math_utils.py:39: AssertionError"}, "teardown": {"duration": 0.0003000239375978708, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_runtime_error", "lineno": 40, "outcome": "failed", "keywords": ["test_runtime_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019688194151967764, "outcome": "passed"}, "call": {"duration": 0.00019348703790456057, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 43, "message": "RuntimeError: Forced runtime error"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 43, "message": "RuntimeError"}], "longrepr": "def test_runtime_error():\n # Test raises an uncaught RuntimeError\n> raise RuntimeError(\"Forced runtime error\")\nE RuntimeError: Forced runtime error\n\ntests/test_math_utils.py:43: RuntimeError"}, "teardown": {"duration": 0.00026913301553577185, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_memory_error", "lineno": 44, "outcome": "passed", "keywords": ["test_memory_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001924070529639721, "outcome": "passed"}, "call": {"duration": 0.00020459899678826332, "outcome": "passed"}, "teardown": {"duration": 0.0002061479026451707, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_timeout_error", "lineno": 49, "outcome": "passed", "keywords": ["test_timeout_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0002001129323616624, "outcome": "passed"}, "call": {"duration": 0.00018545100465416908, "outcome": "passed"}, "teardown": {"duration": 0.0001969150034710765, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_error", "lineno": 54, "outcome": "passed", "keywords": ["test_recursion_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001715359976515174, "outcome": "passed"}, "call": {"duration": 0.0009691390441730618, "outcome": "passed"}, "teardown": {"duration": 0.00022587704006582499, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_floating_point_error", "lineno": 61, "outcome": "passed", "keywords": ["test_floating_point_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018580409232527018, "outcome": "passed"}, "call": {"duration": 0.0001717110862955451, "outcome": "passed"}, "teardown": {"duration": 0.00019159005023539066, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_floating_point_overflow", "lineno": 66, "outcome": "passed", "keywords": ["test_floating_point_overflow", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017693801783025265, "outcome": "passed"}, "call": {"duration": 0.0001772330142557621, "outcome": "passed"}, "teardown": {"duration": 0.00018927804194390774, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_value_error", "lineno": 71, "outcome": "passed", "keywords": ["test_value_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00016618194058537483, "outcome": "passed"}, "call": {"duration": 0.00018387194722890854, "outcome": "passed"}, "teardown": {"duration": 0.00019145605619996786, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_type_error", "lineno": 76, "outcome": "passed", "keywords": ["test_type_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00016783899627625942, "outcome": "passed"}, "call": {"duration": 0.00016651395708322525, "outcome": "passed"}, "teardown": {"duration": 0.00020786002278327942, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_unhandled_exception", "lineno": 81, "outcome": "failed", "keywords": ["test_unhandled_exception", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017340504564344883, "outcome": "passed"}, "call": {"duration": 0.00017853407189249992, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 84, "message": "Exception: Generic unhandled exception"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 84, "message": "Exception"}], "longrepr": "def test_unhandled_exception():\n # Raises generic unhandled Exception\n> raise Exception(\"Generic unhandled exception\")\nE Exception: Generic unhandled exception\n\ntests/test_math_utils.py:84: Exception"}, "teardown": {"duration": 0.00026646105106920004, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_custom_error", "lineno": 85, "outcome": "passed", "keywords": ["test_custom_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020283402409404516, "outcome": "passed"}, "call": {"duration": 0.00019422895275056362, "outcome": "passed"}, "teardown": {"duration": 0.00019317097030580044, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_stop_iteration_direct", "lineno": 90, "outcome": "failed", "keywords": ["test_stop_iteration_direct", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.000183618045412004, "outcome": "passed"}, "call": {"duration": 0.00017739005852490664, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py", "lineno": 880, "message": "RuntimeError: generator raised StopIteration"}, "traceback": [{"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py", "lineno": 341, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py", "lineno": 242, "message": "in "}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/pluggy/_hooks.py", "lineno": 513, "message": "in __call__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/pluggy/_manager.py", "lineno": 120, "message": "in _hookexec"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py", "lineno": 92, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py", "lineno": 68, "message": "in thread_exception_runtest_hook"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py", "lineno": 95, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py", "lineno": 70, "message": "in unraisable_exception_runtest_hook"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py", "lineno": 846, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py", "lineno": 829, "message": "in _runtest_for"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py", "lineno": 880, "message": "RuntimeError"}], "longrepr": "def test_stop_iteration_direct():\n # Directly raise StopIteration exception\n> raise StopIteration()\nE StopIteration\n\ntests/test_math_utils.py:93: StopIteration\n\nThe above exception was the direct cause of the following exception:\n\ncls = \nfunc = . at 0x7f74c38aff70>\nwhen = 'call'\nreraise = (, )\n\n @classmethod\n def from_call(\n cls,\n func: Callable[[], TResult],\n when: Literal[\"collect\", \"setup\", \"call\", \"teardown\"],\n reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None,\n ) -> CallInfo[TResult]:\n \"\"\"Call func, wrapping the result in a CallInfo.\n \n :param func:\n The function to call. Called without arguments.\n :type func: Callable[[], _pytest.runner.TResult]\n :param when:\n The phase in which the function is called.\n :param reraise:\n Exception or exceptions that shall propagate if raised by the\n function, instead of being wrapped in the CallInfo.\n \"\"\"\n excinfo = None\n start = timing.time()\n precise_start = timing.perf_counter()\n try:\n> result: TResult | None = func()\n\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:341: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:242: in \n lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise\n.pixi/envs/default/lib/python3.8/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.pixi/envs/default/lib/python3.8/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:92: in pytest_runtest_call\n yield from thread_exception_runtest_hook()\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:68: in thread_exception_runtest_hook\n yield\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:95: in pytest_runtest_call\n yield from unraisable_exception_runtest_hook()\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:70: in unraisable_exception_runtest_hook\n yield\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:846: in pytest_runtest_call\n yield from self._runtest_for(item, \"call\")\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:829: in _runtest_for\n yield\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = _capture_fixture=None>\nitem = \n\n @hookimpl(wrapper=True)\n def pytest_runtest_call(self, item: Item) -> Generator[None]:\n with self.item_capture(\"call\", item):\n> return (yield)\nE RuntimeError: generator raised StopIteration\n\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py:880: RuntimeError"}, "teardown": {"duration": 0.0004587490111589432, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_generator_exit_direct", "lineno": 94, "outcome": "failed", "keywords": ["test_generator_exit_direct", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.000270336982794106, "outcome": "passed"}, "call": {"duration": 0.00023671297822147608, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 97, "message": "GeneratorExit"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 97, "message": "GeneratorExit"}], "longrepr": "def test_generator_exit_direct():\n # Directly raise GeneratorExit exception\n> raise GeneratorExit()\nE GeneratorExit\n\ntests/test_math_utils.py:97: GeneratorExit"}, "teardown": {"duration": 0.0003299450036138296, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "lineno": 104, "outcome": "failed", "keywords": ["test_recursion_limit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0005128619959577918, "outcome": "passed"}, "call": {"duration": 0.00022203498519957066, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 108, "message": "RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 108, "message": "RecursionError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f74c3ced190>\n\n def test_recursion_limit(monkeypatch):\n # Lower recursion limit to force RecursionError on deep recursion\n original_limit = sys.getrecursionlimit()\n> sys.setrecursionlimit(50)\nE RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low\n\ntests/test_math_utils.py:108: RecursionError"}, "teardown": {"duration": 0.000988241983577609, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "lineno": 114, "outcome": "passed", "keywords": ["test_malformed_code", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00022388994693756104, "outcome": "passed"}, "call": {"duration": 0.00022210099268704653, "outcome": "passed"}, "teardown": {"duration": 0.00022886402439326048, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "lineno": 119, "outcome": "passed", "keywords": ["test_sys_exit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00045825005508959293, "outcome": "passed"}, "call": {"duration": 0.0002114559756591916, "outcome": "passed"}, "teardown": {"duration": 0.0007276840042322874, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "lineno": 127, "outcome": "failed", "keywords": ["test_broken_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00036576204001903534, "outcome": "passed"}, "call": {"duration": 0.00019559694919735193, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 132, "message": "AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 132, "message": "AttributeError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f74c3b141f0>\n\n def test_broken_function(monkeypatch):\n # Simulate broken function raising TypeError\n def broken_func(*args, **kwargs):\n raise TypeError(\"Broken function\")\n> monkeypatch.setattr(__name__, \"test_broken_function\", broken_func)\nE AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'\n\ntests/test_math_utils.py:132: AttributeError"}, "teardown": {"duration": 0.000836986000649631, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "lineno": 135, "outcome": "passed", "keywords": ["test_import_error_patch", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00041261897422373295, "outcome": "passed"}, "call": {"duration": 0.0002588090719655156, "outcome": "passed"}, "teardown": {"duration": 0.0007083290256559849, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "lineno": 146, "outcome": "passed", "keywords": ["test_module_not_found_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020659796427935362, "outcome": "passed"}, "call": {"duration": 0.0005250299582257867, "outcome": "passed"}, "teardown": {"duration": 0.0002294060541316867, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_uppercase_normal", "lineno": 7, "outcome": "passed", "keywords": ["test_uppercase_normal", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018892192747443914, "outcome": "passed"}, "call": {"duration": 0.00018038798589259386, "outcome": "passed"}, "teardown": {"duration": 0.00020029803272336721, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_uppercase_type_error", "lineno": 11, "outcome": "passed", "keywords": ["test_uppercase_type_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017741392366588116, "outcome": "passed"}, "call": {"duration": 0.00018671411089599133, "outcome": "passed"}, "teardown": {"duration": 0.00019175501074641943, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_reverse_string", "lineno": 16, "outcome": "passed", "keywords": ["test_reverse_string", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001810770481824875, "outcome": "passed"}, "call": {"duration": 0.0001728840870782733, "outcome": "passed"}, "teardown": {"duration": 0.00019152299501001835, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_warning_emit", "lineno": 20, "outcome": "passed", "keywords": ["test_warning_emit", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017047300934791565, "outcome": "passed"}, "call": {"duration": 0.0001679499400779605, "outcome": "passed"}, "teardown": {"duration": 0.000202854978851974, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_encode_error", "lineno": 24, "outcome": "failed", "keywords": ["test_unicode_encode_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00016937695909291506, "outcome": "passed"}, "call": {"duration": 0.0002137790434062481, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 28, "message": "Failed: DID NOT RAISE "}, "traceback": [{"path": "tests/test_string_utils.py", "lineno": 28, "message": "Failed"}], "longrepr": "def test_unicode_encode_error():\n # UnicodeEncodeError due to decoding malformed surrogate byte\n with pytest.raises(UnicodeEncodeError):\n> b'\\udc80'.decode('utf-8')\nE Failed: DID NOT RAISE \n\ntests/test_string_utils.py:28: Failed"}, "teardown": {"duration": 0.0002529839985072613, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_error", "lineno": 29, "outcome": "passed", "keywords": ["test_unicode_decode_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019435002468526363, "outcome": "passed"}, "call": {"duration": 0.0001980530796572566, "outcome": "passed"}, "teardown": {"duration": 0.00019169494044035673, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_surrogateescape", "lineno": 34, "outcome": "passed", "keywords": ["test_unicode_decode_surrogateescape", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018288800492882729, "outcome": "passed"}, "call": {"duration": 0.0001792029943317175, "outcome": "passed"}, "teardown": {"duration": 0.00019428995437920094, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_import_warning", "lineno": 39, "outcome": "passed", "keywords": ["test_import_warning", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019613502081483603, "outcome": "passed"}, "call": {"duration": 0.0001768539659678936, "outcome": "passed"}, "teardown": {"duration": 0.00020290003158152103, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_xfail_uppercase_digits", "lineno": 46, "outcome": "xfailed", "keywords": ["test_xfail_uppercase_digits", "xfail", "pytestmark", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018242094665765762, "outcome": "passed"}, "call": {"duration": 0.0007056340109556913, "outcome": "skipped", "crash": {"path": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 50, "message": "AssertionError: assert 'ABC123' == 'ABC1234'\n \n - ABC1234\n ? -\n + ABC123"}, "traceback": [{"path": "tests/test_string_utils.py", "lineno": 50, "message": "AssertionError"}], "longrepr": "@pytest.mark.xfail(reason=\"Expected failure: uppercase does not handle digits\")\n def test_xfail_uppercase_digits():\n # Expected fail test because uppercase won't change digits\n> assert uppercase(\"abc123\") == \"ABC1234\"\nE AssertionError: assert 'ABC123' == 'ABC1234'\nE \nE - ABC1234\nE ? -\nE + ABC123\n\ntests/test_string_utils.py:50: AssertionError"}, "teardown": {"duration": 0.0006596279563382268, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\u", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 28}, {"message": "Test warning", "category": "UserWarning", "when": "runtest", "filename": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 23}]}
\ No newline at end of file
+{"created": 1752504559.2179058, "duration": 0.336456298828125, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 31, "failed": 10, "xfailed": 2, "total": 43, "collected": 43}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": ".", "type": "Dir"}]}, {"nodeid": "allure-results", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/allure", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/coverage", "outcome": "passed", "result": []}, {"nodeid": "ci-reports/markdown", "outcome": "passed", "result": []}, {"nodeid": "ci-reports", "outcome": "passed", "result": [{"nodeid": "ci-reports/allure", "type": "Dir"}, {"nodeid": "ci-reports/coverage", "type": "Dir"}, {"nodeid": "ci-reports/markdown", "type": "Dir"}]}, {"nodeid": "functions", "outcome": "passed", "result": []}, {"nodeid": "tests/test_broken_fct.py", "outcome": "passed", "result": []}, {"nodeid": "tests/test_collector_error.py", "outcome": "passed", "result": []}, {"nodeid": "tests/test_io_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_io_utils.py::test_read_file", "type": "Function", "lineno": 9}, {"nodeid": "tests/test_io_utils.py::test_write_file", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_io_utils.py::test_cause_io_error", "type": "Function", "lineno": 22}, {"nodeid": "tests/test_io_utils.py::test_file_not_found", "type": "Function", "lineno": 27}, {"nodeid": "tests/test_io_utils.py::test_permission_error", "type": "Function", "lineno": 32}, {"nodeid": "tests/test_io_utils.py::test_mock_open_error", "type": "Function", "lineno": 40}, {"nodeid": "tests/test_io_utils.py::test_file_handle_closed_error", "type": "Function", "lineno": 49}, {"nodeid": "tests/test_io_utils.py::test_os_error", "type": "Function", "lineno": 56}, {"nodeid": "tests/test_io_utils.py::test_write_file_readonly", "type": "Function", "lineno": 64}, {"nodeid": "tests/test_io_utils.py::test_file_not_found_error", "type": "Function", "lineno": 73}]}, {"nodeid": "tests/test_math_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_math_utils.py::test_broken", "type": "Function", "lineno": 13}, {"nodeid": "tests/test_math_utils.py::test_call_missing_function", "type": "Function", "lineno": 17}, {"nodeid": "tests/test_math_utils.py::test_addition_pass", "type": "Function", "lineno": 22}, {"nodeid": "tests/test_math_utils.py::test_addition_fail", "type": "Function", "lineno": 26}, {"nodeid": "tests/test_math_utils.py::test_division_zero", "type": "Function", "lineno": 30}, {"nodeid": "tests/test_math_utils.py::test_multiply_xfail", "type": "Function", "lineno": 35}, {"nodeid": "tests/test_math_utils.py::test_runtime_error", "type": "Function", "lineno": 40}, {"nodeid": "tests/test_math_utils.py::test_memory_error", "type": "Function", "lineno": 44}, {"nodeid": "tests/test_math_utils.py::test_timeout_error", "type": "Function", "lineno": 49}, {"nodeid": "tests/test_math_utils.py::test_recursion_error", "type": "Function", "lineno": 54}, {"nodeid": "tests/test_math_utils.py::test_floating_point_error", "type": "Function", "lineno": 61}, {"nodeid": "tests/test_math_utils.py::test_floating_point_overflow", "type": "Function", "lineno": 66}, {"nodeid": "tests/test_math_utils.py::test_value_error", "type": "Function", "lineno": 71}, {"nodeid": "tests/test_math_utils.py::test_type_error", "type": "Function", "lineno": 76}, {"nodeid": "tests/test_math_utils.py::test_unhandled_exception", "type": "Function", "lineno": 81}, {"nodeid": "tests/test_math_utils.py::test_custom_error", "type": "Function", "lineno": 85}, {"nodeid": "tests/test_math_utils.py::test_stop_iteration_direct", "type": "Function", "lineno": 90}, {"nodeid": "tests/test_math_utils.py::test_generator_exit_direct", "type": "Function", "lineno": 94}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "type": "Function", "lineno": 104}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "type": "Function", "lineno": 114}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "type": "Function", "lineno": 119}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "type": "Function", "lineno": 127}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "type": "Function", "lineno": 135}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "type": "Function", "lineno": 146}]}, {"nodeid": "tests/test_string_utils.py", "outcome": "passed", "result": [{"nodeid": "tests/test_string_utils.py::test_uppercase_normal", "type": "Function", "lineno": 7}, {"nodeid": "tests/test_string_utils.py::test_uppercase_type_error", "type": "Function", "lineno": 11}, {"nodeid": "tests/test_string_utils.py::test_reverse_string", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_string_utils.py::test_warning_emit", "type": "Function", "lineno": 20}, {"nodeid": "tests/test_string_utils.py::test_unicode_encode_error", "type": "Function", "lineno": 24}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_error", "type": "Function", "lineno": 29}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_surrogateescape", "type": "Function", "lineno": 34}, {"nodeid": "tests/test_string_utils.py::test_import_warning", "type": "Function", "lineno": 39}, {"nodeid": "tests/test_string_utils.py::test_xfail_uppercase_digits", "type": "Function", "lineno": 46}]}, {"nodeid": "tests", "outcome": "passed", "result": [{"nodeid": "tests/test_broken_fct.py", "type": "Module"}, {"nodeid": "tests/test_collector_error.py", "type": "Module"}, {"nodeid": "tests/test_io_utils.py", "type": "Module"}, {"nodeid": "tests/test_math_utils.py", "type": "Module"}, {"nodeid": "tests/test_string_utils.py", "type": "Module"}]}, {"nodeid": ".", "outcome": "passed", "result": [{"nodeid": "allure-results", "type": "Dir"}, {"nodeid": "ci-reports", "type": "Dir"}, {"nodeid": "functions", "type": "Package"}, {"nodeid": "tests", "type": "Package"}]}], "tests": [{"nodeid": "tests/test_io_utils.py::test_read_file", "lineno": 9, "outcome": "passed", "keywords": ["test_read_file", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.004617957049049437, "outcome": "passed"}, "call": {"duration": 0.0007563600083813071, "outcome": "passed"}, "teardown": {"duration": 0.001968709984794259, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_write_file", "lineno": 16, "outcome": "passed", "keywords": ["test_write_file", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0008771360153332353, "outcome": "passed"}, "call": {"duration": 0.0004011469427496195, "outcome": "passed"}, "teardown": {"duration": 0.0007910049753263593, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_cause_io_error", "lineno": 22, "outcome": "passed", "keywords": ["test_cause_io_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020500796381384134, "outcome": "passed"}, "call": {"duration": 0.00038874102756381035, "outcome": "passed"}, "teardown": {"duration": 0.00022134999744594097, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_not_found", "lineno": 27, "outcome": "passed", "keywords": ["test_file_not_found", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0002105889143422246, "outcome": "passed"}, "call": {"duration": 0.0002573719248175621, "outcome": "passed"}, "teardown": {"duration": 0.00020847294945269823, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_permission_error", "lineno": 32, "outcome": "passed", "keywords": ["test_permission_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003949750680476427, "outcome": "passed"}, "call": {"duration": 0.00022938300389796495, "outcome": "passed"}, "teardown": {"duration": 0.0006894280668348074, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_mock_open_error", "lineno": 40, "outcome": "passed", "keywords": ["test_mock_open_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003616049652919173, "outcome": "passed"}, "call": {"duration": 0.008984648040495813, "outcome": "passed"}, "teardown": {"duration": 0.0010357450228184462, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_handle_closed_error", "lineno": 49, "outcome": "passed", "keywords": ["test_file_handle_closed_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003494380507618189, "outcome": "passed"}, "call": {"duration": 0.00038097798824310303, "outcome": "passed"}, "teardown": {"duration": 0.00035712902899831533, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_os_error", "lineno": 56, "outcome": "passed", "keywords": ["test_os_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0004639779217541218, "outcome": "passed"}, "call": {"duration": 0.0002484070137143135, "outcome": "passed"}, "teardown": {"duration": 0.0008254030253738165, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_write_file_readonly", "lineno": 64, "outcome": "failed", "keywords": ["test_write_file_readonly", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0008101530838757753, "outcome": "passed"}, "call": {"duration": 0.0014078549575060606, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_io_utils.py", "lineno": 72, "message": "Failed: DID NOT RAISE "}, "traceback": [{"path": "tests/test_io_utils.py", "lineno": 72, "message": "Failed"}], "longrepr": "tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_write_file_readonly0')\n\n def test_write_file_readonly(tmp_path):\n # Writing to read-only file raises PermissionError\n file = tmp_path / \"readonly.txt\"\n file.write_text(\"data\")\n os.chmod(file, 0o444)\n with pytest.raises(PermissionError):\n with open(file, \"w\") as f:\n> f.write(\"new content\")\nE Failed: DID NOT RAISE \n\ntests/test_io_utils.py:72: Failed"}, "teardown": {"duration": 0.0011783690424636006, "outcome": "passed"}}, {"nodeid": "tests/test_io_utils.py::test_file_not_found_error", "lineno": 73, "outcome": "passed", "keywords": ["test_file_not_found_error", "test_io_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003002990270033479, "outcome": "passed"}, "call": {"duration": 0.00027706497348845005, "outcome": "passed"}, "teardown": {"duration": 0.0002547380281612277, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken", "lineno": 13, "outcome": "failed", "keywords": ["test_broken", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00021702505182474852, "outcome": "passed"}, "call": {"duration": 0.00020137301180511713, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 16, "message": "NameError: name 'want_the_test_to_fail' is not defined"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 16, "message": "NameError"}], "longrepr": "def test_broken():\n # simulating a broken or faulty test implementation that will cause the test to error\n> want_the_test_to_fail\nE NameError: name 'want_the_test_to_fail' is not defined\n\ntests/test_math_utils.py:16: NameError"}, "teardown": {"duration": 0.0002840820234268904, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_call_missing_function", "lineno": 17, "outcome": "passed", "keywords": ["test_call_missing_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020222098100930452, "outcome": "passed"}, "call": {"duration": 0.00020369794219732285, "outcome": "passed"}, "teardown": {"duration": 0.0002168810460716486, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_addition_pass", "lineno": 22, "outcome": "passed", "keywords": ["test_addition_pass", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001713009551167488, "outcome": "passed"}, "call": {"duration": 0.00017264601774513721, "outcome": "passed"}, "teardown": {"duration": 0.00019882700871676207, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_addition_fail", "lineno": 26, "outcome": "failed", "keywords": ["test_addition_fail", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017807807307690382, "outcome": "passed"}, "call": {"duration": 0.0005174310645088553, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 29, "message": "assert 4 == 5\n + where 4 = addition(2, 2)"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 29, "message": "AssertionError"}], "longrepr": "def test_addition_fail():\n # Assertion failure: expected incorrect result\n> assert addition(2, 2) == 5\nE assert 4 == 5\nE + where 4 = addition(2, 2)\n\ntests/test_math_utils.py:29: AssertionError"}, "teardown": {"duration": 0.0002676490694284439, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_division_zero", "lineno": 30, "outcome": "passed", "keywords": ["test_division_zero", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00021640502382069826, "outcome": "passed"}, "call": {"duration": 0.00021836801897734404, "outcome": "passed"}, "teardown": {"duration": 0.000205551041290164, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_multiply_xfail", "lineno": 35, "outcome": "xfailed", "keywords": ["test_multiply_xfail", "xfail", "pytestmark", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019142404198646545, "outcome": "passed"}, "call": {"duration": 0.00033608300145715475, "outcome": "skipped", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 39, "message": "assert 4 == 5\n + where 4 = multiply(2, 2)"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 39, "message": "AssertionError"}], "longrepr": "@pytest.mark.xfail(reason=\"Expected failure\")\n def test_multiply_xfail():\n # Expected fail test (xfail): incorrect expected multiply result\n> assert multiply(2, 2) == 5\nE assert 4 == 5\nE + where 4 = multiply(2, 2)\n\ntests/test_math_utils.py:39: AssertionError"}, "teardown": {"duration": 0.00027862098067998886, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_runtime_error", "lineno": 40, "outcome": "failed", "keywords": ["test_runtime_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001908650156110525, "outcome": "passed"}, "call": {"duration": 0.0001916420878842473, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 43, "message": "RuntimeError: Forced runtime error"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 43, "message": "RuntimeError"}], "longrepr": "def test_runtime_error():\n # Test raises an uncaught RuntimeError\n> raise RuntimeError(\"Forced runtime error\")\nE RuntimeError: Forced runtime error\n\ntests/test_math_utils.py:43: RuntimeError"}, "teardown": {"duration": 0.00028797995764762163, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_memory_error", "lineno": 44, "outcome": "passed", "keywords": ["test_memory_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00021353899501264095, "outcome": "passed"}, "call": {"duration": 0.00021349499002099037, "outcome": "passed"}, "teardown": {"duration": 0.0002029439201578498, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_timeout_error", "lineno": 49, "outcome": "passed", "keywords": ["test_timeout_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018743996042758226, "outcome": "passed"}, "call": {"duration": 0.00019482697825878859, "outcome": "passed"}, "teardown": {"duration": 0.00019577005878090858, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_error", "lineno": 54, "outcome": "passed", "keywords": ["test_recursion_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001702549634501338, "outcome": "passed"}, "call": {"duration": 0.0009700659429654479, "outcome": "passed"}, "teardown": {"duration": 0.00021042500156909227, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_floating_point_error", "lineno": 61, "outcome": "passed", "keywords": ["test_floating_point_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017369503621011972, "outcome": "passed"}, "call": {"duration": 0.00017163902521133423, "outcome": "passed"}, "teardown": {"duration": 0.00019572698511183262, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_floating_point_overflow", "lineno": 66, "outcome": "passed", "keywords": ["test_floating_point_overflow", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018243491649627686, "outcome": "passed"}, "call": {"duration": 0.00019519601482897997, "outcome": "passed"}, "teardown": {"duration": 0.00018651701975613832, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_value_error", "lineno": 71, "outcome": "passed", "keywords": ["test_value_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00017865491099655628, "outcome": "passed"}, "call": {"duration": 0.00018100603483617306, "outcome": "passed"}, "teardown": {"duration": 0.00019195699132978916, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_type_error", "lineno": 76, "outcome": "passed", "keywords": ["test_type_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00016721209976822138, "outcome": "passed"}, "call": {"duration": 0.000178205082193017, "outcome": "passed"}, "teardown": {"duration": 0.00019070098642259836, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_unhandled_exception", "lineno": 81, "outcome": "failed", "keywords": ["test_unhandled_exception", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00016916892491281033, "outcome": "passed"}, "call": {"duration": 0.00018182303756475449, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 84, "message": "Exception: Generic unhandled exception"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 84, "message": "Exception"}], "longrepr": "def test_unhandled_exception():\n # Raises generic unhandled Exception\n> raise Exception(\"Generic unhandled exception\")\nE Exception: Generic unhandled exception\n\ntests/test_math_utils.py:84: Exception"}, "teardown": {"duration": 0.00032364693470299244, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_custom_error", "lineno": 85, "outcome": "passed", "keywords": ["test_custom_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00023506605066359043, "outcome": "passed"}, "call": {"duration": 0.00021719001233577728, "outcome": "passed"}, "teardown": {"duration": 0.00021374609787017107, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_stop_iteration_direct", "lineno": 90, "outcome": "failed", "keywords": ["test_stop_iteration_direct", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018157996237277985, "outcome": "passed"}, "call": {"duration": 0.0001949709840118885, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py", "lineno": 880, "message": "RuntimeError: generator raised StopIteration"}, "traceback": [{"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py", "lineno": 341, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py", "lineno": 242, "message": "in "}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/pluggy/_hooks.py", "lineno": 513, "message": "in __call__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/pluggy/_manager.py", "lineno": 120, "message": "in _hookexec"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py", "lineno": 92, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py", "lineno": 68, "message": "in thread_exception_runtest_hook"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py", "lineno": 95, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py", "lineno": 70, "message": "in unraisable_exception_runtest_hook"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py", "lineno": 846, "message": "in pytest_runtest_call"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py", "lineno": 829, "message": "in _runtest_for"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py", "lineno": 880, "message": "RuntimeError"}], "longrepr": "def test_stop_iteration_direct():\n # Directly raise StopIteration exception\n> raise StopIteration()\nE StopIteration\n\ntests/test_math_utils.py:93: StopIteration\n\nThe above exception was the direct cause of the following exception:\n\ncls = \nfunc = . at 0x7f44671f3f70>\nwhen = 'call'\nreraise = (, )\n\n @classmethod\n def from_call(\n cls,\n func: Callable[[], TResult],\n when: Literal[\"collect\", \"setup\", \"call\", \"teardown\"],\n reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None,\n ) -> CallInfo[TResult]:\n \"\"\"Call func, wrapping the result in a CallInfo.\n \n :param func:\n The function to call. Called without arguments.\n :type func: Callable[[], _pytest.runner.TResult]\n :param when:\n The phase in which the function is called.\n :param reraise:\n Exception or exceptions that shall propagate if raised by the\n function, instead of being wrapped in the CallInfo.\n \"\"\"\n excinfo = None\n start = timing.time()\n precise_start = timing.perf_counter()\n try:\n> result: TResult | None = func()\n\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:341: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:242: in \n lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise\n.pixi/envs/default/lib/python3.8/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.pixi/envs/default/lib/python3.8/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:92: in pytest_runtest_call\n yield from thread_exception_runtest_hook()\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:68: in thread_exception_runtest_hook\n yield\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:95: in pytest_runtest_call\n yield from unraisable_exception_runtest_hook()\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:70: in unraisable_exception_runtest_hook\n yield\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:846: in pytest_runtest_call\n yield from self._runtest_for(item, \"call\")\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:829: in _runtest_for\n yield\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = _capture_fixture=None>\nitem = \n\n @hookimpl(wrapper=True)\n def pytest_runtest_call(self, item: Item) -> Generator[None]:\n with self.item_capture(\"call\", item):\n> return (yield)\nE RuntimeError: generator raised StopIteration\n\n.pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py:880: RuntimeError"}, "teardown": {"duration": 0.00045209890231490135, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_generator_exit_direct", "lineno": 94, "outcome": "failed", "keywords": ["test_generator_exit_direct", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00028916297014802694, "outcome": "passed"}, "call": {"duration": 0.0002249880926683545, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 97, "message": "GeneratorExit"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 97, "message": "GeneratorExit"}], "longrepr": "def test_generator_exit_direct():\n # Directly raise GeneratorExit exception\n> raise GeneratorExit()\nE GeneratorExit\n\ntests/test_math_utils.py:97: GeneratorExit"}, "teardown": {"duration": 0.00042971898801624775, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "lineno": 104, "outcome": "failed", "keywords": ["test_recursion_limit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0005874220514670014, "outcome": "passed"}, "call": {"duration": 0.0002511070342734456, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 108, "message": "RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 108, "message": "RecursionError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4466ebfbb0>\n\n def test_recursion_limit(monkeypatch):\n # Lower recursion limit to force RecursionError on deep recursion\n original_limit = sys.getrecursionlimit()\n> sys.setrecursionlimit(50)\nE RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low\n\ntests/test_math_utils.py:108: RecursionError"}, "teardown": {"duration": 0.0011272020637989044, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "lineno": 114, "outcome": "passed", "keywords": ["test_malformed_code", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0004258720437064767, "outcome": "passed"}, "call": {"duration": 0.00033950200304389, "outcome": "passed"}, "teardown": {"duration": 0.0003007430350407958, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "lineno": 119, "outcome": "passed", "keywords": ["test_sys_exit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0005719750188291073, "outcome": "passed"}, "call": {"duration": 0.00030105304904282093, "outcome": "passed"}, "teardown": {"duration": 0.0009949709055945277, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "lineno": 127, "outcome": "failed", "keywords": ["test_broken_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0004778510192409158, "outcome": "passed"}, "call": {"duration": 0.00024109298828989267, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 132, "message": "AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 132, "message": "AttributeError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4466cd3370>\n\n def test_broken_function(monkeypatch):\n # Simulate broken function raising TypeError\n def broken_func(*args, **kwargs):\n raise TypeError(\"Broken function\")\n> monkeypatch.setattr(__name__, \"test_broken_function\", broken_func)\nE AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'\n\ntests/test_math_utils.py:132: AttributeError"}, "teardown": {"duration": 0.0011143990559503436, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "lineno": 135, "outcome": "passed", "keywords": ["test_import_error_patch", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0005372470477595925, "outcome": "passed"}, "call": {"duration": 0.00029834092129021883, "outcome": "passed"}, "teardown": {"duration": 0.0008468080777674913, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "lineno": 146, "outcome": "passed", "keywords": ["test_module_not_found_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00022685702424496412, "outcome": "passed"}, "call": {"duration": 0.0005564079619944096, "outcome": "passed"}, "teardown": {"duration": 0.0002461819676682353, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_uppercase_normal", "lineno": 7, "outcome": "passed", "keywords": ["test_uppercase_normal", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020473904442042112, "outcome": "passed"}, "call": {"duration": 0.00019969302229583263, "outcome": "passed"}, "teardown": {"duration": 0.00021990295499563217, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_uppercase_type_error", "lineno": 11, "outcome": "passed", "keywords": ["test_uppercase_type_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001893759472295642, "outcome": "passed"}, "call": {"duration": 0.00020406197290867567, "outcome": "passed"}, "teardown": {"duration": 0.00021910399664193392, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_reverse_string", "lineno": 16, "outcome": "passed", "keywords": ["test_reverse_string", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019783899188041687, "outcome": "passed"}, "call": {"duration": 0.00017716700676828623, "outcome": "passed"}, "teardown": {"duration": 0.00021673704031854868, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_warning_emit", "lineno": 20, "outcome": "passed", "keywords": ["test_warning_emit", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018432794604450464, "outcome": "passed"}, "call": {"duration": 0.0001793659757822752, "outcome": "passed"}, "teardown": {"duration": 0.00020071305334568024, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_encode_error", "lineno": 24, "outcome": "failed", "keywords": ["test_unicode_encode_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00020313996355980635, "outcome": "passed"}, "call": {"duration": 0.00021908094640821218, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 28, "message": "Failed: DID NOT RAISE "}, "traceback": [{"path": "tests/test_string_utils.py", "lineno": 28, "message": "Failed"}], "longrepr": "def test_unicode_encode_error():\n # UnicodeEncodeError due to decoding malformed surrogate byte\n with pytest.raises(UnicodeEncodeError):\n> b'\\udc80'.decode('utf-8')\nE Failed: DID NOT RAISE \n\ntests/test_string_utils.py:28: Failed"}, "teardown": {"duration": 0.00027646799571812153, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_error", "lineno": 29, "outcome": "passed", "keywords": ["test_unicode_decode_error", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019783200696110725, "outcome": "passed"}, "call": {"duration": 0.00022565096151083708, "outcome": "passed"}, "teardown": {"duration": 0.00021274294704198837, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_unicode_decode_surrogateescape", "lineno": 34, "outcome": "passed", "keywords": ["test_unicode_decode_surrogateescape", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018940994050353765, "outcome": "passed"}, "call": {"duration": 0.0001975309569388628, "outcome": "passed"}, "teardown": {"duration": 0.00021336192730814219, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_import_warning", "lineno": 39, "outcome": "passed", "keywords": ["test_import_warning", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018640700727701187, "outcome": "passed"}, "call": {"duration": 0.0002527860924601555, "outcome": "passed"}, "teardown": {"duration": 0.00025885901413857937, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_xfail_uppercase_digits", "lineno": 46, "outcome": "xfailed", "keywords": ["test_xfail_uppercase_digits", "xfail", "pytestmark", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0002366849221289158, "outcome": "passed"}, "call": {"duration": 0.0008762630168348551, "outcome": "skipped", "crash": {"path": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 50, "message": "AssertionError: assert 'ABC123' == 'ABC1234'\n \n - ABC1234\n ? -\n + ABC123"}, "traceback": [{"path": "tests/test_string_utils.py", "lineno": 50, "message": "AssertionError"}], "longrepr": "@pytest.mark.xfail(reason=\"Expected failure: uppercase does not handle digits\")\n def test_xfail_uppercase_digits():\n # Expected fail test because uppercase won't change digits\n> assert uppercase(\"abc123\") == \"ABC1234\"\nE AssertionError: assert 'ABC123' == 'ABC1234'\nE \nE - ABC1234\nE ? -\nE + ABC123\n\ntests/test_string_utils.py:50: AssertionError"}, "teardown": {"duration": 0.0012361010303720832, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\u", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 28}, {"message": "Test warning", "category": "UserWarning", "when": "runtest", "filename": "/workspace/tligui_y/slic/tests/test_string_utils.py", "lineno": 23}]}
\ No newline at end of file