package Ġorg . llvm 4 j . llvm 4 j Ċ Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . llvm 4 j . llvm 4 j . testing . assertIs Err Ċ import Ġorg . llvm 4 j . llvm 4 j . testing . assertIs None Ċ import Ġorg . llvm 4 j . llvm 4 j . testing . assertIs Ok Ċ import Ġorg . llvm 4 j . llvm 4 j . testing . assertIs Some Ċ import Ġorg . llvm 4 j . optional . None Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠFunction Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġ` Test ĠFunction Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( void , Ġi 3 2 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġmod . addFunction (" test _ fn ", Ġfn Ty ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Type Kind . Pointer , Ġsubject 1 . getType (). getType Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Value Kind . Function , Ġsubject 1 . getValue Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" declare Ġvoid Ġ@ test _ fn ( i 3 2 , Ġi 3 2 )\ n ", Ġsubject 1 . get AsString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" test _ fn ", Ġsubject 1 . getName ()) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . is Constant () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . is Undef () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . isNull () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . has Person ality Function () Ġ} ĊĠĠĠĠĠĠĠ Ġassert Is None ( subject 1 . get Person ality Function ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Call Convention . C , Ġsubject 1 . get Call Convention ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsubject 1 . getParameter Count ()) ĊĠĠĠĠĠĠĠ Ġassert Is None ( subject 1 . get GC ()) ĊĊĠĠĠĠĠĠĠ Ġsubject 1 . setName (" test _ main ") ĊĠĠĠĠĠĠĠ Ġsubject 1 . set GC (" shadow - stack ") ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Call Convention ( Call Convention . Fast ) ĊĊĠĠĠĠĠĠĠ Ġassert Is Some ( subject 1 . get GC ()) ĊĠĠĠĠĠĠĠ Ġassert Is Some ( mod . get Function (" test _ main ")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" test _ main ", Ġsubject 1 . getName ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" shadow - stack ", Ġsubject 1 . get GC (). unwrap ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Call Convention . Fast , Ġsubject 1 . get Call Convention ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġfunction Ġattributes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( void , Ġi 3 2 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġmod . addFunction (" test _ fn ", Ġfn Ty ) ĊĊĠĠĠĠĠĠĠ Ġsubject 1 . add Target Dependent Attribute (" k ", Ġ" v ") ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġsubject 1 . getAttribute Count ( Attribute Index . Function )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġfunction Ġparameters `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġi 8 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( void , Ġi 8 , Ġi 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġmod . addFunction (" test _ fn ", Ġfn Ty ) ĊĠĠĠĠĠĠĠ Ġval Ġ( subject 2 , Ġsubject 3 ) Ġ= Ġsubject 1 . getParameters () ĊĊĠĠĠĠĠĠĠ Ġsubject 2 . set Alignment ( 8 ) ĊĠĠĠĠĠĠĠ Ġsubject 2 . setName (" a ") ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" a ", Ġsubject 2 . getName ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsubject 1 . getParameter Count ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( subject 2 . ref , Ġsubject 1 . getParameter ( 0 ). unwrap (). ref ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( subject 3 . ref , Ġsubject 1 . getParameter ( 1 ). unwrap (). ref ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( subject 1 . ref , Ġsubject 2 . getParent (). ref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġperson ality Ġfunctions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġi 8 Ġ= Ġctx . getInt 8 Type () ĊĠĠĠĠĠĠĠ Ġval Ġperson ality Fn Ty Ġ= Ġctx . get FunctionType ( i 3 2 , Ġis Vari adic Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġprimary Fn Ty Ġ= Ġctx . get FunctionType ( i 8 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġmod . addFunction (" test _ main ", Ġprimary Fn Ty ) ĊĠĠĠĠĠĠĠ Ġval Ġsubject 2 Ġ= Ġmod . addFunction (" person ality ", Ġperson ality Fn Ty ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . has Person ality Function () Ġ} ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Person ality Function ( subject 2 ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . has Person ality Function () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( subject 2 . ref , Ġsubject 1 . get Person ality Function (). unwrap (). ref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġdeleting Ġfunction Ġfrom Ġmodule `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( void , Ġi 3 2 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġmod . addFunction (" test _ fn ", Ġfn Ty ) ĊĊĠĠĠĠĠĠĠ Ġassert Is Some ( mod . get Function (" test _ fn ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( subject 1 . ref , Ġmod . get Function (" test _ fn "). unwrap (). ref ) ĊĊĠĠĠĠĠĠĠ Ġsubject 1 . delete () ĊĊĠĠĠĠĠĠĠ Ġassert Is None ( mod . get Function (" test _ fn ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġbasic Ġblock Ġcount `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( void ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġmod . addFunction (" test _ fn ", Ġfn Ty ) ĊĠĠĠĠĠĠĠ Ġval Ġbb 1 Ġ= Ġctx . new BasicBlock (" bb 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġbb 2 Ġ= Ġctx . new BasicBlock (" bb 2 ") ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsubject . get BasicBlock Count ()) ĊĊĠĠĠĠĠĠĠ Ġsubject . add BasicBlock ( bb 1 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġsubject . get BasicBlock Count ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bb 1 . ref , Ġsubject . get Basic Blocks (). first (). ref ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bb 1 . ref , Ġsubject . getEntry BasicBlock (). ref ) ĊĊĠĠĠĠĠĠĠ Ġsubject . add BasicBlock ( bb 2 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsubject . get BasicBlock Count ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Retrie ving Ġblock Ġaddress Ġof Ġbasic Ġblock `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test ") ĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġmod . addFunction (" test ", Ġctx . get FunctionType ( void )) ĊĠĠĠĠĠĠĠ Ġval Ġother Func Ġ= Ġmod . addFunction (" test 2 ", Ġctx . get FunctionType ( void )) ĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġctx . new BasicBlock (" entry ") ĊĠĠĠĠĠĠĠ Ġval Ġbb 1 Ġ= Ġctx . new BasicBlock (" bb 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġun owned Ġ= Ġctx . new BasicBlock (" un owned ") ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġctx . new BasicBlock (" other ") ĊĊĠĠĠĠĠĠĠ Ġfunc . add BasicBlock ( entry ) ĊĠĠĠĠĠĠĠ Ġfunc . add BasicBlock ( bb 1 ) ĊĠĠĠĠĠĠĠ Ġother Func . add BasicBlock ( other ) ĊĊĠĠĠĠĠĠĠ Ġassert Is Err ( func . getBlock Address ( un owned )) ĊĠĠĠĠĠĠĠ Ġassert Is Err ( func . getBlock Address ( other )) ĊĠĠĠĠĠĠĠ Ġassert Is Ok ( func . getBlock Address ( bb 1 )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGlobal Alias Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġ` Test ĠGlobal Alias Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 ptr Ġ= Ġctx . get Pointer Type ( i 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue 1 Ġ= Ġi 3 2 . get Constant Pointer Null () ĊĠĠĠĠĠĠĠ Ġval Ġvalue 2 Ġ= Ġi 3 2 ptr . unwrap (). get Constant Undef () ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġmod . add Global Alias (" global _ alias ", Ġi 3 2 ptr . unwrap (), Ġvalue 1 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Type Kind . Pointer , Ġsubject . getType (). getType Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Value Kind . Global Alias , Ġsubject . getValue Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ("@ global _ alias Ġ= Ġalias Ġi 3 2 , Ġi 3 2 Ġnull \ n ", Ġsubject . get AsString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" global _ alias ", Ġsubject . getName ()) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject . is Constant () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject . isNull () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject . is Undef () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( value 1 . ref , Ġsubject . getValue (). ref ) ĊĊĠĠĠĠĠĠĠ Ġsubject . setName (" global _ alias 1 ") ĊĠĠĠĠĠĠĠ Ġsubject . setValue ( value 2 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" global _ alias 1 ", Ġsubject . getName ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( value 2 . ref , Ġsubject . getValue (). ref ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGlobal Value Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġ` Test ĠGlobal Value Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( i 3 2 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsubject : ĠGlobal Value Ġ= Ġmod . addFunction (" test _ main ", Ġfn Ty ) ĊĊĠĠĠĠĠĠĠ Ġassert Is None ( subject . get Section ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( mod . ref , Ġsubject . getModule (). ref ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Link age . External , Ġsubject . get Link age ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Visibility . Default , Ġsubject . get Visibility ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( DLL Storage Class . Default , Ġsubject . get Storage Class ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Unnamed Address . None , Ġsubject . getUn named Address ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Type Kind . Function , Ġsubject . getValue Type (). getType Kind ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthese Ġdo Ġnot Ġmake Ġsense , Ġbut Ġllvm Ġallows Ġit ĊĠĠĠĠĠĠĠ Ġsubject . set Section (". bss ") ĊĠĠĠĠĠĠĠ Ġsubject . set Link age ( Link age . App ending ) ĊĊĠĠĠĠĠĠĠ Ġassert Is Some ( subject . get Section ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (". bss ", Ġsubject . get Section (). unwrap ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Link age . App ending , Ġsubject . get Link age ()) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin ĠVisibility . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . setVisibility ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( value , Ġsubject . get Visibility ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin ĠDLL Storage Class . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . set Storage Class ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( value , Ġsubject . get Storage Class ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin ĠUn named Address . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . set Unnamed Address ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( value , Ġsubject . getUn named Address ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGlobal Object Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġ` Test ĠGlobal Object Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġfn Ty Ġ= Ġctx . get FunctionType ( i 3 2 , Ġi 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġmod . addFunction (" test _ main ", Ġfn Ty ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsubject . get Preferred Alignment ()) ĊĊĠĠĠĠĠĠĠ Ġsubject . set Preferred Alignment ( 1 6 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 6 , Ġsubject . get Preferred Alignment ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGlobal Variable Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġ` Test ĠGlobal Variable Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġvoid Ġ= Ġctx . get Void Type () ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġres 1 Ġ= Ġmod . add Global Variable (" test _ var 1 ", Ġi 3 2 , ĠNone ) ĊĠĠĠĠĠĠĠ Ġval Ġres 2 Ġ= Ġmod . add Global Variable (" test _ var 2 ", Ġvoid , ĠNone ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġi 3 2 . get Constant ( 1 L ) ĊĊĠĠĠĠĠĠĠ Ġassert Is Ok ( res 1 ) ĊĠĠĠĠĠĠĠ Ġassert Is Err ( res 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsubject 1 Ġ= Ġres 1 . unwrap () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Type Kind . Pointer , Ġsubject 1 . getType (). getType Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Value Kind . Global Variable , Ġsubject 1 . getValue Kind ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ("@ test _ var 1 Ġ= Ġexternal Ġglobal Ġi 3 2 ", Ġsubject 1 . get AsString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" test _ var 1 ", Ġsubject 1 . getName ()) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . is Constant () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . isNull () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . is Undef () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . is Ex tern ally Initialized () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . is Thread Local () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġsubject 1 . is Immutable () Ġ} ĊĠĠĠĠĠĠĠ Ġassert Is None ( subject 1 . get Initializer ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Thread Local Mode . Not Thread Local , Ġsubject 1 . get Thread Local Mode ()) ĊĊĠĠĠĠĠĠĠ Ġsubject 1 . set Ex tern ally Initialized ( true ) ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Thread Local ( true ) ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Immutable ( true ) ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Initializer ( value ) ĊĠĠĠĠĠĠĠ Ġsubject 1 . set Thread Local Mode ( Thread Local Mode . General Dynamic ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . is Ex tern ally Initialized () Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . is Thread Local () Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġsubject 1 . is Immutable () Ġ} ĊĠĠĠĠĠĠĠ Ġassert Is Some ( subject 1 . get Initializer ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( value . ref , Ġsubject 1 . get Initializer (). unwrap (). ref ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Thread Local Mode . General Dynamic , Ġsubject 1 . get Thread Local Mode ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġdeletion Ġfrom Ġparent Ġmodule `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠContext () ĊĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġctx . new Module (" test _ module ") ĊĠĠĠĠĠĠĠ Ġval Ġi 3 2 Ġ= Ġctx . getInt 3 2 Type () ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġmod . add Global Variable (" test _ var 1 ", Ġi 3 2 , ĠNone ). unwrap () ĊĊĠĠĠĠĠĠĠ Ġassert Is Some ( mod . getGlobal Variable (" test _ var 1 ")) ĊĊĠĠĠĠĠĠĠ Ġsubject . delete () ĊĊĠĠĠĠĠĠĠ Ġassert Is None ( mod . getGlobal Variable (" test _ var 1 ")) ĊĠĠĠ Ġ} Ċ } Ċ