@@ -278,8 +278,9 @@ def test_collapsed_stack_collector_with_empty_and_deep_stacks(self):
278278        test_frames  =  [MockInterpreterInfo (0 , [MockThreadInfo (1 , [("file.py" , 10 , "func" )])])]
279279        collector .collect (test_frames )
280280        self .assertEqual (len (collector .stack_counter ), 1 )
281-         ((path ,), count ), =  collector .stack_counter .items ()
282-         self .assertEqual (path , ("file.py" , 10 , "func" ))
281+         ((path , thread_id ), count ), =  collector .stack_counter .items ()
282+         self .assertEqual (path , (("file.py" , 10 , "func" ),))
283+         self .assertEqual (thread_id , 1 )
283284        self .assertEqual (count , 1 )
284285
285286        # Test with very deep stack 
@@ -288,10 +289,11 @@ def test_collapsed_stack_collector_with_empty_and_deep_stacks(self):
288289        collector  =  CollapsedStackCollector ()
289290        collector .collect (test_frames )
290291        # One aggregated path with 100 frames (reversed) 
291-         (path_tuple ,), =  (collector .stack_counter .keys (),)
292+         (( path_tuple ,  thread_id ) ,), =  (collector .stack_counter .keys (),)
292293        self .assertEqual (len (path_tuple ), 100 )
293294        self .assertEqual (path_tuple [0 ], ("file99.py" , 99 , "func99" ))
294295        self .assertEqual (path_tuple [- 1 ], ("file0.py" , 0 , "func0" ))
296+         self .assertEqual (thread_id , 1 )
295297
296298    def  test_pstats_collector_basic (self ):
297299        """Test basic PstatsCollector functionality.""" 
@@ -393,9 +395,10 @@ def test_collapsed_stack_collector_basic(self):
393395
394396        # Should store one reversed path 
395397        self .assertEqual (len (collector .stack_counter ), 1 )
396-         (path , count ), =  collector .stack_counter .items ()
398+         (( path ,  thread_id ) , count ), =  collector .stack_counter .items ()
397399        expected_tree  =  (("file.py" , 20 , "func2" ), ("file.py" , 10 , "func1" ))
398400        self .assertEqual (path , expected_tree )
401+         self .assertEqual (thread_id , 1 )
399402        self .assertEqual (count , 1 )
400403
401404    def  test_collapsed_stack_collector_export (self ):
@@ -424,9 +427,9 @@ def test_collapsed_stack_collector_export(self):
424427        lines  =  content .strip ().split ("\n " )
425428        self .assertEqual (len (lines ), 2 )  # Two unique stacks 
426429
427-         # Check collapsed format: file:func:line;file:func:line count 
428-         stack1_expected  =  "file.py:func2:20;file.py:func1:10 2" 
429-         stack2_expected  =  "other.py:other_func:5 1" 
430+         # Check collapsed format: tid:X; file:func:line;file:func:line count 
431+         stack1_expected  =  "tid:1; file.py:func2:20;file.py:func1:10 2" 
432+         stack2_expected  =  "tid:1; other.py:other_func:5 1" 
430433
431434        self .assertIn (stack1_expected , lines )
432435        self .assertIn (stack2_expected , lines )
@@ -1514,7 +1517,8 @@ def test_collapsed_stack_with_recursion(self):
15141517        self .assertEqual (len (collector .stack_counter ), 2 )
15151518
15161519        # First path should be longer (deeper recursion) than the second 
1517-         paths  =  list (collector .stack_counter .keys ())
1520+         path_tuples  =  list (collector .stack_counter .keys ())
1521+         paths  =  [p [0 ] for  p  in  path_tuples ]  # Extract just the call paths 
15181522        lengths  =  [len (p ) for  p  in  paths ]
15191523        self .assertNotEqual (lengths [0 ], lengths [1 ])
15201524
@@ -1527,7 +1531,7 @@ def test_collapsed_stack_with_recursion(self):
15271531
15281532        def  total_occurrences (func ):
15291533            total  =  0 
1530-             for  path , count  in  collector .stack_counter .items ():
1534+             for  ( path ,  thread_id ) , count  in  collector .stack_counter .items ():
15311535                total  +=  sum (1  for  f  in  path  if  f  ==  func ) *  count 
15321536            return  total 
15331537
0 commit comments