(* Mathematica LibraryLink test script for demo_managed.cxx *) (* Hint: libPath is initialized in test init code *) setInstanceState = LibraryFunctionLoad[libPath,"setInstanceState",{Integer, {Integer, 1}},"Void"]; getInstanceState = LibraryFunctionLoad[libPath, "getInstanceState",{{Integer}}, {Integer, 1}]; releaseInstance = LibraryFunctionLoad[libPath, "releaseInstance", {{Integer}},"Void"]; generateFromInstance = LibraryFunctionLoad[libPath, "generateFromInstance",{Integer,{Integer, _}},{Real,_}]; getAllInstanceIDs = LibraryFunctionLoad[libPath, "getAllInstanceIDs", {},{Integer,1}]; LCGQ[e_] := ManagedLibraryExpressionQ[e,"LCG"]; instanceID[inst_] := ManagedLibraryExpressionID[inst,"LCG"]; CreateLCG[a_Integer, c_Integer, m_Integer, x_Integer] := Module[{res}, res = CreateManagedLibraryExpression["LCG", LCG]; setInstanceState[instanceID[res],{a,c,m,x}]; res ]; ListLCGs[]:=Map[LCG[#]->getInstanceState[#]&,getAllInstanceIDs[]] LCGRandom[inst_?LCGQ] := LCGRandom[inst,{}]; LCGRandom[inst_?LCGQ, len_Integer]:= LCGRandom[inst,{len}]; LCGRandom[inst_?LCGQ, dims:{(_Integer?Positive)...}]:= Module[{id = instanceID[inst]}, generateFromInstance[id, dims] ]; g = CreateLCG[1664525, 1013904223, 2^($SystemWordLength/2), 0] Print@LCGQ[g] Print@LCGRandom[g] g1 = CreateLCG[1664525, 1013904223, 2^($SystemWordLength/2), 0] Print@LCGRandom[g1, 2] Print@ListLCGs[] Print@LCGRandom[LCG[1]] g2 = CreateLCG[1664525, 1013904223, 2^($SystemWordLength/2), 0]; LCGRandom[g2, {2, 2}] releaseInstance[2]; Print@ListLCGs[] g2 =. Print@ListLCGs[] Print@LCGQ[g]