123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131(*
include Random
*)moduleState=structincludeRandom.Stateletint_in_rangestate~min~max=ifmin>maxthenraise(Invalid_argument"int_in_range");min+intstate(max-min+1)letint32_in_rangestate~min~max=ifInt32.compareminmax>0thenraise(Invalid_argument"int32_in_range");let(+),(-)=Int32.(add,sub)inmin+int32state(max-min+1l)letnativeint_in_rangestate~min~max=ifNativeint.compareminmax>0thenraise(Invalid_argument"nativeint_in_range");let(+),(-)=Nativeint.(add,sub)inmin+nativeintstate(max-min+1n)letint64_in_rangestate~min~max=ifInt64.compareminmax>0thenraise(Invalid_argument"int64_in_range");let(+),(-)=Int64.(add,sub)inmin+int64state(max-min+1L)letbits32state=letbits30=Int32.of_int(bitsstate)inletadd_bitbitsi=ifboolstatethenInt32.addbits(Int32.shift_left1li)elsebitsinletbits31=add_bitbits3030inletbits32=add_bitbits3131inbits32letbits64state=letbits30=Int64.of_int(bitsstate)inletbits60=Int64.addbits30(Int64.shift_left(Int64.of_int(bitsstate))30)inletadd_bitbitsi=ifboolstatethenInt64.addbits(Int64.shift_left1Li)elsebitsinletbits61=add_bitbits6060inletbits62=add_bitbits6161inletbits63=add_bitbits6262inletbits64=add_bitbits6363inbits64letnativebitsstate=Int64.to_nativeint(bits64state)letfull_intstaten=Int64.to_int(bits64state)modnletmax_int31=0x3FFF_FFFFletsplits=make[|intsmax_int31;intsmax_int31;intsmax_int31;intsmax_int31|]letto_binary_string_=failwith"not implemented"letof_binary_string_=failwith"not implemented"endletinit=Random.initletfull_init=Random.full_initletself_init=Random.self_initletbits=Random.bitsletint=Random.intletint32=Random.int32letnativeint=Random.nativeintletint64=Random.int64letfloat=Random.floatletbool=Random.boolletget_state=Random.get_stateletset_state=Random.set_stateletint_in_range~min~max=State.int_in_range(get_state())~min~maxletint32_in_range~min~max=State.int32_in_range(get_state())~min~maxletnativeint_in_range~min~max=State.nativeint_in_range(get_state())~min~maxletint64_in_range~min~max=State.int64_in_range(get_state())~min~maxletbits32()=State.bits32(get_state())letbits64()=State.bits64(get_state())letnativebits()=State.nativebits(get_state())(*
let full_int = Random.full_int
*)letfull_intn=State.full_int(get_state())n(*
let split = Random.split
*)letsplit()=get_state()