diff --git a/ci-reports/markdown/TEST-REPORT.md b/ci-reports/markdown/TEST-REPORT.md
index 24c3404ce..8569daa22 100644
--- a/ci-reports/markdown/TEST-REPORT.md
+++ b/ci-reports/markdown/TEST-REPORT.md
@@ -1,5 +1,245 @@
+โ ๏ธ **Test execution interrupted**
+
+> The test run was manually interrupted (e.g. via Ctrl+C).
+
+
+๐ Short test summary info
+
+```
+=========================== short test summary info ============================
+FAILED tests/test_io_utils.py::test_write_file_readonly - Failed: DID NOT RAISE
+FAILED tests/test_math_utils.py::test_broken - NameError: name 'want_the_test_to_fail' is not defined
+FAILED tests/test_math_utils.py::test_addition_fail - assert 4 == 5
+ + where 4 = addition(2, 2)
+FAILED tests/test_math_utils.py::test_runtime_error - RuntimeError: Forced runtime error
+FAILED tests/test_math_utils.py::test_unhandled_exception - Exception: Generic unhandled exception
+FAILED tests/test_math_utils.py::test_stop_iteration_direct - RuntimeError: generator raised StopIteration
+FAILED tests/test_math_utils.py::test_generator_exit_direct - GeneratorExit
+FAILED tests/test_math_utils.py::test_recursion_limit - RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low
+FAILED tests/test_math_utils.py::test_broken_function - AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'
+FAILED tests/test_string_utils.py::test_unicode_encode_error - Failed: DID NOT RAISE
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+/workspace/tligui_y/slic/tests/test_string_utils.py:54: KeyboardInterrupt
+(to show a full traceback on KeyboardInterrupt use --full-trace)
+============= 10 failed, 31 passed, 2 xfailed, 2 warnings in 0.47s =============
+```
+
+
+
+๐ชต Full raw pytest log
+
+```
+============================= test session starts ==============================
+platform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0
+rootdir: /workspace/tligui_y/slic
+plugins: cov-5.0.0, allure-pytest-2.13.5, metadata-3.1.1, html-4.1.1, md-report-0.6.2, json-report-1.5.0
+collected 44 items
+
+tests/test_io_utils.py ........F.
+tests/test_math_utils.py F..F.xF.......F.FFF..F..
+tests/test_string_utils.py ....F...x
+
+=================================== FAILURES ===================================
+___________________________ test_write_file_readonly ___________________________
+
+tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_write_file_readonly0')
+
+ def test_write_file_readonly(tmp_path):
+ # Writing to read-only file raises PermissionError
+ file = tmp_path / "readonly.txt"
+ file.write_text("data")
+ os.chmod(file, 0o444)
+ with pytest.raises(PermissionError):
+ with open(file, "w") as f:
+> f.write("new content")
+E Failed: DID NOT RAISE
+
+tests/test_io_utils.py:72: Failed
+_________________________________ test_broken __________________________________
+
+ def test_broken():
+ # simulating a broken or faulty test implementation that will cause the test to error
+> want_the_test_to_fail
+E NameError: name 'want_the_test_to_fail' is not defined
+
+tests/test_math_utils.py:16: NameError
+______________________________ test_addition_fail ______________________________
+
+ def test_addition_fail():
+ # Assertion failure: expected incorrect result
+> assert addition(2, 2) == 5
+E assert 4 == 5
+E + where 4 = addition(2, 2)
+
+tests/test_math_utils.py:29: AssertionError
+______________________________ test_runtime_error ______________________________
+
+ def test_runtime_error():
+ # Test raises an uncaught RuntimeError
+> raise RuntimeError("Forced runtime error")
+E RuntimeError: Forced runtime error
+
+tests/test_math_utils.py:43: RuntimeError
+___________________________ test_unhandled_exception ___________________________
+
+ def test_unhandled_exception():
+ # Raises generic unhandled Exception
+> raise Exception("Generic unhandled exception")
+E Exception: Generic unhandled exception
+
+tests/test_math_utils.py:84: Exception
+__________________________ test_stop_iteration_direct __________________________
+
+ def test_stop_iteration_direct():
+ # Directly raise StopIteration exception
+> raise StopIteration()
+E StopIteration
+
+tests/test_math_utils.py:93: StopIteration
+
+The above exception was the direct cause of the following exception:
+
+cls =
+func = . at 0x7f89813b69d0>
+when = 'call'
+reraise = (, )
+
+ @classmethod
+ def from_call(
+ cls,
+ func: Callable[[], TResult],
+ when: Literal["collect", "setup", "call", "teardown"],
+ reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None,
+ ) -> CallInfo[TResult]:
+ """Call func, wrapping the result in a CallInfo.
+
+ :param func:
+ The function to call. Called without arguments.
+ :type func: Callable[[], _pytest.runner.TResult]
+ :param when:
+ The phase in which the function is called.
+ :param reraise:
+ Exception or exceptions that shall propagate if raised by the
+ function, instead of being wrapped in the CallInfo.
+ """
+ excinfo = None
+ start = timing.time()
+ precise_start = timing.perf_counter()
+ try:
+> result: TResult | None = func()
+
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:341:
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/runner.py:242: in
+ lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
+.pixi/envs/default/lib/python3.8/site-packages/pluggy/_hooks.py:513: in __call__
+ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
+.pixi/envs/default/lib/python3.8/site-packages/pluggy/_manager.py:120: in _hookexec
+ return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:92: in pytest_runtest_call
+ yield from thread_exception_runtest_hook()
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/threadexception.py:68: in thread_exception_runtest_hook
+ yield
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:95: in pytest_runtest_call
+ yield from unraisable_exception_runtest_hook()
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/unraisableexception.py:70: in unraisable_exception_runtest_hook
+ yield
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:846: in pytest_runtest_call
+ yield from self._runtest_for(item, "call")
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/logging.py:829: in _runtest_for
+ yield
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+self = _capture_fixture=None>
+item =
+
+ @hookimpl(wrapper=True)
+ def pytest_runtest_call(self, item: Item) -> Generator[None]:
+ with self.item_capture("call", item):
+> return (yield)
+E RuntimeError: generator raised StopIteration
+
+.pixi/envs/default/lib/python3.8/site-packages/_pytest/capture.py:880: RuntimeError
+__________________________ test_generator_exit_direct __________________________
+
+ def test_generator_exit_direct():
+ # Directly raise GeneratorExit exception
+> raise GeneratorExit()
+E GeneratorExit
+
+tests/test_math_utils.py:97: GeneratorExit
+_____________________________ test_recursion_limit _____________________________
+
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f89810a94c0>
+
+ def test_recursion_limit(monkeypatch):
+ # Lower recursion limit to force RecursionError on deep recursion
+ original_limit = sys.getrecursionlimit()
+> sys.setrecursionlimit(50)
+E RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low
+
+tests/test_math_utils.py:102: RecursionError
+_____________________________ test_broken_function _____________________________
+
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f898115eca0>
+
+ def test_broken_function(monkeypatch):
+ # Simulate broken function raising TypeError
+ def broken_func(*args, **kwargs):
+ raise TypeError("Broken function")
+> monkeypatch.setattr(__name__, "test_broken_function", broken_func)
+E AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'
+
+tests/test_math_utils.py:126: AttributeError
+__________________________ test_unicode_encode_error ___________________________
+
+ def test_unicode_encode_error():
+ # UnicodeEncodeError due to decoding malformed surrogate byte
+ with pytest.raises(UnicodeEncodeError):
+> b'\udc80'.decode('utf-8')
+E Failed: DID NOT RAISE
+
+tests/test_string_utils.py:28: Failed
+=============================== warnings summary ===============================
+tests/test_string_utils.py:28
+ /workspace/tligui_y/slic/tests/test_string_utils.py:28: DeprecationWarning: invalid escape sequence \u
+ b'\udc80'.decode('utf-8')
+
+tests/test_string_utils.py::test_warning_emit
+ /workspace/tligui_y/slic/tests/test_string_utils.py:23: UserWarning: Test warning
+ warnings.warn("Test warning", UserWarning)
+
+-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
+--------------------------------- JSON report ----------------------------------
+report saved to: ci-reports/markdown/pytest-report.json
+
+---------- coverage: platform linux, python 3.8.20-final-0 -----------
+Coverage HTML written to dir ci-reports/coverage/
+Coverage XML written to file ci-reports/coverage/coverage.xml
+
+=========================== short test summary info ============================
+FAILED tests/test_io_utils.py::test_write_file_readonly - Failed: DID NOT RAISE
+FAILED tests/test_math_utils.py::test_broken - NameError: name 'want_the_test_to_fail' is not defined
+FAILED tests/test_math_utils.py::test_addition_fail - assert 4 == 5
+ + where 4 = addition(2, 2)
+FAILED tests/test_math_utils.py::test_runtime_error - RuntimeError: Forced runtime error
+FAILED tests/test_math_utils.py::test_unhandled_exception - Exception: Generic unhandled exception
+FAILED tests/test_math_utils.py::test_stop_iteration_direct - RuntimeError: generator raised StopIteration
+FAILED tests/test_math_utils.py::test_generator_exit_direct - GeneratorExit
+FAILED tests/test_math_utils.py::test_recursion_limit - RecursionError: cannot set the recursion limit to 50 at the recursion depth 37: the limit is too low
+FAILED tests/test_math_utils.py::test_broken_function - AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'
+FAILED tests/test_string_utils.py::test_unicode_encode_error - Failed: DID NOT RAISE
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+/workspace/tligui_y/slic/tests/test_string_utils.py:54: KeyboardInterrupt
+(to show a full traceback on KeyboardInterrupt use --full-trace)
+============= 10 failed, 31 passed, 2 xfailed, 2 warnings in 0.47s =============
+```
+
+
+---
+
# ๐งช Test Report
-*Generated on 2025-07-15 08:17:57*
+*Generated on 2025-07-15 08:25:58*
## ๐ Summary
- **Passed**: `32`
@@ -7,7 +247,7 @@
- **Xfailed**: `2`
- **Total**: `44`
- **Collected**: `44`
-- **Total Duration**: `0.493`s
+- **Total Duration**: `0.471`s
## ๐ Tests
@@ -23,7 +263,7 @@
โ
#1
- **Status:** โ
`passed`
-- **Duration:** `0.000684` s
+- **Duration:** `0.000522` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -32,7 +272,7 @@
๐ Duration
```
-0.004489094950258732
+0.0036591109819710255
```
@@ -51,7 +291,7 @@ passed
๐ Duration
```
-0.0006844139425083995
+0.0005215409910306334
```
@@ -70,7 +310,7 @@ passed
๐ Duration
```
-0.00128162803594023
+0.0011662530014291406
```
@@ -93,7 +333,7 @@ passed
โ
#2
- **Status:** โ
`passed`
-- **Duration:** `0.000349` s
+- **Duration:** `0.000345` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -102,7 +342,7 @@ passed
๐ Duration
```
-0.0007592289475724101
+0.0006409339839592576
```
@@ -121,7 +361,7 @@ passed
๐ Duration
```
-0.00034866901114583015
+0.00034460099413990974
```
@@ -140,7 +380,7 @@ passed
๐ Duration
```
-0.0007208429742604494
+0.0006388849578797817
```
@@ -163,7 +403,7 @@ passed
โ
#3
- **Status:** โ
`passed`
-- **Duration:** `0.000357` s
+- **Duration:** `0.000339` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -172,7 +412,7 @@ passed
๐ Duration
```
-0.00019041995983570814
+0.00018698396161198616
```
@@ -191,7 +431,7 @@ passed
๐ Duration
```
-0.0003566719824448228
+0.00033947895281016827
```
@@ -210,7 +450,7 @@ passed
๐ Duration
```
-0.00022041099146008492
+0.00020050897728651762
```
@@ -233,7 +473,7 @@ passed
โ
#4
- **Status:** โ
`passed`
-- **Duration:** `0.000206` s
+- **Duration:** `0.000203` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -242,7 +482,7 @@ passed
๐ Duration
```
-0.00018429593183100224
+0.00017157604452222586
```
@@ -261,7 +501,7 @@ passed
๐ Duration
```
-0.00020608596969395876
+0.00020303204655647278
```
@@ -280,7 +520,7 @@ passed
๐ Duration
```
-0.0001983050024136901
+0.0002301499480381608
```
@@ -303,7 +543,7 @@ passed
โ
#5
- **Status:** โ
`passed`
-- **Duration:** `0.000223` s
+- **Duration:** `0.000208` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -312,7 +552,7 @@ passed
๐ Duration
```
-0.0003640140639618039
+0.0003509749658405781
```
@@ -331,7 +571,7 @@ passed
๐ Duration
```
-0.00022322905715554953
+0.00020803301595151424
```
@@ -350,7 +590,7 @@ passed
๐ Duration
```
-0.0006357829552143812
+0.0006306020077317953
```
@@ -373,7 +613,7 @@ passed
โ
#6
- **Status:** โ
`passed`
-- **Duration:** `0.008769` s
+- **Duration:** `0.008659` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -382,7 +622,7 @@ passed
๐ Duration
```
-0.0003387599717825651
+0.0003532100236043334
```
@@ -401,7 +641,7 @@ passed
๐ Duration
```
-0.008769409032538533
+0.00865919201169163
```
@@ -420,7 +660,7 @@ passed
๐ Duration
```
-0.0008422170067206025
+0.000666565028950572
```
@@ -443,7 +683,7 @@ passed
โ
#7
- **Status:** โ
`passed`
-- **Duration:** `0.000195` s
+- **Duration:** `0.000196` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -452,7 +692,7 @@ passed
๐ Duration
```
-0.00021573901176452637
+0.00018092698883265257
```
@@ -471,7 +711,7 @@ passed
๐ Duration
```
-0.00019488506950438023
+0.0001955120824277401
```
@@ -490,7 +730,7 @@ passed
๐ Duration
```
-0.00019953702576458454
+0.00019338796846568584
```
@@ -513,7 +753,7 @@ passed
โ
#8
- **Status:** โ
`passed`
-- **Duration:** `0.000228` s
+- **Duration:** `0.000207` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -522,7 +762,7 @@ passed
๐ Duration
```
-0.00037874700501561165
+0.0003435799153521657
```
@@ -541,7 +781,7 @@ passed
๐ Duration
```
-0.0002275099977850914
+0.00020655000116676092
```
@@ -560,7 +800,7 @@ passed
๐ Duration
```
-0.000740951974876225
+0.0006983630592003465
```
@@ -583,7 +823,7 @@ passed
โ
#10
- **Status:** โ
`passed`
-- **Duration:** `0.000245` s
+- **Duration:** `0.000199` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -592,7 +832,7 @@ passed
๐ Duration
```
-0.00022397900465875864
+0.0001840329496189952
```
@@ -611,7 +851,7 @@ passed
๐ Duration
```
-0.0002445880090817809
+0.00019857799634337425
```
@@ -630,7 +870,7 @@ passed
๐ Duration
```
-0.00021364097483456135
+0.0002072639763355255
```
@@ -658,7 +898,7 @@ passed
โ
#12
- **Status:** โ
`passed`
-- **Duration:** `0.000202` s
+- **Duration:** `0.000200` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -667,7 +907,7 @@ passed
๐ Duration
```
-0.00019144092220813036
+0.00018008705228567123
```
@@ -686,7 +926,7 @@ passed
๐ Duration
```
-0.0002020229585468769
+0.00019993295427411795
```
@@ -705,7 +945,7 @@ passed
๐ Duration
```
-0.0001967179123312235
+0.00019743095617741346
```
@@ -728,7 +968,7 @@ passed
โ
#13
- **Status:** โ
`passed`
-- **Duration:** `0.000167` s
+- **Duration:** `0.000157` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -737,7 +977,7 @@ passed
๐ Duration
```
-0.00017437501810491085
+0.00017256697174161673
```
@@ -756,7 +996,7 @@ passed
๐ Duration
```
-0.00016747298650443554
+0.00015739398077130318
```
@@ -775,7 +1015,7 @@ passed
๐ Duration
```
-0.00019609497394412756
+0.0002057100646197796
```
@@ -798,7 +1038,7 @@ passed
โ
#15
- **Status:** โ
`passed`
-- **Duration:** `0.000198` s
+- **Duration:** `0.000201` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -807,7 +1047,7 @@ passed
๐ Duration
```
-0.00018964800983667374
+0.0001807840308174491
```
@@ -826,7 +1066,7 @@ passed
๐ Duration
```
-0.0001984010450541973
+0.00020075496286153793
```
@@ -845,7 +1085,7 @@ passed
๐ Duration
```
-0.0001975690247491002
+0.00019007897935807705
```
@@ -877,7 +1117,7 @@ passed
๐ Duration
```
-0.00018735602498054504
+0.0001860220218077302
```
@@ -896,7 +1136,7 @@ passed
๐ Duration
```
-0.00019317190162837505
+0.00019263103604316711
```
@@ -915,7 +1155,7 @@ passed
๐ Duration
```
-0.0001976839266717434
+0.00020372308790683746
```
@@ -938,7 +1178,7 @@ passed
โ
#19
- **Status:** โ
`passed`
-- **Duration:** `0.000181` s
+- **Duration:** `0.000175` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -947,7 +1187,7 @@ passed
๐ Duration
```
-0.000191046972759068
+0.0001791520044207573
```
@@ -966,7 +1206,7 @@ passed
๐ Duration
```
-0.0001811350230127573
+0.00017502799164503813
```
@@ -985,7 +1225,7 @@ passed
๐ Duration
```
-0.00019021600019186735
+0.0002139130374416709
```
@@ -1008,7 +1248,7 @@ passed
โ
#20
- **Status:** โ
`passed`
-- **Duration:** `0.000933` s
+- **Duration:** `0.000839` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1017,7 +1257,7 @@ passed
๐ Duration
```
-0.00018191395793110132
+0.00018318404909223318
```
@@ -1036,7 +1276,7 @@ passed
๐ Duration
```
-0.0009334810310974717
+0.0008387360721826553
```
@@ -1055,7 +1295,7 @@ passed
๐ Duration
```
-0.00021670304704457521
+0.00020623893942683935
```
@@ -1078,7 +1318,7 @@ passed
โ
#21
- **Status:** โ
`passed`
-- **Duration:** `0.000176` s
+- **Duration:** `0.000175` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1087,7 +1327,7 @@ passed
๐ Duration
```
-0.00018432398792356253
+0.00019409996457397938
```
@@ -1106,7 +1346,7 @@ passed
๐ Duration
```
-0.00017605803441256285
+0.00017468200530856848
```
@@ -1125,7 +1365,7 @@ passed
๐ Duration
```
-0.0001879989868029952
+0.0001904249656945467
```
@@ -1148,7 +1388,7 @@ passed
โ
#22
- **Status:** โ
`passed`
-- **Duration:** `0.000181` s
+- **Duration:** `0.000176` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1157,7 +1397,7 @@ passed
๐ Duration
```
-0.00016388704534620047
+0.00016954494640231133
```
@@ -1176,7 +1416,7 @@ passed
๐ Duration
```
-0.0001806630752980709
+0.0001763530308380723
```
@@ -1195,7 +1435,7 @@ passed
๐ Duration
```
-0.00019419798627495766
+0.00019564793910831213
```
@@ -1218,7 +1458,7 @@ passed
โ
#23
- **Status:** โ
`passed`
-- **Duration:** `0.000186` s
+- **Duration:** `0.000174` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1227,7 +1467,7 @@ passed
๐ Duration
```
-0.00016722199507057667
+0.00018369406461715698
```
@@ -1246,7 +1486,7 @@ passed
๐ Duration
```
-0.00018580106552690268
+0.00017384998500347137
```
@@ -1265,7 +1505,7 @@ passed
๐ Duration
```
-0.00018392701167613268
+0.00018262001685798168
```
@@ -1288,7 +1528,7 @@ passed
โ
#24
- **Status:** โ
`passed`
-- **Duration:** `0.000172` s
+- **Duration:** `0.000174` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1297,7 +1537,7 @@ passed
๐ Duration
```
-0.0001760859740898013
+0.00018100393936038017
```
@@ -1316,7 +1556,7 @@ passed
๐ Duration
```
-0.00017235905397683382
+0.00017426698468625546
```
@@ -1335,7 +1575,7 @@ passed
๐ Duration
```
-0.00018672097939997911
+0.00019257806707173586
```
@@ -1358,7 +1598,7 @@ passed
โ
#26
- **Status:** โ
`passed`
-- **Duration:** `0.000195` s
+- **Duration:** `0.000183` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1367,7 +1607,7 @@ passed
๐ Duration
```
-0.00017966004088521004
+0.00018078600987792015
```
@@ -1386,7 +1626,7 @@ passed
๐ Duration
```
-0.00019452592823654413
+0.00018280197400599718
```
@@ -1405,7 +1645,7 @@ passed
๐ Duration
```
-0.00018929899670183659
+0.0001881549833342433
```
@@ -1428,7 +1668,7 @@ passed
โ
#30
- **Status:** โ
`passed`
-- **Duration:** `0.000215` s
+- **Duration:** `0.000219` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1437,7 +1677,7 @@ passed
๐ Duration
```
-0.00019153498578816652
+0.0001845810329541564
```
@@ -1456,7 +1696,7 @@ passed
๐ Duration
```
-0.00021516799461096525
+0.00021933799143880606
```
@@ -1475,7 +1715,7 @@ passed
๐ Duration
```
-0.00021473504602909088
+0.0001934240572154522
```
@@ -1498,7 +1738,7 @@ passed
โ
#31
- **Status:** โ
`passed`
-- **Duration:** `0.000209` s
+- **Duration:** `0.000198` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1507,7 +1747,7 @@ passed
๐ Duration
```
-0.0003814550582319498
+0.00034793990198522806
```
@@ -1526,7 +1766,7 @@ passed
๐ Duration
```
-0.00020856503397226334
+0.00019802397582679987
```
@@ -1545,7 +1785,7 @@ passed
๐ Duration
```
-0.0006595569429919124
+0.0006310410099104047
```
@@ -1568,7 +1808,7 @@ passed
โ
#33
- **Status:** โ
`passed`
-- **Duration:** `0.000238` s
+- **Duration:** `0.000229` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1577,7 +1817,7 @@ passed
๐ Duration
```
-0.0003420260036364198
+0.0003470799420028925
```
@@ -1596,7 +1836,7 @@ passed
๐ Duration
```
-0.00023755698930472136
+0.00022921699564903975
```
@@ -1615,7 +1855,7 @@ passed
๐ Duration
```
-0.0006303309928625822
+0.0006256999913603067
```
@@ -1638,7 +1878,7 @@ passed
โ
#34
- **Status:** โ
`passed`
-- **Duration:** `0.000492` s
+- **Duration:** `0.000451` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1647,7 +1887,7 @@ passed
๐ Duration
```
-0.0001796300057321787
+0.00018279394134879112
```
@@ -1666,7 +1906,7 @@ passed
๐ Duration
```
-0.0004920799983665347
+0.0004510889993980527
```
@@ -1685,7 +1925,7 @@ passed
๐ Duration
```
-0.00020946201402693987
+0.00019947695545852184
```
@@ -1713,7 +1953,7 @@ passed
โ
#35
- **Status:** โ
`passed`
-- **Duration:** `0.000170` s
+- **Duration:** `0.000176` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1722,7 +1962,7 @@ passed
๐ Duration
```
-0.0001809720415621996
+0.00018949003424495459
```
@@ -1741,7 +1981,7 @@ passed
๐ Duration
```
-0.0001699109561741352
+0.00017643999308347702
```
@@ -1760,7 +2000,7 @@ passed
๐ Duration
```
-0.0001904919045045972
+0.00019116594921797514
```
@@ -1783,7 +2023,7 @@ passed
โ
#36
- **Status:** โ
`passed`
-- **Duration:** `0.000185` s
+- **Duration:** `0.000181` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1792,7 +2032,7 @@ passed
๐ Duration
```
-0.0001955030020326376
+0.00018592795822769403
```
@@ -1811,7 +2051,7 @@ passed
๐ Duration
```
-0.00018532900139689445
+0.00018133607227355242
```
@@ -1830,7 +2070,7 @@ passed
๐ Duration
```
-0.00019166292622685432
+0.0001904600067064166
```
@@ -1853,7 +2093,7 @@ passed
โ
#37
- **Status:** โ
`passed`
-- **Duration:** `0.000163` s
+- **Duration:** `0.000170` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1862,7 +2102,7 @@ passed
๐ Duration
```
-0.00016802200116217136
+0.0001778540899977088
```
@@ -1881,7 +2121,7 @@ passed
๐ Duration
```
-0.00016269809566438198
+0.00017014704644680023
```
@@ -1900,7 +2140,7 @@ passed
๐ Duration
```
-0.0001978430664166808
+0.00019012903794646263
```
@@ -1923,7 +2163,7 @@ passed
โ
#38
- **Status:** โ
`passed`
-- **Duration:** `0.000168` s
+- **Duration:** `0.000162` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -1932,7 +2172,7 @@ passed
๐ Duration
```
-0.00018341001123189926
+0.00018130801618099213
```
@@ -1951,7 +2191,7 @@ passed
๐ Duration
```
-0.00016795506235212088
+0.00016195501666516066
```
@@ -1970,7 +2210,7 @@ passed
๐ Duration
```
-0.00018405704759061337
+0.00018399395048618317
```
@@ -1993,7 +2233,7 @@ passed
โ
#40
- **Status:** โ
`passed`
-- **Duration:** `0.000199` s
+- **Duration:** `0.000183` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2002,7 +2242,7 @@ passed
๐ Duration
```
-0.00017893302720040083
+0.0001824160572141409
```
@@ -2021,7 +2261,7 @@ passed
๐ Duration
```
-0.00019873399287462234
+0.00018280697986483574
```
@@ -2040,7 +2280,7 @@ passed
๐ Duration
```
-0.0001910560531541705
+0.00020179594866931438
```
@@ -2063,7 +2303,7 @@ passed
โ
#41
- **Status:** โ
`passed`
-- **Duration:** `0.000181` s
+- **Duration:** `0.000188` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2072,7 +2312,7 @@ passed
๐ Duration
```
-0.000180736999027431
+0.00017966493032872677
```
@@ -2091,7 +2331,7 @@ passed
๐ Duration
```
-0.00018068705685436726
+0.00018832995556294918
```
@@ -2110,7 +2350,7 @@ passed
๐ Duration
```
-0.00019529310520738363
+0.00019340403378009796
```
@@ -2133,7 +2373,7 @@ passed
โ
#42
- **Status:** โ
`passed`
-- **Duration:** `0.000188` s
+- **Duration:** `0.000176` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2142,7 +2382,7 @@ passed
๐ Duration
```
-0.0001714759273454547
+0.00017560203559696674
```
@@ -2161,7 +2401,7 @@ passed
๐ Duration
```
-0.00018791807815432549
+0.00017584103625267744
```
@@ -2180,7 +2420,7 @@ passed
๐ Duration
```
-0.00018813100177794695
+0.00019798800349235535
```
@@ -2212,7 +2452,7 @@ passed
๐ Duration
```
-0.00018309091683477163
+0.00018894695676863194
```
@@ -2245,7 +2485,7 @@ passed
โ #9
- **Status:** โ `failed`
-- **Duration:** `0.001056` s
+- **Duration:** `0.000986` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2254,7 +2494,7 @@ passed
๐ Duration
```
-0.0007795440033078194
+0.0006425869651138783
```
@@ -2273,7 +2513,7 @@ passed
๐ Duration
```
-0.0010555379558354616
+0.000985741033218801
```
@@ -2332,7 +2572,7 @@ tests/test_io_utils.py:72: Failed
๐ Duration
```
-0.0009553310228511691
+0.0006829780759289861
```
@@ -2360,7 +2600,7 @@ passed
โ #11
- **Status:** โ `failed`
-- **Duration:** `0.000184` s
+- **Duration:** `0.000177` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2369,7 +2609,7 @@ passed
๐ Duration
```
-0.00019246398005634546
+0.00020324706565588713
```
@@ -2388,7 +2628,7 @@ passed
๐ Duration
```
-0.00018435704987496138
+0.00017711101099848747
```
@@ -2440,7 +2680,7 @@ tests/test_math_utils.py:16: NameError
๐ Duration
```
-0.00025507796090096235
+0.00024819199461489916
```
@@ -2463,7 +2703,7 @@ passed
โ #14
- **Status:** โ `failed`
-- **Duration:** `0.000477` s
+- **Duration:** `0.000435` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2472,7 +2712,7 @@ passed
๐ Duration
```
-0.0001691450597718358
+0.00017123401630669832
```
@@ -2491,7 +2731,7 @@ passed
๐ Duration
```
-0.0004768100334331393
+0.00043531996197998524
```
@@ -2545,7 +2785,7 @@ tests/test_math_utils.py:29: AssertionError
๐ Duration
```
-0.00026376801542937756
+0.00023484497796744108
```
@@ -2568,7 +2808,7 @@ passed
โ #17
- **Status:** โ `failed`
-- **Duration:** `0.000193` s
+- **Duration:** `0.000173` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2577,7 +2817,7 @@ passed
๐ Duration
```
-0.00019102497026324272
+0.0001836859155446291
```
@@ -2596,7 +2836,7 @@ passed
๐ Duration
```
-0.00019292894285172224
+0.00017295905854552984
```
@@ -2648,7 +2888,7 @@ tests/test_math_utils.py:43: RuntimeError
๐ Duration
```
-0.00023589807096868753
+0.00024357903748750687
```
@@ -2671,7 +2911,7 @@ passed
โ #25
- **Status:** โ `failed`
-- **Duration:** `0.000189` s
+- **Duration:** `0.000177` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2680,7 +2920,7 @@ passed
๐ Duration
```
-0.00018074410036206245
+0.00017955503426492214
```
@@ -2699,7 +2939,7 @@ passed
๐ Duration
```
-0.0001893120352178812
+0.00017679401207715273
```
@@ -2751,7 +2991,7 @@ tests/test_math_utils.py:84: Exception
๐ Duration
```
-0.00023920799139887094
+0.00024748698342591524
```
@@ -2774,7 +3014,7 @@ passed
โ #27
- **Status:** โ `failed`
-- **Duration:** `0.000175` s
+- **Duration:** `0.000174` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2783,7 +3023,7 @@ passed
๐ Duration
```
-0.00018349499441683292
+0.0001802520127967
```
@@ -2802,7 +3042,7 @@ passed
๐ Duration
```
-0.0001746440539136529
+0.00017436407506465912
```
@@ -2878,7 +3118,7 @@ tests/test_math_utils.py:93: StopIteration
The above exception was the direct cause of the following exception:
cls =
-func = . at 0x7f6c0b9338b0>
+func = . at 0x7f89813b69d0>
when = 'call'
reraise = (, )
@@ -2948,7 +3188,7 @@ E RuntimeError: generator raised StopIteration
๐ Duration
```
-0.00044928805436939
+0.0003520810278132558
```
@@ -2971,7 +3211,7 @@ passed
โ #28
- **Status:** โ `failed`
-- **Duration:** `0.000203` s
+- **Duration:** `0.000204` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -2980,7 +3220,7 @@ passed
๐ Duration
```
-0.0002709520049393177
+0.00023328594397753477
```
@@ -2999,7 +3239,7 @@ passed
๐ Duration
```
-0.00020276301074773073
+0.00020388304255902767
```
@@ -3051,7 +3291,7 @@ tests/test_math_utils.py:97: GeneratorExit
๐ Duration
```
-0.0002941089915111661
+0.0002671870170161128
```
@@ -3074,7 +3314,7 @@ passed
โ #29
- **Status:** โ `failed`
-- **Duration:** `0.000219` s
+- **Duration:** `0.000209` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3083,7 +3323,7 @@ passed
๐ Duration
```
-0.00045932596549391747
+0.0004030209966003895
```
@@ -3102,7 +3342,7 @@ passed
๐ Duration
```
-0.00021862389985471964
+0.00020866305567324162
```
@@ -3138,7 +3378,7 @@ message: RecursionError
๐ Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f6c0b736f10>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f89810a94c0>
def test_recursion_limit(monkeypatch):
# Lower recursion limit to force RecursionError on deep recursion
@@ -3157,7 +3397,7 @@ tests/test_math_utils.py:102: RecursionError
๐ Duration
```
-0.0008338589686900377
+0.0007142230169847608
```
@@ -3180,7 +3420,7 @@ passed
โ #32
- **Status:** โ `failed`
-- **Duration:** `0.000192` s
+- **Duration:** `0.000187` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3189,7 +3429,7 @@ passed
๐ Duration
```
-0.00035349803511053324
+0.0003372350474819541
```
@@ -3208,7 +3448,7 @@ passed
๐ Duration
```
-0.00019166001584380865
+0.00018749304581433535
```
@@ -3244,7 +3484,7 @@ message: AttributeError
๐ Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f6c0b54aca0>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f898115eca0>
def test_broken_function(monkeypatch):
# Simulate broken function raising TypeError
@@ -3264,7 +3504,7 @@ tests/test_math_utils.py:126: AttributeError
๐ Duration
```
-0.0006822709692642093
+0.0006643679225817323
```
@@ -3292,7 +3532,7 @@ passed
โ #39
- **Status:** โ `failed`
-- **Duration:** `0.000203` s
+- **Duration:** `0.000207` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3301,7 +3541,7 @@ passed
๐ Duration
```
-0.0001828980166465044
+0.00018164003267884254
```
@@ -3320,7 +3560,7 @@ passed
๐ Duration
```
-0.0002025360008701682
+0.00020650203805416822
```
@@ -3373,7 +3613,7 @@ tests/test_string_utils.py:28: Failed
๐ Duration
```
-0.00024413398932665586
+0.00023467396385967731
```
@@ -3406,7 +3646,7 @@ passed
โ #16
- **Status:** โ `xfailed`
-- **Duration:** `0.000316` s
+- **Duration:** `0.000284` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3415,7 +3655,7 @@ passed
๐ Duration
```
-0.00018579699099063873
+0.00019726308528333902
```
@@ -3434,7 +3674,7 @@ passed
๐ Duration
```
-0.000316492049023509
+0.00028389296494424343
```
@@ -3489,7 +3729,7 @@ tests/test_math_utils.py:39: AssertionError
๐ Duration
```
-0.00025751092471182346
+0.0002543970476835966
```
@@ -3517,7 +3757,7 @@ passed
โ #43
- **Status:** โ `xfailed`
-- **Duration:** `0.000709` s
+- **Duration:** `0.000606` s
- **Severity:** `normal`
### ๐ง Setup Phase
@@ -3526,7 +3766,7 @@ passed
๐ Duration
```
-0.00017805001698434353
+0.00017529306933283806
```
@@ -3545,7 +3785,7 @@ passed
๐ Duration
```
-0.0007094360189512372
+0.0006064599147066474
```
@@ -3606,7 +3846,7 @@ tests/test_string_utils.py:50: AssertionError
๐ Duration
```
-0.000262564979493618
+0.00028272904455661774
```
diff --git a/ci-reports/markdown/pytest-report.json b/ci-reports/markdown/pytest-report.json
index f228815e1..81da9e7b1 100644
--- a/ci-reports/markdown/pytest-report.json
+++ b/ci-reports/markdown/pytest-report.json
@@ -1 +1 @@
-{"created": 1752567767.94921, "duration": 0.5046579837799072, "exitcode": 2, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 32, "failed": 10, "xfailed": 2, "total": 44, "collected": 44}, "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": 98}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "type": "Function", "lineno": 108}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "type": "Function", "lineno": 113}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "type": "Function", "lineno": 121}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "type": "Function", "lineno": 129}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "type": "Function", "lineno": 140}]}, {"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/test_string_utils.py::test_keyboard_interrupt_direct", "type": "Function", "lineno": 51}]}, {"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.004050245974212885, "outcome": "passed"}, "call": {"duration": 0.0005863331025466323, "outcome": "passed"}, "teardown": {"duration": 0.001239334000274539, "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.0006860869470983744, "outcome": "passed"}, "call": {"duration": 0.0003353259526193142, "outcome": "passed"}, "teardown": {"duration": 0.0006795349763706326, "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.00018472608644515276, "outcome": "passed"}, "call": {"duration": 0.0003370919730514288, "outcome": "passed"}, "teardown": {"duration": 0.00020422297529876232, "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.00020163401495665312, "outcome": "passed"}, "call": {"duration": 0.00019882607739418745, "outcome": "passed"}, "teardown": {"duration": 0.0001993540208786726, "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.00033765402622520924, "outcome": "passed"}, "call": {"duration": 0.00020738807506859303, "outcome": "passed"}, "teardown": {"duration": 0.0006167629035189748, "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.00036778091453015804, "outcome": "passed"}, "call": {"duration": 0.009337818017229438, "outcome": "passed"}, "teardown": {"duration": 0.0006889340002089739, "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.0001813649432733655, "outcome": "passed"}, "call": {"duration": 0.00018623401410877705, "outcome": "passed"}, "teardown": {"duration": 0.00020688003860414028, "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.00032359606120735407, "outcome": "passed"}, "call": {"duration": 0.0002041100524365902, "outcome": "passed"}, "teardown": {"duration": 0.0010288049234077334, "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.0006535090506076813, "outcome": "passed"}, "call": {"duration": 0.0009140640031546354, "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.0006678180070593953, "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.00018619804177433252, "outcome": "passed"}, "call": {"duration": 0.00019512989092618227, "outcome": "passed"}, "teardown": {"duration": 0.0002100620185956359, "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.00019794492982327938, "outcome": "passed"}, "call": {"duration": 0.0001733029494062066, "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.0002334710443392396, "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.00018779095262289047, "outcome": "passed"}, "call": {"duration": 0.00019483000505715609, "outcome": "passed"}, "teardown": {"duration": 0.00019469601102173328, "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.00018361606635153294, "outcome": "passed"}, "call": {"duration": 0.0001585009740665555, "outcome": "passed"}, "teardown": {"duration": 0.00019936496391892433, "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.00018480501603335142, "outcome": "passed"}, "call": {"duration": 0.00042686506640166044, "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.00023695698473602533, "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.00018274993635714054, "outcome": "passed"}, "call": {"duration": 0.0001960410736501217, "outcome": "passed"}, "teardown": {"duration": 0.00019391498062759638, "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.0002012229524552822, "outcome": "passed"}, "call": {"duration": 0.00027411896735429764, "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.00026896700728684664, "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.00018127192743122578, "outcome": "passed"}, "call": {"duration": 0.00017302704509347677, "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.00023223005700856447, "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.00017900799866765738, "outcome": "passed"}, "call": {"duration": 0.00018186098895967007, "outcome": "passed"}, "teardown": {"duration": 0.0002009778982028365, "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.00017831102013587952, "outcome": "passed"}, "call": {"duration": 0.00017422402743250132, "outcome": "passed"}, "teardown": {"duration": 0.00018840900156646967, "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.0001825379440560937, "outcome": "passed"}, "call": {"duration": 0.0009259879589080811, "outcome": "passed"}, "teardown": {"duration": 0.00020224601030349731, "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.00019253394566476345, "outcome": "passed"}, "call": {"duration": 0.00018449698109179735, "outcome": "passed"}, "teardown": {"duration": 0.00019080599304288626, "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.00016800302546471357, "outcome": "passed"}, "call": {"duration": 0.00017430901061743498, "outcome": "passed"}, "teardown": {"duration": 0.00019425200298428535, "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.0001707460032775998, "outcome": "passed"}, "call": {"duration": 0.00017038302030414343, "outcome": "passed"}, "teardown": {"duration": 0.00019728695042431355, "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.00019449100363999605, "outcome": "passed"}, "call": {"duration": 0.00016657705418765545, "outcome": "passed"}, "teardown": {"duration": 0.0001865039812400937, "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.00017936201766133308, "outcome": "passed"}, "call": {"duration": 0.00017332599963992834, "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.00023521005641669035, "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.00018734799232333899, "outcome": "passed"}, "call": {"duration": 0.0001764559419825673, "outcome": "passed"}, "teardown": {"duration": 0.00019181205425411463, "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.0001782759791240096, "outcome": "passed"}, "call": {"duration": 0.0001779790036380291, "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 0x7f63211728b0>\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.00043638492934405804, "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.0002896270016208291, "outcome": "passed"}, "call": {"duration": 0.00019964599050581455, "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.0002966850297525525, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "lineno": 98, "outcome": "failed", "keywords": ["test_recursion_limit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00046585092786699533, "outcome": "passed"}, "call": {"duration": 0.00021241093054413795, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 102, "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": 102, "message": "RecursionError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f631ea6d3d0>\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:102: RecursionError"}, "teardown": {"duration": 0.000784517964348197, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "lineno": 108, "outcome": "passed", "keywords": ["test_malformed_code", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.000190816936083138, "outcome": "passed"}, "call": {"duration": 0.00020315509755164385, "outcome": "passed"}, "teardown": {"duration": 0.00019848498050123453, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "lineno": 113, "outcome": "passed", "keywords": ["test_sys_exit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00040825409814715385, "outcome": "passed"}, "call": {"duration": 0.00020085100550204515, "outcome": "passed"}, "teardown": {"duration": 0.0006517819128930569, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "lineno": 121, "outcome": "failed", "keywords": ["test_broken_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003449829528108239, "outcome": "passed"}, "call": {"duration": 0.00019927299581468105, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 126, "message": "AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 126, "message": "AttributeError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f631ea8c760>\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:126: AttributeError"}, "teardown": {"duration": 0.0006769329775124788, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "lineno": 129, "outcome": "passed", "keywords": ["test_import_error_patch", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00034425698686391115, "outcome": "passed"}, "call": {"duration": 0.00023339898325502872, "outcome": "passed"}, "teardown": {"duration": 0.000656364019960165, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "lineno": 140, "outcome": "passed", "keywords": ["test_module_not_found_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018129299860447645, "outcome": "passed"}, "call": {"duration": 0.00048709800466895103, "outcome": "passed"}, "teardown": {"duration": 0.00020855909679085016, "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.0001881259959191084, "outcome": "passed"}, "call": {"duration": 0.00017286604270339012, "outcome": "passed"}, "teardown": {"duration": 0.0001997209619730711, "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.0001763880718499422, "outcome": "passed"}, "call": {"duration": 0.00017908797599375248, "outcome": "passed"}, "teardown": {"duration": 0.0001937110209837556, "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.00017823092639446259, "outcome": "passed"}, "call": {"duration": 0.00016707507893443108, "outcome": "passed"}, "teardown": {"duration": 0.00018671900033950806, "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.00019186397548764944, "outcome": "passed"}, "call": {"duration": 0.00017079897224903107, "outcome": "passed"}, "teardown": {"duration": 0.00019067490939050913, "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.00016844191122800112, "outcome": "passed"}, "call": {"duration": 0.00019274698570370674, "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.00024664902593940496, "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.00018395809456706047, "outcome": "passed"}, "call": {"duration": 0.00018353096675127745, "outcome": "passed"}, "teardown": {"duration": 0.00019222998525947332, "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.00019712094217538834, "outcome": "passed"}, "call": {"duration": 0.00017824501264840364, "outcome": "passed"}, "teardown": {"duration": 0.0001986239803954959, "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.00016950198914855719, "outcome": "passed"}, "call": {"duration": 0.00017737201415002346, "outcome": "passed"}, "teardown": {"duration": 0.00019492499995976686, "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.0001935010077431798, "outcome": "passed"}, "call": {"duration": 0.0006725160637870431, "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.0002576869446784258, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_keyboard_interrupt_direct", "lineno": 51, "outcome": "passed", "keywords": ["test_keyboard_interrupt_direct", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00019054196309298277, "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": 1752567956.624104, "duration": 0.4713561534881592, "exitcode": 2, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 32, "failed": 10, "xfailed": 2, "total": 44, "collected": 44}, "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": 98}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "type": "Function", "lineno": 108}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "type": "Function", "lineno": 113}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "type": "Function", "lineno": 121}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "type": "Function", "lineno": 129}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "type": "Function", "lineno": 140}]}, {"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/test_string_utils.py::test_keyboard_interrupt_direct", "type": "Function", "lineno": 51}]}, {"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.0036591109819710255, "outcome": "passed"}, "call": {"duration": 0.0005215409910306334, "outcome": "passed"}, "teardown": {"duration": 0.0011662530014291406, "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.0006409339839592576, "outcome": "passed"}, "call": {"duration": 0.00034460099413990974, "outcome": "passed"}, "teardown": {"duration": 0.0006388849578797817, "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.00018698396161198616, "outcome": "passed"}, "call": {"duration": 0.00033947895281016827, "outcome": "passed"}, "teardown": {"duration": 0.00020050897728651762, "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.00017157604452222586, "outcome": "passed"}, "call": {"duration": 0.00020303204655647278, "outcome": "passed"}, "teardown": {"duration": 0.0002301499480381608, "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.0003509749658405781, "outcome": "passed"}, "call": {"duration": 0.00020803301595151424, "outcome": "passed"}, "teardown": {"duration": 0.0006306020077317953, "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.0003532100236043334, "outcome": "passed"}, "call": {"duration": 0.00865919201169163, "outcome": "passed"}, "teardown": {"duration": 0.000666565028950572, "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.00018092698883265257, "outcome": "passed"}, "call": {"duration": 0.0001955120824277401, "outcome": "passed"}, "teardown": {"duration": 0.00019338796846568584, "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.0003435799153521657, "outcome": "passed"}, "call": {"duration": 0.00020655000116676092, "outcome": "passed"}, "teardown": {"duration": 0.0006983630592003465, "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.0006425869651138783, "outcome": "passed"}, "call": {"duration": 0.000985741033218801, "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.0006829780759289861, "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.0001840329496189952, "outcome": "passed"}, "call": {"duration": 0.00019857799634337425, "outcome": "passed"}, "teardown": {"duration": 0.0002072639763355255, "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.00020324706565588713, "outcome": "passed"}, "call": {"duration": 0.00017711101099848747, "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.00024819199461489916, "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.00018008705228567123, "outcome": "passed"}, "call": {"duration": 0.00019993295427411795, "outcome": "passed"}, "teardown": {"duration": 0.00019743095617741346, "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.00017256697174161673, "outcome": "passed"}, "call": {"duration": 0.00015739398077130318, "outcome": "passed"}, "teardown": {"duration": 0.0002057100646197796, "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.00017123401630669832, "outcome": "passed"}, "call": {"duration": 0.00043531996197998524, "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.00023484497796744108, "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.0001807840308174491, "outcome": "passed"}, "call": {"duration": 0.00020075496286153793, "outcome": "passed"}, "teardown": {"duration": 0.00019007897935807705, "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.00019726308528333902, "outcome": "passed"}, "call": {"duration": 0.00028389296494424343, "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.0002543970476835966, "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.0001836859155446291, "outcome": "passed"}, "call": {"duration": 0.00017295905854552984, "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.00024357903748750687, "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.0001860220218077302, "outcome": "passed"}, "call": {"duration": 0.00019263103604316711, "outcome": "passed"}, "teardown": {"duration": 0.00020372308790683746, "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.0001791520044207573, "outcome": "passed"}, "call": {"duration": 0.00017502799164503813, "outcome": "passed"}, "teardown": {"duration": 0.0002139130374416709, "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.00018318404909223318, "outcome": "passed"}, "call": {"duration": 0.0008387360721826553, "outcome": "passed"}, "teardown": {"duration": 0.00020623893942683935, "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.00019409996457397938, "outcome": "passed"}, "call": {"duration": 0.00017468200530856848, "outcome": "passed"}, "teardown": {"duration": 0.0001904249656945467, "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.00016954494640231133, "outcome": "passed"}, "call": {"duration": 0.0001763530308380723, "outcome": "passed"}, "teardown": {"duration": 0.00019564793910831213, "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.00018369406461715698, "outcome": "passed"}, "call": {"duration": 0.00017384998500347137, "outcome": "passed"}, "teardown": {"duration": 0.00018262001685798168, "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.00018100393936038017, "outcome": "passed"}, "call": {"duration": 0.00017426698468625546, "outcome": "passed"}, "teardown": {"duration": 0.00019257806707173586, "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.00017955503426492214, "outcome": "passed"}, "call": {"duration": 0.00017679401207715273, "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.00024748698342591524, "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.00018078600987792015, "outcome": "passed"}, "call": {"duration": 0.00018280197400599718, "outcome": "passed"}, "teardown": {"duration": 0.0001881549833342433, "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.0001802520127967, "outcome": "passed"}, "call": {"duration": 0.00017436407506465912, "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 0x7f89813b69d0>\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.0003520810278132558, "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.00023328594397753477, "outcome": "passed"}, "call": {"duration": 0.00020388304255902767, "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.0002671870170161128, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_recursion_limit", "lineno": 98, "outcome": "failed", "keywords": ["test_recursion_limit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0004030209966003895, "outcome": "passed"}, "call": {"duration": 0.00020866305567324162, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 102, "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": 102, "message": "RecursionError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f89810a94c0>\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:102: RecursionError"}, "teardown": {"duration": 0.0007142230169847608, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_malformed_code", "lineno": 108, "outcome": "passed", "keywords": ["test_malformed_code", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0001845810329541564, "outcome": "passed"}, "call": {"duration": 0.00021933799143880606, "outcome": "passed"}, "teardown": {"duration": 0.0001934240572154522, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_sys_exit", "lineno": 113, "outcome": "passed", "keywords": ["test_sys_exit", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00034793990198522806, "outcome": "passed"}, "call": {"duration": 0.00019802397582679987, "outcome": "passed"}, "teardown": {"duration": 0.0006310410099104047, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_broken_function", "lineno": 121, "outcome": "failed", "keywords": ["test_broken_function", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003372350474819541, "outcome": "passed"}, "call": {"duration": 0.00018749304581433535, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_math_utils.py", "lineno": 126, "message": "AttributeError: 'tests.test_math_utils' has no attribute 'test_broken_function'"}, "traceback": [{"path": "tests/test_math_utils.py", "lineno": 126, "message": "AttributeError"}], "longrepr": "monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f898115eca0>\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:126: AttributeError"}, "teardown": {"duration": 0.0006643679225817323, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_import_error_patch", "lineno": 129, "outcome": "passed", "keywords": ["test_import_error_patch", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.0003470799420028925, "outcome": "passed"}, "call": {"duration": 0.00022921699564903975, "outcome": "passed"}, "teardown": {"duration": 0.0006256999913603067, "outcome": "passed"}}, {"nodeid": "tests/test_math_utils.py::test_module_not_found_error", "lineno": 140, "outcome": "passed", "keywords": ["test_module_not_found_error", "test_math_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018279394134879112, "outcome": "passed"}, "call": {"duration": 0.0004510889993980527, "outcome": "passed"}, "teardown": {"duration": 0.00019947695545852184, "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.00018949003424495459, "outcome": "passed"}, "call": {"duration": 0.00017643999308347702, "outcome": "passed"}, "teardown": {"duration": 0.00019116594921797514, "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.00018592795822769403, "outcome": "passed"}, "call": {"duration": 0.00018133607227355242, "outcome": "passed"}, "teardown": {"duration": 0.0001904600067064166, "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.0001778540899977088, "outcome": "passed"}, "call": {"duration": 0.00017014704644680023, "outcome": "passed"}, "teardown": {"duration": 0.00019012903794646263, "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.00018130801618099213, "outcome": "passed"}, "call": {"duration": 0.00016195501666516066, "outcome": "passed"}, "teardown": {"duration": 0.00018399395048618317, "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.00018164003267884254, "outcome": "passed"}, "call": {"duration": 0.00020650203805416822, "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.00023467396385967731, "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.0001824160572141409, "outcome": "passed"}, "call": {"duration": 0.00018280697986483574, "outcome": "passed"}, "teardown": {"duration": 0.00020179594866931438, "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.00017966493032872677, "outcome": "passed"}, "call": {"duration": 0.00018832995556294918, "outcome": "passed"}, "teardown": {"duration": 0.00019340403378009796, "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.00017560203559696674, "outcome": "passed"}, "call": {"duration": 0.00017584103625267744, "outcome": "passed"}, "teardown": {"duration": 0.00019798800349235535, "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.00017529306933283806, "outcome": "passed"}, "call": {"duration": 0.0006064599147066474, "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.00028272904455661774, "outcome": "passed"}}, {"nodeid": "tests/test_string_utils.py::test_keyboard_interrupt_direct", "lineno": 51, "outcome": "passed", "keywords": ["test_keyboard_interrupt_direct", "test_string_utils.py", "tests", "slic", ""], "setup": {"duration": 0.00018894695676863194, "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