diff --git a/ci-reports/markdown/TEST-REPORT.md b/ci-reports/markdown/TEST-REPORT.md
index 776fcf1ab..24c3404ce 100644
--- a/ci-reports/markdown/TEST-REPORT.md
+++ b/ci-reports/markdown/TEST-REPORT.md
@@ -1,245 +1,5 @@
-⚠️⚠️⚠️ **TESTS INTERRUPTED** ⚠️⚠️⚠️
-
-> `collected=44`, but only `executed=43` tests ran to completion.
-
-
-📋 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: allure-pytest-2.13.5, metadata-3.1.1, cov-5.0.0, html-4.1.1, json-report-1.5.0, md-report-0.6.2
-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 0x7efc63bf18b0>
-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 0x7efc636b83d0>
-
- 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 0x7efc63395ee0>
-
- 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:01:32*
+*Generated on 2025-07-15 08:17:57*
## 📋 Summary
- **Passed**: `32`
@@ -247,7 +7,7 @@ FAILED tests/test_string_utils.py::test_unicode_encode_error - Failed: DID NOT R
- **Xfailed**: `2`
- **Total**: `44`
- **Collected**: `44`
-- **Total Duration**: `0.472`s
+- **Total Duration**: `0.493`s
## 🔎 Tests
@@ -263,7 +23,7 @@ FAILED tests/test_string_utils.py::test_unicode_encode_error - Failed: DID NOT R
✅ #1
- **Status:** ✅ `passed`
-- **Duration:** `0.000576` s
+- **Duration:** `0.000684` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -272,7 +32,7 @@ FAILED tests/test_string_utils.py::test_unicode_encode_error - Failed: DID NOT R
📌 Duration
```
-0.003862760029733181
+0.004489094950258732
```
@@ -291,7 +51,7 @@ passed
📌 Duration
```
-0.0005759899504482746
+0.0006844139425083995
```
@@ -310,7 +70,7 @@ passed
📌 Duration
```
-0.0012187049724161625
+0.00128162803594023
```
@@ -333,7 +93,7 @@ passed
✅ #2
- **Status:** ✅ `passed`
-- **Duration:** `0.000338` s
+- **Duration:** `0.000349` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -342,7 +102,7 @@ passed
📌 Duration
```
-0.000665434985421598
+0.0007592289475724101
```
@@ -361,7 +121,7 @@ passed
📌 Duration
```
-0.00033802702091634274
+0.00034866901114583015
```
@@ -380,7 +140,7 @@ passed
📌 Duration
```
-0.0006613769801333547
+0.0007208429742604494
```
@@ -403,7 +163,7 @@ passed
✅ #3
- **Status:** ✅ `passed`
-- **Duration:** `0.000339` s
+- **Duration:** `0.000357` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -412,7 +172,7 @@ passed
📌 Duration
```
-0.00017981010023504496
+0.00019041995983570814
```
@@ -431,7 +191,7 @@ passed
📌 Duration
```
-0.0003387361066415906
+0.0003566719824448228
```
@@ -450,7 +210,7 @@ passed
📌 Duration
```
-0.00020792894065380096
+0.00022041099146008492
```
@@ -473,7 +233,7 @@ passed
✅ #4
- **Status:** ✅ `passed`
-- **Duration:** `0.000193` s
+- **Duration:** `0.000206` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -482,7 +242,7 @@ passed
📌 Duration
```
-0.00017420691438019276
+0.00018429593183100224
```
@@ -501,7 +261,7 @@ passed
📌 Duration
```
-0.00019270204938948154
+0.00020608596969395876
```
@@ -520,7 +280,7 @@ passed
📌 Duration
```
-0.00020265299826860428
+0.0001983050024136901
```
@@ -543,7 +303,7 @@ passed
✅ #5
- **Status:** ✅ `passed`
-- **Duration:** `0.000213` s
+- **Duration:** `0.000223` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -552,7 +312,7 @@ passed
📌 Duration
```
-0.0003596659516915679
+0.0003640140639618039
```
@@ -571,7 +331,7 @@ passed
📌 Duration
```
-0.0002129280474036932
+0.00022322905715554953
```
@@ -590,7 +350,7 @@ passed
📌 Duration
```
-0.0006530900718644261
+0.0006357829552143812
```
@@ -613,7 +373,7 @@ passed
✅ #6
- **Status:** ✅ `passed`
-- **Duration:** `0.008356` s
+- **Duration:** `0.008769` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -622,7 +382,7 @@ passed
📌 Duration
```
-0.0003540610196068883
+0.0003387599717825651
```
@@ -641,7 +401,7 @@ passed
📌 Duration
```
-0.008355612982995808
+0.008769409032538533
```
@@ -660,7 +420,7 @@ passed
📌 Duration
```
-0.0006731300381943583
+0.0008422170067206025
```
@@ -683,7 +443,7 @@ passed
✅ #7
- **Status:** ✅ `passed`
-- **Duration:** `0.000184` s
+- **Duration:** `0.000195` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -692,7 +452,7 @@ passed
📌 Duration
```
-0.0001812560949474573
+0.00021573901176452637
```
@@ -711,7 +471,7 @@ passed
📌 Duration
```
-0.00018437509424984455
+0.00019488506950438023
```
@@ -730,7 +490,7 @@ passed
📌 Duration
```
-0.0002127690240740776
+0.00019953702576458454
```
@@ -753,7 +513,7 @@ passed
✅ #8
- **Status:** ✅ `passed`
-- **Duration:** `0.000201` s
+- **Duration:** `0.000228` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -762,7 +522,7 @@ passed
📌 Duration
```
-0.0003418419510126114
+0.00037874700501561165
```
@@ -781,7 +541,7 @@ passed
📌 Duration
```
-0.00020075298380106688
+0.0002275099977850914
```
@@ -800,7 +560,7 @@ passed
📌 Duration
```
-0.001043127034790814
+0.000740951974876225
```
@@ -823,7 +583,7 @@ passed
✅ #10
- **Status:** ✅ `passed`
-- **Duration:** `0.000197` s
+- **Duration:** `0.000245` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -832,7 +592,7 @@ passed
📌 Duration
```
-0.00017909402959048748
+0.00022397900465875864
```
@@ -851,7 +611,7 @@ passed
📌 Duration
```
-0.00019741302821785212
+0.0002445880090817809
```
@@ -870,7 +630,7 @@ passed
📌 Duration
```
-0.00020375405438244343
+0.00021364097483456135
```
@@ -898,7 +658,7 @@ passed
✅ #12
- **Status:** ✅ `passed`
-- **Duration:** `0.000185` s
+- **Duration:** `0.000202` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -907,7 +667,7 @@ passed
📌 Duration
```
-0.00018563796766102314
+0.00019144092220813036
```
@@ -926,7 +686,7 @@ passed
📌 Duration
```
-0.00018518290016800165
+0.0002020229585468769
```
@@ -945,7 +705,7 @@ passed
📌 Duration
```
-0.00020334904547780752
+0.0001967179123312235
```
@@ -968,7 +728,7 @@ passed
✅ #13
- **Status:** ✅ `passed`
-- **Duration:** `0.000168` s
+- **Duration:** `0.000167` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -977,7 +737,7 @@ passed
📌 Duration
```
-0.00017578003462404013
+0.00017437501810491085
```
@@ -996,7 +756,7 @@ passed
📌 Duration
```
-0.0001681699650362134
+0.00016747298650443554
```
@@ -1015,7 +775,7 @@ passed
📌 Duration
```
-0.00018882297445088625
+0.00019609497394412756
```
@@ -1038,7 +798,7 @@ passed
✅ #15
- **Status:** ✅ `passed`
-- **Duration:** `0.000184` s
+- **Duration:** `0.000198` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1047,7 +807,7 @@ passed
📌 Duration
```
-0.00018172396812587976
+0.00018964800983667374
```
@@ -1066,7 +826,7 @@ passed
📌 Duration
```
-0.00018381199333816767
+0.0001984010450541973
```
@@ -1085,7 +845,7 @@ passed
📌 Duration
```
-0.00019507796969264746
+0.0001975690247491002
```
@@ -1108,7 +868,7 @@ passed
✅ #18
- **Status:** ✅ `passed`
-- **Duration:** `0.000180` s
+- **Duration:** `0.000193` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1117,7 +877,7 @@ passed
📌 Duration
```
-0.0001932900631800294
+0.00018735602498054504
```
@@ -1136,7 +896,7 @@ passed
📌 Duration
```
-0.00018015201203525066
+0.00019317190162837505
```
@@ -1155,7 +915,7 @@ passed
📌 Duration
```
-0.00018845393788069487
+0.0001976839266717434
```
@@ -1178,7 +938,7 @@ passed
✅ #19
- **Status:** ✅ `passed`
-- **Duration:** `0.000178` s
+- **Duration:** `0.000181` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1187,7 +947,7 @@ passed
📌 Duration
```
-0.00018062896560877562
+0.000191046972759068
```
@@ -1206,7 +966,7 @@ passed
📌 Duration
```
-0.00017759902402758598
+0.0001811350230127573
```
@@ -1225,7 +985,7 @@ passed
📌 Duration
```
-0.0001938709756359458
+0.00019021600019186735
```
@@ -1248,7 +1008,7 @@ passed
✅ #20
- **Status:** ✅ `passed`
-- **Duration:** `0.000952` s
+- **Duration:** `0.000933` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1257,7 +1017,7 @@ passed
📌 Duration
```
-0.00017978204414248466
+0.00018191395793110132
```
@@ -1276,7 +1036,7 @@ passed
📌 Duration
```
-0.0009519440354779363
+0.0009334810310974717
```
@@ -1295,7 +1055,7 @@ passed
📌 Duration
```
-0.00020991393830627203
+0.00021670304704457521
```
@@ -1318,7 +1078,7 @@ passed
✅ #21
- **Status:** ✅ `passed`
-- **Duration:** `0.000172` s
+- **Duration:** `0.000176` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1327,7 +1087,7 @@ passed
📌 Duration
```
-0.0001741249579936266
+0.00018432398792356253
```
@@ -1346,7 +1106,7 @@ passed
📌 Duration
```
-0.00017169106286019087
+0.00017605803441256285
```
@@ -1365,7 +1125,7 @@ passed
📌 Duration
```
-0.00020102201960980892
+0.0001879989868029952
```
@@ -1388,7 +1148,7 @@ passed
✅ #22
- **Status:** ✅ `passed`
-- **Duration:** `0.000196` s
+- **Duration:** `0.000181` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1397,7 +1157,7 @@ passed
📌 Duration
```
-0.00019025395158678293
+0.00016388704534620047
```
@@ -1416,7 +1176,7 @@ passed
📌 Duration
```
-0.00019589695148169994
+0.0001806630752980709
```
@@ -1435,7 +1195,7 @@ passed
📌 Duration
```
-0.00019368203356862068
+0.00019419798627495766
```
@@ -1458,7 +1218,7 @@ passed
✅ #23
- **Status:** ✅ `passed`
-- **Duration:** `0.000181` s
+- **Duration:** `0.000186` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1467,7 +1227,7 @@ passed
📌 Duration
```
-0.0001662379363551736
+0.00016722199507057667
```
@@ -1486,7 +1246,7 @@ passed
📌 Duration
```
-0.00018056901171803474
+0.00018580106552690268
```
@@ -1505,7 +1265,7 @@ passed
📌 Duration
```
-0.000204996089451015
+0.00018392701167613268
```
@@ -1528,7 +1288,7 @@ passed
✅ #24
- **Status:** ✅ `passed`
-- **Duration:** `0.000169` s
+- **Duration:** `0.000172` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1537,7 +1297,7 @@ passed
📌 Duration
```
-0.0001786520006135106
+0.0001760859740898013
```
@@ -1556,7 +1316,7 @@ passed
📌 Duration
```
-0.00016915600281208754
+0.00017235905397683382
```
@@ -1575,7 +1335,7 @@ passed
📌 Duration
```
-0.0001956659834831953
+0.00018672097939997911
```
@@ -1598,7 +1358,7 @@ passed
✅ #26
- **Status:** ✅ `passed`
-- **Duration:** `0.000181` s
+- **Duration:** `0.000195` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1607,7 +1367,7 @@ passed
📌 Duration
```
-0.00018656998872756958
+0.00017966004088521004
```
@@ -1626,7 +1386,7 @@ passed
📌 Duration
```
-0.0001806790241971612
+0.00019452592823654413
```
@@ -1645,7 +1405,7 @@ passed
📌 Duration
```
-0.00019679800607264042
+0.00018929899670183659
```
@@ -1668,7 +1428,7 @@ passed
✅ #30
- **Status:** ✅ `passed`
-- **Duration:** `0.000208` s
+- **Duration:** `0.000215` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1677,7 +1437,7 @@ passed
📌 Duration
```
-0.00018735707271844149
+0.00019153498578816652
```
@@ -1696,7 +1456,7 @@ passed
📌 Duration
```
-0.00020766595844179392
+0.00021516799461096525
```
@@ -1715,7 +1475,7 @@ passed
📌 Duration
```
-0.00020599900744855404
+0.00021473504602909088
```
@@ -1738,7 +1498,7 @@ passed
✅ #31
- **Status:** ✅ `passed`
-- **Duration:** `0.000200` s
+- **Duration:** `0.000209` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1747,7 +1507,7 @@ passed
📌 Duration
```
-0.00039253500290215015
+0.0003814550582319498
```
@@ -1766,7 +1526,7 @@ passed
📌 Duration
```
-0.00020028697326779366
+0.00020856503397226334
```
@@ -1785,7 +1545,7 @@ passed
📌 Duration
```
-0.0006594470469281077
+0.0006595569429919124
```
@@ -1808,7 +1568,7 @@ passed
✅ #33
- **Status:** ✅ `passed`
-- **Duration:** `0.000231` s
+- **Duration:** `0.000238` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1817,7 +1577,7 @@ passed
📌 Duration
```
-0.0003369100159034133
+0.0003420260036364198
```
@@ -1836,7 +1596,7 @@ passed
📌 Duration
```
-0.00023073202464729548
+0.00023755698930472136
```
@@ -1855,7 +1615,7 @@ passed
📌 Duration
```
-0.0006213830783963203
+0.0006303309928625822
```
@@ -1887,7 +1647,7 @@ passed
📌 Duration
```
-0.00017822289373725653
+0.0001796300057321787
```
@@ -1906,7 +1666,7 @@ passed
📌 Duration
```
-0.0004918569466099143
+0.0004920799983665347
```
@@ -1925,7 +1685,7 @@ passed
📌 Duration
```
-0.00020779098849743605
+0.00020946201402693987
```
@@ -1953,7 +1713,7 @@ passed
✅ #35
- **Status:** ✅ `passed`
-- **Duration:** `0.000164` s
+- **Duration:** `0.000170` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -1962,7 +1722,7 @@ passed
📌 Duration
```
-0.000179384951479733
+0.0001809720415621996
```
@@ -1981,7 +1741,7 @@ passed
📌 Duration
```
-0.0001638780813664198
+0.0001699109561741352
```
@@ -2000,7 +1760,7 @@ passed
📌 Duration
```
-0.00018798792734742165
+0.0001904919045045972
```
@@ -2023,7 +1783,7 @@ passed
✅ #36
- **Status:** ✅ `passed`
-- **Duration:** `0.000182` s
+- **Duration:** `0.000185` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2032,7 +1792,7 @@ passed
📌 Duration
```
-0.0001917120534926653
+0.0001955030020326376
```
@@ -2051,7 +1811,7 @@ passed
📌 Duration
```
-0.0001819030148908496
+0.00018532900139689445
```
@@ -2070,7 +1830,7 @@ passed
📌 Duration
```
-0.00019630498718470335
+0.00019166292622685432
```
@@ -2093,7 +1853,7 @@ passed
✅ #37
- **Status:** ✅ `passed`
-- **Duration:** `0.000156` s
+- **Duration:** `0.000163` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2102,7 +1862,7 @@ passed
📌 Duration
```
-0.00016557297203689814
+0.00016802200116217136
```
@@ -2121,7 +1881,7 @@ passed
📌 Duration
```
-0.00015554099809378386
+0.00016269809566438198
```
@@ -2140,7 +1900,7 @@ passed
📌 Duration
```
-0.00019384303595870733
+0.0001978430664166808
```
@@ -2163,7 +1923,7 @@ passed
✅ #38
- **Status:** ✅ `passed`
-- **Duration:** `0.000170` s
+- **Duration:** `0.000168` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2172,7 +1932,7 @@ passed
📌 Duration
```
-0.0001844690414145589
+0.00018341001123189926
```
@@ -2191,7 +1951,7 @@ passed
📌 Duration
```
-0.0001697220141068101
+0.00016795506235212088
```
@@ -2210,7 +1970,7 @@ passed
📌 Duration
```
-0.00019020005129277706
+0.00018405704759061337
```
@@ -2233,7 +1993,7 @@ passed
✅ #40
- **Status:** ✅ `passed`
-- **Duration:** `0.000184` s
+- **Duration:** `0.000199` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2242,7 +2002,7 @@ passed
📌 Duration
```
-0.00018171791452914476
+0.00017893302720040083
```
@@ -2261,7 +2021,7 @@ passed
📌 Duration
```
-0.00018399301916360855
+0.00019873399287462234
```
@@ -2280,7 +2040,7 @@ passed
📌 Duration
```
-0.00019275001250207424
+0.0001910560531541705
```
@@ -2303,7 +2063,7 @@ passed
✅ #41
- **Status:** ✅ `passed`
-- **Duration:** `0.000182` s
+- **Duration:** `0.000181` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2312,7 +2072,7 @@ passed
📌 Duration
```
-0.00018886500038206577
+0.000180736999027431
```
@@ -2331,7 +2091,7 @@ passed
📌 Duration
```
-0.00018197600729763508
+0.00018068705685436726
```
@@ -2350,7 +2110,7 @@ passed
📌 Duration
```
-0.00019282009452581406
+0.00019529310520738363
```
@@ -2373,7 +2133,7 @@ passed
✅ #42
- **Status:** ✅ `passed`
-- **Duration:** `0.000172` s
+- **Duration:** `0.000188` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2382,7 +2142,7 @@ passed
📌 Duration
```
-0.00017107801977545023
+0.0001714759273454547
```
@@ -2401,7 +2161,7 @@ passed
📌 Duration
```
-0.0001721070148050785
+0.00018791807815432549
```
@@ -2420,7 +2180,7 @@ passed
📌 Duration
```
-0.00020881998352706432
+0.00018813100177794695
```
@@ -2452,7 +2212,7 @@ passed
📌 Duration
```
-0.0001935199834406376
+0.00018309091683477163
```
@@ -2485,7 +2245,7 @@ passed
❌ #9
- **Status:** ❌ `failed`
-- **Duration:** `0.001130` s
+- **Duration:** `0.001056` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2494,7 +2254,7 @@ passed
📌 Duration
```
-0.0006984900683164597
+0.0007795440033078194
```
@@ -2513,7 +2273,7 @@ passed
📌 Duration
```
-0.0011301309568807483
+0.0010555379558354616
```
@@ -2572,7 +2332,7 @@ tests/test_io_utils.py:72: Failed
📌 Duration
```
-0.0006893440149724483
+0.0009553310228511691
```
@@ -2600,7 +2360,7 @@ passed
❌ #11
- **Status:** ❌ `failed`
-- **Duration:** `0.000180` s
+- **Duration:** `0.000184` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2609,7 +2369,7 @@ passed
📌 Duration
```
-0.00017876795027405024
+0.00019246398005634546
```
@@ -2628,7 +2388,7 @@ passed
📌 Duration
```
-0.00018003105651587248
+0.00018435704987496138
```
@@ -2680,7 +2440,7 @@ tests/test_math_utils.py:16: NameError
📌 Duration
```
-0.0002352150622755289
+0.00025507796090096235
```
@@ -2703,7 +2463,7 @@ passed
❌ #14
- **Status:** ❌ `failed`
-- **Duration:** `0.000425` s
+- **Duration:** `0.000477` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2712,7 +2472,7 @@ passed
📌 Duration
```
-0.00018020498100668192
+0.0001691450597718358
```
@@ -2731,7 +2491,7 @@ passed
📌 Duration
```
-0.0004245330346748233
+0.0004768100334331393
```
@@ -2785,7 +2545,7 @@ tests/test_math_utils.py:29: AssertionError
📌 Duration
```
-0.00023770402185618877
+0.00026376801542937756
```
@@ -2808,7 +2568,7 @@ passed
❌ #17
- **Status:** ❌ `failed`
-- **Duration:** `0.000170` s
+- **Duration:** `0.000193` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2817,7 +2577,7 @@ passed
📌 Duration
```
-0.00017849996220320463
+0.00019102497026324272
```
@@ -2836,7 +2596,7 @@ passed
📌 Duration
```
-0.0001703340094536543
+0.00019292894285172224
```
@@ -2888,7 +2648,7 @@ tests/test_math_utils.py:43: RuntimeError
📌 Duration
```
-0.00023643800523132086
+0.00023589807096868753
```
@@ -2911,7 +2671,7 @@ passed
❌ #25
- **Status:** ❌ `failed`
-- **Duration:** `0.000169` s
+- **Duration:** `0.000189` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -2920,7 +2680,7 @@ passed
📌 Duration
```
-0.00017035903874784708
+0.00018074410036206245
```
@@ -2939,7 +2699,7 @@ passed
📌 Duration
```
-0.0001687349285930395
+0.0001893120352178812
```
@@ -2991,7 +2751,7 @@ tests/test_math_utils.py:84: Exception
📌 Duration
```
-0.0002365920227020979
+0.00023920799139887094
```
@@ -3014,7 +2774,7 @@ passed
❌ #27
- **Status:** ❌ `failed`
-- **Duration:** `0.000200` s
+- **Duration:** `0.000175` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3023,7 +2783,7 @@ passed
📌 Duration
```
-0.00016754097305238247
+0.00018349499441683292
```
@@ -3042,7 +2802,7 @@ passed
📌 Duration
```
-0.0002002309774979949
+0.0001746440539136529
```
@@ -3118,7 +2878,7 @@ tests/test_math_utils.py:93: StopIteration
The above exception was the direct cause of the following exception:
cls =
-func = . at 0x7efc63bf18b0>
+func = . at 0x7f6c0b9338b0>
when = 'call'
reraise = (, )
@@ -3188,7 +2948,7 @@ E RuntimeError: generator raised StopIteration
📌 Duration
```
-0.00042397005017846823
+0.00044928805436939
```
@@ -3211,7 +2971,7 @@ passed
❌ #28
- **Status:** ❌ `failed`
-- **Duration:** `0.000200` s
+- **Duration:** `0.000203` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3220,7 +2980,7 @@ passed
📌 Duration
```
-0.0002766069956123829
+0.0002709520049393177
```
@@ -3239,7 +2999,7 @@ passed
📌 Duration
```
-0.00019975390750914812
+0.00020276301074773073
```
@@ -3291,7 +3051,7 @@ tests/test_math_utils.py:97: GeneratorExit
📌 Duration
```
-0.00030242500361055136
+0.0002941089915111661
```
@@ -3314,7 +3074,7 @@ passed
❌ #29
- **Status:** ❌ `failed`
-- **Duration:** `0.000207` s
+- **Duration:** `0.000219` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3323,7 +3083,7 @@ passed
📌 Duration
```
-0.00046823802404105663
+0.00045932596549391747
```
@@ -3342,7 +3102,7 @@ passed
📌 Duration
```
-0.00020655395928770304
+0.00021862389985471964
```
@@ -3378,7 +3138,7 @@ message: RecursionError
📌 Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7efc636b83d0>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f6c0b736f10>
def test_recursion_limit(monkeypatch):
# Lower recursion limit to force RecursionError on deep recursion
@@ -3397,7 +3157,7 @@ tests/test_math_utils.py:102: RecursionError
📌 Duration
```
-0.0007711399812251329
+0.0008338589686900377
```
@@ -3420,7 +3180,7 @@ passed
❌ #32
- **Status:** ❌ `failed`
-- **Duration:** `0.000201` s
+- **Duration:** `0.000192` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3429,7 +3189,7 @@ passed
📌 Duration
```
-0.0003347810124978423
+0.00035349803511053324
```
@@ -3448,7 +3208,7 @@ passed
📌 Duration
```
-0.00020090991165488958
+0.00019166001584380865
```
@@ -3484,7 +3244,7 @@ message: AttributeError
📌 Longrepr
```
-monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7efc63395ee0>
+monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f6c0b54aca0>
def test_broken_function(monkeypatch):
# Simulate broken function raising TypeError
@@ -3504,7 +3264,7 @@ tests/test_math_utils.py:126: AttributeError
📌 Duration
```
-0.0006690350128337741
+0.0006822709692642093
```
@@ -3532,7 +3292,7 @@ passed
❌ #39
- **Status:** ❌ `failed`
-- **Duration:** `0.000191` s
+- **Duration:** `0.000203` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3541,7 +3301,7 @@ passed
📌 Duration
```
-0.00016690208576619625
+0.0001828980166465044
```
@@ -3560,7 +3320,7 @@ passed
📌 Duration
```
-0.00019142997916787863
+0.0002025360008701682
```
@@ -3613,7 +3373,7 @@ tests/test_string_utils.py:28: Failed
📌 Duration
```
-0.0002366270637139678
+0.00024413398932665586
```
@@ -3646,7 +3406,7 @@ passed
❌ #16
- **Status:** ❌ `xfailed`
-- **Duration:** `0.000309` s
+- **Duration:** `0.000316` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3655,7 +3415,7 @@ passed
📌 Duration
```
-0.00019553292077034712
+0.00018579699099063873
```
@@ -3674,7 +3434,7 @@ passed
📌 Duration
```
-0.0003087470540776849
+0.000316492049023509
```
@@ -3729,7 +3489,7 @@ tests/test_math_utils.py:39: AssertionError
📌 Duration
```
-0.00025437690783292055
+0.00025751092471182346
```
@@ -3757,7 +3517,7 @@ passed
❌ #43
- **Status:** ❌ `xfailed`
-- **Duration:** `0.000652` s
+- **Duration:** `0.000709` s
- **Severity:** `normal`
### 🔧 Setup Phase
@@ -3766,7 +3526,7 @@ passed
📌 Duration
```
-0.0001809820532798767
+0.00017805001698434353
```
@@ -3785,7 +3545,7 @@ passed
📌 Duration
```
-0.0006521429168060422
+0.0007094360189512372
```
@@ -3846,7 +3606,7 @@ tests/test_string_utils.py:50: AssertionError
📌 Duration
```
-0.0002760490169748664
+0.000262564979493618
```
diff --git a/ci-reports/markdown/pytest-report.json b/ci-reports/markdown/pytest-report.json
index 55423ef21..a249d90cb 100644
--- a/ci-reports/markdown/pytest-report.json
+++ b/ci-reports/markdown/pytest-report.json
@@ -1 +1 @@
-{"created": 1752566491.2021568, "duration": 0.4718186855316162, "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.003862760029733181, "outcome": "passed"}, "call": {"duration": 0.0005759899504482746, "outcome": "passed"}, "teardown": {"duration": 0.0012187049724161625, "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.000665434985421598, "outcome": "passed"}, "call": {"duration": 0.00033802702091634274, "outcome": "passed"}, "teardown": {"duration": 0.0006613769801333547, "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.00017981010023504496, "outcome": "passed"}, "call": {"duration": 0.0003387361066415906, "outcome": "passed"}, "teardown": {"duration": 0.00020792894065380096, "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.00017420691438019276, "outcome": "passed"}, "call": {"duration": 0.00019270204938948154, "outcome": "passed"}, "teardown": {"duration": 0.00020265299826860428, "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.0003596659516915679, "outcome": "passed"}, "call": {"duration": 0.0002129280474036932, "outcome": "passed"}, "teardown": {"duration": 0.0006530900718644261, "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.0003540610196068883, "outcome": "passed"}, "call": {"duration": 0.008355612982995808, "outcome": "passed"}, "teardown": {"duration": 0.0006731300381943583, "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.0001812560949474573, "outcome": "passed"}, "call": {"duration": 0.00018437509424984455, "outcome": "passed"}, "teardown": {"duration": 0.0002127690240740776, "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.0003418419510126114, "outcome": "passed"}, "call": {"duration": 0.00020075298380106688, "outcome": "passed"}, "teardown": {"duration": 0.001043127034790814, "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.0006984900683164597, "outcome": "passed"}, "call": {"duration": 0.0011301309568807483, "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.0006893440149724483, "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.00017909402959048748, "outcome": "passed"}, "call": {"duration": 0.00019741302821785212, "outcome": "passed"}, "teardown": {"duration": 0.00020375405438244343, "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.00017876795027405024, "outcome": "passed"}, "call": {"duration": 0.00018003105651587248, "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.0002352150622755289, "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.00018563796766102314, "outcome": "passed"}, "call": {"duration": 0.00018518290016800165, "outcome": "passed"}, "teardown": {"duration": 0.00020334904547780752, "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.00017578003462404013, "outcome": "passed"}, "call": {"duration": 0.0001681699650362134, "outcome": "passed"}, "teardown": {"duration": 0.00018882297445088625, "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.00018020498100668192, "outcome": "passed"}, "call": {"duration": 0.0004245330346748233, "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.00023770402185618877, "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.00018172396812587976, "outcome": "passed"}, "call": {"duration": 0.00018381199333816767, "outcome": "passed"}, "teardown": {"duration": 0.00019507796969264746, "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.00019553292077034712, "outcome": "passed"}, "call": {"duration": 0.0003087470540776849, "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.00025437690783292055, "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.00017849996220320463, "outcome": "passed"}, "call": {"duration": 0.0001703340094536543, "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.00023643800523132086, "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.0001932900631800294, "outcome": "passed"}, "call": {"duration": 0.00018015201203525066, "outcome": "passed"}, "teardown": {"duration": 0.00018845393788069487, "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.00018062896560877562, "outcome": "passed"}, "call": {"duration": 0.00017759902402758598, "outcome": "passed"}, "teardown": {"duration": 0.0001938709756359458, "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.00017978204414248466, "outcome": "passed"}, "call": {"duration": 0.0009519440354779363, "outcome": "passed"}, "teardown": {"duration": 0.00020991393830627203, "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.0001741249579936266, "outcome": "passed"}, "call": {"duration": 0.00017169106286019087, "outcome": "passed"}, "teardown": {"duration": 0.00020102201960980892, "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.00019025395158678293, "outcome": "passed"}, "call": {"duration": 0.00019589695148169994, "outcome": "passed"}, "teardown": {"duration": 0.00019368203356862068, "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.0001662379363551736, "outcome": "passed"}, "call": {"duration": 0.00018056901171803474, "outcome": "passed"}, "teardown": {"duration": 0.000204996089451015, "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.0001786520006135106, "outcome": "passed"}, "call": {"duration": 0.00016915600281208754, "outcome": "passed"}, "teardown": {"duration": 0.0001956659834831953, "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.00017035903874784708, "outcome": "passed"}, "call": {"duration": 0.0001687349285930395, "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.0002365920227020979, "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.00018656998872756958, "outcome": "passed"}, "call": {"duration": 0.0001806790241971612, "outcome": "passed"}, "teardown": {"duration": 0.00019679800607264042, "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.00016754097305238247, "outcome": "passed"}, "call": {"duration": 0.0002002309774979949, "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 0x7efc63bf18b0>\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.00042397005017846823, "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.0002766069956123829, "outcome": "passed"}, "call": {"duration": 0.00019975390750914812, "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.00030242500361055136, "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.00046823802404105663, "outcome": "passed"}, "call": {"duration": 0.00020655395928770304, "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 0x7efc636b83d0>\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.0007711399812251329, "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.00018735707271844149, "outcome": "passed"}, "call": {"duration": 0.00020766595844179392, "outcome": "passed"}, "teardown": {"duration": 0.00020599900744855404, "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.00039253500290215015, "outcome": "passed"}, "call": {"duration": 0.00020028697326779366, "outcome": "passed"}, "teardown": {"duration": 0.0006594470469281077, "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.0003347810124978423, "outcome": "passed"}, "call": {"duration": 0.00020090991165488958, "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 0x7efc63395ee0>\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.0006690350128337741, "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.0003369100159034133, "outcome": "passed"}, "call": {"duration": 0.00023073202464729548, "outcome": "passed"}, "teardown": {"duration": 0.0006213830783963203, "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.00017822289373725653, "outcome": "passed"}, "call": {"duration": 0.0004918569466099143, "outcome": "passed"}, "teardown": {"duration": 0.00020779098849743605, "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.000179384951479733, "outcome": "passed"}, "call": {"duration": 0.0001638780813664198, "outcome": "passed"}, "teardown": {"duration": 0.00018798792734742165, "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.0001917120534926653, "outcome": "passed"}, "call": {"duration": 0.0001819030148908496, "outcome": "passed"}, "teardown": {"duration": 0.00019630498718470335, "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.00016557297203689814, "outcome": "passed"}, "call": {"duration": 0.00015554099809378386, "outcome": "passed"}, "teardown": {"duration": 0.00019384303595870733, "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.0001844690414145589, "outcome": "passed"}, "call": {"duration": 0.0001697220141068101, "outcome": "passed"}, "teardown": {"duration": 0.00019020005129277706, "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.00016690208576619625, "outcome": "passed"}, "call": {"duration": 0.00019142997916787863, "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.0002366270637139678, "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.00018171791452914476, "outcome": "passed"}, "call": {"duration": 0.00018399301916360855, "outcome": "passed"}, "teardown": {"duration": 0.00019275001250207424, "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.00018886500038206577, "outcome": "passed"}, "call": {"duration": 0.00018197600729763508, "outcome": "passed"}, "teardown": {"duration": 0.00019282009452581406, "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.00017107801977545023, "outcome": "passed"}, "call": {"duration": 0.0001721070148050785, "outcome": "passed"}, "teardown": {"duration": 0.00020881998352706432, "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.0001809820532798767, "outcome": "passed"}, "call": {"duration": 0.0006521429168060422, "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.0002760490169748664, "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.0001935199834406376, "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": 1752567475.2891982, "duration": 0.4933810234069824, "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.004489094950258732, "outcome": "passed"}, "call": {"duration": 0.0006844139425083995, "outcome": "passed"}, "teardown": {"duration": 0.00128162803594023, "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.0007592289475724101, "outcome": "passed"}, "call": {"duration": 0.00034866901114583015, "outcome": "passed"}, "teardown": {"duration": 0.0007208429742604494, "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.00019041995983570814, "outcome": "passed"}, "call": {"duration": 0.0003566719824448228, "outcome": "passed"}, "teardown": {"duration": 0.00022041099146008492, "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.00018429593183100224, "outcome": "passed"}, "call": {"duration": 0.00020608596969395876, "outcome": "passed"}, "teardown": {"duration": 0.0001983050024136901, "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.0003640140639618039, "outcome": "passed"}, "call": {"duration": 0.00022322905715554953, "outcome": "passed"}, "teardown": {"duration": 0.0006357829552143812, "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.0003387599717825651, "outcome": "passed"}, "call": {"duration": 0.008769409032538533, "outcome": "passed"}, "teardown": {"duration": 0.0008422170067206025, "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.00021573901176452637, "outcome": "passed"}, "call": {"duration": 0.00019488506950438023, "outcome": "passed"}, "teardown": {"duration": 0.00019953702576458454, "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.00037874700501561165, "outcome": "passed"}, "call": {"duration": 0.0002275099977850914, "outcome": "passed"}, "teardown": {"duration": 0.000740951974876225, "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.0007795440033078194, "outcome": "passed"}, "call": {"duration": 0.0010555379558354616, "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.0009553310228511691, "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.00022397900465875864, "outcome": "passed"}, "call": {"duration": 0.0002445880090817809, "outcome": "passed"}, "teardown": {"duration": 0.00021364097483456135, "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.00019246398005634546, "outcome": "passed"}, "call": {"duration": 0.00018435704987496138, "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.00025507796090096235, "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.00019144092220813036, "outcome": "passed"}, "call": {"duration": 0.0002020229585468769, "outcome": "passed"}, "teardown": {"duration": 0.0001967179123312235, "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.00017437501810491085, "outcome": "passed"}, "call": {"duration": 0.00016747298650443554, "outcome": "passed"}, "teardown": {"duration": 0.00019609497394412756, "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.0001691450597718358, "outcome": "passed"}, "call": {"duration": 0.0004768100334331393, "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.00026376801542937756, "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.00018964800983667374, "outcome": "passed"}, "call": {"duration": 0.0001984010450541973, "outcome": "passed"}, "teardown": {"duration": 0.0001975690247491002, "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.00018579699099063873, "outcome": "passed"}, "call": {"duration": 0.000316492049023509, "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.00025751092471182346, "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.00019102497026324272, "outcome": "passed"}, "call": {"duration": 0.00019292894285172224, "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.00023589807096868753, "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.00018735602498054504, "outcome": "passed"}, "call": {"duration": 0.00019317190162837505, "outcome": "passed"}, "teardown": {"duration": 0.0001976839266717434, "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.000191046972759068, "outcome": "passed"}, "call": {"duration": 0.0001811350230127573, "outcome": "passed"}, "teardown": {"duration": 0.00019021600019186735, "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.00018191395793110132, "outcome": "passed"}, "call": {"duration": 0.0009334810310974717, "outcome": "passed"}, "teardown": {"duration": 0.00021670304704457521, "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.00018432398792356253, "outcome": "passed"}, "call": {"duration": 0.00017605803441256285, "outcome": "passed"}, "teardown": {"duration": 0.0001879989868029952, "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.00016388704534620047, "outcome": "passed"}, "call": {"duration": 0.0001806630752980709, "outcome": "passed"}, "teardown": {"duration": 0.00019419798627495766, "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.00016722199507057667, "outcome": "passed"}, "call": {"duration": 0.00018580106552690268, "outcome": "passed"}, "teardown": {"duration": 0.00018392701167613268, "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.0001760859740898013, "outcome": "passed"}, "call": {"duration": 0.00017235905397683382, "outcome": "passed"}, "teardown": {"duration": 0.00018672097939997911, "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.00018074410036206245, "outcome": "passed"}, "call": {"duration": 0.0001893120352178812, "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.00023920799139887094, "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.00017966004088521004, "outcome": "passed"}, "call": {"duration": 0.00019452592823654413, "outcome": "passed"}, "teardown": {"duration": 0.00018929899670183659, "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.00018349499441683292, "outcome": "passed"}, "call": {"duration": 0.0001746440539136529, "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 0x7f6c0b9338b0>\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.00044928805436939, "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.0002709520049393177, "outcome": "passed"}, "call": {"duration": 0.00020276301074773073, "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.0002941089915111661, "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.00045932596549391747, "outcome": "passed"}, "call": {"duration": 0.00021862389985471964, "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 0x7f6c0b736f10>\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.0008338589686900377, "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.00019153498578816652, "outcome": "passed"}, "call": {"duration": 0.00021516799461096525, "outcome": "passed"}, "teardown": {"duration": 0.00021473504602909088, "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.0003814550582319498, "outcome": "passed"}, "call": {"duration": 0.00020856503397226334, "outcome": "passed"}, "teardown": {"duration": 0.0006595569429919124, "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.00035349803511053324, "outcome": "passed"}, "call": {"duration": 0.00019166001584380865, "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 0x7f6c0b54aca0>\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.0006822709692642093, "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.0003420260036364198, "outcome": "passed"}, "call": {"duration": 0.00023755698930472136, "outcome": "passed"}, "teardown": {"duration": 0.0006303309928625822, "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.0001796300057321787, "outcome": "passed"}, "call": {"duration": 0.0004920799983665347, "outcome": "passed"}, "teardown": {"duration": 0.00020946201402693987, "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.0001809720415621996, "outcome": "passed"}, "call": {"duration": 0.0001699109561741352, "outcome": "passed"}, "teardown": {"duration": 0.0001904919045045972, "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.0001955030020326376, "outcome": "passed"}, "call": {"duration": 0.00018532900139689445, "outcome": "passed"}, "teardown": {"duration": 0.00019166292622685432, "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.00016802200116217136, "outcome": "passed"}, "call": {"duration": 0.00016269809566438198, "outcome": "passed"}, "teardown": {"duration": 0.0001978430664166808, "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.00018341001123189926, "outcome": "passed"}, "call": {"duration": 0.00016795506235212088, "outcome": "passed"}, "teardown": {"duration": 0.00018405704759061337, "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.0001828980166465044, "outcome": "passed"}, "call": {"duration": 0.0002025360008701682, "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.00024413398932665586, "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.00017893302720040083, "outcome": "passed"}, "call": {"duration": 0.00019873399287462234, "outcome": "passed"}, "teardown": {"duration": 0.0001910560531541705, "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.000180736999027431, "outcome": "passed"}, "call": {"duration": 0.00018068705685436726, "outcome": "passed"}, "teardown": {"duration": 0.00019529310520738363, "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.0001714759273454547, "outcome": "passed"}, "call": {"duration": 0.00018791807815432549, "outcome": "passed"}, "teardown": {"duration": 0.00018813100177794695, "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.00017805001698434353, "outcome": "passed"}, "call": {"duration": 0.0007094360189512372, "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.000262564979493618, "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.00018309091683477163, "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