<s> import unittest <EOL> import pycoind <EOL> class TestScriptTransactions ( unittest . TestCase ) : <EOL> class MockTransaction ( pycoind . blockchain . transaction . Transaction ) : <EOL> '''<STR_LIT>''' <EOL> def __init__ ( self , txn_bytes ) : <EOL> ( dummy , self . _transaction ) = pycoind . protocol . Txn . parse ( txn_bytes ) <EOL> @ staticmethod <EOL> def bv ( value ) : <EOL> '<STR_LIT>' <EOL> v = pycoind . script . ByteVector . from_value ( value ) . vector <EOL> return chr ( len ( v ) ) + v <EOL> def setUp ( self ) : <EOL> pass <EOL> def check_transaction ( self , txn_bytes , pk_script , input_index ) : <EOL> txn = self . MockTransaction ( txn_bytes ) <EOL> txio = pycoind . script . Script ( txn ) <EOL> valid = txio . verify_input ( input_index , pk_script ) <EOL> self . assertTrue ( valid ) <EOL> def test_hashall ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT> <EOL> self . check_transaction ( txn_bytes , pk_script , input_index ) <EOL> def test_hashall_anyonecanpay ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT:12> <EOL> self . check_transaction ( txn_bytes , pk_script , input_index ) <EOL> def test_hashnone ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT:3> <EOL> def test_hashnone_anyonecanpay ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT:3> <EOL> def test_hashsingle ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT:1> <EOL> self . check_transaction ( txn_bytes , pk_script , input_index ) <EOL> def test_hashsingle_anyonecanpay ( self ) : <EOL> txn_bytes = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> pk_script = '<STR_LIT>' . decode ( '<STR_LIT>' ) <EOL> input_index = <NUM_LIT:3> <EOL> def check_script ( self , script , output ) : <EOL> if output : <EOL> for o in reversed ( output ) : <EOL> if isinstance ( o , int ) : <EOL> script += self . bv ( o ) <EOL> elif isinstance ( o , str ) : <EOL> script += chr ( len ( o ) ) + o <EOL> else : <EOL> raise Exception ( ) <EOL> script += chr ( pycoind . script . opcodes . OP_EQUALVERIFY ) <EOL> script += ( <EOL> chr ( pycoind . script . opcodes . OP_DEPTH ) + <EOL> self . bv ( <NUM_LIT:0> ) + <EOL> chr ( pycoind . script . opcodes . OP_EQUALVERIFY ) + <EOL> chr ( pycoind . script . opcodes . OP_TRUE ) <EOL> ) <EOL> result = pycoind . script . Script . process ( '<STR_LIT>' , script , None , None ) <EOL> if output is None : <EOL> self . assertFalse ( result ) <EOL> else : <EOL> self . assertTrue ( result ) <EOL> def test_flow_control_ops ( self ) : <EOL> pass <EOL> def test_literal_ops ( self ) : <EOL> tests = [ <EOL> ( ( <NUM_LIT:1> , <NUM_LIT> ) , <NUM_LIT> ) , <EOL> ( ( pycoind . script . opcodes . OP_PUSHDATA1 , <NUM_LIT:1> , <NUM_LIT> ) , <NUM_LIT> ) , <EOL> ( ( pycoind . script . opcodes . OP_PUSHDATA2 , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT> ) , <NUM_LIT> ) , <EOL> ( ( pycoind . script . opcodes . OP_PUSHDATA4 , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> ) , <NUM_LIT> ) , <EOL> ] <EOL> for ( inputs , output ) in tests : <EOL> script = "<STR_LIT>" . join ( chr ( i ) for i in inputs ) <EOL> self . check_script ( script , [ output ] ) <EOL> def test_stack_ops ( self ) : <EOL> xTop = <NUM_LIT> <EOL> ( x , x0 , x1 , x2 , x3 , x4 , x5 , x6 ) = ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) <EOL> tests = [ <EOL> ( '<STR_LIT>' , [ <NUM_LIT:0> ] , [ <NUM_LIT:0> ] , ) , <EOL> ( '<STR_LIT>' , [ <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:1> ] , ) , <EOL> ( '<STR_LIT>' , [ ] , [ <NUM_LIT:0> ] ) , <EOL> ( '<STR_LIT>' , [ <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:2> ] ) , <EOL> ( '<STR_LIT>' , [ x ] , [ ] ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x ] , [ x , x ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x ] , [ x1 , x , x ] ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x2 , x3 ] , [ x , x3 ] ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ x1 , x2 , x1 ] ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x5 , x4 , x3 , x2 , x1 , x0 , <NUM_LIT:5> ] , [ x5 , x4 , x3 , x2 , x1 , x0 , x5 ] ) , <EOL> ( '<STR_LIT>' , [ x5 , x4 , x3 , x2 , x1 , x0 , <NUM_LIT:2> ] , [ x5 , x4 , x3 , x2 , x1 , x0 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x5 , x4 , x3 , x2 , x1 , x0 , <NUM_LIT:5> ] , [ x4 , x3 , x2 , x1 , x0 , x5 ] ) , <EOL> ( '<STR_LIT>' , [ x5 , x4 , x3 , x2 , x1 , x0 , <NUM_LIT:2> ] , [ x5 , x4 , x3 , x1 , x0 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 , x3 ] , [ x2 , x3 , x1 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 , x3 ] , [ x , x2 , x3 , x1 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ x2 , x1 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 ] , [ x , x2 , x1 ] ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ x2 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 ] , [ x , x2 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 ] , [ x ] ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , [ x1 , x2 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 ] , [ x , x1 , x2 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 , x3 ] , [ x1 , x2 , x3 , x1 , x2 , x3 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 , x3 ] , [ x , x1 , x2 , x3 , x1 , x2 , x3 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 ] , None ) , <EOL> ( '<STR_LIT>' , [ ] , None ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 , x3 , x4 ] , [ x1 , x2 , x3 , x4 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 , x3 , x4 ] , [ x , x1 , x2 , x3 , x4 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 , x3 , x4 , x5 , x6 ] , [ x3 , x4 , x5 , x6 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 , x3 , x4 , x5 , x6 ] , [ x , x3 , x4 , x5 , x6 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x1 , x2 , x3 , x4 ] , [ x3 , x4 , x1 , x2 ] ) , <EOL> ( '<STR_LIT>' , [ x , x1 , x2 , x3 , x4 ] , [ x , x3 , x4 , x1 , x2 ] ) , <EOL> ] <EOL> for opname , inputs , outputs in tests : <EOL> script = "<STR_LIT>" . join ( self . bv ( i ) for i in inputs ) + chr ( pycoind . script . opcodes . get_opcode ( opname ) ) <EOL> self . check_script ( script , outputs ) <EOL> def test_splice_ops ( self ) : <EOL> tests = [ <EOL> ( [ '<STR_LIT:hello>' ] , [ '<STR_LIT:hello>' , <NUM_LIT:5> ] ) , <EOL> ( [ '<STR_LIT:hello>' , '<STR_LIT>' ] , [ '<STR_LIT:hello>' , '<STR_LIT>' , <NUM_LIT:6> ] ) , <EOL> ( [ ] , None ) , <EOL> ] <EOL> for ( inputs , outputs ) in tests : <EOL> script = '<STR_LIT>' . join ( ( chr ( len ( i ) ) + i ) for i in inputs ) + chr ( pycoind . script . opcodes . OP_SIZE ) <EOL> self . check_script ( script , outputs ) <EOL> def test_logic_ops ( self ) : <EOL> pass <EOL> def test_math_overflow_ops ( self ) : <EOL> pass <EOL> def test_unary_math_ops ( self ) : <EOL> tests = [ <EOL> ( '<STR_LIT>' , - <NUM_LIT:2> , - <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , - <NUM_LIT:2> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , - <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:2> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , - <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:200> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ] <EOL> for opname , input , output in tests : <EOL> script = self . bv ( input ) + chr ( pycoind . script . opcodes . get_opcode ( opname ) ) <EOL> self . check_script ( script , [ output ] ) <EOL> def test_binary_math_ops ( self ) : <EOL> tests = [ <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , - <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , - <NUM_LIT:2> , - <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , - <NUM_LIT:2> , - <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:1000> , - <NUM_LIT:1000> , - <NUM_LIT> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:5> , - <NUM_LIT:4> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:5> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:5> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:1> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:6> , <NUM_LIT:5> , <NUM_LIT:5> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , - <NUM_LIT:6> , - <NUM_LIT:6> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:6> ) , <EOL> ( '<STR_LIT>' , <NUM_LIT:6> , <NUM_LIT:5> , <NUM_LIT:6> ) , <EOL> ( '<STR_LIT>' , - <NUM_LIT:5> , - <NUM_LIT:6> , - <NUM_LIT:5> ) , <EOL> ] <EOL> for opname , a , b , output in tests : <EOL> script = self . bv ( a ) + self . bv ( b ) + chr ( pycoind . script . opcodes . get_opcode ( opname ) ) <EOL> self . check_script ( script , [ output ] ) <EOL> def test_multisig ( self ) : <EOL> pass <EOL> def test_ternary_math_ops ( self ) : <EOL> tests = [ <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:3> ] , [ <NUM_LIT:1> ] ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> ] , [ <NUM_LIT:1> ] ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:3> , <NUM_LIT:1> , <NUM_LIT:3> ] , [ <NUM_LIT:0> ] ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:0> , - <NUM_LIT:5> , <NUM_LIT:5> ] , [ <NUM_LIT:1> ] ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:0> , <NUM_LIT:5> , - <NUM_LIT:5> ] , [ <NUM_LIT:0> ] ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:10> , <NUM_LIT:12> ] , None ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:12> , <NUM_LIT:10> ] , None ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ <NUM_LIT:12> ] , None ) , <EOL> ( pycoind . script . opcodes . OP_WITHIN , [ ] , None ) , <EOL> ] <EOL> for ( opname , inputs , outputs ) in tests : <EOL> script = "<STR_LIT>" . join ( self . bv ( i ) for i in inputs ) + chr ( opname ) <EOL> self . check_script ( script , outputs ) <EOL> def test_crypto_ops ( self ) : <EOL> tests = [ <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' . decode ( '<STR_LIT>' ) , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' . decode ( '<STR_LIT>' ) , '<STR_LIT>' ) , <EOL> ] <EOL> for opname , input , output in tests : <EOL> script = chr ( len ( input ) ) + input + chr ( pycoind . script . opcodes . get_opcode ( opname ) ) <EOL> self . check_script ( script , [ output . decode ( '<STR_LIT>' ) ] ) <EOL> def test_reserved_ops ( self ) : <EOL> pass <EOL> suite = unittest . TestLoader ( ) . loadTestsFromTestCase ( TestScriptTransactions ) <EOL> unittest . TextTestRunner ( verbosity = <NUM_LIT:2> ) . run ( suite ) </s>
