11import unittest
2- from switchlang import switch
2+ from switchlang import switch , closed_range
33
44
55# here is a custom type we can use as a key for our tests
@@ -10,76 +10,49 @@ class TestKeyObject:
1010class CoreTests (unittest .TestCase ):
1111 def test_has_matched_case_int (self ):
1212 value = 7
13-
14- executed_case = None
15-
16- def get_set_case (val ):
17- nonlocal executed_case
18- executed_case = val
19-
2013 with switch (value ) as s :
21- s .case (1 , lambda : get_set_case ( "one" ) )
22- s .case (5 , lambda : get_set_case ( "five" ) )
23- s .case (7 , lambda : get_set_case ( "seven" ) )
24- s .default (lambda : get_set_case ( 'default' ) )
14+ s .case (1 , lambda : "one" )
15+ s .case (5 , lambda : "five" )
16+ s .case (7 , lambda : "seven" )
17+ s .default (lambda : 'default' )
2518
26- self .assertEqual (executed_case , "seven" )
19+ self .assertEqual (s . result , "seven" )
2720
2821 def test_has_matched_case_object (self ):
2922 t1 = TestKeyObject ()
3023 t2 = TestKeyObject ()
3124 t3 = TestKeyObject ()
32- value = t2
3325
34- executed_case = None
26+ with switch (t2 ) as s :
27+ s .case (t1 , lambda : t1 )
28+ s .case (t2 , lambda : t2 )
29+ s .case (t3 , lambda : t3 )
30+ s .default (lambda : None )
3531
36- def get_set_case (val ):
37- nonlocal executed_case
38- executed_case = val
39-
40- with switch (value ) as s :
41- s .case (t1 , lambda : get_set_case (t1 ))
42- s .case (t2 , lambda : get_set_case (t2 ))
43- s .case (t3 , lambda : get_set_case (t3 ))
44- s .default (lambda : get_set_case (None ))
45-
46- self .assertEqual (executed_case , t2 )
32+ self .assertEqual (s .result , t2 )
4733
4834 def test_default_passthrough (self ):
4935 value = 11
50- executed_case = None
51-
52- def get_set_case (val ):
53- nonlocal executed_case
54- executed_case = val
55-
5636 with switch (value ) as s :
57- s .case (1 , lambda : get_set_case ( 1 ) )
58- s .case (2 , lambda : get_set_case ( 2 ) )
59- s .default (lambda : get_set_case ( " default" ) )
37+ s .case (1 , lambda : '1' )
38+ s .case (2 , lambda : '2' )
39+ s .default (lambda : ' default' )
6040
61- self .assertEqual (executed_case , "default" )
41+ self .assertEqual (s . result , "default" )
6242
6343 def test_none_as_valid_case (self ):
64- value = None
65- executed_case = None
66-
67- def get_set_case (val ):
68- nonlocal executed_case
69- executed_case = val
70-
71- with switch (value ) as s :
72- s .case (1 , lambda : get_set_case (1 ))
73- s .case (None , lambda : get_set_case (None ))
74- s .default (lambda : get_set_case ("default" ))
44+ with switch (None ) as s :
45+ s .case (1 , lambda : 'one' )
46+ s .case (None , lambda : 'none' )
47+ s .default (lambda : "default" )
7548
76- self .assertEqual (executed_case , None )
49+ self .assertEqual (s . result , 'none' )
7750
7851 def test_error_no_match_no_default (self ):
7952 with self .assertRaises (Exception ):
8053 with switch ('val' ) as s :
8154 s .case (1 , lambda : None )
82- s .case (1 , lambda : None )
55+ s .case (2 , lambda : None )
8356
8457 def test_error_duplicate_case (self ):
8558 with self .assertRaises (ValueError ):
@@ -88,50 +61,36 @@ def test_error_duplicate_case(self):
8861 s .case (1 , lambda : None )
8962
9063 def test_multiple_values_one_case_range (self ):
91- executed_case = None
92-
93- def get_set_case (val ):
94- nonlocal executed_case
95- executed_case = val
96-
9764 for value in range (1 , 5 ):
9865 with switch (value ) as s :
99- s .case (range (1 , 6 ), lambda : get_set_case ( "1-to-5" ) )
100- s .case (range (6 , 7 ), lambda : get_set_case ( "6" ) )
101- s .default (lambda : get_set_case ( 'default' ) )
66+ s .case (range (1 , 6 ), lambda : "1-to-5" )
67+ s .case (range (6 , 7 ), lambda : "6" )
68+ s .default (lambda : 'default' )
10269
103- self .assertEqual (executed_case , "1-to-5" )
70+ self .assertEqual (s . result , "1-to-5" )
10471
10572 for value in range (6 , 7 ):
10673 with switch (value ) as s :
107- s .case (range (1 , 6 ), lambda : get_set_case ( "1-to-5" ) )
108- s .case (range (6 , 7 ), lambda : get_set_case ( "6" ) )
109- s .default (lambda : get_set_case ( 'default' ) )
74+ s .case (range (1 , 6 ), lambda : "1-to-5" )
75+ s .case (range (6 , 7 ), lambda : "6" )
76+ s .default (lambda : 'default' )
11077
111- self .assertEqual (executed_case , "6" )
78+ self .assertEqual (s . result , "6" )
11279
11380 with switch (7 ) as s :
114- s .case (range (1 , 6 ), lambda : get_set_case ( "1-to-5" ) )
115- s .case (range (6 , 7 ), lambda : get_set_case ( "6" ) )
116- s .default (lambda : get_set_case ( 'default' ) )
81+ s .case (range (1 , 6 ), lambda : "1-to-5" )
82+ s .case (range (6 , 7 ), lambda : "6" )
83+ s .default (lambda : 'default' )
11784
118- self .assertEqual (executed_case , "default" )
85+ self .assertEqual (s . result , "default" )
11986
12087 def test_multiple_values_one_case_list (self ):
121- value = 6
122-
123- executed_case = None
124-
125- def get_set_case (val ):
126- nonlocal executed_case
127- executed_case = val
88+ with switch (6 ) as s :
89+ s .case ([1 , 3 , 5 , 7 ], lambda : "odd" )
90+ s .case ([0 , 2 , 4 , 6 , 8 ], lambda : "even" )
91+ s .default (lambda : 'default' )
12892
129- with switch (value ) as s :
130- s .case ([1 , 3 , 5 , 7 ], lambda : get_set_case ("odd" ))
131- s .case ([0 , 2 , 4 , 6 , 8 ], lambda : get_set_case ("even" ))
132- s .default (lambda : get_set_case ('default' ))
133-
134- self .assertEqual (executed_case , "even" )
93+ self .assertEqual (s .result , "even" )
13594
13695 def test_return_value_from_case (self ):
13796 value = 4
@@ -147,3 +106,26 @@ def test_result_inaccessible_if_hasnt_run(self):
147106 with self .assertRaises (Exception ):
148107 s = switch (7 )
149108 s .result
109+
110+ def test_closed_range (self ):
111+ for value in [1 , 2 , 3 , 4 , 5 ]:
112+ with switch (value ) as s :
113+ s .case (closed_range (1 , 5 ), lambda : "1-to-5" )
114+ s .case (closed_range (6 , 7 ), lambda : "6" )
115+ s .default (lambda : 'default' )
116+
117+ self .assertEqual (s .result , "1-to-5" )
118+
119+ with switch (0 ) as s :
120+ s .case (closed_range (1 , 5 ), lambda : "1-to-5" )
121+ s .case (closed_range (6 , 7 ), lambda : "6" )
122+ s .default (lambda : 'default' )
123+
124+ self .assertEqual (s .result , "default" )
125+
126+ with switch (6 ) as s :
127+ s .case (closed_range (1 , 5 ), lambda : "1-to-5" )
128+ s .case (closed_range (6 , 7 ), lambda : "6" )
129+ s .default (lambda : 'default' )
130+
131+ self .assertEqual (s .result , "6" )
0 commit comments