From 166ec385e1e3ffaa569dd70d1af2b7c063927391 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 2 Mar 2019 12:21:46 +0000 Subject: [PATCH] process more large expressions more systematically (#6294) * process large expressions systematically * add test cases * update tests * Make .NET Desktop fsi.exe 32-bit again and make Desktop fsiAnyCpu.exe (64-bit) the default to launch in VS #6223 * make fsc.exe 32-bit for compat * make fsc.exe 32-bit for compat * fix build * fix build * ramp up max testing * correct optimization of linear matches * improve diagnostics * fix tests * tests only on .NET Framework for now * fix determinism --- src/fsharp/DetupleArgs.fs | 32 +- src/fsharp/FindUnsolved.fs | 59 +- src/fsharp/IlxGen.fs | 28 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 80 +- src/fsharp/Optimizer.fs | 152 +- src/fsharp/PostInferenceChecks.fs | 66 +- src/fsharp/TastOps.fs | 577 +- src/fsharp/TastOps.fsi | 6 +- src/fsharp/TypeChecker.fs | 61 +- src/fsharp/autobox.fs | 33 +- .../conditionals/LargeConditionals-200.fs | 210 + .../LargeConditionals-maxtested.fs | 424 ++ tests/fsharp/core/large/lets/LargeLets-500.fs | 509 ++ .../core/large/lets/LargeLets-maxtested.fs | 795 ++ .../fsharp/core/large/lists/LargeList-500.fs | 507 ++ .../core/large/matches/LargeMatches-200.fs | 309 + .../large/matches/LargeMatches-maxtested.fs | 465 ++ .../large/mixed/LargeSequentialLet-500.fs | 1011 +++ .../mixed/LargeSequentialLet-maxtested.fs | 1011 +++ .../large/sequential/LargeSequential-500.fs | 509 ++ .../sequential/LargeSequential-maxtested.fs | 6715 +++++++++++++++++ tests/fsharp/tests.fs | 88 + 22 files changed, 13237 insertions(+), 410 deletions(-) create mode 100644 tests/fsharp/core/large/conditionals/LargeConditionals-200.fs create mode 100644 tests/fsharp/core/large/conditionals/LargeConditionals-maxtested.fs create mode 100644 tests/fsharp/core/large/lets/LargeLets-500.fs create mode 100644 tests/fsharp/core/large/lets/LargeLets-maxtested.fs create mode 100644 tests/fsharp/core/large/lists/LargeList-500.fs create mode 100644 tests/fsharp/core/large/matches/LargeMatches-200.fs create mode 100644 tests/fsharp/core/large/matches/LargeMatches-maxtested.fs create mode 100644 tests/fsharp/core/large/mixed/LargeSequentialLet-500.fs create mode 100644 tests/fsharp/core/large/mixed/LargeSequentialLet-maxtested.fs create mode 100644 tests/fsharp/core/large/sequential/LargeSequential-500.fs create mode 100644 tests/fsharp/core/large/sequential/LargeSequential-maxtested.fs diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index 9973e4527..160c0e665 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -256,14 +256,16 @@ module GlobalUsageAnalysis = let foldLocalVal f z (vref: ValRef) = if valRefInThisAssembly g.compilingFslib vref then f z vref.Deref else z - let exprUsageIntercept exprF z expr = + + let exprUsageIntercept exprF noInterceptF z origExpr = + let rec recognise context expr = - match expr with - | Expr.Val (v, _, _) -> + match expr with + | Expr.Val (v, _, _) -> // YES: count free occurrence - let z = foldLocalVal (fun z v -> logUse v (context, [], []) z) z v - Some z - | TyappAndApp(f, _, tys, args, _) -> + foldLocalVal (fun z v -> logUse v (context, [], []) z) z v + + | TyappAndApp(f, _, tys, args, _) -> match f with | Expr.Val (fOrig, _, _) -> // app where function is val @@ -271,27 +273,27 @@ module GlobalUsageAnalysis = // collect from args (have intercepted this node) let collect z f = logUse f (context, tys, args) z let z = foldLocalVal collect z fOrig - let z = List.fold exprF z args - Some z + List.fold exprF z args | _ -> // NO: app but function is not val - None + noInterceptF z origExpr + | Expr.Op(TOp.TupleFieldGet (tupInfo, n), ts, [x], _) when not (evalTupInfoIsStruct tupInfo) -> let context = TupleGet (n, ts) :: context recognise context x // lambdas end top-level status | Expr.Lambda(_id, _ctorThisValOpt, _baseValOpt, _vs, body, _, _) -> - let z = foldUnderLambda exprF z body - Some z + foldUnderLambda exprF z body + | Expr.TyLambda(_id, _tps, body, _, _) -> - let z = foldUnderLambda exprF z body - Some z + foldUnderLambda exprF z body + | _ -> - None // NO: no intercept + noInterceptF z origExpr let context = [] - recognise context expr + recognise context origExpr let targetIntercept exprF z = function TTarget(_argvs, body, _) -> Some (foldUnderLambda exprF z body) let tmethodIntercept exprF z = function TObjExprMethod(_, _, _, _, e, _m) -> Some (foldUnderLambda exprF z e) diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index 386545c7e..0bfd0b5de 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -38,46 +38,65 @@ let rec accExpr (cenv:cenv) (env:env) expr = | Expr.Sequential (e1,e2,_,_,_) -> accExpr cenv env e1 accExpr cenv env e2 + | Expr.Let (bind,body,_,_) -> accBind cenv env bind accExpr cenv env body + | Expr.Const (_,_,ty) -> accTy cenv env ty | Expr.Val (_v,_vFlags,_m) -> () + | Expr.Quote(ast,_,_,_m,ty) -> accExpr cenv env ast accTy cenv env ty + | Expr.Obj (_,ty,basev,basecall,overrides,iimpls,_m) -> accTy cenv env ty accExpr cenv env basecall accMethods cenv env basev overrides accIntfImpls cenv env basev iimpls + + | LinearOpExpr (_op, tyargs, argsHead, argLast, _m) -> + // Note, LinearOpExpr doesn't include any of the "special" cases for accOp + accTypeInst cenv env tyargs + accExprs cenv env argsHead + // tailcall + accExpr cenv env argLast + | Expr.Op (c,tyargs,args,m) -> accOp cenv env (c,tyargs,args,m) + | Expr.App(f,fty,tyargs,argsl,_m) -> accTy cenv env fty accTypeInst cenv env tyargs accExpr cenv env f accExprs cenv env argsl + | Expr.Lambda(_,_ctorThisValOpt,_baseValOpt,argvs,_body,m,rty) -> let topValInfo = ValReprInfo ([],[argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)],ValReprInfo.unnamedRetVal) let ty = mkMultiLambdaTy m argvs rty accLambdas cenv env topValInfo expr ty + | Expr.TyLambda(_,tps,_body,_m,rty) -> let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) accTy cenv env rty let ty = mkForallTyIfNeeded tps rty accLambdas cenv env topValInfo expr ty + | Expr.TyChoose(_tps,e1,_m) -> accExpr cenv env e1 + | Expr.Match(_,_exprm,dtree,targets,m,ty) -> accTy cenv env ty accDTree cenv env dtree accTargets cenv env m ty targets + | Expr.LetRec (binds,e,_m,_) -> accBinds cenv env binds accExpr cenv env e + | Expr.StaticOptimization (constraints,e2,e3,_m) -> accExpr cenv env e2 accExpr cenv env e3 @@ -87,14 +106,19 @@ let rec accExpr (cenv:cenv) (env:env) expr = accTy cenv env ty2 | TTyconIsStruct(ty1) -> accTy cenv env ty1) + | Expr.Link _eref -> failwith "Unexpected reclink" -and accMethods cenv env baseValOpt l = List.iter (accMethod cenv env baseValOpt) l +and accMethods cenv env baseValOpt l = + List.iter (accMethod cenv env baseValOpt) l + and accMethod cenv env _baseValOpt (TObjExprMethod(_slotsig,_attribs,_tps,vs,e,_m)) = vs |> List.iterSquared (accVal cenv env) accExpr cenv env e -and accIntfImpls cenv env baseValOpt l = List.iter (accIntfImpl cenv env baseValOpt) l +and accIntfImpls cenv env baseValOpt l = + List.iter (accIntfImpl cenv env baseValOpt) l + and accIntfImpl cenv env baseValOpt (ty,overrides) = accTy cenv env ty accMethods cenv env baseValOpt overrides @@ -132,11 +156,14 @@ and accLambdas cenv env topValInfo e ety = | _ -> accExpr cenv env e -and accExprs cenv env exprs = exprs |> List.iter (accExpr cenv env) +and accExprs cenv env exprs = + exprs |> List.iter (accExpr cenv env) -and accTargets cenv env m ty targets = Array.iter (accTarget cenv env m ty) targets +and accTargets cenv env m ty targets = + Array.iter (accTarget cenv env m ty) targets -and accTarget cenv env _m _ty (TTarget(_vs,e,_)) = accExpr cenv env e +and accTarget cenv env _m _ty (TTarget(_vs,e,_)) = + accExpr cenv env e and accDTree cenv env x = match x with @@ -169,7 +196,8 @@ and accAttrib cenv env (Attrib(_,_k,args,props,_,_,_m)) = accExpr cenv env expr2 accTy cenv env ty) -and accAttribs cenv env attribs = List.iter (accAttrib cenv env) attribs +and accAttribs cenv env attribs = + List.iter (accAttrib cenv env) attribs and accValReprInfo cenv env (ValReprInfo(_,args,ret)) = args |> List.iterSquared (accArgReprInfo cenv env) @@ -188,7 +216,8 @@ and accBind cenv env (bind:Binding) = let topValInfo = match bind.Var.ValReprInfo with Some info -> info | _ -> ValReprInfo.emptyValData accLambdas cenv env topValInfo bind.Expr bind.Var.Type -and accBinds cenv env xs = xs |> List.iter (accBind cenv env) +and accBinds cenv env xs = + xs |> List.iter (accBind cenv env) let accTyconRecdField cenv env _tycon (rfield:RecdField) = accAttribs cenv env rfield.PropertyAttribs @@ -203,13 +232,15 @@ let accTycon cenv env (tycon:Tycon) = accAttribs cenv env uc.Attribs uc.RecdFieldsArray |> Array.iter (accTyconRecdField cenv env tycon)) -let accTycons cenv env tycons = List.iter (accTycon cenv env) tycons +let accTycons cenv env tycons = + List.iter (accTycon cenv env) tycons let rec accModuleOrNamespaceExpr cenv env x = match x with | ModuleOrNamespaceExprWithSig(_mty, def, _m) -> accModuleOrNamespaceDef cenv env def -and accModuleOrNamespaceDefs cenv env x = List.iter (accModuleOrNamespaceDef cenv env) x +and accModuleOrNamespaceDefs cenv env x = + List.iter (accModuleOrNamespaceDef cenv env) x and accModuleOrNamespaceDef cenv env x = match x with @@ -221,12 +252,16 @@ and accModuleOrNamespaceDef cenv env x = | TMAbstract(def) -> accModuleOrNamespaceExpr cenv env def | TMDefs(defs) -> accModuleOrNamespaceDefs cenv env defs -and accModuleOrNamespaceBinds cenv env xs = List.iter (accModuleOrNamespaceBind cenv env) xs +and accModuleOrNamespaceBinds cenv env xs = + List.iter (accModuleOrNamespaceBind cenv env) xs and accModuleOrNamespaceBind cenv env x = match x with - | ModuleOrNamespaceBinding.Binding bind -> accBind cenv env bind - | ModuleOrNamespaceBinding.Module(mspec, rhs) -> accTycon cenv env mspec; accModuleOrNamespaceDef cenv env rhs + | ModuleOrNamespaceBinding.Binding bind -> + accBind cenv env bind + | ModuleOrNamespaceBinding.Module(mspec, rhs) -> + accTycon cenv env mspec + accModuleOrNamespaceDef cenv env rhs let UnsolvedTyparsOfModuleDef g amap denv (mdef, extraAttribs) = let cenv = diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 9703dd76b..dccd66810 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -141,6 +141,8 @@ type IlxGenIntraAssemblyInfo = /// that come from both the signature and the implementation. StaticFieldInfo : Dictionary } +type FakeUnit = | Fake + //-------------------------------------------------------------------------- /// Indicates how the generated IL code is ultimately emitted @@ -2044,6 +2046,13 @@ let rec GenExpr (cenv:cenv) (cgbuf:CodeGenBuffer) eenv sp expr sequel = GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel | Expr.Val(v,_,m) -> GenGetVal cenv cgbuf eenv (v,m) sequel + + // Most generation of linear expressions is implemented routinely using tailcalls and the correct sequels. + // This is because the element of expansion happens to be the final thing generated in most cases. However + // for large lists we have to process the linearity separately + | LinearOpExpr _ -> + GenLinearExpr cenv cgbuf eenv expr sequel id |> ignore + | Expr.Op(op,tyargs,args,m) -> match op,args,tyargs with | TOp.ExnConstr(c),_,_ -> @@ -2346,12 +2355,27 @@ and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = (mkNormalNewobj mspec) GenSequel cenv eenv.cloc cgbuf sequel +and GenAllocUnionCaseCore cenv cgbuf eenv (c,tyargs,n,m) = + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv c tyargs + CG.EmitInstrs cgbuf (pop n) (Push [cuspec.DeclaringType]) (EraseUnions.mkNewData cenv.g.ilg (cuspec, idx)) + and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = GenExprs cenv cgbuf eenv args - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv c tyargs - CG.EmitInstrs cgbuf (pop args.Length) (Push [cuspec.DeclaringType]) (EraseUnions.mkNewData cenv.g.ilg (cuspec, idx)) + GenAllocUnionCaseCore cenv cgbuf eenv (c,tyargs,args.Length,m) GenSequel cenv eenv.cloc cgbuf sequel +and GenLinearExpr cenv cgbuf eenv expr sequel (contf: FakeUnit -> FakeUnit) = + match expr with + | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> + GenExprs cenv cgbuf eenv argsFront + GenLinearExpr cenv cgbuf eenv argLast Continue (contf << (fun (Fake) -> + GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) + GenSequel cenv eenv.cloc cgbuf sequel + Fake)) + | _ -> + GenExpr cenv cgbuf eenv SPSuppress expr sequel + contf Fake + and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = let ty = GenNamedTyApp cenv.amap m eenv.tyenv tcref argtys diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index c03ac2ace..c88e3448b 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -480,9 +480,10 @@ module Pass2_DetermineReqdItems = /// "val v" - free occurrence /// "app (f,tps,args)" - occurrence /// - /// On intercepted nodes, must exprF fold to collect from subexpressions. - let ExprEnvIntercept (tlrS,arityM) exprF z expr = - let accInstance z (fvref:ValRef,tps,args) (* f known local *) = + /// On intercepted nodes, must recurseF fold to collect from subexpressions. + let ExprEnvIntercept (tlrS,arityM) recurseF noInterceptF z expr = + + let accInstance z (fvref:ValRef,tps,args) = let f = fvref.Deref match Zmap.tryFind f arityM with @@ -508,48 +509,51 @@ module Pass2_DetermineReqdItems = let fclass = BindingGroupSharingSameReqdItems tlrBs // what determines env? let frees = FreeInBindings tlrBs - let reqdTypars0 = frees.FreeTyvars.FreeTypars |> Zset.elements (* put in env *) + // put in env + let reqdTypars0 = frees.FreeTyvars.FreeTypars |> Zset.elements // occurrences contribute to env let reqdVals0 = frees.FreeLocals |> Zset.elements // tlrBs are not reqdVals0 for themselves let reqdVals0 = reqdVals0 |> List.filter (fun gv -> not (fclass.Contains gv)) let reqdVals0 = reqdVals0 |> Zset.ofList valOrder // collect into env over bodies - let z = PushFrame fclass (reqdTypars0,reqdVals0,m) z - let z = (z,tlrBs) ||> List.fold (foldOn (fun b -> b.Expr) exprF) - let z = SaveFrame fclass z - (* for bindings not marked TRL, collect *) - let z = (z,nonTlrBs) ||> List.fold (foldOn (fun b -> b.Expr) exprF) + let z = PushFrame fclass (reqdTypars0,reqdVals0,m) z + let z = (z,tlrBs) ||> List.fold (foldOn (fun b -> b.Expr) recurseF) + let z = SaveFrame fclass z + // for bindings not marked TRL, collect + let z = (z,nonTlrBs) ||> List.fold (foldOn (fun b -> b.Expr) recurseF) z match expr with | Expr.Val (v,_,_) -> - let z = accInstance z (v,[],[]) - Some z + accInstance z (v,[],[]) + | Expr.Op (TOp.LValueOp (_,v),_tys,args,_) -> let z = accInstance z (v,[],[]) - let z = List.fold exprF z args - Some z + List.fold recurseF z args + | Expr.App (f,fty,tys,args,m) -> let f,_fty,tys,args,_m = destApp (f,fty,tys,args,m) match f with | Expr.Val (f,_,_) -> - // // YES: APP vspec tps args - log + // YES: APP vspec tps args - log let z = accInstance z (f,tys,args) - let z = List.fold exprF z args - Some z + List.fold recurseF z args | _ -> - (* NO: app, but function is not val - no log *) - None - | Expr.LetRec (binds,body,m,_) -> + // NO: app, but function is not val - no log + noInterceptF z expr + + | Expr.LetRec (binds, body, m, _) -> let z = accBinds m z binds - let z = exprF z body - Some z - | Expr.Let (bind,body,m,_) -> + recurseF z body + + | Expr.Let (bind,body,m,_) -> let z = accBinds m z [bind] - let z = exprF z body - Some z - | _ -> None (* NO: no intercept *) + // tailcall for linear sequences + recurseF z body + + | _ -> + noInterceptF z expr /// Initially, reqdTypars(fclass) = freetps(bodies). @@ -1073,9 +1077,14 @@ module Pass4_RewriteAssembly = /// At free vals, fixup 0-call if it is an arity-met constant. /// Other cases rewrite structurally. let rec TransExpr (penv: RewriteContext) (z:RewriteState) expr : Expr * RewriteState = + match expr with - // Use TransLinearExpr with a rebuild-continuation for some forms to avoid stack overflows on large terms *) - | Expr.LetRec _ | Expr.Let _ | Expr.Sequential _ -> + // Use TransLinearExpr with a rebuild-continuation for some forms to avoid stack overflows on large terms + | LinearOpExpr _ + | LinearMatchExpr _ + | Expr.LetRec _ // note, Expr.LetRec not normally considered linear, but keeping it here as it's always been here + | Expr.Let _ + | Expr.Sequential _ -> TransLinearExpr penv z expr (fun res -> res) // app - call sites may require z. @@ -1138,19 +1147,25 @@ module Pass4_RewriteAssembly = MakePreDecs m pds (mkAndSimplifyMatch spBind exprm m ty dtree targets),z // all others - below - rewrite structurally - so boiler plate code after this point... - | Expr.Const _ -> expr,z (* constant wrt Val *) + | Expr.Const _ -> + expr,z + | Expr.Quote (a,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> let argExprs,z = List.mapFold (TransExpr penv) z argExprs Expr.Quote(a,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty),z + | Expr.Quote (a,{contents=None},isFromQueryExpression,m,ty) -> Expr.Quote(a,{contents=None},isFromQueryExpression,m,ty),z + | Expr.Op (c,tyargs,args,m) -> let args,z = List.mapFold (TransExpr penv) z args Expr.Op(c,tyargs,args,m),z + | Expr.StaticOptimization (constraints,e2,e3,m) -> let e2,z = TransExpr penv z e2 let e3,z = TransExpr penv z e3 Expr.StaticOptimization(constraints,e2,e3,m),z + | Expr.TyChoose (_,_,m) -> error(Error(FSComp.SR.tlrUnexpectedTExpr(),m)) @@ -1203,9 +1218,16 @@ module Pass4_RewriteAssembly = let tg1,z = TransDecisionTreeTarget penv z tg1 // tailcall TransLinearExpr penv z e2 (contf << (fun (e2,z) -> - rebuildLinearMatchExpr (spBind,exprm,dtree,tg1,e2,sp2,m2,ty),z)) + rebuildLinearMatchExpr (spBind,exprm,dtree,tg1,e2,sp2,m2,ty), z)) + + | LinearOpExpr (op, tyargs, argsHead, argLast, m) -> + let argsHead,z = List.mapFold (TransExpr penv) z argsHead + // tailcall + TransLinearExpr penv z argLast (contf << (fun (argLast, z) -> + rebuildLinearOpExpr (op, tyargs, argsHead, argLast, m), z)) | _ -> + // not a linear expression contf (TransExpr penv z expr) and TransMethod penv (z:RewriteState) (TObjExprMethod(slotsig,attribs,tps,vs,e,m)) = diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 4225ec742..db4108615 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -293,25 +293,37 @@ type OptimizationSettings = } member x.jitOpt() = match x.jitOptUser with Some f -> f | None -> jitOptDefault + member x.localOpt () = match x.localOptUser with Some f -> f | None -> localOptDefault + member x.crossModuleOpt () = x.localOpt () && (match x.crossModuleOptUser with Some f -> f | None -> crossModuleOptDefault) member x.KeepOptimizationValues() = x.crossModuleOpt () + /// inline calls * member x.InlineLambdas () = x.localOpt () + /// eliminate unused bindings with no effect member x.EliminateUnusedBindings () = x.localOpt () + /// eliminate try around expr with no effect member x.EliminateTryCatchAndTryFinally () = false // deemed too risky, given tiny overhead of including try/catch. See https://github.com/Microsoft/visualfsharp/pull/376 + /// eliminate first part of seq if no effect member x.EliminateSequential () = x.localOpt () + /// determine branches in pattern matching member x.EliminateSwitch () = x.localOpt () + member x.EliminateRecdFieldGet () = x.localOpt () + member x.EliminateTupleFieldGet () = x.localOpt () + member x.EliminatUnionCaseFieldGet () = x.localOpt () + /// eliminate non-compiler generated immediate bindings member x.EliminateImmediatelyConsumedLocals() = x.localOpt () + /// expand "let x = (exp1, exp2, ...)" bind fields as prior tmps member x.ExpandStructrualValues() = x.localOpt () @@ -1274,9 +1286,13 @@ let rec ExprHasEffect g expr = | Expr.Let(bind, body, _, _) -> BindingHasEffect g bind || ExprHasEffect g body // REVIEW: could add Expr.Obj on an interface type - these are similar to records of lambda expressions | _ -> true + and ExprsHaveEffect g exprs = List.exists (ExprHasEffect g) exprs + and BindingsHaveEffect g binds = List.exists (BindingHasEffect g) binds + and BindingHasEffect g bind = bind.Expr |> ExprHasEffect g + and OpHasEffect g m op = match op with | TOp.Tuple _ -> false @@ -1788,10 +1804,18 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = match expr with // treat the common linear cases to avoid stack overflows, using an explicit continuation - | Expr.Sequential _ | Expr.Let _ -> OptimizeLinearExpr cenv env expr (fun x -> x) + | LinearOpExpr _ + | LinearMatchExpr _ + | Expr.Sequential _ + | Expr.Let _ -> + OptimizeLinearExpr cenv env expr (fun x -> x) + + | Expr.Const (c, m, ty) -> + OptimizeConst cenv env expr (c, m, ty) + + | Expr.Val (v, _vFlags, m) -> + OptimizeVal cenv env expr (v, m) - | Expr.Const (c, m, ty) -> OptimizeConst cenv env expr (c, m, ty) - | Expr.Val (v, _vFlags, m) -> OptimizeVal cenv env expr (v, m) | Expr.Quote(ast, splices, isFromQueryExpression, m, ty) -> let splices = ref (splices.Value |> Option.map (map3Of4 (List.map (OptimizeExpr cenv env >> fst)))) Expr.Quote(ast, splices, isFromQueryExpression, m, ty), @@ -1800,34 +1824,48 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = HasEffect = false MightMakeCriticalTailcall=false Info=UnknownValue } - | Expr.Obj (_, ty, basev, expr, overrides, iimpls, m) -> OptimizeObjectExpr cenv env (ty, basev, expr, overrides, iimpls, m) - | Expr.Op (c, tyargs, args, m) -> OptimizeExprOp cenv env (c, tyargs, args, m) + + | Expr.Obj (_, ty, basev, createExpr, overrides, iimpls, m) -> + OptimizeObjectExpr cenv env (ty, basev, createExpr, overrides, iimpls, m) + + | Expr.Op (op, tyargs, args, m) -> + OptimizeExprOp cenv env (op, tyargs, args, m) + | Expr.App(f, fty, tyargs, argsl, m) -> // eliminate uses of query match TryDetectQueryQuoteAndRun cenv expr with | Some newExpr -> OptimizeExpr cenv env newExpr | None -> OptimizeApplication cenv env (f, fty, tyargs, argsl, m) - (* REVIEW: fold the next two cases together *) + | Expr.Lambda(_lambdaId, _, _, argvs, _body, m, rty) -> let topValInfo = ValReprInfo ([], [argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)], ValReprInfo.unnamedRetVal) let ty = mkMultiLambdaTy m argvs rty OptimizeLambdas None cenv env topValInfo expr ty + | Expr.TyLambda(_lambdaId, tps, _body, _m, rty) -> let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps, [], ValReprInfo.unnamedRetVal) let ty = mkForallTyIfNeeded tps rty OptimizeLambdas None cenv env topValInfo expr ty - | Expr.TyChoose _ -> OptimizeExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) - | Expr.Match(spMatch, exprm, dtree, targets, m, ty) -> OptimizeMatch cenv env (spMatch, exprm, dtree, targets, m, ty) - | Expr.LetRec (binds, e, m, _) -> OptimizeLetRec cenv env (binds, e, m) - | Expr.StaticOptimization (constraints, e2, e3, m) -> - let e2', e2info = OptimizeExpr cenv env e2 - let e3', e3info = OptimizeExpr cenv env e3 - Expr.StaticOptimization(constraints, e2', e3', m), + + | Expr.TyChoose _ -> + OptimizeExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) + + | Expr.Match(spMatch, exprm, dtree, targets, m, ty) -> + OptimizeMatch cenv env (spMatch, exprm, dtree, targets, m, ty) + + | Expr.LetRec (binds, bodyExpr, m, _) -> + OptimizeLetRec cenv env (binds, bodyExpr, m) + + | Expr.StaticOptimization (constraints, expr2, expr3, m) -> + let expr2R, e2info = OptimizeExpr cenv env expr2 + let expr3R, e3info = OptimizeExpr cenv env expr3 + Expr.StaticOptimization(constraints, expr2R, expr3R, m), { TotalSize = min e2info.TotalSize e3info.TotalSize FunctionSize = min e2info.FunctionSize e3info.FunctionSize HasEffect = e2info.HasEffect || e3info.HasEffect MightMakeCriticalTailcall=e2info.MightMakeCriticalTailcall || e3info.MightMakeCriticalTailcall // seems conservative Info= UnknownValue } + | Expr.Link _eref -> assert ("unexpected reclink" = "") failwith "Unexpected reclink" @@ -1851,7 +1889,9 @@ and OptimizeObjectExpr cenv env (ty, baseValOpt, basecall, overrides, iimpls, m) // Optimize/analyze the methods that make up an object expression //------------------------------------------------------------------------- -and OptimizeMethods cenv env baseValOpt l = OptimizeList (OptimizeMethod cenv env baseValOpt) l +and OptimizeMethods cenv env baseValOpt methods = + OptimizeList (OptimizeMethod cenv env baseValOpt) methods + and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = let env = {env with latestBoundId=Some tmethod.Id; functionVal = None} let env = BindTypeVarsToUnknown tps env @@ -1866,11 +1906,11 @@ and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs MightMakeCriticalTailcall=false Info=UnknownValue} -//------------------------------------------------------------------------- -// Optimize/analyze the interface implementations that form part of an object expression -//------------------------------------------------------------------------- +/// Optimize/analyze the interface implementations that form part of an object expression +and OptimizeInterfaceImpls cenv env baseValOpt iimpls = + OptimizeList (OptimizeInterfaceImpl cenv env baseValOpt) iimpls -and OptimizeInterfaceImpls cenv env baseValOpt l = OptimizeList (OptimizeInterfaceImpl cenv env baseValOpt) l +/// Optimize/analyze the interface implementations that form part of an object expression and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = let overrides', overridesinfos = OptimizeMethods cenv env baseValOpt overrides (ty, overrides'), @@ -1880,13 +1920,10 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = MightMakeCriticalTailcall=false Info=UnknownValue} -//------------------------------------------------------------------------- -// Make and optimize String.Concat calls -//------------------------------------------------------------------------- - +/// Make and optimize String.Concat calls and MakeOptimizedSystemStringConcatCall cenv env m args = - let rec optimizeArg e accArgs = - match e, accArgs with + let rec optimizeArg argExpr accArgs = + match argExpr, accArgs with | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ when IsSystemStringConcatArray methRef -> optimizeArgs args accArgs @@ -1905,7 +1942,7 @@ and MakeOptimizedSystemStringConcatCall cenv env m args = let args = optimizeArgs args [] - let e = + let expr = match args with | [ arg ] -> arg @@ -1919,11 +1956,11 @@ and MakeOptimizedSystemStringConcatCall cenv env m args = let arg = mkArray (cenv.g.string_ty, args, m) mkStaticCall_String_Concat_Array cenv.g m arg - match e with + match expr with | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsSystemStringConcatOverload methRef || IsSystemStringConcatArray methRef -> OptimizeExprOpReductions cenv env (op, tyargs, args, m) | _ -> - OptimizeExpr cenv env e + OptimizeExpr cenv env expr //------------------------------------------------------------------------- // Optimize/analyze an application of an intrinsic operator to arguments @@ -1933,11 +1970,11 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) = // Special cases match op, tyargs, args with - | TOp.Coerce, [toty;fromty], [e] -> - let e', einfo = OptimizeExpr cenv env e - if typeEquiv cenv.g toty fromty then e', einfo + | TOp.Coerce, [toty;fromty], [arg] -> + let argR, einfo = OptimizeExpr cenv env arg + if typeEquiv cenv.g toty fromty then argR, einfo else - mkCoerceExpr(e', toty, m, fromty), + mkCoerceExpr(argR, toty, m, fromty), { TotalSize=einfo.TotalSize + 1 FunctionSize=einfo.FunctionSize + 1 HasEffect = true @@ -2004,6 +2041,9 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) = and OptimizeExprOpReductions cenv env (op, tyargs, args, m) = let args', arginfos = OptimizeExprsThenConsiderSplits cenv env args + OptimizeExprOpReductionsAfter cenv env (op, tyargs, args', arginfos, m) + +and OptimizeExprOpReductionsAfter cenv env (op, tyargs, args', arginfos, m) = let knownValue = match op, arginfos with | TOp.ValFieldGet (rf), [e1info] -> TryOptimizeRecordFieldGet cenv env (e1info, rf, tyargs, m) @@ -2210,15 +2250,15 @@ and OptimizeLetRec cenv env (binds, bodyExpr, m) = let info = CombineValueInfos (einfo :: bindinfos) evalue' bodyExpr', info -//------------------------------------------------------------------------- -// Optimize/analyze a linear sequence of sequentioanl execution or 'let' bindings. -//------------------------------------------------------------------------- - +/// Optimize/analyze a linear sequence of sequential execution or 'let' bindings. and OptimizeLinearExpr cenv env expr contf = + // Eliminate subsumption coercions for functions. This must be done post-typechecking because we need + // complete inference types. let expr = DetectAndOptimizeForExpression cenv.g OptimizeAllForExpressions expr - let expr = if cenv.settings.ExpandStructrualValues() then ExpandStructuralBinding cenv expr else expr + let expr = stripExpr expr + match expr with | Expr.Sequential (e1, e2, flag, spSeq, m) -> let e1', e1info = OptimizeExpr cenv env e1 @@ -2252,24 +2292,31 @@ and OptimizeLinearExpr cenv env expr contf = MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall // discard tailcall info from binding - not in tailcall position Info = UnknownValue } else - (* On the way back up: Trim out any optimization info that involves escaping values on the way back up *) + // On the way back up: Trim out any optimization info that involves escaping values on the way back up let evalue' = AbstractExprInfoByVars ([bind'.Var], []) bodyInfo.Info body', - { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize - localVarSize (* eliminated a local var *) + { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize - localVarSize // eliminated a local var FunctionSize = bindingInfo.FunctionSize + bodyInfo.FunctionSize - localVarSize (* eliminated a local var *) HasEffect=bindingInfo.HasEffect || bodyInfo.HasEffect MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall // discard tailcall info from binding - not in tailcall position Info = evalue' } )) | LinearMatchExpr (spMatch, exprm, dtree, tg1, e2, spTarget2, m, ty) -> - let dtree, dinfo = OptimizeDecisionTree cenv env m dtree + let dtree', dinfo = OptimizeDecisionTree cenv env m dtree let tg1, tg1info = OptimizeDecisionTreeTarget cenv env m tg1 // tailcall OptimizeLinearExpr cenv env e2 (contf << (fun (e2, e2info) -> + // This ConsiderSplitToMethod is performed because it is present in OptimizeDecisionTreeTarget let e2, e2info = ConsiderSplitToMethod cenv.settings.abstractBigTargets cenv.settings.bigTargetSize cenv env (e2, e2info) let tinfos = [tg1info; e2info] - let tgs = [tg1; TTarget([], e2, spTarget2)] - RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree, tgs, dinfo, tinfos))) + let targets' = [tg1; TTarget([], e2, spTarget2)] + OptimizeMatchPart2 cenv (spMatch, exprm, dtree', targets', dinfo, tinfos, m, ty))) + + | LinearOpExpr (op, tyargs, argsHead, argLast, m) -> + let argsHead', argsHeadInfos' = OptimizeList (OptimizeExprThenConsiderSplit cenv env) argsHead + // tailcall + OptimizeLinearExpr cenv env argLast (contf << (fun (argLast', argLastInfo) -> + OptimizeExprOpReductionsAfter cenv env (op, tyargs, argsHead' @ [argLast'], argsHeadInfos' @ [argLastInfo], m))) | _ -> contf (OptimizeExpr cenv env expr) @@ -2916,7 +2963,6 @@ and OptimizeExprsThenConsiderSplits cenv env exprs = | [] -> NoExprs | _ -> OptimizeList (OptimizeExprThenConsiderSplit cenv env) exprs - and OptimizeExprThenReshapeAndConsiderSplit cenv env (shape, e) = OptimizeExprThenConsiderSplit cenv env (ReshapeExpr cenv (shape, e)) @@ -2994,6 +3040,9 @@ and OptimizeMatch cenv env (spMatch, exprm, dtree, targets, m, ty) = // REVIEW: consider collecting, merging and using information flowing through each line of the decision tree to each target let dtree', dinfo = OptimizeDecisionTree cenv env m dtree let targets', tinfos = OptimizeDecisionTreeTargets cenv env m targets + OptimizeMatchPart2 cenv (spMatch, exprm, dtree', targets', dinfo, tinfos, m, ty) + +and OptimizeMatchPart2 cenv (spMatch, exprm, dtree', targets', dinfo, tinfos, m, ty) = let newExpr, newInfo = RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree', targets', dinfo, tinfos) let newExpr2 = if not (cenv.settings.localOpt()) then newExpr else CombineBoolLogic newExpr newExpr2, newInfo @@ -3011,27 +3060,20 @@ and RebuildOptimizedMatch (spMatch, exprm, m, ty, dtree, tgs, dinfo, tinfos) = let einfo = CombineMatchInfos dinfo tinfo expr, einfo -//------------------------------------------------------------------------- -// Optimize/analyze a target of a decision tree -//------------------------------------------------------------------------- - -and OptimizeDecisionTreeTarget cenv env _m (TTarget(vs, e, spTarget)) = - (* REVIEW: this is where we should be using information collected for each target *) +/// Optimize/analyze a target of a decision tree +and OptimizeDecisionTreeTarget cenv env _m (TTarget(vs, expr, spTarget)) = let env = BindInternalValsToUnknown cenv vs env - let e', einfo = OptimizeExpr cenv env e - let e', einfo = ConsiderSplitToMethod cenv.settings.abstractBigTargets cenv.settings.bigTargetSize cenv env (e', einfo) + let expr', einfo = OptimizeExpr cenv env expr + let expr', einfo = ConsiderSplitToMethod cenv.settings.abstractBigTargets cenv.settings.bigTargetSize cenv env (expr', einfo) let evalue' = AbstractExprInfoByVars (vs, []) einfo.Info - TTarget(vs, e', spTarget), + TTarget(vs, expr', spTarget), { TotalSize=einfo.TotalSize FunctionSize=einfo.FunctionSize HasEffect=einfo.HasEffect MightMakeCriticalTailcall = einfo.MightMakeCriticalTailcall Info=evalue' } -//------------------------------------------------------------------------- -// Optimize/analyze a decision tree -//------------------------------------------------------------------------- - +/// Optimize/analyze a decision tree and OptimizeDecisionTree cenv env m x = match x with | TDSuccess (es, n) -> diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index f2c8f370d..e13715a56 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -879,27 +879,12 @@ and CheckCallWithReceiver cenv env m returnTy args contexts context = limitArgs CheckCallLimitArgs cenv env m returnTy limitArgs context -/// Check an expression, given information about the position of the expression -and CheckExpr (cenv:cenv) (env:env) origExpr (context:PermitByRefExpr) : Limit = - let g = cenv.g - - let origExpr = stripExpr origExpr - - // CheckForOverAppliedExceptionRaisingPrimitive is more easily checked prior to NormalizeAndAdjustPossibleSubsumptionExprs - CheckForOverAppliedExceptionRaisingPrimitive cenv origExpr - let expr = NormalizeAndAdjustPossibleSubsumptionExprs g origExpr - let expr = stripExpr expr - +and CheckExprLinear (cenv:cenv) (env:env) expr (context:PermitByRefExpr) (contf : Limit -> Limit) = match expr with - | Expr.Sequential (e1,e2,dir,_,_) -> + | Expr.Sequential (e1,e2,NormalSeq,_,_) -> CheckExprNoByrefs cenv env e1 - - match dir with - | NormalSeq -> - CheckExpr cenv env e2 context // carry context into _;RHS (normal sequencing only) - | ThenDoSeq -> - CheckExprNoByrefs cenv {env with ctorLimitedZone=false} e2 - NoLimit + // tailcall + CheckExprLinear cenv env e2 context contf | Expr.Let ((TBind(v,_bindRhs,_) as bind),body,_,_) -> let isByRef = isByrefTy cenv.g v.Type @@ -913,7 +898,48 @@ and CheckExpr (cenv:cenv) (env:env) origExpr (context:PermitByRefExpr) : Limit = let limit = CheckBinding cenv { env with returnScope = env.returnScope + 1 } false bindingContext bind BindVal cenv env v LimitVal cenv v { limit with scope = if isByRef then limit.scope else env.returnScope } - CheckExpr cenv env body context + // tailcall + CheckExprLinear cenv env body context contf + + | LinearOpExpr (_op, tyargs, argsHead, argLast, m) -> + CheckTypeInstNoByrefs cenv env m tyargs + argsHead |> List.iter (CheckExprNoByrefs cenv env) + // tailcall + CheckExprLinear cenv env argLast PermitByRefExpr.No (fun _ -> contf NoLimit) + + | LinearMatchExpr (_spMatch, _exprm, dtree, tg1, e2, _spTarget2, m, ty) -> + CheckTypeNoInnerByrefs cenv env m ty + CheckDecisionTree cenv env dtree + let lim1 = CheckDecisionTreeTarget cenv env context tg1 + // tailcall + CheckExprLinear cenv env e2 context (fun lim2 -> contf (CombineLimits [ lim1; lim2 ])) + + | _ -> + // not a linear expression + contf (CheckExpr cenv env expr context) + +/// Check an expression, given information about the position of the expression +and CheckExpr (cenv:cenv) (env:env) origExpr (context:PermitByRefExpr) : Limit = + let g = cenv.g + + let origExpr = stripExpr origExpr + + // CheckForOverAppliedExceptionRaisingPrimitive is more easily checked prior to NormalizeAndAdjustPossibleSubsumptionExprs + CheckForOverAppliedExceptionRaisingPrimitive cenv origExpr + let expr = NormalizeAndAdjustPossibleSubsumptionExprs g origExpr + let expr = stripExpr expr + + match expr with + | LinearOpExpr _ + | LinearMatchExpr _ + | Expr.Let _ + | Expr.Sequential (_, _, NormalSeq, _, _) -> + CheckExprLinear cenv env expr context id + + | Expr.Sequential (e1,e2,ThenDoSeq,_,_) -> + CheckExprNoByrefs cenv env e1 + CheckExprNoByrefs cenv {env with ctorLimitedZone=false} e2 + NoLimit | Expr.Const (_,m,ty) -> CheckTypeNoInnerByrefs cenv env m ty diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 50eaca764..755aa2e20 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -142,10 +142,10 @@ let instMeasureTyparRef tpinst unt (tp:Typar) = loop tpinst | _ -> failwith "instMeasureTyparRef: kind=Type" -let remapTyconRef (tcmap: TyconRefMap<_>) tcr = - match tcmap.TryFind tcr with - | Some tcr -> tcr - | None -> tcr +let remapTyconRef (tcmap: TyconRefMap<_>) tcref = + match tcmap.TryFind tcref with + | Some tcref -> tcref + | None -> tcref let remapUnionCaseRef tcmap (UCRef(tcref, nm)) = UCRef(remapTyconRef tcmap tcref, nm) let remapRecdFieldRef tcmap (RFRef(tcref, nm)) = RFRef(remapTyconRef tcmap tcref, nm) @@ -164,9 +164,9 @@ let rec remapTypeAux (tyenv : Remap) (ty:TType) = let ty = stripTyparEqns ty match ty with | TType_var tp as ty -> instTyparRef tyenv.tpinst ty tp - | TType_app (tcr, tinst) as ty -> - match tyenv.tyconRefRemap.TryFind tcr with - | Some tcr' -> TType_app (tcr', remapTypesAux tyenv tinst) + | TType_app (tcref, tinst) as ty -> + match tyenv.tyconRefRemap.TryFind tcref with + | Some tcref' -> TType_app (tcref', remapTypesAux tyenv tinst) | None -> match tinst with | [] -> ty // optimization to avoid re-allocation of TType_app node in the common case @@ -174,12 +174,12 @@ let rec remapTypeAux (tyenv : Remap) (ty:TType) = // avoid reallocation on idempotent let tinst' = remapTypesAux tyenv tinst if tinst === tinst' then ty else - TType_app (tcr, tinst') + TType_app (tcref, tinst') - | TType_ucase (UCRef(tcr, n), tinst) -> - match tyenv.tyconRefRemap.TryFind tcr with - | Some tcr' -> TType_ucase (UCRef(tcr', n), remapTypesAux tyenv tinst) - | None -> TType_ucase (UCRef(tcr, n), remapTypesAux tyenv tinst) + | TType_ucase (UCRef(tcref, n), tinst) -> + match tyenv.tyconRefRemap.TryFind tcref with + | Some tcref' -> TType_ucase (UCRef(tcref', n), remapTypesAux tyenv tinst) + | None -> TType_ucase (UCRef(tcref, n), remapTypesAux tyenv tinst) | TType_anon (anonInfo, l) as ty -> let tupInfo' = remapTupInfoAux tyenv anonInfo.TupInfo @@ -210,9 +210,9 @@ let rec remapTypeAux (tyenv : Remap) (ty:TType) = and remapMeasureAux tyenv unt = match unt with | Measure.One -> unt - | Measure.Con tcr -> - match tyenv.tyconRefRemap.TryFind tcr with - | Some tcr -> Measure.Con tcr + | Measure.Con tcref -> + match tyenv.tyconRefRemap.TryFind tcref with + | Some tcref -> Measure.Con tcref | None -> unt | Measure.Prod(u1, u2) -> Measure.Prod(remapMeasureAux tyenv u1, remapMeasureAux tyenv u2) | Measure.RationalPower(u, q) -> Measure.RationalPower(remapMeasureAux tyenv u, q) @@ -796,12 +796,12 @@ let isRefTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupIn let isStructTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo, _) -> evalTupInfoIsStruct tupInfo | _ -> false) let isAnonRecdTy g ty = ty |> stripTyEqns g |> (function TType_anon _ -> true | _ -> false) let isStructAnonRecdTy g ty = ty |> stripTyEqns g |> (function TType_anon (anonInfo, _) -> evalAnonInfoIsStruct anonInfo | _ -> false) -let isUnionTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsUnionTycon | _ -> false) -let isReprHiddenTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsHiddenReprTycon | _ -> false) -let isFSharpObjModelTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsFSharpObjectModelTycon | _ -> false) -let isRecdTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsRecordTycon | _ -> false) -let isFSharpStructOrEnumTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsFSharpStructOrEnumTycon | _ -> false) -let isFSharpEnumTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsFSharpEnumTycon | _ -> false) +let isUnionTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsUnionTycon | _ -> false) +let isReprHiddenTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsHiddenReprTycon | _ -> false) +let isFSharpObjModelTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsFSharpObjectModelTycon | _ -> false) +let isRecdTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsRecordTycon | _ -> false) +let isFSharpStructOrEnumTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsFSharpStructOrEnumTycon | _ -> false) +let isFSharpEnumTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsFSharpEnumTycon | _ -> false) let isTyparTy g ty = ty |> stripTyEqns g |> (function TType_var _ -> true | _ -> false) let isAnyParTy g ty = ty |> stripTyEqns g |> (function TType_var _ -> true | TType_measure unt -> isUnitParMeasure g unt | _ -> false) let isMeasureTy g ty = ty |> stripTyEqns g |> (function TType_measure _ -> true | _ -> false) @@ -843,12 +843,12 @@ let tryNiceEntityRefOfTyOption ty = let (|NullableTy|_|) g ty = match tryAppTy g ty with - | ValueSome (tcr, [tyarg]) when tyconRefEq g tcr g.system_Nullable_tcref -> Some tyarg + | ValueSome (tcref, [tyarg]) when tyconRefEq g tcref g.system_Nullable_tcref -> Some tyarg | _ -> None let (|StripNullableTy|) g ty = match tryAppTy g ty with - | ValueSome (tcr, [tyarg]) when tyconRefEq g tcr g.system_Nullable_tcref -> tyarg + | ValueSome (tcref, [tyarg]) when tyconRefEq g tcref g.system_Nullable_tcref -> tyarg | _ -> ty let mkInstForAppTy g ty = @@ -1584,12 +1584,12 @@ let IsCompiledAsStaticPropertyWithField g (v:Val) = // Multi-dimensional array types... //------------------------------------------------------------------------- -let isArrayTyconRef (g:TcGlobals) tcr = +let isArrayTyconRef (g:TcGlobals) tcref = g.il_arr_tcr_map - |> Array.exists (tyconRefEq g tcr) + |> Array.exists (tyconRefEq g tcref) -let rankOfArrayTyconRef (g:TcGlobals) tcr = - match g.il_arr_tcr_map |> Array.tryFindIndex (tyconRefEq g tcr) with +let rankOfArrayTyconRef (g:TcGlobals) tcref = + match g.il_arr_tcr_map |> Array.tryFindIndex (tyconRefEq g tcref) with | Some idx -> idx + 1 | None -> @@ -1698,8 +1698,8 @@ let rankOfArrayTy g ty = rankOfArrayTyconRef g (tcrefOfAppTy g ty) let isFSharpObjModelRefTy g ty = isFSharpObjModelTy g ty && - let tcr = tcrefOfAppTy g ty - match tcr.FSharpObjectModelTypeInfo.fsobjmodel_kind with + let tcref = tcrefOfAppTy g ty + match tcref.FSharpObjectModelTypeInfo.fsobjmodel_kind with | TTyconClass | TTyconInterface | TTyconDelegate _ -> true | TTyconStruct | TTyconEnum -> false @@ -1998,9 +1998,9 @@ let accFreeLocalTycon opts x acc = if Zset.contains x acc.FreeTycons then acc else { acc with FreeTycons = Zset.add x acc.FreeTycons } -let accFreeTycon opts (tcr:TyconRef) acc = +let accFreeTycon opts (tcref:TyconRef) acc = if not opts.includeLocalTycons then acc - elif tcr.IsLocalRef then accFreeLocalTycon opts tcr.PrivateTarget acc + elif tcref.IsLocalRef then accFreeLocalTycon opts tcref.PrivateTarget acc else acc let rec boundTypars opts tps acc = @@ -3620,12 +3620,12 @@ module DebugPrint = begin | VSlotDirectCall -> xL ^^ rightL(tagText "") | NormalValUse -> xL xL - | Expr.Sequential (x0, x1, flag, _, _) -> + | Expr.Sequential (expr1, expr2, flag, _, _) -> let flag = match flag with | NormalSeq -> "; (*Seq*)" | ThenDoSeq -> "; (*ThenDo*)" - ((exprL x0 ^^ rightL (tagText flag)) @@ exprL x1) |> wrap + ((exprL expr1 ^^ rightL (tagText flag)) @@ exprL expr2) |> wrap | Expr.Lambda(_, _, baseValOpt, argvs, body, _, _) -> let formalsL = spaceListL (List.map valAtBindL argvs) in let bindingL = @@ -4148,7 +4148,7 @@ let allEntitiesOfModuleOrNamespaceTy m = foldModuleOrNamespaceTy (fun ft acc -> let isPublicVal (lv:Val) = (lv.Accessibility = taccessPublic) let isPublicUnionCase (ucr:UnionCaseRef) = (ucr.UnionCase.Accessibility = taccessPublic) let isPublicRecdField (rfr:RecdFieldRef) = (rfr.RecdField.Accessibility = taccessPublic) -let isPublicTycon (tcr:Tycon) = (tcr.Accessibility = taccessPublic) +let isPublicTycon (tcref:Tycon) = (tcref.Accessibility = taccessPublic) let freeVarsAllPublic fvs = // Are any non-public items used in the expr (which corresponded to the fvs)? @@ -4171,9 +4171,10 @@ let freeTyvarsAllPublic tyvars = Zset.forall isPublicTycon tyvars.FreeTycons -// Detect the subset of match expressions we treat in a linear way -// -- if then else -// -- match e with pat[vs] -> e1[vs] | _ -> e2 +/// Detect the subset of match expressions we process in a linear way (i.e. using tailcalls, rather than +/// unbounded stack) +/// -- if then else +/// -- match e with pat[vs] -> e1[vs] | _ -> e2 let (|LinearMatchExpr|_|) expr = match expr with @@ -4183,6 +4184,17 @@ let (|LinearMatchExpr|_|) expr = let rebuildLinearMatchExpr (sp, m, dtree, tg1, e2, sp2, m2, ty) = primMkMatch (sp, m, dtree, [|tg1;(TTarget([], e2, sp2))|], m2, ty) +/// Detect a subset of 'Expr.Op' expressions we process in a linear way (i.e. using tailcalls, rather than +/// unbounded stack). Only covers Cons(args,Cons(args,Cons(args,Cons(args,...._)))). +let (|LinearOpExpr|_|) expr = + match expr with + | Expr.Op ((TOp.UnionCase _ as op), tinst, args, m) when not args.IsEmpty -> + let argsFront, argLast = List.frontAndBack args + Some (op, tinst, argsFront, argLast, m) + | _ -> None + +let rebuildLinearOpExpr (op, tinst, argsFront, argLast, m) = + Expr.Op (op, tinst, argsFront@[argLast], m) //--------------------------------------------------------------------------- // Free variables in terms. All binders are distinct. @@ -4304,13 +4316,13 @@ and accUsedRecdOrUnionTyconRepr opts (tc:Tycon) fvs = then accLocalTyconRepr opts tc fvs else fvs -and accFreeUnionCaseRef opts cr fvs = +and accFreeUnionCaseRef opts ucref fvs = if not opts.includeUnionCases then fvs else - if Zset.contains cr fvs.FreeUnionCases then fvs + if Zset.contains ucref fvs.FreeUnionCases then fvs else - let fvs = fvs |> accUsedRecdOrUnionTyconRepr opts cr.Tycon - let fvs = fvs |> accFreevarsInTycon opts cr.TyconRef - { fvs with FreeUnionCases = Zset.add cr fvs.FreeUnionCases } + let fvs = fvs |> accUsedRecdOrUnionTyconRepr opts ucref.Tycon + let fvs = fvs |> accFreevarsInTycon opts ucref.TyconRef + { fvs with FreeUnionCases = Zset.add ucref fvs.FreeUnionCases } and accFreeRecdFieldRef opts rfref fvs = if not opts.includeRecdFields then fvs else @@ -4355,23 +4367,29 @@ and accFreeInExprLinear (opts:FreeVarOptions) x acc contf = and accFreeInExprNonLinear opts x acc = match x with + // BINDING CONSTRUCTS - | Expr.Lambda (_, ctorThisValOpt, baseValOpt, vs, b, _, rty) -> + | Expr.Lambda (_, ctorThisValOpt, baseValOpt, vs, bodyExpr, _, rty) -> unionFreeVars (Option.foldBack (boundLocalVal opts) ctorThisValOpt (Option.foldBack (boundLocalVal opts) baseValOpt (boundLocalVals opts vs (accFreeVarsInTy opts rty - (freeInExpr opts b))))) + (freeInExpr opts bodyExpr))))) acc - | Expr.TyLambda (_, vs, b, _, rty) -> - unionFreeVars (accFreeTyvars opts boundTypars vs (accFreeVarsInTy opts rty (freeInExpr opts b))) acc - | Expr.TyChoose (vs, b, _) -> - unionFreeVars (accFreeTyvars opts boundTypars vs (freeInExpr opts b)) acc - | Expr.LetRec (binds, e, _, cache) -> - unionFreeVars (freeVarsCacheCompute opts cache (fun () -> List.foldBack (bindLhs opts) binds (List.foldBack (accBindRhs opts) binds (freeInExpr opts e)))) acc + + | Expr.TyLambda (_, vs, bodyExpr, _, rty) -> + unionFreeVars (accFreeTyvars opts boundTypars vs (accFreeVarsInTy opts rty (freeInExpr opts bodyExpr))) acc + + | Expr.TyChoose (vs, bodyExpr, _) -> + unionFreeVars (accFreeTyvars opts boundTypars vs (freeInExpr opts bodyExpr)) acc + + | Expr.LetRec (binds, bodyExpr, _, cache) -> + unionFreeVars (freeVarsCacheCompute opts cache (fun () -> List.foldBack (bindLhs opts) binds (List.foldBack (accBindRhs opts) binds (freeInExpr opts bodyExpr)))) acc + | Expr.Let _ -> failwith "unreachable - linear expr" + | Expr.Obj (_, ty, basev, basecall, overrides, iimpls, _) -> unionFreeVars (boundProtect @@ -4381,47 +4399,55 @@ and accFreeInExprNonLinear opts x acc = (accFreeInMethods opts overrides (List.foldBack (accFreeInInterfaceImpl opts) iimpls emptyFreeVars)))))) acc + // NON-BINDING CONSTRUCTS | Expr.Const _ -> acc + | Expr.Val (lvr, flags, _) -> accFreeInValFlags opts flags (accFreeValRef opts lvr acc) + | Expr.Quote (ast, {contents=Some(_, argTypes, argExprs, _data)}, _, _, ty) -> accFreeInExpr opts ast (accFreeInExprs opts argExprs (accFreeVarsInTys opts argTypes (accFreeVarsInTy opts ty acc))) + | Expr.Quote (ast, {contents=None}, _, _, ty) -> accFreeInExpr opts ast (accFreeVarsInTy opts ty acc) + | Expr.App(f0, f0ty, tyargs, args, _) -> accFreeVarsInTy opts f0ty (accFreeInExpr opts f0 (accFreeVarsInTys opts tyargs (accFreeInExprs opts args acc))) + | Expr.Link(eref) -> accFreeInExpr opts !eref acc - | Expr.Sequential (e1, e2, _, _, _) -> - let acc = accFreeInExpr opts e1 acc - // tail-call - this is required because we should be able to handle (((e1; e2); e3); e4; .... )) - accFreeInExpr opts e2 acc - | Expr.StaticOptimization (_, e2, e3, _) -> accFreeInExpr opts e2 (accFreeInExpr opts e3 acc) + | Expr.Sequential (expr1, expr2, _, _, _) -> + let acc = accFreeInExpr opts expr1 acc + // tail-call - linear expression + accFreeInExpr opts expr2 acc + + | Expr.StaticOptimization (_, expr2, expr3, _) -> + accFreeInExpr opts expr2 (accFreeInExpr opts expr3 acc) + | Expr.Match (_, _, dtree, targets, _, _) -> match x with // Handle if-then-else - | LinearMatchExpr(_, _, dtree, tg1, e2, _, _, _) -> + | LinearMatchExpr(_, _, dtree, target, bodyExpr, _, _, _) -> let acc = accFreeInDecisionTree opts dtree acc - let acc = accFreeInTarget opts tg1 acc - accFreeInExpr opts e2 acc // tailcall + let acc = accFreeInTarget opts target acc + accFreeInExpr opts bodyExpr acc // tailcall | _ -> let acc = accFreeInDecisionTree opts dtree acc accFreeInTargets opts targets acc - //| Expr.Op (TOp.TryCatch, tinst, [Expr.Lambda(_, _, [_], e1, _, _, _); Expr.Lambda(_, _, [_], e2, _, _, _); Expr.Lambda(_, _, [_], e3, _, _, _)], _) -> - | Expr.Op (TOp.TryCatch _, tinst, [e1;e2;e3], _) -> + | Expr.Op (TOp.TryCatch _, tinst, [expr1; expr2; expr3], _) -> unionFreeVars (accFreeVarsInTys opts tinst - (accFreeInExprs opts [e1;e2] acc)) - (bound_rethrow (accFreeInExpr opts e3 emptyFreeVars)) + (accFreeInExprs opts [expr1; expr2] acc)) + (bound_rethrow (accFreeInExpr opts expr3 emptyFreeVars)) | Expr.Op (op, tinst, args, _) -> let acc = accFreeInOp opts op acc @@ -4444,34 +4470,44 @@ and accFreeInOp opts op acc = | TOp.Goto _ | TOp.Label _ | TOp.Return | TOp.TupleFieldGet _ -> acc - | TOp.Tuple tupInfo -> accFreeTyvars opts accFreeInTupInfo tupInfo acc + | TOp.Tuple tupInfo -> + accFreeTyvars opts accFreeInTupInfo tupInfo acc + | TOp.AnonRecd anonInfo - | TOp.AnonRecdGet (anonInfo, _) -> accFreeTyvars opts accFreeInTupInfo anonInfo.TupInfo acc + | TOp.AnonRecdGet (anonInfo, _) -> + accFreeTyvars opts accFreeInTupInfo anonInfo.TupInfo acc - | TOp.UnionCaseTagGet tr -> accUsedRecdOrUnionTyconRepr opts tr.Deref acc + | TOp.UnionCaseTagGet tcref -> + accUsedRecdOrUnionTyconRepr opts tcref.Deref acc // Things containing just a union case reference - | TOp.UnionCaseProof cr - | TOp.UnionCase cr - | TOp.UnionCaseFieldGetAddr (cr, _, _) - | TOp.UnionCaseFieldGet (cr, _) - | TOp.UnionCaseFieldSet (cr, _) -> accFreeUnionCaseRef opts cr acc + | TOp.UnionCaseProof ucref + | TOp.UnionCase ucref + | TOp.UnionCaseFieldGetAddr (ucref, _, _) + | TOp.UnionCaseFieldGet (ucref, _) + | TOp.UnionCaseFieldSet (ucref, _) -> + accFreeUnionCaseRef opts ucref acc // Things containing just an exception reference - | TOp.ExnConstr ecr - | TOp.ExnFieldGet (ecr, _) - | TOp.ExnFieldSet (ecr, _) -> accFreeExnRef ecr acc + | TOp.ExnConstr ecref + | TOp.ExnFieldGet (ecref, _) + | TOp.ExnFieldSet (ecref, _) -> + accFreeExnRef ecref acc - | TOp.ValFieldGet fr - | TOp.ValFieldGetAddr (fr, _) - | TOp.ValFieldSet fr -> accFreeRecdFieldRef opts fr acc + | TOp.ValFieldGet fref + | TOp.ValFieldGetAddr (fref, _) + | TOp.ValFieldSet fref -> + accFreeRecdFieldRef opts fref acc - | TOp.Recd (kind, tcr) -> + | TOp.Recd (kind, tcref) -> let acc = accUsesFunctionLocalConstructs (kind = RecdExprIsObjInit) acc - (accUsedRecdOrUnionTyconRepr opts tcr.Deref (accFreeTyvars opts accFreeTycon tcr acc)) + (accUsedRecdOrUnionTyconRepr opts tcref.Deref (accFreeTyvars opts accFreeTycon tcref acc)) - | TOp.ILAsm (_, tys) -> accFreeVarsInTys opts tys acc - | TOp.Reraise -> accUsesRethrow true acc + | TOp.ILAsm (_, tys) -> + accFreeVarsInTys opts tys acc + + | TOp.Reraise -> + accUsesRethrow true acc | TOp.TraitCall(TTrait(tys, _, _, argtys, rty, sln)) -> Option.foldBack (accFreeVarsInTraitSln opts) sln.Value @@ -4479,8 +4515,8 @@ and accFreeInOp opts op acc = (accFreeVarsInTys opts argtys (Option.foldBack (accFreeVarsInTy opts) rty acc))) - | TOp.LValueOp (_, lvr) -> - accFreeValRef opts lvr acc + | TOp.LValueOp (_, vref) -> + accFreeValRef opts vref acc | TOp.ILCall (_, isProtectedCall, _, _, valUseFlags, _, _, _, enclTypeArgs, methTypeArgs, tys) -> accFreeVarsInTys opts enclTypeArgs @@ -4492,77 +4528,86 @@ and accFreeInOp opts op acc = and accFreeInTargets opts targets acc = Array.foldBack (accFreeInTarget opts) targets acc -and accFreeInTarget opts (TTarget(vs, e, _)) acc = - List.foldBack (boundLocalVal opts) vs (accFreeInExpr opts e acc) +and accFreeInTarget opts (TTarget(vs, expr, _)) acc = + List.foldBack (boundLocalVal opts) vs (accFreeInExpr opts expr acc) -and accFreeInFlatExprs opts (es:Exprs) acc = List.foldBack (accFreeInExpr opts) es acc +and accFreeInFlatExprs opts (exprs:Exprs) acc = List.foldBack (accFreeInExpr opts) exprs acc -and accFreeInExprs opts (es: Exprs) acc = - match es with +and accFreeInExprs opts (exprs: Exprs) acc = + match exprs with | [] -> acc + | [h]-> + // tailcall - e.g. Cons(x, Cons(x2, .......Cons(x1000000, Nil))) and [| x1; .... ; x1000000 |] + accFreeInExpr opts h acc | h::t -> let acc = accFreeInExpr opts h acc - // tailcall - e.g. Cons(x, Cons(x2, .......Cons(x1000000, Nil))) and [| x1; .... ; x1000000 |] accFreeInExprs opts t acc -and accFreeInSlotSig opts (TSlotSig(_, ty, _, _, _, _)) acc = accFreeVarsInTy opts ty acc +and accFreeInSlotSig opts (TSlotSig(_, ty, _, _, _, _)) acc = + accFreeVarsInTy opts ty acc -and freeInDecisionTree opts e = accFreeInDecisionTree opts e emptyFreeVars -and freeInExpr opts e = accFreeInExpr opts e emptyFreeVars +and freeInDecisionTree opts dtree = + accFreeInDecisionTree opts dtree emptyFreeVars + +and freeInExpr opts expr = + accFreeInExpr opts expr emptyFreeVars // Note: these are only an approximation - they are currently used only by the optimizer -let rec accFreeInModuleOrNamespace opts x acc = - match x with +let rec accFreeInModuleOrNamespace opts mexpr acc = + match mexpr with | TMDefRec(_, _, mbinds, _) -> List.foldBack (accFreeInModuleOrNamespaceBind opts) mbinds acc | TMDefLet(bind, _) -> accBindRhs opts bind acc | TMDefDo(e, _) -> accFreeInExpr opts e acc | TMDefs defs -> accFreeInModuleOrNamespaces opts defs acc | TMAbstract(ModuleOrNamespaceExprWithSig(_, mdef, _)) -> accFreeInModuleOrNamespace opts mdef acc // not really right, but sufficient for how this is used in optimization -and accFreeInModuleOrNamespaceBind opts x acc = - match x with + +and accFreeInModuleOrNamespaceBind opts mbind acc = + match mbind with | ModuleOrNamespaceBinding.Binding bind -> accBindRhs opts bind acc | ModuleOrNamespaceBinding.Module (_, def) -> accFreeInModuleOrNamespace opts def acc -and accFreeInModuleOrNamespaces opts x acc = - List.foldBack (accFreeInModuleOrNamespace opts) x acc -// NOTE: we don't yet need to ask for free variables in module expressions +and accFreeInModuleOrNamespaces opts mexprs acc = + List.foldBack (accFreeInModuleOrNamespace opts) mexprs acc + +let freeInBindingRhs opts bind = + accBindRhs opts bind emptyFreeVars -let freeInBindingRhs opts bind = accBindRhs opts bind emptyFreeVars -let freeInModuleOrNamespace opts mdef = accFreeInModuleOrNamespace opts mdef emptyFreeVars +let freeInModuleOrNamespace opts mdef = + accFreeInModuleOrNamespace opts mdef emptyFreeVars //--------------------------------------------------------------------------- // Destruct - rarely needed //--------------------------------------------------------------------------- -let rec stripLambda (e, ty) = - match e with - | Expr.Lambda (_, ctorThisValOpt, baseValOpt, v, b, _, rty) -> - if Option.isSome ctorThisValOpt then errorR(InternalError("skipping ctorThisValOpt", e.Range)); - if Option.isSome baseValOpt then errorR(InternalError("skipping baseValOpt", e.Range)); - let (vs', b', rty') = stripLambda (b, rty) - (v :: vs', b', rty') - | _ -> ([], e, ty) - -let rec stripLambdaN n e = +let rec stripLambda (expr, ty) = + match expr with + | Expr.Lambda (_, ctorThisValOpt, baseValOpt, v, bodyExpr, _, rty) -> + if Option.isSome ctorThisValOpt then errorR(InternalError("skipping ctorThisValOpt", expr.Range)); + if Option.isSome baseValOpt then errorR(InternalError("skipping baseValOpt", expr.Range)); + let (vs', bodyExpr', rty') = stripLambda (bodyExpr, rty) + (v :: vs', bodyExpr', rty') + | _ -> ([], expr, ty) + +let rec stripLambdaN n expr = assert (n >= 0) - match e with - | Expr.Lambda (_, ctorThisValOpt, baseValOpt, v, body, _, _) when n > 0 -> - if Option.isSome ctorThisValOpt then errorR(InternalError("skipping ctorThisValOpt", e.Range)); - if Option.isSome baseValOpt then errorR(InternalError("skipping baseValOpt", e.Range)); - let (vs, body', remaining) = stripLambdaN (n-1) body - (v :: vs, body', remaining) - | _ -> ([], e, n) - -let tryStripLambdaN n e = - match e with + match expr with + | Expr.Lambda (_, ctorThisValOpt, baseValOpt, v, bodyExpr, _, _) when n > 0 -> + if Option.isSome ctorThisValOpt then errorR(InternalError("skipping ctorThisValOpt", expr.Range)); + if Option.isSome baseValOpt then errorR(InternalError("skipping baseValOpt", expr.Range)); + let (vs, bodyExpr', remaining) = stripLambdaN (n-1) bodyExpr + (v :: vs, bodyExpr', remaining) + | _ -> ([], expr, n) + +let tryStripLambdaN n expr = + match expr with | Expr.Lambda(_, None, None, _, _, _, _) -> - let argvsl, body, remaining = stripLambdaN n e - if remaining = 0 then Some (argvsl, body) + let argvsl, bodyExpr, remaining = stripLambdaN n expr + if remaining = 0 then Some (argvsl, bodyExpr) else None | _ -> None -let stripTopLambda (e, ty) = - let tps, taue, tauty = match e with Expr.TyLambda (_, tps, b, _, rty) -> tps, b, rty | _ -> [], e, ty +let stripTopLambda (expr, ty) = + let tps, taue, tauty = match expr with Expr.TyLambda (_, tps, b, _, rty) -> tps, b, rty | _ -> [], expr, ty let vs, body, rty = stripLambda (taue, tauty) tps, vs, body, rty @@ -4571,7 +4616,7 @@ type AllowTypeDirectedDetupling = Yes | No // This is used to infer arities of expressions // i.e. base the chosen arity on the syntactic expression shape and type of arguments -let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttribs e = +let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttribs expr = let rec stripLambda_notypes e = match e with | Expr.Lambda (_, _, _, vs, b, _, _) -> @@ -4585,7 +4630,7 @@ let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttri let vs, body = stripLambda_notypes taue tps, vs, body - let tps, vsl, _ = stripTopLambdaNoTypes e + let tps, vsl, _ = stripTopLambdaNoTypes expr let fun_arity = vsl.Length let dtys, _ = stripFunTyN g fun_arity (snd (tryDestForallTy g ty)) let partialArgAttribsL = Array.ofList partialArgAttribsL @@ -4610,10 +4655,10 @@ let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttri let retInfo : ArgReprInfo = { Attribs = retAttribs; Name = None } ValReprInfo (ValReprInfo.InferTyparInfo tps, curriedArgInfos, retInfo) -let InferArityOfExprBinding g allowTypeDirectedDetupling (v:Val) e = +let InferArityOfExprBinding g allowTypeDirectedDetupling (v:Val) expr = match v.ValReprInfo with | Some info -> info - | None -> InferArityOfExpr g allowTypeDirectedDetupling v.Type [] [] e + | None -> InferArityOfExpr g allowTypeDirectedDetupling v.Type [] [] expr //------------------------------------------------------------------------- // Check if constraints are satisfied that allow us to use more optimized @@ -4840,8 +4885,16 @@ and copyAndRemapAndBindVal g compgen tmenv v = fixupValData g compgen tmenvinner v2 v2, tmenvinner -and remapExpr (g: TcGlobals) (compgen:ValCopyFlag) (tmenv:Remap) x = - match x with +and remapExpr (g: TcGlobals) (compgen:ValCopyFlag) (tmenv:Remap) expr = + match expr with + + // Handle the linear cases for arbitrary-sized inputs + | LinearOpExpr _ + | LinearMatchExpr _ + | Expr.Sequential _ + | Expr.Let _ -> + remapLinearExpr g compgen tmenv expr (fun x -> x) + // Binding constructs - see also dtrees below | Expr.Lambda (_, ctorThisValOpt, baseValOpt, vs, b, m, rty) -> let ctorThisValOpt, tmenv = Option.mapFold (copyAndRemapAndBindVal g compgen) tmenv ctorThisValOpt @@ -4850,33 +4903,38 @@ and remapExpr (g: TcGlobals) (compgen:ValCopyFlag) (tmenv:Remap) x = let b = remapExpr g compgen tmenv b let rty = remapType tmenv rty Expr.Lambda (newUnique(), ctorThisValOpt, baseValOpt, vs, b, m, rty) + | Expr.TyLambda (_, tps, b, m, rty) -> let tps', tmenvinner = tmenvCopyRemapAndBindTypars (remapAttribs g tmenv) tmenv tps mkTypeLambda m tps' (remapExpr g compgen tmenvinner b, remapType tmenvinner rty) + | Expr.TyChoose (tps, b, m) -> let tps', tmenvinner = tmenvCopyRemapAndBindTypars (remapAttribs g tmenv) tmenv tps Expr.TyChoose(tps', remapExpr g compgen tmenvinner b, m) + | Expr.LetRec (binds, e, m, _) -> let binds', tmenvinner = copyAndRemapAndBindBindings g compgen tmenv binds Expr.LetRec (binds', remapExpr g compgen tmenvinner e, m, NewFreeVarsCache()) - | Expr.Sequential _ - | Expr.Let _ -> remapLinearExpr g compgen tmenv x (fun x -> x) + | Expr.Match (spBind, exprm, pt, targets, m, ty) -> primMkMatch (spBind, exprm, remapDecisionTree g compgen tmenv pt, targets |> Array.map (remapTarget g compgen tmenv), m, remapType tmenv ty) - // Other constructs + | Expr.Val (vr, vf, m) -> let vr' = remapValRef tmenv vr let vf' = remapValFlags tmenv vf - if vr === vr' && vf === vf' then x + if vr === vr' && vf === vf' then expr else Expr.Val (vr', vf', m) + | Expr.Quote (a, {contents=Some(typeDefs, argTypes, argExprs, data)}, isFromQueryExpression, m, ty) -> // fix value of compgen for both original expression and pickled AST let compgen = fixValCopyFlagForQuotations compgen Expr.Quote (remapExpr g compgen tmenv a, {contents=Some(typeDefs, remapTypesAux tmenv argTypes, remapExprs g compgen tmenv argExprs, data)}, isFromQueryExpression, m, remapType tmenv ty) + | Expr.Quote (a, {contents=None}, isFromQueryExpression, m, ty) -> Expr.Quote (remapExpr g (fixValCopyFlagForQuotations compgen) tmenv a, {contents=None}, isFromQueryExpression, m, remapType tmenv ty) + | Expr.Obj (_, ty, basev, basecall, overrides, iimpls, m) -> let basev', tmenvinner = Option.mapFold (copyAndRemapAndBindVal g compgen) tmenv basev mkObjExpr(remapType tmenv ty, basev', @@ -4911,7 +4969,7 @@ and remapExpr (g: TcGlobals) (compgen:ValCopyFlag) (tmenv:Remap) x = let op' = remapOp tmenv op let tinst' = remapTypes tmenv tinst let args' = remapExprs g compgen tmenv args - if op === op' && tinst === tinst' && args === args' then x + if op === op' && tinst === tinst' && args === args' then expr else Expr.Op (op', tinst', args', m) | Expr.App(e1, e1ty, tyargs, args, m) -> @@ -4919,45 +4977,59 @@ and remapExpr (g: TcGlobals) (compgen:ValCopyFlag) (tmenv:Remap) x = let e1ty' = remapPossibleForallTy g tmenv e1ty let tyargs' = remapTypes tmenv tyargs let args' = remapExprs g compgen tmenv args - if e1 === e1' && e1ty === e1ty' && tyargs === tyargs' && args === args' then x + if e1 === e1' && e1ty === e1ty' && tyargs === tyargs' && args === args' then expr else Expr.App(e1', e1ty', tyargs', args', m) + | Expr.Link(eref) -> remapExpr g compgen tmenv !eref + | Expr.StaticOptimization (cs, e2, e3, m) -> // note that type instantiation typically resolve the static constraints here mkStaticOptimizationExpr g (List.map (remapConstraint tmenv) cs, remapExpr g compgen tmenv e2, remapExpr g compgen tmenv e3, m) | Expr.Const (c, m, ty) -> let ty' = remapType tmenv ty - if ty === ty' then x else Expr.Const (c, m, ty') + if ty === ty' then expr else Expr.Const (c, m, ty') and remapTarget g compgen tmenv (TTarget(vs, e, spTarget)) = let vs', tmenvinner = copyAndRemapAndBindVals g compgen tmenv vs TTarget(vs', remapExpr g compgen tmenvinner e, spTarget) -and remapLinearExpr g compgen tmenv e contf = - match e with - | Expr.Let (bind, e, m, _) -> - let bind', tmenvinner = copyAndRemapAndBindBinding g compgen tmenv bind - // tailcall - remapLinearExpr g compgen tmenvinner e (contf << mkLetBind m bind') +and remapLinearExpr g compgen tmenv expr contf = - | Expr.Sequential (e1, e2, dir, spSeq, m) -> - let e1' = remapExpr g compgen tmenv e1 - // tailcall - remapLinearExpr g compgen tmenv e2 (contf << (fun e2' -> - if e1 === e1' && e2 === e2' then e - else Expr.Sequential (e1', e2', dir, spSeq, m))) + match expr with - | LinearMatchExpr (spBind, exprm, dtree, tg1, e2, sp2, m2, ty) -> - let dtree = remapDecisionTree g compgen tmenv dtree - let tg1 = remapTarget g compgen tmenv tg1 - let ty = remapType tmenv ty - // tailcall - remapLinearExpr g compgen tmenv e2 (contf << (fun e2 -> - rebuildLinearMatchExpr (spBind, exprm, dtree, tg1, e2, sp2, m2, ty))) + | Expr.Let (bind, bodyExpr, m, _) -> + let bind', tmenvinner = copyAndRemapAndBindBinding g compgen tmenv bind + // tailcall for the linear position + remapLinearExpr g compgen tmenvinner bodyExpr (contf << mkLetBind m bind') + + | Expr.Sequential (expr1, expr2, dir, spSeq, m) -> + let expr1' = remapExpr g compgen tmenv expr1 + // tailcall for the linear position + remapLinearExpr g compgen tmenv expr2 (contf << (fun expr2' -> + if expr1 === expr1' && expr2 === expr2' then expr + else Expr.Sequential (expr1', expr2', dir, spSeq, m))) + + | LinearMatchExpr (spBind, exprm, dtree, tg1, expr2, sp2, m2, ty) -> + let dtree' = remapDecisionTree g compgen tmenv dtree + let tg1' = remapTarget g compgen tmenv tg1 + let ty' = remapType tmenv ty + // tailcall for the linear position + remapLinearExpr g compgen tmenv expr2 (contf << (fun expr2' -> + rebuildLinearMatchExpr (spBind, exprm, dtree', tg1', expr2', sp2, m2, ty'))) + + | LinearOpExpr (op, tyargs, argsFront, argLast, m) -> + let op' = remapOp tmenv op + let tinst' = remapTypes tmenv tyargs + let argsFront' = remapExprs g compgen tmenv argsFront + // tailcall for the linear position + remapLinearExpr g compgen tmenv argLast (contf << (fun argLast' -> + if op === op' && tyargs === tinst' && argsFront === argsFront' && argLast === argLast' then expr + else rebuildLinearOpExpr (op', tinst', argsFront', argLast', m))) - | _ -> contf (remapExpr g compgen tmenv e) + | _ -> + contf (remapExpr g compgen tmenv expr) and remapConstraint tyenv c = match c with @@ -4966,8 +5038,8 @@ and remapConstraint tyenv c = and remapOp tmenv op = match op with - | TOp.Recd (ctor, tcr) -> TOp.Recd(ctor, remapTyconRef tmenv.tyconRefRemap tcr) - | TOp.UnionCaseTagGet tcr -> TOp.UnionCaseTagGet(remapTyconRef tmenv.tyconRefRemap tcr) + | TOp.Recd (ctor, tcref) -> TOp.Recd(ctor, remapTyconRef tmenv.tyconRefRemap tcref) + | TOp.UnionCaseTagGet tcref -> TOp.UnionCaseTagGet(remapTyconRef tmenv.tyconRefRemap tcref) | TOp.UnionCase(ucref) -> TOp.UnionCase(remapUnionCaseRef tmenv.tyconRefRemap ucref) | TOp.UnionCaseProof(ucref) -> TOp.UnionCaseProof(remapUnionCaseRef tmenv.tyconRefRemap ucref) | TOp.ExnConstr ec -> TOp.ExnConstr(remapTyconRef tmenv.tyconRefRemap ec) @@ -6044,20 +6116,20 @@ let JoinTyparStaticReq r1 r2 = // ExprFolder - fold steps //------------------------------------------------------------------------- -type ExprFolder<'T> = - { exprIntercept : ('T -> Expr -> 'T) -> 'T -> Expr -> 'T option; +type ExprFolder<'State> = + { exprIntercept : (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State // the bool is 'bound in dtree' - valBindingSiteIntercept : 'T -> bool * Val -> 'T; + valBindingSiteIntercept : 'State -> bool * Val -> 'State // these values are always bound to these expressions. bool indicates 'recursively' - nonRecBindingsIntercept : 'T -> Binding -> 'T; - recBindingsIntercept : 'T -> Bindings -> 'T; - dtreeIntercept : 'T -> DecisionTree -> 'T; - targetIntercept : ('T -> Expr -> 'T) -> 'T -> DecisionTreeTarget -> 'T option; - tmethodIntercept : ('T -> Expr -> 'T) -> 'T -> ObjExprMethod -> 'T option; + nonRecBindingsIntercept : 'State -> Binding -> 'State + recBindingsIntercept : 'State -> Bindings -> 'State + dtreeIntercept : 'State -> DecisionTree -> 'State + targetIntercept : (* recurseF *) ('State -> Expr -> 'State) -> 'State -> DecisionTreeTarget -> 'State option + tmethodIntercept : (* recurseF *) ('State -> Expr -> 'State) -> 'State -> ObjExprMethod -> 'State option } let ExprFolder0 = - { exprIntercept = (fun _exprF _z _x -> None); + { exprIntercept = (fun _recurseF noInterceptF z x -> noInterceptF z x); valBindingSiteIntercept = (fun z _b -> z); nonRecBindingsIntercept = (fun z _bs -> z); recBindingsIntercept = (fun z _bs -> z); @@ -6073,54 +6145,78 @@ let ExprFolder0 = /// Adapted from usage info folding. /// Collecting from exprs at moment. /// To collect ids etc some additional folding needed, over formals etc. -type ExprFolders<'State> (folders : _ ExprFolder) = - let mutable exprFClosure = Unchecked.defaultof<_> // prevent reallocation of closure - let rec exprsF z xs = List.fold exprFClosure z xs - and exprF (z: 'State) x = - match folders.exprIntercept exprFClosure z x with // fold this node, then recurse - | Some z -> z // intercepted - | None -> // structurally recurse - match x with - | Expr.Const _ -> z - | Expr.Val _ -> z - | Expr.Op (_c, _tyargs, args, _) -> exprsF z args - | Expr.Sequential (x0, x1, _dir, _, _) -> exprsF z [x0;x1] - | Expr.Lambda(_lambdaId , _ctorThisValOpt, _baseValOpt, _argvs, body, _m, _rty) -> exprF z body - | Expr.TyLambda(_lambdaId, _argtyvs, body, _m, _rty) -> exprF z body - | Expr.TyChoose(_, body, _) -> exprF z body - - | Expr.App (f, _fty, _tys, argtys, _) -> - let z = exprF z f - let z = exprsF z argtys - z - | Expr.LetRec (binds, body, _, _) -> - let z = valBindsF false z binds - let z = exprF z body - z - | Expr.Let (bind, body, _, _) -> - let z = valBindF false z bind - let z = exprF z body - z - | Expr.Link rX -> exprF z (!rX) - - | Expr.Match (_spBind, _exprm, dtree, targets, _m, _ty) -> - let z = dtreeF z dtree - let z = Array.fold targetF z targets - z - | Expr.Quote(e, {contents=Some(_typeDefs, _argTypes, argExprs, _)}, _, _, _) -> - let z = exprF z e - exprsF z argExprs - - | Expr.Quote(e, {contents=None}, _, _m, _) -> - exprF z e - - | Expr.Obj (_n, _typ, _basev, basecall, overrides, iimpls, _m) -> - let z = exprF z basecall - let z = List.fold tmethodF z overrides - let z = List.fold (foldOn snd (List.fold tmethodF)) z iimpls - z - - | Expr.StaticOptimization (_tcs, csx, x, _) -> exprsF z [csx;x] +type ExprFolders<'State> (folders : ExprFolder<'State>) = + let mutable exprFClosure = Unchecked.defaultof<'State -> Expr -> 'State> // prevent reallocation of closure + let mutable exprNoInterceptFClosure = Unchecked.defaultof<'State -> Expr -> 'State> // prevent reallocation of closure + + let rec exprsF z xs = + List.fold exprFClosure z xs + + and exprF (z: 'State) (x: Expr) = + folders.exprIntercept exprFClosure exprNoInterceptFClosure z x + + and exprNoInterceptF (z: 'State) (x: Expr) = + match x with + + | Expr.Const _ -> z + + | Expr.Val _ -> z + + | LinearOpExpr (_op, _tyargs, argsHead, argLast, _m) -> + let z = exprsF z argsHead + // tailcall + exprF z argLast + + | Expr.Op (_c, _tyargs, args, _) -> + exprsF z args + + | Expr.Sequential (x0, x1, _dir, _, _) -> + let z = exprF z x0 + exprF z x1 + + | Expr.Lambda(_lambdaId , _ctorThisValOpt, _baseValOpt, _argvs, body, _m, _rty) -> + exprF z body + + | Expr.TyLambda(_lambdaId, _argtyvs, body, _m, _rty) -> + exprF z body + + | Expr.TyChoose(_, body, _) -> + exprF z body + + | Expr.App (f, _fty, _tys, argtys, _) -> + let z = exprF z f + exprsF z argtys + + | Expr.LetRec (binds, body, _, _) -> + let z = valBindsF false z binds + exprF z body + + | Expr.Let (bind, body, _, _) -> + let z = valBindF false z bind + exprF z body + + | Expr.Link rX -> exprF z (!rX) + + | Expr.Match (_spBind, _exprm, dtree, targets, _m, _ty) -> + let z = dtreeF z dtree + let z = Array.fold targetF z targets.[0..targets.Length - 2] + // tailcall + targetF z targets.[targets.Length - 1] + + | Expr.Quote(e, {contents=Some(_typeDefs, _argTypes, argExprs, _)}, _, _, _) -> + let z = exprF z e + exprsF z argExprs + + | Expr.Quote(e, {contents=None}, _, _m, _) -> + exprF z e + + | Expr.Obj (_n, _typ, _basev, basecall, overrides, iimpls, _m) -> + let z = exprF z basecall + let z = List.fold tmethodF z overrides + List.fold (foldOn snd (List.fold tmethodF)) z iimpls + + | Expr.StaticOptimization (_tcs, csx, x, _) -> + exprsF z [csx;x] and valBindF dtree z bind = let z = folders.nonRecBindingsIntercept z bind @@ -6187,6 +6283,7 @@ type ExprFolders<'State> (folders : _ ExprFolder) = and implF z x = foldTImplFile mexprF z x do exprFClosure <- exprF // allocate one instance of this closure + do exprNoInterceptFClosure <- exprNoInterceptF // allocate one instance of this closure member x.FoldExpr = exprF member x.FoldImplFile = implF @@ -6200,7 +6297,7 @@ let FoldImplFile folders state implFile = ExprFolders(folders).FoldImplFile stat let ExprStats x = let count = ref 0 - let folders = {ExprFolder0 with exprIntercept = (fun _ _ _ -> (count := !count + 1; None))} + let folders = {ExprFolder0 with exprIntercept = (fun _ noInterceptF z x -> (count := !count + 1; noInterceptF z x))} let () = FoldExpr folders () x string !count + " TExpr nodes" #endif @@ -7728,10 +7825,10 @@ let isSealedTy g ty = true let isComInteropTy g ty = - let tcr = tcrefOfAppTy g ty + let tcref = tcrefOfAppTy g ty match g.attrib_ComImportAttribute with | None -> false - | Some attr -> TryFindFSharpBoolAttribute g attr tcr.Attribs = Some(true) + | Some attr -> TryFindFSharpBoolAttribute g attr tcref.Attribs = Some(true) let ValSpecIsCompiledAsInstance g (v:Val) = match v.MemberInfo with @@ -7865,6 +7962,8 @@ and rewriteBinds env binds = List.map (rewriteBind env) binds and RewriteExpr env expr = match expr with + | LinearOpExpr _ + | LinearMatchExpr _ | Expr.Let _ | Expr.Sequential _ -> rewriteLinearExpr env expr (fun e -> e) @@ -7947,29 +8046,41 @@ and rewriteLinearExpr env expr contf = // schedule a rewrite on the way back up by adding to the continuation let contf = contf << postRewriteExpr env match preRewriteExpr env expr with - | Some expr -> contf expr (* done - intercepted! *) + | Some expr -> contf expr | None -> match expr with - | Expr.Let (bind, body, m, _) -> + | Expr.Let (bind, bodyExpr, m, _) -> let bind = rewriteBind env bind - rewriteLinearExpr env body (contf << (fun body' -> - mkLetBind m bind body')) - | Expr.Sequential (e1, e2, dir, spSeq, m) -> - let e1' = RewriteExpr env e1 - rewriteLinearExpr env e2 (contf << (fun e2' -> - if e1 === e1' && e2 === e2' then expr - else Expr.Sequential(e1', e2', dir, spSeq, m))) - | LinearMatchExpr (spBind, exprm, dtree, tg1, e2, sp2, m2, ty) -> + // tailcall + rewriteLinearExpr env bodyExpr (contf << (fun bodyExpr' -> + mkLetBind m bind bodyExpr')) + + | Expr.Sequential (expr1, expr2, dir, spSeq, m) -> + let expr1' = RewriteExpr env expr1 + // tailcall + rewriteLinearExpr env expr2 (contf << (fun expr2' -> + if expr1 === expr1' && expr2 === expr2' then expr + else Expr.Sequential(expr1', expr2', dir, spSeq, m))) + + | LinearOpExpr (op, tyargs, argsFront, argLast, m) -> + let argsFront' = rewriteExprs env argsFront + // tailcall + rewriteLinearExpr env argLast (contf << (fun argLast' -> + if argsFront === argsFront' && argLast === argLast' then expr + else rebuildLinearOpExpr (op, tyargs, argsFront', argLast', m))) + + | LinearMatchExpr (spBind, exprm, dtree, tg1, expr2, sp2, m2, ty) -> let dtree = rewriteDecisionTree env dtree - let tg1 = rewriteTarget env tg1 + let tg1' = rewriteTarget env tg1 // tailcall - rewriteLinearExpr env e2 (contf << (fun e2 -> - rebuildLinearMatchExpr (spBind, exprm, dtree, tg1, e2, sp2, m2, ty))) + rewriteLinearExpr env expr2 (contf << (fun expr2' -> + rebuildLinearMatchExpr (spBind, exprm, dtree, tg1', expr2', sp2, m2, ty))) | _ -> - (* no longer linear *) + // no longer linear, no tailcall contf (RewriteExpr env expr) and rewriteExprs env exprs = List.mapq (RewriteExpr env) exprs + and rewriteFlatExprs env exprs = List.mapq (RewriteExpr env) exprs and rewriteDecisionTree env x = diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index c719406d5..609862512 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -1357,7 +1357,7 @@ module DebugPrint = /// A set of function parameters (visitor) for folding over expressions type ExprFolder<'State> = - { exprIntercept : ('State -> Expr -> 'State) -> 'State -> Expr -> 'State option + { exprIntercept : (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State valBindingSiteIntercept : 'State -> bool * Val -> 'State nonRecBindingsIntercept : 'State -> Binding -> 'State recBindingsIntercept : 'State -> Bindings -> 'State @@ -2261,6 +2261,10 @@ val (|LinearMatchExpr|_|) : Expr -> (SequencePointInfoForBinding * range * Decis val rebuildLinearMatchExpr : (SequencePointInfoForBinding * range * DecisionTree * DecisionTreeTarget * Expr * SequencePointInfoForTarget * range * TType) -> Expr +val (|LinearOpExpr|_|) : Expr -> (TOp * TypeInst * Expr list * Expr * range) option + +val rebuildLinearOpExpr : (TOp * TypeInst * Expr list * Expr * range) -> Expr + val mkCoerceIfNeeded : TcGlobals -> tgtTy: TType -> srcTy: TType -> Expr -> Expr val (|InnerExprPat|) : Expr -> Expr diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index fc39c0e6c..c5a6f4f98 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -6048,32 +6048,8 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = UnifyTypes cenv env m overallTy cenv.g.unit_ty TcStmtThatCantBeCtorBody cenv env tpenv synInnerExpr - | SynExpr.IfThenElse (synBoolExpr, synThenExpr, synElseExprOpt, spIfToThen, isRecovery, mIfToThen, m) -> - let boolExpr, tpenv = TcExprThatCantBeCtorBody cenv cenv.g.bool_ty env tpenv synBoolExpr - let thenExpr, tpenv = - let env = - match env.eContextInfo with - | ContextInfo.ElseBranchResult _ -> { env with eContextInfo = ContextInfo.ElseBranchResult synThenExpr.Range } - | _ -> - match synElseExprOpt with - | None -> { env with eContextInfo = ContextInfo.OmittedElseBranch synThenExpr.Range } - | _ -> { env with eContextInfo = ContextInfo.IfExpression synThenExpr.Range } - - if not isRecovery && Option.isNone synElseExprOpt then - UnifyTypes cenv env m cenv.g.unit_ty overallTy - - TcExprThatCanBeCtorBody cenv overallTy env tpenv synThenExpr - - let elseExpr, spElse, tpenv = - match synElseExprOpt with - | None -> - mkUnit cenv.g mIfToThen, SuppressSequencePointAtTarget, tpenv // the fake 'unit' value gets exactly the same range as spIfToThen - | Some synElseExpr -> - let env = { env with eContextInfo = ContextInfo.ElseBranchResult synElseExpr.Range } - let elseExpr, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synElseExpr - elseExpr, SequencePointAtTarget, tpenv - - primMkCond spIfToThen SequencePointAtTarget spElse m overallTy boolExpr thenExpr elseExpr, tpenv + | SynExpr.IfThenElse _ -> + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) // This is for internal use in the libraries only | SynExpr.LibraryOnlyStaticOptimization (constraints, e2, e3, m) -> @@ -10440,6 +10416,7 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = let e1', _ = TcStmtThatCantBeCtorBody cenv env tpenv e1 // tailcall let env = ShrinkContext env m e2.Range + // tailcall TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr e2 (fun (e2', tpenv) -> cont (Expr.Sequential(e1', e2', NormalSeq, sp, m), tpenv)) @@ -10457,8 +10434,40 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = // TcLinearExprs processes multiple 'let' bindings in a tail recursive way let mkf, envinner, tpenv = TcLetBinding cenv isUse env ExprContainerInfo ExpressionBinding tpenv (binds, m, body.Range) let envinner = ShrinkContext envinner m body.Range + // tailcall TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x, tpenv) -> cont (fst (mkf (x, overallTy)), tpenv)) + + | SynExpr.IfThenElse (synBoolExpr, synThenExpr, synElseExprOpt, spIfToThen, isRecovery, mIfToThen, m) when not isCompExpr -> + let boolExpr, tpenv = TcExprThatCantBeCtorBody cenv cenv.g.bool_ty env tpenv synBoolExpr + let thenExpr, tpenv = + let env = + match env.eContextInfo with + | ContextInfo.ElseBranchResult _ -> { env with eContextInfo = ContextInfo.ElseBranchResult synThenExpr.Range } + | _ -> + match synElseExprOpt with + | None -> { env with eContextInfo = ContextInfo.OmittedElseBranch synThenExpr.Range } + | _ -> { env with eContextInfo = ContextInfo.IfExpression synThenExpr.Range } + + if not isRecovery && Option.isNone synElseExprOpt then + UnifyTypes cenv env m cenv.g.unit_ty overallTy + + TcExprThatCanBeCtorBody cenv overallTy env tpenv synThenExpr + + match synElseExprOpt with + | None -> + let elseExpr = mkUnit cenv.g mIfToThen + let spElse = SuppressSequencePointAtTarget // the fake 'unit' value gets exactly the same range as spIfToThen + let overallExpr = primMkCond spIfToThen SequencePointAtTarget spElse m overallTy boolExpr thenExpr elseExpr + cont (overallExpr, tpenv) + + | Some synElseExpr -> + let env = { env with eContextInfo = ContextInfo.ElseBranchResult synElseExpr.Range } + // tailcall + TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr synElseExpr (fun (elseExpr, tpenv) -> + let resExpr = primMkCond spIfToThen SequencePointAtTarget SequencePointAtTarget m overallTy boolExpr thenExpr elseExpr + cont (resExpr, tpenv)) + | _ -> cont (bodyChecker overallTy env tpenv expr) diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index 22e9409a6..dd7615661 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -44,41 +44,39 @@ let DecideLambda exprF cenv topValInfo expr ety z = | _ -> z ///Special cases where representation uses Lambda. -let DecideExprOp exprF z (op, tyargs, args) = - (* Special cases *) +/// Handle these as special cases since mutables are allowed inside their bodies +let DecideExprOp exprF noInterceptF (z: Zset) (expr: Expr) (op, tyargs, args) = + match op, tyargs, args with - // Handle these as special cases since mutables are allowed inside their bodies | TOp.While _, _, [Expr.Lambda(_, _, _, [_], e1, _, _);Expr.Lambda(_, _, _, [_], e2, _, _)] -> - Some (exprF (exprF z e1) e2) + exprF (exprF z e1) e2 | TOp.TryFinally _, [_], [Expr.Lambda(_, _, _, [_], e1, _, _); Expr.Lambda(_, _, _, [_], e2, _, _)] -> - Some (exprF (exprF z e1) e2) + exprF (exprF z e1) e2 | TOp.For(_), _, [Expr.Lambda(_, _, _, [_], e1, _, _);Expr.Lambda(_, _, _, [_], e2, _, _);Expr.Lambda(_, _, _, [_], e3, _, _)] -> - Some (exprF (exprF (exprF z e1) e2) e3) + exprF (exprF (exprF z e1) e2) e3 | TOp.TryCatch _, [_], [Expr.Lambda(_, _, _, [_], e1, _, _); Expr.Lambda(_, _, _, [_], _e2, _, _); Expr.Lambda(_, _, _, [_], e3, _, _)] -> - Some (exprF (exprF (exprF z e1) _e2) e3) + exprF (exprF (exprF z e1) _e2) e3 // In Check code it said // e2; -- don't check filter body - duplicates logic in 'catch' body // Is that true for this code too? - | _ -> None - + | _ -> + noInterceptF z expr /// Find all the mutable locals that escape a lambda expression or object expression -let DecideExpr cenv exprF z expr = +let DecideExpr cenv exprF noInterceptF z expr = match expr with | Expr.Lambda(_, _ctorThisValOpt, _baseValOpt, argvs, _, m, rty) -> let topValInfo = ValReprInfo ([], [argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)], ValReprInfo.unnamedRetVal) let ty = mkMultiLambdaTy m argvs rty - let z = DecideLambda (Some exprF) cenv topValInfo expr ty z - Some z + DecideLambda (Some exprF) cenv topValInfo expr ty z | Expr.TyLambda(_, tps, _, _m, rty) -> let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps, [], ValReprInfo.unnamedRetVal) let ty = mkForallTyIfNeeded tps rty - let z = DecideLambda (Some exprF) cenv topValInfo expr ty z - Some z + DecideLambda (Some exprF) cenv topValInfo expr ty z | Expr.Obj (_, _, baseValOpt, superInitCall, overrides, iimpls, _m) -> let CheckMethod z (TObjExprMethod(_, _attribs, _tps, vs, body, _m)) = @@ -94,12 +92,13 @@ let DecideExpr cenv exprF z expr = let z = exprF z superInitCall let z = CheckMethods z overrides let z = (z, iimpls) ||> List.fold CheckInterfaceImpl - Some z + z | Expr.Op (c, tyargs, args, _m) -> - DecideExprOp exprF z (c, tyargs, args) + DecideExprOp exprF noInterceptF z expr (c, tyargs, args) - | _ -> None + | _ -> + noInterceptF z expr /// Find all the mutable locals that escape a binding let DecideBinding cenv z (TBind(v, expr, _m) as bind) = diff --git a/tests/fsharp/core/large/conditionals/LargeConditionals-200.fs b/tests/fsharp/core/large/conditionals/LargeConditionals-200.fs new file mode 100644 index 000000000..d1910edcc --- /dev/null +++ b/tests/fsharp/core/large/conditionals/LargeConditionals-200.fs @@ -0,0 +1,210 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let x = 1 + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + 4 +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/conditionals/LargeConditionals-maxtested.fs b/tests/fsharp/core/large/conditionals/LargeConditionals-maxtested.fs new file mode 100644 index 000000000..40840fbdb --- /dev/null +++ b/tests/fsharp/core/large/conditionals/LargeConditionals-maxtested.fs @@ -0,0 +1,424 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let x = 1 + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + if rnd.Next(3) = 1 then 1 else + 4 +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/lets/LargeLets-500.fs b/tests/fsharp/core/large/lets/LargeLets-500.fs new file mode 100644 index 000000000..5a1aa0697 --- /dev/null +++ b/tests/fsharp/core/large/lets/LargeLets-500.fs @@ -0,0 +1,509 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let x = 1 + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) diff --git a/tests/fsharp/core/large/lets/LargeLets-maxtested.fs b/tests/fsharp/core/large/lets/LargeLets-maxtested.fs new file mode 100644 index 000000000..9f220268b --- /dev/null +++ b/tests/fsharp/core/large/lets/LargeLets-maxtested.fs @@ -0,0 +1,795 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let x = 1 + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + let x = x + rnd.Next(3) + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) diff --git a/tests/fsharp/core/large/lists/LargeList-500.fs b/tests/fsharp/core/large/lists/LargeList-500.fs new file mode 100644 index 000000000..b46244887 --- /dev/null +++ b/tests/fsharp/core/large/lists/LargeList-500.fs @@ -0,0 +1,507 @@ +module TestData + +let expectedValues = + [ + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + ] +printfn "length = %d" expectedValues.Length +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/matches/LargeMatches-200.fs b/tests/fsharp/core/large/matches/LargeMatches-200.fs new file mode 100644 index 000000000..4dac86560 --- /dev/null +++ b/tests/fsharp/core/large/matches/LargeMatches-200.fs @@ -0,0 +1,309 @@ +module TestData + +let rnd = new System.Random() +let r() = if rnd.Next(3) > 1 then Some 4 else None +let expectedValues() = + let x = 1 + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + 4 +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/matches/LargeMatches-maxtested.fs b/tests/fsharp/core/large/matches/LargeMatches-maxtested.fs new file mode 100644 index 000000000..a22082433 --- /dev/null +++ b/tests/fsharp/core/large/matches/LargeMatches-maxtested.fs @@ -0,0 +1,465 @@ +module TestData + +let rnd = new System.Random() +let r() = if rnd.Next(3) > 1 then Some 4 else None +let expectedValues() = + let x = 1 + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + match r() with + | Some x -> x + | None -> + 4 +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/mixed/LargeSequentialLet-500.fs b/tests/fsharp/core/large/mixed/LargeSequentialLet-500.fs new file mode 100644 index 000000000..404817e2a --- /dev/null +++ b/tests/fsharp/core/large/mixed/LargeSequentialLet-500.fs @@ -0,0 +1,1011 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let mutable x = 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/mixed/LargeSequentialLet-maxtested.fs b/tests/fsharp/core/large/mixed/LargeSequentialLet-maxtested.fs new file mode 100644 index 000000000..404817e2a --- /dev/null +++ b/tests/fsharp/core/large/mixed/LargeSequentialLet-maxtested.fs @@ -0,0 +1,1011 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let mutable x = 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x <- x + rnd.Next(3) + let mutable x = x + 1 + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/sequential/LargeSequential-500.fs b/tests/fsharp/core/large/sequential/LargeSequential-500.fs new file mode 100644 index 000000000..adfd85723 --- /dev/null +++ b/tests/fsharp/core/large/sequential/LargeSequential-500.fs @@ -0,0 +1,509 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let mutable x = 1 + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/core/large/sequential/LargeSequential-maxtested.fs b/tests/fsharp/core/large/sequential/LargeSequential-maxtested.fs new file mode 100644 index 000000000..e28abe4c3 --- /dev/null +++ b/tests/fsharp/core/large/sequential/LargeSequential-maxtested.fs @@ -0,0 +1,6715 @@ +module TestData + +let rnd = new System.Random() + +let expectedValues() = + let mutable x = 1 + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x <- x + rnd.Next(3) + x +printfn "expectedValues() = %A" (expectedValues()) +System.IO.File.WriteAllLines("test.ok", ["ok"]) \ No newline at end of file diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 7f5804ea1..dbd5dbc01 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -273,6 +273,94 @@ module CoreTests = testOkFile.CheckExists() + [] + let ``lots-of-conditionals``() = + let cfg = testConfig "core/large/conditionals" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-200.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-conditionals-maxtested``() = + let cfg = testConfig "core/large/conditionals" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-maxtested.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-lets``() = + let cfg = testConfig "core/large/lets" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-500.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-lets-maxtested``() = + let cfg = testConfig "core/large/lets" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-maxtested.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-lists``() = + let cfg = testConfig "core/large/lists" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test-500.exe " cfg.fsc_flags ["LargeList-500.fs"] + exec cfg ("." ++ "test-500.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-matches``() = + let cfg = testConfig "core/large/matches" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-200.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-matches-maxtested``() = + let cfg = testConfig "core/large/matches" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-maxtested.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-sequential-and-let``() = + let cfg = testConfig "core/large/mixed" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-500.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-sequential-and-let-maxtested``() = + let cfg = testConfig "core/large/mixed" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-maxtested.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-sequential``() = + let cfg = testConfig "core/large/sequential" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-500.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + + [] + let ``lots-of-sequential-maxtested``() = + let cfg = testConfig "core/large/sequential" + use testOkFile = fileguard cfg "test.ok" + fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-maxtested.fs"] + exec cfg ("." ++ "test.exe") "" + testOkFile.CheckExists() + #endif [] -- GitLab