<s> """<STR_LIT>""" <EOL> import unittest <EOL> from copperhead . compiler . coretypes import * <EOL> class CoretypeTests ( unittest . TestCase ) : <EOL> def setUp ( self ) : <EOL> self . types = [ <EOL> Typevar ( '<STR_LIT:x>' ) , <EOL> Tuple ( Int , Typevar ( '<STR_LIT:a>' ) , Bool , Typevar ( '<STR_LIT:b>' ) ) , <EOL> Fn ( ( Int , Typevar ( '<STR_LIT:a>' ) ) , Bool ) , <EOL> Fn ( ( Int , Typevar ( '<STR_LIT:a>' ) ) , Typevar ( '<STR_LIT:b>' ) ) , <EOL> Polytype ( [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , Fn ( ( Int , Typevar ( '<STR_LIT:a>' ) ) , Typevar ( '<STR_LIT:b>' ) ) ) , <EOL> Polytype ( [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , Fn ( ( Int , '<STR_LIT:a>' ) , '<STR_LIT:b>' ) ) , <EOL> Polytype ( [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , Fn ( ( Typevar ( '<STR_LIT:c>' ) , Typevar ( '<STR_LIT:a>' ) ) , Typevar ( '<STR_LIT:b>' ) ) ) , <EOL> ] <EOL> self . strings = [ <EOL> '<STR_LIT:x>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> ] <EOL> self . occurring = [ <EOL> [ '<STR_LIT:x>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ '<STR_LIT:a>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] , <EOL> ] <EOL> self . free = [ <EOL> [ '<STR_LIT:x>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ '<STR_LIT:a>' ] , <EOL> [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , <EOL> [ ] , <EOL> [ ] , <EOL> [ '<STR_LIT:c>' ] , <EOL> ] <EOL> def tearDown ( self ) : pass <EOL> def testTypevarAsString ( self ) : <EOL> self . assertEqual ( Typevar ( '<STR_LIT:x>' ) , '<STR_LIT:x>' ) <EOL> self . assertEqual ( Typevar ( '<STR_LIT>' ) , '<STR_LIT>' ) <EOL> def testTypeStrings ( self ) : <EOL> for t , s in zip ( self . types , self . strings ) : <EOL> self . assertEqual ( str ( t ) , s ) <EOL> def testOccurringVariables ( self ) : <EOL> for t , vars in zip ( self . types , self . occurring ) : <EOL> names = sorted ( list ( names_in_type ( t ) ) ) <EOL> self . assertEqual ( names , vars ) <EOL> def testFreeVariables ( self ) : <EOL> for t , vars in zip ( self . types , self . free ) : <EOL> names = sorted ( list ( free_in_type ( t ) ) ) <EOL> self . assertEqual ( names , vars ) <EOL> def testOccursCheck ( self ) : <EOL> self . assert_ ( occurs ( '<STR_LIT:a>' , '<STR_LIT:a>' ) ) <EOL> self . assert_ ( not occurs ( '<STR_LIT:a>' , Fn ( ( Int , Int ) , Bool ) ) ) <EOL> self . assert_ ( not occurs ( '<STR_LIT:a>' , Fn ( ( '<STR_LIT:b>' , '<STR_LIT:c>' ) , '<STR_LIT>' ) ) ) <EOL> self . assert_ ( occurs ( '<STR_LIT:a>' , Fn ( ( '<STR_LIT:b>' , Seq ( '<STR_LIT:a>' ) ) , '<STR_LIT:b>' ) ) ) <EOL> self . assert_ ( occurs ( '<STR_LIT:a>' , Polytype ( [ '<STR_LIT:b>' , '<STR_LIT:a>' ] , Seq ( Tuple ( '<STR_LIT:a>' , '<STR_LIT:b>' ) ) ) ) ) <EOL> self . assert_ ( not occurs ( '<STR_LIT:a>' , Polytype ( [ '<STR_LIT:b>' , '<STR_LIT:a>' ] , Seq ( Int ) ) ) ) <EOL> def testSubstitution ( self ) : <EOL> S = lambda t : substituted_type ( t , { '<STR_LIT:x>' : '<STR_LIT:y>' , '<STR_LIT:z>' : '<STR_LIT:u>' , '<STR_LIT>' : '<STR_LIT:v>' } ) <EOL> self . assertEqual ( S ( '<STR_LIT:x>' ) , '<STR_LIT:y>' ) <EOL> self . assertEqual ( S ( '<STR_LIT:y>' ) , '<STR_LIT:y>' ) <EOL> self . assertEqual ( str ( S ( Polytype ( [ '<STR_LIT:a>' , '<STR_LIT:b>' ] , Tuple ( '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , <EOL> '<STR_LIT:z>' ) ) ) ) , <EOL> '<STR_LIT>' ) <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> unittest . main ( ) </s>
