package Ġcom . github . dur un . nit ron . core . ast . type Ċ Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . ar bitrary . ar bitrary Ċ import Ġio . kot est . property . ar bitrary . string Ċ Ċ fun ĠA rb . Companion . nodeType Pool ( token Types : ĠInt Ġ= Ġ 4 , Ġrule Types : ĠInt Ġ= Ġ 6 ): ĠA rb < NodeType Pool > Ġ{ Ċ ĉ require ( 1 Ġ<= Ġtoken Types ) Ċ ĉ require ( 1 Ġ<= Ġrule Types ) Ċ ĉ return Ġarbitrary Ġ{ Ġrs Ġ-> Ċĉ ĉ val Ġnames Ġ= Ġstring ( min Size Ġ= Ġ 1 , ĠmaxSize Ġ= Ġ 1 5 ) Ċĉĉĉ ĉ . samples ( rs ) Ċĉĉĉ ĉ . distinct () Ċĉĉĉ ĉ . take ( token Types Ġ+ Ġrule Types ) Ċĉĉĉ ĉ . map Indexed Ġ{ Ġindex , Ġit Ġ-> Ġindex Ġto Ġit . value Ġ} Ċĉĉĉ ĉ . toList () Ċĉ ĉ val Ġtokens Ġ= Ġnames . take Last ( token Types ). map Ġ{ Ġ( index , Ġname ) Ġ-> ĠTokenType ( index , Ġname ) Ġ} Ċĉ ĉ val Ġrules Ġ= Ġnames . take ( rule Types ). map Ġ{ Ġ( index , Ġname ) Ġ-> ĠRule Type ( index , Ġname ) Ġ} Ċĉ ĉ NodeType Pool . of ( Ċĉĉĉ ĉ grammar Name Ġ= Ġstring ( min Size Ġ= Ġ 1 , ĠmaxSize Ġ= Ġ 1 0 ). sample ( rs ). value , Ċĉĉĉ ĉ token Types Ġ= Ġtokens , Ċĉĉĉ ĉ rule Types Ġ= Ġrules Ċĉ ĉ ) Ċ ĉ } Ċ }