@@ -41,6 +41,27 @@ class TestRSet(unittest.TestCase):
4141 }
4242 }
4343 """
44+ R2 = """
45+ {
46+ "version": 1,
47+ "execution": {
48+ "R_lite": [
49+ {
50+ "rank": "10-13",
51+ "children": {
52+ "core": "0-3",
53+ "gpu": "0"
54+ }
55+ }
56+ ],
57+ "starttime": 0,
58+ "expiration": 0,
59+ "nodelist": [
60+ "fluke[10-13]"
61+ ]
62+ }
63+ }
64+ """
4465
4566 def test_init_string (self ):
4667 # init by string
@@ -49,6 +70,11 @@ def test_init_string(self):
4970 self .assertEqual (rset .ncores , 16 )
5071 self .assertEqual (rset .ngpus , 4 )
5172
73+ rset = ResourceSet (self .R2 )
74+ self .assertEqual (str (rset ), "rank[10-13]/core[0-3],gpu0" )
75+ self .assertEqual (rset .ncores , 16 )
76+ self .assertEqual (rset .ngpus , 4 )
77+
5278 def test_init_dict (self ):
5379 # init by dict
5480 rdict = json .loads (self .R_input )
@@ -58,6 +84,13 @@ def test_init_dict(self):
5884 self .assertEqual (rset .ngpus , 4 )
5985 self .assertEqual (rset .nnodes , 4 )
6086
87+ rdict = json .loads (self .R2 )
88+ rset = ResourceSet (rdict )
89+ self .assertEqual (str (rset ), "rank[10-13]/core[0-3],gpu0" )
90+ self .assertEqual (rset .ncores , 16 )
91+ self .assertEqual (rset .ngpus , 4 )
92+ self .assertEqual (rset .nnodes , 4 )
93+
6194 def test_init_implementation (self ):
6295 # init by resource set implementation
6396 rlist = Rlist ().add_rank (0 , cores = "0-1" ).add_child (0 , "gpu" , "0" )
@@ -126,6 +159,11 @@ def test_encode(self):
126159 rset2 = ResourceSet (rstring )
127160 self .assertEqual (str (rset ), str (rset2 ))
128161
162+ rset = ResourceSet (self .R2 )
163+ rstring = rset .encode ()
164+ rset2 = ResourceSet (rstring )
165+ self .assertEqual (str (rset ), str (rset2 ))
166+
129167 def test_append (self ):
130168 rset = ResourceSet (self .R_input )
131169 rset2 = ResourceSet (Rlist ().add_rank (4 , cores = "0-3" ).add_child (4 , "gpu" , "0" ))
@@ -148,18 +186,57 @@ def test_nodelist(self):
148186 self .assertEqual (rset .nodelist .count (), 4 )
149187 self .assertEqual (str (rset .nodelist ), "fluke[0-3]" )
150188
189+ rset = ResourceSet (self .R2 )
190+ self .assertIsInstance (rset .nodelist , Hostlist )
191+ self .assertEqual (rset .nodelist .count (), 4 )
192+ self .assertEqual (str (rset .nodelist ), "fluke[10-13]" )
193+
151194 def test_ranks (self ):
152195 rset = ResourceSet (self .R_input )
153196 self .assertIsInstance (rset .ranks , IDset )
154197 self .assertEqual (rset .ranks .count (), 4 )
155198 self .assertEqual (str (rset .ranks ), "0-3" )
156199
200+ rset = ResourceSet (self .R2 )
201+ self .assertIsInstance (rset .ranks , IDset )
202+ self .assertEqual (rset .ranks .count (), 4 )
203+ self .assertEqual (str (rset .ranks ), "10-13" )
204+
157205 def test_state (self ):
158206 rset = ResourceSet (self .R_input )
159207 self .assertIsNone (rset .state )
160208 rset .state = "up"
161209 self .assertEqual (rset .state , "up" )
162210
211+ def test_host_ranks (self ):
212+ rset = ResourceSet (self .R_input )
213+ self .assertIsInstance (rset , ResourceSet )
214+ self .assertEqual (rset .host_ranks ("fluke0" ), [0 ])
215+ self .assertEqual (rset .host_ranks ("fluke1" ), [1 ])
216+ self .assertEqual (rset .host_ranks ("fluke2" ), [2 ])
217+ self .assertEqual (rset .host_ranks ("fluke3" ), [3 ])
218+ self .assertEqual (rset .host_ranks ("fluke[0,3]" ), [0 , 3 ])
219+ self .assertEqual (rset .host_ranks ("fluke[0-2]" ), [0 , 1 , 2 ])
220+ self .assertEqual (
221+ rset .host_ranks ("fluke[0-2,7]" , ignore_nomatch = True ), [0 , 1 , 2 ]
222+ )
223+ with self .assertRaises (FileNotFoundError ):
224+ rset .host_ranks ("fluke7" )
225+
226+ rset = ResourceSet (self .R2 )
227+ self .assertIsInstance (rset , ResourceSet )
228+ self .assertEqual (rset .host_ranks ("fluke10" ), [10 ])
229+ self .assertEqual (rset .host_ranks ("fluke11" ), [11 ])
230+ self .assertEqual (rset .host_ranks ("fluke12" ), [12 ])
231+ self .assertEqual (rset .host_ranks ("fluke13" ), [13 ])
232+ self .assertEqual (rset .host_ranks ("fluke[10,13]" ), [10 , 13 ])
233+ self .assertEqual (rset .host_ranks ("fluke[10-12]" ), [10 , 11 , 12 ])
234+ self .assertEqual (
235+ rset .host_ranks ("fluke[0-2,10-12]" , ignore_nomatch = True ), [10 , 11 , 12 ]
236+ )
237+ with self .assertRaises (FileNotFoundError ):
238+ rset .host_ranks ("fluke[0-3,10-12]" )
239+
163240 def test_properties (self ):
164241 rset = ResourceSet (self .R_input )
165242 self .assertIsInstance (rset , ResourceSet )
0 commit comments