@@ -272,3 +272,71 @@ def test_binaryagreement():
272272 reason = 'Place holder for https://github.com/amiller/HoneyBadgerBFT/issues/59' )
273273def test_issue59_attack ():
274274 raise NotImplementedError ("Placeholder test failure for Issue #59" )
275+
276+
277+ @mark .parametrize ('values,s,already_decided,expected_est,'
278+ 'expected_already_decided,expected_output' , (
279+ ({0 }, 0 , None , 0 , 0 , 0 ),
280+ ({1 }, 1 , None , 1 , 1 , 1 ),
281+ ))
282+ def test_set_next_round_estimate_with_decision (values , s , already_decided ,
283+ expected_est , expected_already_decided , expected_output ):
284+ from honeybadgerbft .core .binaryagreement import set_new_estimate
285+ decide = Queue ()
286+ updated_est , updated_already_decided = set_new_estimate (
287+ values = values ,
288+ s = s ,
289+ already_decided = already_decided ,
290+ decide = decide .put ,
291+ )
292+ assert updated_est == expected_est
293+ assert updated_already_decided == expected_already_decided
294+ assert decide .get () == expected_output
295+
296+
297+ @mark .parametrize ('values,s,already_decided,'
298+ 'expected_est,expected_already_decided' , (
299+ ({0 }, 0 , 1 , 0 , 1 ),
300+ ({0 }, 1 , None , 0 , None ),
301+ ({0 }, 1 , 0 , 0 , 0 ),
302+ ({0 }, 1 , 1 , 0 , 1 ),
303+ ({1 }, 0 , None , 1 , None ),
304+ ({1 }, 0 , 0 , 1 , 0 ),
305+ ({1 }, 0 , 1 , 1 , 1 ),
306+ ({1 }, 1 , 0 , 1 , 0 ),
307+ ({0 , 1 }, 0 , None , 0 , None ),
308+ ({0 , 1 }, 0 , 0 , 0 , 0 ),
309+ ({0 , 1 }, 0 , 1 , 0 , 1 ),
310+ ({0 , 1 }, 1 , None , 1 , None ),
311+ ({0 , 1 }, 1 , 0 , 1 , 0 ),
312+ ({0 , 1 }, 1 , 1 , 1 , 1 ),
313+ ))
314+ def test_set_next_round_estimate (values , s , already_decided ,
315+ expected_est , expected_already_decided ):
316+ from honeybadgerbft .core .binaryagreement import set_new_estimate
317+ decide = Queue ()
318+ updated_est , updated_already_decided = set_new_estimate (
319+ values = values ,
320+ s = s ,
321+ already_decided = already_decided ,
322+ decide = decide .put ,
323+ )
324+ assert updated_est == expected_est
325+ assert updated_already_decided == expected_already_decided
326+ assert decide .empty ()
327+
328+
329+ @mark .parametrize ('values,s,already_decided' , (
330+ ({0 }, 0 , 0 ),
331+ ({1 }, 1 , 1 ),
332+ ))
333+ def test_set_next_round_estimate_raises (values , s , already_decided ):
334+ from honeybadgerbft .core .binaryagreement import set_new_estimate
335+ from honeybadgerbft .exceptions import AbandonedNodeError
336+ with raises (AbandonedNodeError ):
337+ updated_est , updated_already_decided = set_new_estimate (
338+ values = values ,
339+ s = s ,
340+ already_decided = already_decided ,
341+ decide = None ,
342+ )
0 commit comments