1+ from collections import deque
2+ from typing import List
3+ import unittest
4+ from oranges import Solution
5+
6+ class TestOrangesRotting (unittest .TestCase ):
7+
8+ def setUp (self ):
9+ self .solution = Solution ()
10+
11+ def test_example_1 (self ):
12+ """Standard case with rotting spreading"""
13+ grid = [[2 ,1 ,1 ],[1 ,1 ,0 ],[0 ,1 ,1 ]]
14+ self .assertEqual (self .solution .orangesRotting (grid ), 4 )
15+
16+ def test_example_2 (self ):
17+ """Impossible case - isolated fresh orange"""
18+ grid = [[2 ,1 ,1 ],[0 ,1 ,1 ],[1 ,0 ,1 ]]
19+ self .assertEqual (self .solution .orangesRotting (grid ), - 1 )
20+
21+ def test_no_fresh_oranges (self ):
22+ """No fresh oranges to rot"""
23+ grid = [[0 ,2 ]]
24+ self .assertEqual (self .solution .orangesRotting (grid ), 0 )
25+
26+ def test_all_fresh_no_rotten (self ):
27+ """All fresh, no rotten oranges"""
28+ grid = [[1 ,1 ,1 ],[1 ,1 ,1 ]]
29+ self .assertEqual (self .solution .orangesRotting (grid ), - 1 )
30+
31+ def test_all_rotten (self ):
32+ """All oranges already rotten"""
33+ grid = [[2 ,2 ],[2 ,2 ]]
34+ self .assertEqual (self .solution .orangesRotting (grid ), 0 )
35+
36+ def test_single_fresh (self ):
37+ """Single fresh orange next to rotten"""
38+ grid = [[2 ,1 ]]
39+ self .assertEqual (self .solution .orangesRotting (grid ), 1 )
40+
41+ def test_single_rotten (self ):
42+ """Only one rotten orange, no fresh"""
43+ grid = [[2 ]]
44+ self .assertEqual (self .solution .orangesRotting (grid ), 0 )
45+
46+ def test_single_fresh_alone (self ):
47+ """Single fresh orange, no rotten"""
48+ grid = [[1 ]]
49+ self .assertEqual (self .solution .orangesRotting (grid ), - 1 )
50+
51+ def test_empty_cells_only (self ):
52+ """Grid with only empty cells"""
53+ grid = [[0 ,0 ],[0 ,0 ]]
54+ self .assertEqual (self .solution .orangesRotting (grid ), 0 )
55+
56+ def test_multiple_rotten_sources (self ):
57+ """Multiple rotten oranges spreading simultaneously"""
58+ grid = [[2 ,1 ,1 ],[1 ,1 ,1 ],[1 ,1 ,2 ]]
59+ self .assertEqual (self .solution .orangesRotting (grid ), 2 )
60+
61+ def test_long_chain (self ):
62+ """Linear chain of oranges"""
63+ grid = [[2 ,1 ,1 ,1 ,1 ,1 ]]
64+ self .assertEqual (self .solution .orangesRotting (grid ), 5 )
65+
66+ def test_isolated_groups (self ):
67+ """Fresh orange isolated by empty cells"""
68+ grid = [[2 ,1 ,0 ,1 ]]
69+ self .assertEqual (self .solution .orangesRotting (grid ), - 1 )
70+
71+ def test_large_grid (self ):
72+ """Larger grid with complex pattern"""
73+ grid = [
74+ [2 ,1 ,1 ,0 ,0 ],
75+ [1 ,1 ,0 ,0 ,0 ],
76+ [0 ,0 ,0 ,1 ,2 ],
77+ [0 ,0 ,0 ,1 ,1 ]
78+ ]
79+ self .assertEqual (self .solution .orangesRotting (grid ), 2 )
80+
81+ def test_square_grid (self ):
82+ """Rotten in center spreading outward"""
83+ grid = [
84+ [1 ,1 ,1 ],
85+ [1 ,2 ,1 ],
86+ [1 ,1 ,1 ]
87+ ]
88+ self .assertEqual (self .solution .orangesRotting (grid ), 2 )
89+
90+ def test_corner_rotten (self ):
91+ """Rotten in corner"""
92+ grid = [
93+ [2 ,1 ,1 ],
94+ [1 ,1 ,1 ],
95+ [1 ,1 ,1 ]
96+ ]
97+ self .assertEqual (self .solution .orangesRotting (grid ), 4 )
98+
99+
100+ if __name__ == '__main__' :
101+ unittest .main ()
0 commit comments