<s> import logging <EOL> from pycoinnet . util . BlockChainView import BlockChainView <EOL> from tests . helper import make_blocks , make_headers <EOL> def test1 ( ) : <EOL> bcv = BlockChainView ( ) <EOL> assert bcv . last_block_index ( ) == - <NUM_LIT:1> <EOL> assert bcv . block_locator_hashes ( ) == [ b'<STR_LIT>' * <NUM_LIT:32> ] <EOL> blocks = make_blocks ( <NUM_LIT:20> ) <EOL> def test_halfsies ( ) : <EOL> hi = BlockChainView . _halsies_indices <EOL> assert hi ( <NUM_LIT:0> ) == set ( [ <NUM_LIT:0> ] ) <EOL> assert hi ( <NUM_LIT:1> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:1> ] ) <EOL> assert hi ( <NUM_LIT:2> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] ) <EOL> assert hi ( <NUM_LIT:3> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) <EOL> assert hi ( <NUM_LIT:4> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> ] ) <EOL> assert hi ( <NUM_LIT:5> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] ) <EOL> assert hi ( <NUM_LIT:6> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:4> , <NUM_LIT:5> , <NUM_LIT:6> ] ) <EOL> assert hi ( <NUM_LIT:7> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:4> , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:7> ] ) <EOL> assert hi ( <NUM_LIT:8> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:4> , <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> ] ) <EOL> assert hi ( <NUM_LIT:9> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:4> , <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> , <NUM_LIT:9> ] ) <EOL> assert hi ( <NUM_LIT:10> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:6> , <NUM_LIT:8> , <NUM_LIT:9> , <NUM_LIT:10> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:8> , <NUM_LIT:10> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> assert hi ( <NUM_LIT:16> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:8> , <NUM_LIT:10> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:16> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:12> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> assert hi ( <NUM_LIT:32> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:16> , <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT:32> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:16> , <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT:32> , <NUM_LIT> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( [ <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:16> , <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:30> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> assert hi ( <NUM_LIT:1000> ) == set ( <EOL> [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1000> ] <EOL> ) <EOL> print ( sorted ( hi ( <NUM_LIT> ) ) ) <EOL> assert hi ( <NUM_LIT> ) == set ( <EOL> [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> <EOL> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( <EOL> [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> ) <EOL> assert hi ( <NUM_LIT> ) == set ( <EOL> [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> <EOL> ] ) <EOL> assert hi ( <NUM_LIT> ) == set ( <EOL> [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> <EOL> ] ) <EOL> prior = hi ( <NUM_LIT:0> ) <EOL> for i in range ( <NUM_LIT> ) : <EOL> v = hi ( i ) <EOL> assert v . issubset ( prior . union ( [ i ] ) ) <EOL> prior = v <EOL> def make_bcv ( node_count ) : <EOL> headers = make_headers ( node_count ) <EOL> nodes = ( ( i , header . hash ( ) , i ) for i , header in enumerate ( headers ) ) <EOL> return BlockChainView ( nodes ) <EOL> def test_winnow ( ) : <EOL> hi = BlockChainView . _halsies_indices <EOL> for size in [ <NUM_LIT:100> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1000> ] : <EOL> bcv = make_bcv ( size ) <EOL> assert len ( bcv . node_tuples ) == size <EOL> assert len ( bcv . hash_to_index ) == size <EOL> bcv . winnow ( ) <EOL> sz = len ( hi ( size ) ) <EOL> assert len ( bcv . node_tuples ) == sz <EOL> assert len ( bcv . hash_to_index ) == sz <EOL> def test_tuple_for_index ( ) : <EOL> for size in [ <NUM_LIT:100> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1000> ] : <EOL> bcv = make_bcv ( size ) <EOL> for i in range ( size ) : <EOL> index , the_hash , the_work = bcv . tuple_for_index ( i ) <EOL> assert index == i <EOL> bcv . winnow ( ) <EOL> for i in range ( size ) : <EOL> index , the_hash , the_work = bcv . tuple_for_index ( i ) <EOL> assert index <= i <EOL> def test_tuple_for_hash ( ) : <EOL> for size in [ <NUM_LIT:100> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1000> ] : <EOL> bcv = make_bcv ( size ) <EOL> headers = make_headers ( size ) <EOL> for idx , header in enumerate ( headers ) : <EOL> the_hash = header . hash ( ) <EOL> the_tuple = bcv . tuple_for_hash ( the_hash ) <EOL> assert the_tuple [ <NUM_LIT:0> ] == idx <EOL> assert the_tuple [ <NUM_LIT:1> ] == the_hash <EOL> bcv . winnow ( ) <EOL> items = BlockChainView . _halsies_indices ( size - <NUM_LIT:1> ) <EOL> for idx , header in enumerate ( headers ) : <EOL> the_hash = header . hash ( ) <EOL> the_tuple = bcv . tuple_for_hash ( the_hash ) <EOL> if idx in items : <EOL> assert the_tuple [ <NUM_LIT:0> ] == idx <EOL> assert the_tuple [ <NUM_LIT:1> ] == the_hash <EOL> else : <EOL> assert the_tuple == None <EOL> def test_block_locator_hashes ( ) : <EOL> for size in [ <NUM_LIT:100> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1000> ] : <EOL> headers = make_headers ( size ) <EOL> nodes = [ ( i , headers [ i ] . hash ( ) , i ) for i in range ( size ) ] <EOL> bcv = BlockChainView ( nodes ) <EOL> blh = bcv . block_locator_hashes ( ) <EOL> tuples = [ bcv . tuple_for_hash ( h ) for h in blh ] <EOL> indices = [ t [ <NUM_LIT:0> ] for t in tuples ] <EOL> indices . sort ( ) <EOL> assert indices == sorted ( bcv . key_index_generator ( ) ) <EOL> bcv . winnow ( ) <EOL> blh = bcv . block_locator_hashes ( ) <EOL> tuples = [ bcv . tuple_for_hash ( h ) for h in blh ] <EOL> indices = [ t [ <NUM_LIT:0> ] for t in tuples ] <EOL> indices . sort ( ) <EOL> assert indices == list ( t [ <NUM_LIT:0> ] for t in bcv . node_tuples ) <EOL> def test_improve_path ( ) : <EOL> size = <NUM_LIT:100> <EOL> headers = make_headers ( size ) <EOL> bcv = make_bcv ( <NUM_LIT:0> ) <EOL> assert bcv . last_block_index ( ) == - <NUM_LIT:1> <EOL> for count in range ( <NUM_LIT:100> ) : <EOL> report = bcv . do_headers_improve_path ( [ headers [ count ] ] ) <EOL> assert report == count <EOL> assert bcv . last_block_index ( ) == count <EOL> headers = make_headers ( <NUM_LIT:10> , headers [ <NUM_LIT> ] ) <EOL> for count in range ( <NUM_LIT> , <NUM_LIT:100> ) : <EOL> report = bcv . do_headers_improve_path ( headers [ <NUM_LIT:0> : count - <NUM_LIT> ] ) <EOL> assert report == False <EOL> count = <NUM_LIT:100> <EOL> report = bcv . do_headers_improve_path ( headers [ <NUM_LIT:0> : count - <NUM_LIT> ] ) <EOL> assert report == <NUM_LIT> <EOL> report = bcv . do_headers_improve_path ( headers [ <NUM_LIT:5> : ] ) <EOL> assert report == <NUM_LIT> <EOL> def test_json_encoding ( ) : <EOL> bcv = BlockChainView ( ) <EOL> j = bcv . as_json ( ) <EOL> assert j == '<STR_LIT>' <EOL> for size in ( <NUM_LIT:30> , <NUM_LIT:100> , <NUM_LIT> ) : <EOL> bcv = make_bcv ( <NUM_LIT:30> ) <EOL> bcv . winnow ( ) <EOL> j = bcv . as_json ( ) <EOL> bcv1 = BlockChainView . from_json ( j ) <EOL> assert bcv1 . node_tuples == bcv . node_tuples </s>
