import pytest
from mythril . ethereum . util import extract_version
test_data = (
( " pragma solidity 0.5.0 \n " , [ " 0.5.0 " ] ) ,
( " pragma solidity =0.5.0 \n " , [ " 0.5.0 " ] ) ,
( " pragma solidity ^0.4.26 \n " , [ " 0.4.26 " ] ) ,
( " pragma solidity ^0.6.3; \n " , [ f " 0.6. { x } " for x in range ( 3 , 13 ) ] ) ,
( " pragma solidity ^0.6.3 ; \n " , [ f " 0.6. { x } " for x in range ( 3 , 13 ) ] ) ,
(
" pragma solidity ^0.6.3; \n " ,
[ f " 0.6. { x } " for x in range ( 3 , 13 ) ] ,
) ,
(
" pragma solidity ^0.6.3 ; \n " ,
[ f " 0.6. { x } " for x in range ( 3 , 13 ) ] ,
) ,
(
""" pragma solidity >=0.4.0 <0.6.0 ;
contract SimpleStorage {
uint storedData ;
function set ( uint x ) public {
storedData = x ;
}
function get ( ) public view returns ( uint ) {
return storedData ;
}
} """ ,
[ f " 0.4. { x } " for x in range ( 11 , 27 ) ] + [ f " 0.5. { x } " for x in range ( 0 , 18 ) ] ,
) ,
(
"""
pragma solidity > = 0.4 .0 < 0.6 .0
; contract SimpleStorage {
uint storedData ;
function set ( uint x ) public {
storedData = x ;
}
function get ( ) public view returns ( uint ) {
return storedData ;
}
} """ ,
[ f " 0.4. { x } " for x in range ( 11 , 27 ) ] + [ f " 0.5. { x } " for x in range ( 0 , 18 ) ] ,
) ,
(
"""
pragma solidity > = 0.4 .0 < 0.6 .0
; contract SimpleStorage {
uint storedData ;
function set ( uint x ) public {
storedData = x ;
}
function get ( ) public view returns ( uint ) {
return storedData ;
}
} """ ,
[ f " 0.4. { x } " for x in range ( 11 , 27 ) ] + [ f " 0.5. { x } " for x in range ( 0 , 18 ) ] ,
) ,
(
"""
pragma solidity > = 0.5 .0 < 0.6 .0 ;
; contract SimpleStorage {
uint storedData ;
function set ( uint x ) public {
storedData = x ;
}
function get ( ) public view returns ( uint ) {
return storedData ;
}
} """ ,
[ f " 0.5. { x } " for x in range ( 0 , 18 ) ] ,
) ,
(
"""
pragma solidity > = 0 . 4 .0 < 0 . 6 . 0
; contract SimpleStorage {
uint storedData ;
function set ( uint x ) public {
storedData = x ;
}
function get ( ) public view returns ( uint ) {
return storedData ;
}
} """ ,
[ f " 0.4. { x } " for x in range ( 11 , 27 ) ] + [ f " 0.5. { x } " for x in range ( 0 , 18 ) ] ,
) ,
)
@pytest . mark . parametrize ( " input_,output " , test_data )
def test_sar ( input_ , output ) :
assert extract_version ( input_ ) in output