Import more JIT tests.
authorPat Gavlin <pagavlin@microsoft.com>
Thu, 21 May 2015 17:41:53 +0000 (10:41 -0700)
committerPat Gavlin <pagavlin@microsoft.com>
Thu, 21 May 2015 19:51:41 +0000 (12:51 -0700)
This imports the remainder of the tests under JIT\Methodical that are
able to target CoreCLR.

This also contains build fixes for tests under
JIT\Directed\coverage\oldtests that were mangled during a previous import.

397 files changed:
tests/src/JIT/Directed/coverage/oldtests/33objref.cs
tests/src/JIT/Directed/coverage/oldtests/app.config
tests/src/JIT/Directed/coverage/oldtests/cs_template.proj
tests/src/JIT/Directed/coverage/oldtests/cse1.cs
tests/src/JIT/Directed/coverage/oldtests/cse2.cs
tests/src/JIT/Directed/coverage/oldtests/lclfldadd.cs [new file with mode: 0644]
tests/src/JIT/Directed/coverage/oldtests/lclflddiv.cs [new file with mode: 0644]
tests/src/JIT/Directed/coverage/oldtests/lclfldmul.cs [new file with mode: 0644]
tests/src/JIT/Directed/coverage/oldtests/lclfldrem.cs [new file with mode: 0644]
tests/src/JIT/Directed/coverage/oldtests/lclfldsub.cs [new file with mode: 0644]
tests/src/JIT/Directed/coverage/oldtests/oldtests.csproj
tests/src/JIT/Directed/coverage/oldtests/packages.config
tests/src/JIT/Methodical/Arrays/lcs/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcs.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcs.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcs2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsbas.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsbox.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsmax.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsmixed.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsval.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/lcsvalbox.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/lcs/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/arrres.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/gcarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/misc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Arrays/misc/selfref.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/i4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/i4.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/i4flat.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i4/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/i8.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/i8.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/i8flat.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/i8/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/r4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/r4.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r4/r4flat.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/r8.cs [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/r8.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/AsgOp/r8/r8flat.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/enum.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/misc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/nestval.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Boxing/misc/tailjump.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Coverage/Coverage.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Coverage/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Coverage/b433189.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Coverage/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Coverage/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/FPtrunc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/convr4a.cs [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/convr8a.cs [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/FPtrunc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/25param1a.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/25param2a.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/25param3a.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/25params.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/25params/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/SEH.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/catchfinally.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/catchfinally_tail.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/SEH/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/callvirt/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/callvirt/callvirt.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/callvirt/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/callvirt/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/callvirt/test1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/ctor/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/ctor/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/ctor/ctor.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/ctor/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/ctor/val_ctor.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/deep/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/deep/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/deep/deep.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/deep/deep.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/deep/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/fptr/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/fptr/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/fptr/fptr.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/fptr/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/fptr/recurse.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/implicit/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/implicit/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/implicit/implicit.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/implicit/obj.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Invoke/implicit/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/GaussJordan.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/classarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/jaggedarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/plainarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/GaussJordan/structarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/InnerProd.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/classarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/doublearr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/intarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/jaggedarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/stringarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/InnerProd/structarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/basics.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/classarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/doublearr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/jaggedarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/stringarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/MDArray/basics/structarr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/FloatInfinitiesToInt.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/FloatOvfToInt2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/Overflow.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/Overflow/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/call.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/callconv.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/jumper.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/jumps.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/callconv/vtret.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/ctor_recurse.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/etc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/gc_nested.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/han2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/han3.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/han3_ctor.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/han3_ref.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/hanoi.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/knight.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/nested.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/etc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/accum.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/identity.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/identity/vcall.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/lcs.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/lcs_gcref.cs [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/VT/port/port.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/SEH.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/cast_throw.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/SEH/throw.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/castclass_call.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/castclass_ldarg.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/castclass_ldloc.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/castclass_newobj.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/coverage.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/isinst_call.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/isinst_ldarg.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/isinst_ldloc.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/isinst_newobj.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/coverage/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/iface/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/iface/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/iface/iface.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/iface/iface1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/iface/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/ilseq/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/casts/ilseq/commonBase.cs [new file with mode: 0644]
tests/src/JIT/Methodical/casts/ilseq/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/ilseq/ilseq.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/casts/ilseq/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/precise1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/precise1b.cs [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/precise2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/precise4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/cctor/simple/simple.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/decimaldiv.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/div.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/i4div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/i8div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/negSignedMod.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/overlddiv.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/r4div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/r8div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/u4div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/div/u8div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/decimalrem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/i4rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/i8rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/overldrem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/r4rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/r8rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/rem.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/u4rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/divrem/rem/u8rem.cs [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/ehSO.cs [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/interactions.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/eh/interactions/volatileFromFinally.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/basic.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_c.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_f4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_f8.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_i1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_i2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_i4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_o.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/basic/refarg_s.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit3.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit4.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit5.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit6.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit7.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/explicit8.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/misc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/misc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/rotarg_double.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/rotarg_float.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/rotarg_objref.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/rotarg_valref.cs [new file with mode: 0644]
tests/src/JIT/Methodical/explicit/rotate/rotate.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug614098/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug614098/bug614098.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug614098/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug614098/intToByte.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug614098/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/bug619534.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/ehCodeMotion.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/finallyclone.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug619534/twoEndFinallys.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug621705/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug621705/bug621705.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug621705/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug621705/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug621705/ptuple_lost.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug647189/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug647189/bug647189.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug647189/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug647189/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/bug647189/ssa_tuIsAddr.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/arrayDim.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/dev10_bug675304.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/osrAddovershot.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug675304/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/GCOverReporting.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/castClassEH.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/dev10_bug679008.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/sealedCastVariance.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/singleRefField.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug679008/zeroInitStackSlot.cs [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug723489/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug723489/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug723489/dev10_bug723489.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug723489/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/flowgraph/dev10_bug723489/qMarkColon.cs [new file with mode: 0644]
tests/src/JIT/Methodical/inlining/bug505642/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/inlining/bug505642/bug505642.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/inlining/bug505642/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/inlining/bug505642/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/inlining/bug505642/test.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/arrays.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/lcs_long.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/lcs_ulong.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/arrays/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/binop.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/box.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/misc.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/misc/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_addsub.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldc_div.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldc_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldc_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldfld_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldfld_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldsfld_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_ldsfld_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/s_muldiv.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/signed/signed.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/superlong/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/superlong/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/superlong/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/superlong/superlong.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/superlong/superlong.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/addsub.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldc_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldc_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldfld_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldfld_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldsfld_mul.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/ldsfld_mulovf.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/muldiv.cs [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/int64/unsigned/unsigned.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/classic.cs [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/delegate.cs [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/generics.cs [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/generics2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/nonvirtualcall.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/tailcall.cs [new file with mode: 0644]
tests/src/JIT/Methodical/nonvirtualcall/valuetype.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/refany/array1.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/array2.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/refany/format.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/gcreport.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/lcs.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/native.cs [new file with mode: 0644]
tests/src/JIT/Methodical/refany/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/refany/refany.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/refany/virtcall.cs [new file with mode: 0644]
tests/src/JIT/Methodical/tailcall_v4/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/tailcall_v4/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/tailcall_v4/delegateParamCallTarget.cs [new file with mode: 0644]
tests/src/JIT/Methodical/tailcall_v4/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/tailcall_v4/tailcall_v4.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/app.config [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/cs_template.proj [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/operand.csproj [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/packages.config [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/refanyval.cs [new file with mode: 0644]
tests/src/JIT/Methodical/xxobj/operand/unbox.cs [new file with mode: 0644]

index f20268b..8519ed3 100644 (file)
@@ -1,6 +1,5 @@
 // Copyright (c) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
-//
 
 //testing more than 32 (>33) objref's on the stack and as function arguments
 
index 62803f5..8077c95 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
index adc2f21..9646df5 100644 (file)
@@ -39,4 +39,4 @@
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
   <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
   </PropertyGroup> 
-</Project>
+</Project>
\ No newline at end of file
index 3e961a3..52908ab 100644 (file)
@@ -1,6 +1,5 @@
 // Copyright (c) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
-//
 
 //testing common sub-expression elimination
 
index 9e202a4..4987d59 100644 (file)
@@ -1,6 +1,5 @@
 // Copyright (c) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
-//
 
 //Testing common sub-expression elimination in random code
 
diff --git a/tests/src/JIT/Directed/coverage/oldtests/lclfldadd.cs b/tests/src/JIT/Directed/coverage/oldtests/lclfldadd.cs
new file mode 100644 (file)
index 0000000..35fee32
--- /dev/null
@@ -0,0 +1,558 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Testing simple math on local vars and fields - add
+
+#pragma warning disable 0414
+using System;
+internal class lclfldadd
+{
+    //user-defined class that overloads operator +
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator +(numHolder a, int b)
+        {
+            return a._i_num + b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator +(numHolder a, uint b)
+        {
+            return a._ui_num + b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator +(numHolder a, long b)
+        {
+            return a._l_num + b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator +(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num + b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator +(numHolder a, float b)
+        {
+            return a._f_num + b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator +(numHolder a, double b)
+        {
+            return a._d_num + b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator +(numHolder a, decimal b)
+        {
+            return (int)(a._m_num + b);
+        }
+
+        public static int operator +(numHolder a, numHolder b)
+        {
+            return a._i_num + b._i_num;
+        }
+    }
+
+    private static int s_i_s_op1 = 1;
+    private static uint s_ui_s_op1 = 1;
+    private static long s_l_s_op1 = 1;
+    private static ulong s_ul_s_op1 = 1;
+    private static float s_f_s_op1 = 1;
+    private static double s_d_s_op1 = 1;
+    private static decimal s_m_s_op1 = 1;
+
+    private static int s_i_s_op2 = 8;
+    private static uint s_ui_s_op2 = 8;
+    private static long s_l_s_op2 = 8;
+    private static ulong s_ul_s_op2 = 8;
+    private static float s_f_s_op2 = 8;
+    private static double s_d_s_op2 = 8;
+    private static decimal s_m_s_op2 = 8;
+    private static numHolder s_nHldr_s_op2 = new numHolder(8);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 1;
+        else
+            return 8;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(1);
+        else
+            return new numHolder(8);
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 1;
+        public uint ui_cl_op1 = 1;
+        public long l_cl_op1 = 1;
+        public ulong ul_cl_op1 = 1;
+        public float f_cl_op1 = 1;
+        public double d_cl_op1 = 1;
+        public decimal m_cl_op1 = 1;
+
+        public int i_cl_op2 = 8;
+        public uint ui_cl_op2 = 8;
+        public long l_cl_op2 = 8;
+        public ulong ul_cl_op2 = 8;
+        public float f_cl_op2 = 8;
+        public double d_cl_op2 = 8;
+        public decimal m_cl_op2 = 8;
+        public numHolder nHldr_cl_op2 = new numHolder(8);
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public uint ui_vt_op1;
+        public long l_vt_op1;
+        public ulong ul_vt_op1;
+        public float f_vt_op1;
+        public double d_vt_op1;
+        public decimal m_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 1;
+        vt1.ui_vt_op1 = 1;
+        vt1.l_vt_op1 = 1;
+        vt1.ul_vt_op1 = 1;
+        vt1.f_vt_op1 = 1;
+        vt1.d_vt_op1 = 1;
+        vt1.m_vt_op1 = 1;
+        vt1.i_vt_op2 = 8;
+        vt1.ui_vt_op2 = 8;
+        vt1.l_vt_op2 = 8;
+        vt1.ul_vt_op2 = 8;
+        vt1.f_vt_op2 = 8;
+        vt1.d_vt_op2 = 8;
+        vt1.m_vt_op2 = 8;
+        vt1.nHldr_vt_op2 = new numHolder(8);
+
+        int[] i_arr1d_op1 = { 0, 1 };
+        int[,] i_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        uint[] ui_arr1d_op1 = { 0, 1 };
+        uint[,] ui_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        long[] l_arr1d_op1 = { 0, 1 };
+        long[,] l_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op1 = { 0, 1 };
+        ulong[,] ul_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        float[] f_arr1d_op1 = { 0, 1 };
+        float[,] f_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        double[] d_arr1d_op1 = { 0, 1 };
+        double[,] d_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+        decimal[] m_arr1d_op1 = { 0, 1 };
+        decimal[,] m_arr2d_op1 = { { 0, 1 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 1 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 8, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 8, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 8, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 8, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 8, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 8, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 8, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(8), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(8) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(8) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((i_l_op1 + i_l_op2 != i_l_op1 + ui_l_op2) || (i_l_op1 + ui_l_op2 != i_l_op1 + l_l_op2) || (i_l_op1 + l_l_op2 != i_l_op1 + (int)ul_l_op2) || (i_l_op1 + (int)ul_l_op2 != i_l_op1 + f_l_op2) || (i_l_op1 + f_l_op2 != i_l_op1 + d_l_op2) || ((decimal)(i_l_op1 + d_l_op2) != i_l_op1 + m_l_op2) || (i_l_op1 + m_l_op2 != i_l_op1 + i_l_op2) || (i_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 + s_i_s_op2 != i_l_op1 + s_ui_s_op2) || (i_l_op1 + s_ui_s_op2 != i_l_op1 + s_l_s_op2) || (i_l_op1 + s_l_s_op2 != i_l_op1 + (int)s_ul_s_op2) || (i_l_op1 + (int)s_ul_s_op2 != i_l_op1 + s_f_s_op2) || (i_l_op1 + s_f_s_op2 != i_l_op1 + s_d_s_op2) || ((decimal)(i_l_op1 + s_d_s_op2) != i_l_op1 + s_m_s_op2) || (i_l_op1 + s_m_s_op2 != i_l_op1 + s_i_s_op2) || (i_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 + i_l_op2 != s_i_s_op1 + ui_l_op2) || (s_i_s_op1 + ui_l_op2 != s_i_s_op1 + l_l_op2) || (s_i_s_op1 + l_l_op2 != s_i_s_op1 + (int)ul_l_op2) || (s_i_s_op1 + (int)ul_l_op2 != s_i_s_op1 + f_l_op2) || (s_i_s_op1 + f_l_op2 != s_i_s_op1 + d_l_op2) || ((decimal)(s_i_s_op1 + d_l_op2) != s_i_s_op1 + m_l_op2) || (s_i_s_op1 + m_l_op2 != s_i_s_op1 + i_l_op2) || (s_i_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 + s_i_s_op2 != s_i_s_op1 + s_ui_s_op2) || (s_i_s_op1 + s_ui_s_op2 != s_i_s_op1 + s_l_s_op2) || (s_i_s_op1 + s_l_s_op2 != s_i_s_op1 + (int)s_ul_s_op2) || (s_i_s_op1 + (int)s_ul_s_op2 != s_i_s_op1 + s_f_s_op2) || (s_i_s_op1 + s_f_s_op2 != s_i_s_op1 + s_d_s_op2) || ((decimal)(s_i_s_op1 + s_d_s_op2) != s_i_s_op1 + s_m_s_op2) || (s_i_s_op1 + s_m_s_op2 != s_i_s_op1 + s_i_s_op2) || (s_i_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+        }
+
+        {
+            uint ui_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((ui_l_op1 + i_l_op2 != ui_l_op1 + ui_l_op2) || (ui_l_op1 + ui_l_op2 != ui_l_op1 + l_l_op2) || ((ulong)(ui_l_op1 + l_l_op2) != ui_l_op1 + ul_l_op2) || (ui_l_op1 + ul_l_op2 != ui_l_op1 + f_l_op2) || (ui_l_op1 + f_l_op2 != ui_l_op1 + d_l_op2) || ((decimal)(ui_l_op1 + d_l_op2) != ui_l_op1 + m_l_op2) || (ui_l_op1 + m_l_op2 != ui_l_op1 + i_l_op2) || (ui_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 + s_i_s_op2 != ui_l_op1 + s_ui_s_op2) || (ui_l_op1 + s_ui_s_op2 != ui_l_op1 + s_l_s_op2) || ((ulong)(ui_l_op1 + s_l_s_op2) != ui_l_op1 + s_ul_s_op2) || (ui_l_op1 + s_ul_s_op2 != ui_l_op1 + s_f_s_op2) || (ui_l_op1 + s_f_s_op2 != ui_l_op1 + s_d_s_op2) || ((decimal)(ui_l_op1 + s_d_s_op2) != ui_l_op1 + s_m_s_op2) || (ui_l_op1 + s_m_s_op2 != ui_l_op1 + s_i_s_op2) || (ui_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 + i_l_op2 != s_ui_s_op1 + ui_l_op2) || (s_ui_s_op1 + ui_l_op2 != s_ui_s_op1 + l_l_op2) || ((ulong)(s_ui_s_op1 + l_l_op2) != s_ui_s_op1 + ul_l_op2) || (s_ui_s_op1 + ul_l_op2 != s_ui_s_op1 + f_l_op2) || (s_ui_s_op1 + f_l_op2 != s_ui_s_op1 + d_l_op2) || ((decimal)(s_ui_s_op1 + d_l_op2) != s_ui_s_op1 + m_l_op2) || (s_ui_s_op1 + m_l_op2 != s_ui_s_op1 + i_l_op2) || (s_ui_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 + s_i_s_op2 != s_ui_s_op1 + s_ui_s_op2) || (s_ui_s_op1 + s_ui_s_op2 != s_ui_s_op1 + s_l_s_op2) || ((ulong)(s_ui_s_op1 + s_l_s_op2) != s_ui_s_op1 + s_ul_s_op2) || (s_ui_s_op1 + s_ul_s_op2 != s_ui_s_op1 + s_f_s_op2) || (s_ui_s_op1 + s_f_s_op2 != s_ui_s_op1 + s_d_s_op2) || ((decimal)(s_ui_s_op1 + s_d_s_op2) != s_ui_s_op1 + s_m_s_op2) || (s_ui_s_op1 + s_m_s_op2 != s_ui_s_op1 + s_i_s_op2) || (s_ui_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+        }
+
+        {
+            long l_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((l_l_op1 + i_l_op2 != l_l_op1 + ui_l_op2) || (l_l_op1 + ui_l_op2 != l_l_op1 + l_l_op2) || (l_l_op1 + l_l_op2 != l_l_op1 + (long)ul_l_op2) || (l_l_op1 + (long)ul_l_op2 != l_l_op1 + f_l_op2) || (l_l_op1 + f_l_op2 != l_l_op1 + d_l_op2) || ((decimal)(l_l_op1 + d_l_op2) != l_l_op1 + m_l_op2) || (l_l_op1 + m_l_op2 != l_l_op1 + i_l_op2) || (l_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((l_l_op1 + s_i_s_op2 != l_l_op1 + s_ui_s_op2) || (l_l_op1 + s_ui_s_op2 != l_l_op1 + s_l_s_op2) || (l_l_op1 + s_l_s_op2 != l_l_op1 + (long)s_ul_s_op2) || (l_l_op1 + (long)s_ul_s_op2 != l_l_op1 + s_f_s_op2) || (l_l_op1 + s_f_s_op2 != l_l_op1 + s_d_s_op2) || ((decimal)(l_l_op1 + s_d_s_op2) != l_l_op1 + s_m_s_op2) || (l_l_op1 + s_m_s_op2 != l_l_op1 + s_i_s_op2) || (l_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 + i_l_op2 != s_l_s_op1 + ui_l_op2) || (s_l_s_op1 + ui_l_op2 != s_l_s_op1 + l_l_op2) || (s_l_s_op1 + l_l_op2 != s_l_s_op1 + (long)ul_l_op2) || (s_l_s_op1 + (long)ul_l_op2 != s_l_s_op1 + f_l_op2) || (s_l_s_op1 + f_l_op2 != s_l_s_op1 + d_l_op2) || ((decimal)(s_l_s_op1 + d_l_op2) != s_l_s_op1 + m_l_op2) || (s_l_s_op1 + m_l_op2 != s_l_s_op1 + i_l_op2) || (s_l_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 + s_i_s_op2 != s_l_s_op1 + s_ui_s_op2) || (s_l_s_op1 + s_ui_s_op2 != s_l_s_op1 + s_l_s_op2) || (s_l_s_op1 + s_l_s_op2 != s_l_s_op1 + (long)s_ul_s_op2) || (s_l_s_op1 + (long)s_ul_s_op2 != s_l_s_op1 + s_f_s_op2) || (s_l_s_op1 + s_f_s_op2 != s_l_s_op1 + s_d_s_op2) || ((decimal)(s_l_s_op1 + s_d_s_op2) != s_l_s_op1 + s_m_s_op2) || (s_l_s_op1 + s_m_s_op2 != s_l_s_op1 + s_i_s_op2) || (s_l_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+        }
+
+        {
+            ulong ul_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((ul_l_op1 + (ulong)i_l_op2 != ul_l_op1 + ui_l_op2) || (ul_l_op1 + ui_l_op2 != ul_l_op1 + (ulong)l_l_op2) || (ul_l_op1 + (ulong)l_l_op2 != ul_l_op1 + ul_l_op2) || (ul_l_op1 + ul_l_op2 != ul_l_op1 + f_l_op2) || (ul_l_op1 + f_l_op2 != ul_l_op1 + d_l_op2) || ((decimal)(ul_l_op1 + d_l_op2) != ul_l_op1 + m_l_op2) || (ul_l_op1 + m_l_op2 != ul_l_op1 + (ulong)i_l_op2) || (ul_l_op1 + (ulong)i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 + (ulong)s_i_s_op2 != ul_l_op1 + s_ui_s_op2) || (ul_l_op1 + s_ui_s_op2 != ul_l_op1 + (ulong)s_l_s_op2) || (ul_l_op1 + (ulong)s_l_s_op2 != ul_l_op1 + s_ul_s_op2) || (ul_l_op1 + s_ul_s_op2 != ul_l_op1 + s_f_s_op2) || (ul_l_op1 + s_f_s_op2 != ul_l_op1 + s_d_s_op2) || ((decimal)(ul_l_op1 + s_d_s_op2) != ul_l_op1 + s_m_s_op2) || (ul_l_op1 + s_m_s_op2 != ul_l_op1 + (ulong)s_i_s_op2) || (ul_l_op1 + (ulong)s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 + (ulong)i_l_op2 != s_ul_s_op1 + ui_l_op2) || (s_ul_s_op1 + ui_l_op2 != s_ul_s_op1 + (ulong)l_l_op2) || (s_ul_s_op1 + (ulong)l_l_op2 != s_ul_s_op1 + ul_l_op2) || (s_ul_s_op1 + ul_l_op2 != s_ul_s_op1 + f_l_op2) || (s_ul_s_op1 + f_l_op2 != s_ul_s_op1 + d_l_op2) || ((decimal)(s_ul_s_op1 + d_l_op2) != s_ul_s_op1 + m_l_op2) || (s_ul_s_op1 + m_l_op2 != s_ul_s_op1 + (ulong)i_l_op2) || (s_ul_s_op1 + (ulong)i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 + (ulong)s_i_s_op2 != s_ul_s_op1 + s_ui_s_op2) || (s_ul_s_op1 + s_ui_s_op2 != s_ul_s_op1 + (ulong)s_l_s_op2) || (s_ul_s_op1 + (ulong)s_l_s_op2 != s_ul_s_op1 + s_ul_s_op2) || (s_ul_s_op1 + s_ul_s_op2 != s_ul_s_op1 + s_f_s_op2) || (s_ul_s_op1 + s_f_s_op2 != s_ul_s_op1 + s_d_s_op2) || ((decimal)(s_ul_s_op1 + s_d_s_op2) != s_ul_s_op1 + s_m_s_op2) || (s_ul_s_op1 + s_m_s_op2 != s_ul_s_op1 + (ulong)s_i_s_op2) || (s_ul_s_op1 + (ulong)s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+        }
+
+        {
+            float f_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((f_l_op1 + i_l_op2 != f_l_op1 + ui_l_op2) || (f_l_op1 + ui_l_op2 != f_l_op1 + l_l_op2) || (f_l_op1 + l_l_op2 != f_l_op1 + ul_l_op2) || (f_l_op1 + ul_l_op2 != f_l_op1 + f_l_op2) || (f_l_op1 + f_l_op2 != f_l_op1 + d_l_op2) || (f_l_op1 + d_l_op2 != f_l_op1 + (float)m_l_op2) || (f_l_op1 + (float)m_l_op2 != f_l_op1 + i_l_op2) || (f_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_l_op1 + s_i_s_op2 != f_l_op1 + s_ui_s_op2) || (f_l_op1 + s_ui_s_op2 != f_l_op1 + s_l_s_op2) || (f_l_op1 + s_l_s_op2 != f_l_op1 + s_ul_s_op2) || (f_l_op1 + s_ul_s_op2 != f_l_op1 + s_f_s_op2) || (f_l_op1 + s_f_s_op2 != f_l_op1 + s_d_s_op2) || (f_l_op1 + s_d_s_op2 != f_l_op1 + (float)s_m_s_op2) || (f_l_op1 + (float)s_m_s_op2 != f_l_op1 + s_i_s_op2) || (f_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 + i_l_op2 != s_f_s_op1 + ui_l_op2) || (s_f_s_op1 + ui_l_op2 != s_f_s_op1 + l_l_op2) || (s_f_s_op1 + l_l_op2 != s_f_s_op1 + ul_l_op2) || (s_f_s_op1 + ul_l_op2 != s_f_s_op1 + f_l_op2) || (s_f_s_op1 + f_l_op2 != s_f_s_op1 + d_l_op2) || (s_f_s_op1 + d_l_op2 != s_f_s_op1 + (float)m_l_op2) || (s_f_s_op1 + (float)m_l_op2 != s_f_s_op1 + i_l_op2) || (s_f_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 + s_i_s_op2 != s_f_s_op1 + s_ui_s_op2) || (s_f_s_op1 + s_ui_s_op2 != s_f_s_op1 + s_l_s_op2) || (s_f_s_op1 + s_l_s_op2 != s_f_s_op1 + s_ul_s_op2) || (s_f_s_op1 + s_ul_s_op2 != s_f_s_op1 + s_f_s_op2) || (s_f_s_op1 + s_f_s_op2 != s_f_s_op1 + s_d_s_op2) || (s_f_s_op1 + s_d_s_op2 != s_f_s_op1 + (float)s_m_s_op2) || (s_f_s_op1 + (float)s_m_s_op2 != s_f_s_op1 + s_i_s_op2) || (s_f_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+        }
+
+        {
+            double d_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((d_l_op1 + i_l_op2 != d_l_op1 + ui_l_op2) || (d_l_op1 + ui_l_op2 != d_l_op1 + l_l_op2) || (d_l_op1 + l_l_op2 != d_l_op1 + ul_l_op2) || (d_l_op1 + ul_l_op2 != d_l_op1 + f_l_op2) || (d_l_op1 + f_l_op2 != d_l_op1 + d_l_op2) || (d_l_op1 + d_l_op2 != d_l_op1 + (double)m_l_op2) || (d_l_op1 + (double)m_l_op2 != d_l_op1 + i_l_op2) || (d_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_l_op1 + s_i_s_op2 != d_l_op1 + s_ui_s_op2) || (d_l_op1 + s_ui_s_op2 != d_l_op1 + s_l_s_op2) || (d_l_op1 + s_l_s_op2 != d_l_op1 + s_ul_s_op2) || (d_l_op1 + s_ul_s_op2 != d_l_op1 + s_f_s_op2) || (d_l_op1 + s_f_s_op2 != d_l_op1 + s_d_s_op2) || (d_l_op1 + s_d_s_op2 != d_l_op1 + (double)s_m_s_op2) || (d_l_op1 + (double)s_m_s_op2 != d_l_op1 + s_i_s_op2) || (d_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 + i_l_op2 != s_d_s_op1 + ui_l_op2) || (s_d_s_op1 + ui_l_op2 != s_d_s_op1 + l_l_op2) || (s_d_s_op1 + l_l_op2 != s_d_s_op1 + ul_l_op2) || (s_d_s_op1 + ul_l_op2 != s_d_s_op1 + f_l_op2) || (s_d_s_op1 + f_l_op2 != s_d_s_op1 + d_l_op2) || (s_d_s_op1 + d_l_op2 != s_d_s_op1 + (double)m_l_op2) || (s_d_s_op1 + (double)m_l_op2 != s_d_s_op1 + i_l_op2) || (s_d_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 + s_i_s_op2 != s_d_s_op1 + s_ui_s_op2) || (s_d_s_op1 + s_ui_s_op2 != s_d_s_op1 + s_l_s_op2) || (s_d_s_op1 + s_l_s_op2 != s_d_s_op1 + s_ul_s_op2) || (s_d_s_op1 + s_ul_s_op2 != s_d_s_op1 + s_f_s_op2) || (s_d_s_op1 + s_f_s_op2 != s_d_s_op1 + s_d_s_op2) || (s_d_s_op1 + s_d_s_op2 != s_d_s_op1 + (double)s_m_s_op2) || (s_d_s_op1 + (double)s_m_s_op2 != s_d_s_op1 + s_i_s_op2) || (s_d_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+        }
+
+        {
+            decimal m_l_op1 = 1;
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((m_l_op1 + i_l_op2 != m_l_op1 + ui_l_op2) || (m_l_op1 + ui_l_op2 != m_l_op1 + l_l_op2) || (m_l_op1 + l_l_op2 != m_l_op1 + ul_l_op2) || (m_l_op1 + ul_l_op2 != m_l_op1 + (decimal)f_l_op2) || (m_l_op1 + (decimal)f_l_op2 != m_l_op1 + (decimal)d_l_op2) || (m_l_op1 + (decimal)d_l_op2 != m_l_op1 + m_l_op2) || (m_l_op1 + m_l_op2 != m_l_op1 + i_l_op2) || (m_l_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((m_l_op1 + s_i_s_op2 != m_l_op1 + s_ui_s_op2) || (m_l_op1 + s_ui_s_op2 != m_l_op1 + s_l_s_op2) || (m_l_op1 + s_l_s_op2 != m_l_op1 + s_ul_s_op2) || (m_l_op1 + s_ul_s_op2 != m_l_op1 + (decimal)s_f_s_op2) || (m_l_op1 + (decimal)s_f_s_op2 != m_l_op1 + (decimal)s_d_s_op2) || (m_l_op1 + (decimal)s_d_s_op2 != m_l_op1 + s_m_s_op2) || (m_l_op1 + s_m_s_op2 != m_l_op1 + s_i_s_op2) || (m_l_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 + i_l_op2 != s_m_s_op1 + ui_l_op2) || (s_m_s_op1 + ui_l_op2 != s_m_s_op1 + l_l_op2) || (s_m_s_op1 + l_l_op2 != s_m_s_op1 + ul_l_op2) || (s_m_s_op1 + ul_l_op2 != s_m_s_op1 + (decimal)f_l_op2) || (s_m_s_op1 + (decimal)f_l_op2 != s_m_s_op1 + (decimal)d_l_op2) || (s_m_s_op1 + (decimal)d_l_op2 != s_m_s_op1 + m_l_op2) || (s_m_s_op1 + m_l_op2 != s_m_s_op1 + i_l_op2) || (s_m_s_op1 + i_l_op2 != 9))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 + s_i_s_op2 != s_m_s_op1 + s_ui_s_op2) || (s_m_s_op1 + s_ui_s_op2 != s_m_s_op1 + s_l_s_op2) || (s_m_s_op1 + s_l_s_op2 != s_m_s_op1 + s_ul_s_op2) || (s_m_s_op1 + s_ul_s_op2 != s_m_s_op1 + (decimal)s_f_s_op2) || (s_m_s_op1 + (decimal)s_f_s_op2 != s_m_s_op1 + (decimal)s_d_s_op2) || (s_m_s_op1 + (decimal)s_d_s_op2 != s_m_s_op1 + s_m_s_op2) || (s_m_s_op1 + s_m_s_op2 != s_m_s_op1 + s_i_s_op2) || (s_m_s_op1 + s_i_s_op2 != 9))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Directed/coverage/oldtests/lclflddiv.cs b/tests/src/JIT/Directed/coverage/oldtests/lclflddiv.cs
new file mode 100644 (file)
index 0000000..2c1b84a
--- /dev/null
@@ -0,0 +1,558 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Testing simple math on local vars and fields - div
+
+#pragma warning disable 0414
+using System;
+internal class lclflddiv
+{
+    //user-defined class that overloads operator /
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator /(numHolder a, int b)
+        {
+            return a._i_num / b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator /(numHolder a, uint b)
+        {
+            return a._ui_num / b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator /(numHolder a, long b)
+        {
+            return a._l_num / b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator /(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num / b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator /(numHolder a, float b)
+        {
+            return a._f_num / b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator /(numHolder a, double b)
+        {
+            return a._d_num / b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator /(numHolder a, decimal b)
+        {
+            return (int)(a._m_num / b);
+        }
+
+        public static int operator /(numHolder a, numHolder b)
+        {
+            return a._i_num / b._i_num;
+        }
+    }
+
+    private static int s_i_s_op1 = 128;
+    private static uint s_ui_s_op1 = 128;
+    private static long s_l_s_op1 = 128;
+    private static ulong s_ul_s_op1 = 128;
+    private static float s_f_s_op1 = 128;
+    private static double s_d_s_op1 = 128;
+    private static decimal s_m_s_op1 = 128;
+
+    private static int s_i_s_op2 = 4;
+    private static uint s_ui_s_op2 = 4;
+    private static long s_l_s_op2 = 4;
+    private static ulong s_ul_s_op2 = 4;
+    private static float s_f_s_op2 = 4;
+    private static double s_d_s_op2 = 4;
+    private static decimal s_m_s_op2 = 4;
+    private static numHolder s_nHldr_s_op2 = new numHolder(4);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 4;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(128);
+        else
+            return new numHolder(4);
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 128;
+        public uint ui_cl_op1 = 128;
+        public long l_cl_op1 = 128;
+        public ulong ul_cl_op1 = 128;
+        public float f_cl_op1 = 128;
+        public double d_cl_op1 = 128;
+        public decimal m_cl_op1 = 128;
+
+        public int i_cl_op2 = 4;
+        public uint ui_cl_op2 = 4;
+        public long l_cl_op2 = 4;
+        public ulong ul_cl_op2 = 4;
+        public float f_cl_op2 = 4;
+        public double d_cl_op2 = 4;
+        public decimal m_cl_op2 = 4;
+        public numHolder nHldr_cl_op2 = new numHolder(4);
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public uint ui_vt_op1;
+        public long l_vt_op1;
+        public ulong ul_vt_op1;
+        public float f_vt_op1;
+        public double d_vt_op1;
+        public decimal m_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 128;
+        vt1.ui_vt_op1 = 128;
+        vt1.l_vt_op1 = 128;
+        vt1.ul_vt_op1 = 128;
+        vt1.f_vt_op1 = 128;
+        vt1.d_vt_op1 = 128;
+        vt1.m_vt_op1 = 128;
+        vt1.i_vt_op2 = 4;
+        vt1.ui_vt_op2 = 4;
+        vt1.l_vt_op2 = 4;
+        vt1.ul_vt_op2 = 4;
+        vt1.f_vt_op2 = 4;
+        vt1.d_vt_op2 = 4;
+        vt1.m_vt_op2 = 4;
+        vt1.nHldr_vt_op2 = new numHolder(4);
+
+        int[] i_arr1d_op1 = { 0, 128 };
+        int[,] i_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        uint[] ui_arr1d_op1 = { 0, 128 };
+        uint[,] ui_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        long[] l_arr1d_op1 = { 0, 128 };
+        long[,] l_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op1 = { 0, 128 };
+        ulong[,] ul_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        float[] f_arr1d_op1 = { 0, 128 };
+        float[,] f_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        double[] d_arr1d_op1 = { 0, 128 };
+        double[,] d_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+        decimal[] m_arr1d_op1 = { 0, 128 };
+        decimal[,] m_arr2d_op1 = { { 0, 128 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 128 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 4, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 4, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 4, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 4, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 4, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 4, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 4, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(4), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(4) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(4) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((i_l_op1 / i_l_op2 != i_l_op1 / ui_l_op2) || (i_l_op1 / ui_l_op2 != i_l_op1 / l_l_op2) || (i_l_op1 / l_l_op2 != i_l_op1 / (int)ul_l_op2) || (i_l_op1 / (int)ul_l_op2 != i_l_op1 / f_l_op2) || (i_l_op1 / f_l_op2 != i_l_op1 / d_l_op2) || ((decimal)(i_l_op1 / d_l_op2) != i_l_op1 / m_l_op2) || (i_l_op1 / m_l_op2 != i_l_op1 / i_l_op2) || (i_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / s_i_s_op2 != i_l_op1 / s_ui_s_op2) || (i_l_op1 / s_ui_s_op2 != i_l_op1 / s_l_s_op2) || (i_l_op1 / s_l_s_op2 != i_l_op1 / (int)s_ul_s_op2) || (i_l_op1 / (int)s_ul_s_op2 != i_l_op1 / s_f_s_op2) || (i_l_op1 / s_f_s_op2 != i_l_op1 / s_d_s_op2) || ((decimal)(i_l_op1 / s_d_s_op2) != i_l_op1 / s_m_s_op2) || (i_l_op1 / s_m_s_op2 != i_l_op1 / s_i_s_op2) || (i_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_l_op2 != s_i_s_op1 / ui_l_op2) || (s_i_s_op1 / ui_l_op2 != s_i_s_op1 / l_l_op2) || (s_i_s_op1 / l_l_op2 != s_i_s_op1 / (int)ul_l_op2) || (s_i_s_op1 / (int)ul_l_op2 != s_i_s_op1 / f_l_op2) || (s_i_s_op1 / f_l_op2 != s_i_s_op1 / d_l_op2) || ((decimal)(s_i_s_op1 / d_l_op2) != s_i_s_op1 / m_l_op2) || (s_i_s_op1 / m_l_op2 != s_i_s_op1 / i_l_op2) || (s_i_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / s_i_s_op2 != s_i_s_op1 / s_ui_s_op2) || (s_i_s_op1 / s_ui_s_op2 != s_i_s_op1 / s_l_s_op2) || (s_i_s_op1 / s_l_s_op2 != s_i_s_op1 / (int)s_ul_s_op2) || (s_i_s_op1 / (int)s_ul_s_op2 != s_i_s_op1 / s_f_s_op2) || (s_i_s_op1 / s_f_s_op2 != s_i_s_op1 / s_d_s_op2) || ((decimal)(s_i_s_op1 / s_d_s_op2) != s_i_s_op1 / s_m_s_op2) || (s_i_s_op1 / s_m_s_op2 != s_i_s_op1 / s_i_s_op2) || (s_i_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+        }
+
+        {
+            uint ui_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((ui_l_op1 / i_l_op2 != ui_l_op1 / ui_l_op2) || (ui_l_op1 / ui_l_op2 != ui_l_op1 / l_l_op2) || ((ulong)(ui_l_op1 / l_l_op2) != ui_l_op1 / ul_l_op2) || (ui_l_op1 / ul_l_op2 != ui_l_op1 / f_l_op2) || (ui_l_op1 / f_l_op2 != ui_l_op1 / d_l_op2) || ((decimal)(ui_l_op1 / d_l_op2) != ui_l_op1 / m_l_op2) || (ui_l_op1 / m_l_op2 != ui_l_op1 / i_l_op2) || (ui_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / s_i_s_op2 != ui_l_op1 / s_ui_s_op2) || (ui_l_op1 / s_ui_s_op2 != ui_l_op1 / s_l_s_op2) || ((ulong)(ui_l_op1 / s_l_s_op2) != ui_l_op1 / s_ul_s_op2) || (ui_l_op1 / s_ul_s_op2 != ui_l_op1 / s_f_s_op2) || (ui_l_op1 / s_f_s_op2 != ui_l_op1 / s_d_s_op2) || ((decimal)(ui_l_op1 / s_d_s_op2) != ui_l_op1 / s_m_s_op2) || (ui_l_op1 / s_m_s_op2 != ui_l_op1 / s_i_s_op2) || (ui_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / i_l_op2 != s_ui_s_op1 / ui_l_op2) || (s_ui_s_op1 / ui_l_op2 != s_ui_s_op1 / l_l_op2) || ((ulong)(s_ui_s_op1 / l_l_op2) != s_ui_s_op1 / ul_l_op2) || (s_ui_s_op1 / ul_l_op2 != s_ui_s_op1 / f_l_op2) || (s_ui_s_op1 / f_l_op2 != s_ui_s_op1 / d_l_op2) || ((decimal)(s_ui_s_op1 / d_l_op2) != s_ui_s_op1 / m_l_op2) || (s_ui_s_op1 / m_l_op2 != s_ui_s_op1 / i_l_op2) || (s_ui_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / s_i_s_op2 != s_ui_s_op1 / s_ui_s_op2) || (s_ui_s_op1 / s_ui_s_op2 != s_ui_s_op1 / s_l_s_op2) || ((ulong)(s_ui_s_op1 / s_l_s_op2) != s_ui_s_op1 / s_ul_s_op2) || (s_ui_s_op1 / s_ul_s_op2 != s_ui_s_op1 / s_f_s_op2) || (s_ui_s_op1 / s_f_s_op2 != s_ui_s_op1 / s_d_s_op2) || ((decimal)(s_ui_s_op1 / s_d_s_op2) != s_ui_s_op1 / s_m_s_op2) || (s_ui_s_op1 / s_m_s_op2 != s_ui_s_op1 / s_i_s_op2) || (s_ui_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+        }
+
+        {
+            long l_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((l_l_op1 / i_l_op2 != l_l_op1 / ui_l_op2) || (l_l_op1 / ui_l_op2 != l_l_op1 / l_l_op2) || (l_l_op1 / l_l_op2 != l_l_op1 / (long)ul_l_op2) || (l_l_op1 / (long)ul_l_op2 != l_l_op1 / f_l_op2) || (l_l_op1 / f_l_op2 != l_l_op1 / d_l_op2) || ((decimal)(l_l_op1 / d_l_op2) != l_l_op1 / m_l_op2) || (l_l_op1 / m_l_op2 != l_l_op1 / i_l_op2) || (l_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / s_i_s_op2 != l_l_op1 / s_ui_s_op2) || (l_l_op1 / s_ui_s_op2 != l_l_op1 / s_l_s_op2) || (l_l_op1 / s_l_s_op2 != l_l_op1 / (long)s_ul_s_op2) || (l_l_op1 / (long)s_ul_s_op2 != l_l_op1 / s_f_s_op2) || (l_l_op1 / s_f_s_op2 != l_l_op1 / s_d_s_op2) || ((decimal)(l_l_op1 / s_d_s_op2) != l_l_op1 / s_m_s_op2) || (l_l_op1 / s_m_s_op2 != l_l_op1 / s_i_s_op2) || (l_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / i_l_op2 != s_l_s_op1 / ui_l_op2) || (s_l_s_op1 / ui_l_op2 != s_l_s_op1 / l_l_op2) || (s_l_s_op1 / l_l_op2 != s_l_s_op1 / (long)ul_l_op2) || (s_l_s_op1 / (long)ul_l_op2 != s_l_s_op1 / f_l_op2) || (s_l_s_op1 / f_l_op2 != s_l_s_op1 / d_l_op2) || ((decimal)(s_l_s_op1 / d_l_op2) != s_l_s_op1 / m_l_op2) || (s_l_s_op1 / m_l_op2 != s_l_s_op1 / i_l_op2) || (s_l_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / s_i_s_op2 != s_l_s_op1 / s_ui_s_op2) || (s_l_s_op1 / s_ui_s_op2 != s_l_s_op1 / s_l_s_op2) || (s_l_s_op1 / s_l_s_op2 != s_l_s_op1 / (long)s_ul_s_op2) || (s_l_s_op1 / (long)s_ul_s_op2 != s_l_s_op1 / s_f_s_op2) || (s_l_s_op1 / s_f_s_op2 != s_l_s_op1 / s_d_s_op2) || ((decimal)(s_l_s_op1 / s_d_s_op2) != s_l_s_op1 / s_m_s_op2) || (s_l_s_op1 / s_m_s_op2 != s_l_s_op1 / s_i_s_op2) || (s_l_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+        }
+
+        {
+            ulong ul_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((ul_l_op1 / (ulong)i_l_op2 != ul_l_op1 / ui_l_op2) || (ul_l_op1 / ui_l_op2 != ul_l_op1 / (ulong)l_l_op2) || (ul_l_op1 / (ulong)l_l_op2 != ul_l_op1 / ul_l_op2) || (ul_l_op1 / ul_l_op2 != ul_l_op1 / f_l_op2) || (ul_l_op1 / f_l_op2 != ul_l_op1 / d_l_op2) || ((decimal)(ul_l_op1 / d_l_op2) != ul_l_op1 / m_l_op2) || (ul_l_op1 / m_l_op2 != ul_l_op1 / (ulong)i_l_op2) || (ul_l_op1 / (ulong)i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)s_i_s_op2 != ul_l_op1 / s_ui_s_op2) || (ul_l_op1 / s_ui_s_op2 != ul_l_op1 / (ulong)s_l_s_op2) || (ul_l_op1 / (ulong)s_l_s_op2 != ul_l_op1 / s_ul_s_op2) || (ul_l_op1 / s_ul_s_op2 != ul_l_op1 / s_f_s_op2) || (ul_l_op1 / s_f_s_op2 != ul_l_op1 / s_d_s_op2) || ((decimal)(ul_l_op1 / s_d_s_op2) != ul_l_op1 / s_m_s_op2) || (ul_l_op1 / s_m_s_op2 != ul_l_op1 / (ulong)s_i_s_op2) || (ul_l_op1 / (ulong)s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)i_l_op2 != s_ul_s_op1 / ui_l_op2) || (s_ul_s_op1 / ui_l_op2 != s_ul_s_op1 / (ulong)l_l_op2) || (s_ul_s_op1 / (ulong)l_l_op2 != s_ul_s_op1 / ul_l_op2) || (s_ul_s_op1 / ul_l_op2 != s_ul_s_op1 / f_l_op2) || (s_ul_s_op1 / f_l_op2 != s_ul_s_op1 / d_l_op2) || ((decimal)(s_ul_s_op1 / d_l_op2) != s_ul_s_op1 / m_l_op2) || (s_ul_s_op1 / m_l_op2 != s_ul_s_op1 / (ulong)i_l_op2) || (s_ul_s_op1 / (ulong)i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)s_i_s_op2 != s_ul_s_op1 / s_ui_s_op2) || (s_ul_s_op1 / s_ui_s_op2 != s_ul_s_op1 / (ulong)s_l_s_op2) || (s_ul_s_op1 / (ulong)s_l_s_op2 != s_ul_s_op1 / s_ul_s_op2) || (s_ul_s_op1 / s_ul_s_op2 != s_ul_s_op1 / s_f_s_op2) || (s_ul_s_op1 / s_f_s_op2 != s_ul_s_op1 / s_d_s_op2) || ((decimal)(s_ul_s_op1 / s_d_s_op2) != s_ul_s_op1 / s_m_s_op2) || (s_ul_s_op1 / s_m_s_op2 != s_ul_s_op1 / (ulong)s_i_s_op2) || (s_ul_s_op1 / (ulong)s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+        }
+
+        {
+            float f_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((f_l_op1 / i_l_op2 != f_l_op1 / ui_l_op2) || (f_l_op1 / ui_l_op2 != f_l_op1 / l_l_op2) || (f_l_op1 / l_l_op2 != f_l_op1 / ul_l_op2) || (f_l_op1 / ul_l_op2 != f_l_op1 / f_l_op2) || (f_l_op1 / f_l_op2 != f_l_op1 / d_l_op2) || (f_l_op1 / d_l_op2 != f_l_op1 / (float)m_l_op2) || (f_l_op1 / (float)m_l_op2 != f_l_op1 / i_l_op2) || (f_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / s_i_s_op2 != f_l_op1 / s_ui_s_op2) || (f_l_op1 / s_ui_s_op2 != f_l_op1 / s_l_s_op2) || (f_l_op1 / s_l_s_op2 != f_l_op1 / s_ul_s_op2) || (f_l_op1 / s_ul_s_op2 != f_l_op1 / s_f_s_op2) || (f_l_op1 / s_f_s_op2 != f_l_op1 / s_d_s_op2) || (f_l_op1 / s_d_s_op2 != f_l_op1 / (float)s_m_s_op2) || (f_l_op1 / (float)s_m_s_op2 != f_l_op1 / s_i_s_op2) || (f_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / i_l_op2 != s_f_s_op1 / ui_l_op2) || (s_f_s_op1 / ui_l_op2 != s_f_s_op1 / l_l_op2) || (s_f_s_op1 / l_l_op2 != s_f_s_op1 / ul_l_op2) || (s_f_s_op1 / ul_l_op2 != s_f_s_op1 / f_l_op2) || (s_f_s_op1 / f_l_op2 != s_f_s_op1 / d_l_op2) || (s_f_s_op1 / d_l_op2 != s_f_s_op1 / (float)m_l_op2) || (s_f_s_op1 / (float)m_l_op2 != s_f_s_op1 / i_l_op2) || (s_f_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / s_i_s_op2 != s_f_s_op1 / s_ui_s_op2) || (s_f_s_op1 / s_ui_s_op2 != s_f_s_op1 / s_l_s_op2) || (s_f_s_op1 / s_l_s_op2 != s_f_s_op1 / s_ul_s_op2) || (s_f_s_op1 / s_ul_s_op2 != s_f_s_op1 / s_f_s_op2) || (s_f_s_op1 / s_f_s_op2 != s_f_s_op1 / s_d_s_op2) || (s_f_s_op1 / s_d_s_op2 != s_f_s_op1 / (float)s_m_s_op2) || (s_f_s_op1 / (float)s_m_s_op2 != s_f_s_op1 / s_i_s_op2) || (s_f_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+        }
+
+        {
+            double d_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((d_l_op1 / i_l_op2 != d_l_op1 / ui_l_op2) || (d_l_op1 / ui_l_op2 != d_l_op1 / l_l_op2) || (d_l_op1 / l_l_op2 != d_l_op1 / ul_l_op2) || (d_l_op1 / ul_l_op2 != d_l_op1 / f_l_op2) || (d_l_op1 / f_l_op2 != d_l_op1 / d_l_op2) || (d_l_op1 / d_l_op2 != d_l_op1 / (double)m_l_op2) || (d_l_op1 / (double)m_l_op2 != d_l_op1 / i_l_op2) || (d_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / s_i_s_op2 != d_l_op1 / s_ui_s_op2) || (d_l_op1 / s_ui_s_op2 != d_l_op1 / s_l_s_op2) || (d_l_op1 / s_l_s_op2 != d_l_op1 / s_ul_s_op2) || (d_l_op1 / s_ul_s_op2 != d_l_op1 / s_f_s_op2) || (d_l_op1 / s_f_s_op2 != d_l_op1 / s_d_s_op2) || (d_l_op1 / s_d_s_op2 != d_l_op1 / (double)s_m_s_op2) || (d_l_op1 / (double)s_m_s_op2 != d_l_op1 / s_i_s_op2) || (d_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / i_l_op2 != s_d_s_op1 / ui_l_op2) || (s_d_s_op1 / ui_l_op2 != s_d_s_op1 / l_l_op2) || (s_d_s_op1 / l_l_op2 != s_d_s_op1 / ul_l_op2) || (s_d_s_op1 / ul_l_op2 != s_d_s_op1 / f_l_op2) || (s_d_s_op1 / f_l_op2 != s_d_s_op1 / d_l_op2) || (s_d_s_op1 / d_l_op2 != s_d_s_op1 / (double)m_l_op2) || (s_d_s_op1 / (double)m_l_op2 != s_d_s_op1 / i_l_op2) || (s_d_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / s_i_s_op2 != s_d_s_op1 / s_ui_s_op2) || (s_d_s_op1 / s_ui_s_op2 != s_d_s_op1 / s_l_s_op2) || (s_d_s_op1 / s_l_s_op2 != s_d_s_op1 / s_ul_s_op2) || (s_d_s_op1 / s_ul_s_op2 != s_d_s_op1 / s_f_s_op2) || (s_d_s_op1 / s_f_s_op2 != s_d_s_op1 / s_d_s_op2) || (s_d_s_op1 / s_d_s_op2 != s_d_s_op1 / (double)s_m_s_op2) || (s_d_s_op1 / (double)s_m_s_op2 != s_d_s_op1 / s_i_s_op2) || (s_d_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+        }
+
+        {
+            decimal m_l_op1 = 128;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            numHolder nHldr_l_op2 = new numHolder(4);
+            if ((m_l_op1 / i_l_op2 != m_l_op1 / ui_l_op2) || (m_l_op1 / ui_l_op2 != m_l_op1 / l_l_op2) || (m_l_op1 / l_l_op2 != m_l_op1 / ul_l_op2) || (m_l_op1 / ul_l_op2 != m_l_op1 / (decimal)f_l_op2) || (m_l_op1 / (decimal)f_l_op2 != m_l_op1 / (decimal)d_l_op2) || (m_l_op1 / (decimal)d_l_op2 != m_l_op1 / m_l_op2) || (m_l_op1 / m_l_op2 != m_l_op1 / i_l_op2) || (m_l_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / s_i_s_op2 != m_l_op1 / s_ui_s_op2) || (m_l_op1 / s_ui_s_op2 != m_l_op1 / s_l_s_op2) || (m_l_op1 / s_l_s_op2 != m_l_op1 / s_ul_s_op2) || (m_l_op1 / s_ul_s_op2 != m_l_op1 / (decimal)s_f_s_op2) || (m_l_op1 / (decimal)s_f_s_op2 != m_l_op1 / (decimal)s_d_s_op2) || (m_l_op1 / (decimal)s_d_s_op2 != m_l_op1 / s_m_s_op2) || (m_l_op1 / s_m_s_op2 != m_l_op1 / s_i_s_op2) || (m_l_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / i_l_op2 != s_m_s_op1 / ui_l_op2) || (s_m_s_op1 / ui_l_op2 != s_m_s_op1 / l_l_op2) || (s_m_s_op1 / l_l_op2 != s_m_s_op1 / ul_l_op2) || (s_m_s_op1 / ul_l_op2 != s_m_s_op1 / (decimal)f_l_op2) || (s_m_s_op1 / (decimal)f_l_op2 != s_m_s_op1 / (decimal)d_l_op2) || (s_m_s_op1 / (decimal)d_l_op2 != s_m_s_op1 / m_l_op2) || (s_m_s_op1 / m_l_op2 != s_m_s_op1 / i_l_op2) || (s_m_s_op1 / i_l_op2 != 32))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / s_i_s_op2 != s_m_s_op1 / s_ui_s_op2) || (s_m_s_op1 / s_ui_s_op2 != s_m_s_op1 / s_l_s_op2) || (s_m_s_op1 / s_l_s_op2 != s_m_s_op1 / s_ul_s_op2) || (s_m_s_op1 / s_ul_s_op2 != s_m_s_op1 / (decimal)s_f_s_op2) || (s_m_s_op1 / (decimal)s_f_s_op2 != s_m_s_op1 / (decimal)s_d_s_op2) || (s_m_s_op1 / (decimal)s_d_s_op2 != s_m_s_op1 / s_m_s_op2) || (s_m_s_op1 / s_m_s_op2 != s_m_s_op1 / s_i_s_op2) || (s_m_s_op1 / s_i_s_op2 != 32))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Directed/coverage/oldtests/lclfldmul.cs b/tests/src/JIT/Directed/coverage/oldtests/lclfldmul.cs
new file mode 100644 (file)
index 0000000..666ed79
--- /dev/null
@@ -0,0 +1,558 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Testing simple math on local vars and fields - mul
+
+#pragma warning disable 0414
+using System;
+internal class lclfldmul
+{
+    //user-defined class that overloads operator *
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator *(numHolder a, int b)
+        {
+            return a._i_num * b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator *(numHolder a, uint b)
+        {
+            return a._ui_num * b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator *(numHolder a, long b)
+        {
+            return a._l_num * b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator *(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num * b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator *(numHolder a, float b)
+        {
+            return a._f_num * b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator *(numHolder a, double b)
+        {
+            return a._d_num * b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator *(numHolder a, decimal b)
+        {
+            return (int)(a._m_num * b);
+        }
+
+        public static int operator *(numHolder a, numHolder b)
+        {
+            return a._i_num * b._i_num;
+        }
+    }
+
+    private static int s_i_s_op1 = 3;
+    private static uint s_ui_s_op1 = 3;
+    private static long s_l_s_op1 = 3;
+    private static ulong s_ul_s_op1 = 3;
+    private static float s_f_s_op1 = 3;
+    private static double s_d_s_op1 = 3;
+    private static decimal s_m_s_op1 = 3;
+
+    private static int s_i_s_op2 = 7;
+    private static uint s_ui_s_op2 = 7;
+    private static long s_l_s_op2 = 7;
+    private static ulong s_ul_s_op2 = 7;
+    private static float s_f_s_op2 = 7;
+    private static double s_d_s_op2 = 7;
+    private static decimal s_m_s_op2 = 7;
+    private static numHolder s_nHldr_s_op2 = new numHolder(7);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 3;
+        else
+            return 7;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(3);
+        else
+            return new numHolder(7);
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 3;
+        public uint ui_cl_op1 = 3;
+        public long l_cl_op1 = 3;
+        public ulong ul_cl_op1 = 3;
+        public float f_cl_op1 = 3;
+        public double d_cl_op1 = 3;
+        public decimal m_cl_op1 = 3;
+
+        public int i_cl_op2 = 7;
+        public uint ui_cl_op2 = 7;
+        public long l_cl_op2 = 7;
+        public ulong ul_cl_op2 = 7;
+        public float f_cl_op2 = 7;
+        public double d_cl_op2 = 7;
+        public decimal m_cl_op2 = 7;
+        public numHolder nHldr_cl_op2 = new numHolder(7);
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public uint ui_vt_op1;
+        public long l_vt_op1;
+        public ulong ul_vt_op1;
+        public float f_vt_op1;
+        public double d_vt_op1;
+        public decimal m_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 3;
+        vt1.ui_vt_op1 = 3;
+        vt1.l_vt_op1 = 3;
+        vt1.ul_vt_op1 = 3;
+        vt1.f_vt_op1 = 3;
+        vt1.d_vt_op1 = 3;
+        vt1.m_vt_op1 = 3;
+        vt1.i_vt_op2 = 7;
+        vt1.ui_vt_op2 = 7;
+        vt1.l_vt_op2 = 7;
+        vt1.ul_vt_op2 = 7;
+        vt1.f_vt_op2 = 7;
+        vt1.d_vt_op2 = 7;
+        vt1.m_vt_op2 = 7;
+        vt1.nHldr_vt_op2 = new numHolder(7);
+
+        int[] i_arr1d_op1 = { 0, 3 };
+        int[,] i_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op1 = { 0, 3 };
+        uint[,] ui_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op1 = { 0, 3 };
+        long[,] l_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op1 = { 0, 3 };
+        ulong[,] ul_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op1 = { 0, 3 };
+        float[,] f_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op1 = { 0, 3 };
+        double[,] d_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op1 = { 0, 3 };
+        decimal[,] m_arr2d_op1 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 7, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 7, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 7, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 7, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 7, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 7, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 7, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(7), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(7) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(7) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((i_l_op1 * i_l_op2 != i_l_op1 * ui_l_op2) || (i_l_op1 * ui_l_op2 != i_l_op1 * l_l_op2) || (i_l_op1 * l_l_op2 != i_l_op1 * (int)ul_l_op2) || (i_l_op1 * (int)ul_l_op2 != i_l_op1 * f_l_op2) || (i_l_op1 * f_l_op2 != i_l_op1 * d_l_op2) || ((decimal)(i_l_op1 * d_l_op2) != i_l_op1 * m_l_op2) || (i_l_op1 * m_l_op2 != i_l_op1 * i_l_op2) || (i_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 * s_i_s_op2 != i_l_op1 * s_ui_s_op2) || (i_l_op1 * s_ui_s_op2 != i_l_op1 * s_l_s_op2) || (i_l_op1 * s_l_s_op2 != i_l_op1 * (int)s_ul_s_op2) || (i_l_op1 * (int)s_ul_s_op2 != i_l_op1 * s_f_s_op2) || (i_l_op1 * s_f_s_op2 != i_l_op1 * s_d_s_op2) || ((decimal)(i_l_op1 * s_d_s_op2) != i_l_op1 * s_m_s_op2) || (i_l_op1 * s_m_s_op2 != i_l_op1 * s_i_s_op2) || (i_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 * i_l_op2 != s_i_s_op1 * ui_l_op2) || (s_i_s_op1 * ui_l_op2 != s_i_s_op1 * l_l_op2) || (s_i_s_op1 * l_l_op2 != s_i_s_op1 * (int)ul_l_op2) || (s_i_s_op1 * (int)ul_l_op2 != s_i_s_op1 * f_l_op2) || (s_i_s_op1 * f_l_op2 != s_i_s_op1 * d_l_op2) || ((decimal)(s_i_s_op1 * d_l_op2) != s_i_s_op1 * m_l_op2) || (s_i_s_op1 * m_l_op2 != s_i_s_op1 * i_l_op2) || (s_i_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 * s_i_s_op2 != s_i_s_op1 * s_ui_s_op2) || (s_i_s_op1 * s_ui_s_op2 != s_i_s_op1 * s_l_s_op2) || (s_i_s_op1 * s_l_s_op2 != s_i_s_op1 * (int)s_ul_s_op2) || (s_i_s_op1 * (int)s_ul_s_op2 != s_i_s_op1 * s_f_s_op2) || (s_i_s_op1 * s_f_s_op2 != s_i_s_op1 * s_d_s_op2) || ((decimal)(s_i_s_op1 * s_d_s_op2) != s_i_s_op1 * s_m_s_op2) || (s_i_s_op1 * s_m_s_op2 != s_i_s_op1 * s_i_s_op2) || (s_i_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+        }
+
+        {
+            uint ui_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((ui_l_op1 * i_l_op2 != ui_l_op1 * ui_l_op2) || (ui_l_op1 * ui_l_op2 != ui_l_op1 * l_l_op2) || ((ulong)(ui_l_op1 * l_l_op2) != ui_l_op1 * ul_l_op2) || (ui_l_op1 * ul_l_op2 != ui_l_op1 * f_l_op2) || (ui_l_op1 * f_l_op2 != ui_l_op1 * d_l_op2) || ((decimal)(ui_l_op1 * d_l_op2) != ui_l_op1 * m_l_op2) || (ui_l_op1 * m_l_op2 != ui_l_op1 * i_l_op2) || (ui_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 * s_i_s_op2 != ui_l_op1 * s_ui_s_op2) || (ui_l_op1 * s_ui_s_op2 != ui_l_op1 * s_l_s_op2) || ((ulong)(ui_l_op1 * s_l_s_op2) != ui_l_op1 * s_ul_s_op2) || (ui_l_op1 * s_ul_s_op2 != ui_l_op1 * s_f_s_op2) || (ui_l_op1 * s_f_s_op2 != ui_l_op1 * s_d_s_op2) || ((decimal)(ui_l_op1 * s_d_s_op2) != ui_l_op1 * s_m_s_op2) || (ui_l_op1 * s_m_s_op2 != ui_l_op1 * s_i_s_op2) || (ui_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 * i_l_op2 != s_ui_s_op1 * ui_l_op2) || (s_ui_s_op1 * ui_l_op2 != s_ui_s_op1 * l_l_op2) || ((ulong)(s_ui_s_op1 * l_l_op2) != s_ui_s_op1 * ul_l_op2) || (s_ui_s_op1 * ul_l_op2 != s_ui_s_op1 * f_l_op2) || (s_ui_s_op1 * f_l_op2 != s_ui_s_op1 * d_l_op2) || ((decimal)(s_ui_s_op1 * d_l_op2) != s_ui_s_op1 * m_l_op2) || (s_ui_s_op1 * m_l_op2 != s_ui_s_op1 * i_l_op2) || (s_ui_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 * s_i_s_op2 != s_ui_s_op1 * s_ui_s_op2) || (s_ui_s_op1 * s_ui_s_op2 != s_ui_s_op1 * s_l_s_op2) || ((ulong)(s_ui_s_op1 * s_l_s_op2) != s_ui_s_op1 * s_ul_s_op2) || (s_ui_s_op1 * s_ul_s_op2 != s_ui_s_op1 * s_f_s_op2) || (s_ui_s_op1 * s_f_s_op2 != s_ui_s_op1 * s_d_s_op2) || ((decimal)(s_ui_s_op1 * s_d_s_op2) != s_ui_s_op1 * s_m_s_op2) || (s_ui_s_op1 * s_m_s_op2 != s_ui_s_op1 * s_i_s_op2) || (s_ui_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+        }
+
+        {
+            long l_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((l_l_op1 * i_l_op2 != l_l_op1 * ui_l_op2) || (l_l_op1 * ui_l_op2 != l_l_op1 * l_l_op2) || (l_l_op1 * l_l_op2 != l_l_op1 * (long)ul_l_op2) || (l_l_op1 * (long)ul_l_op2 != l_l_op1 * f_l_op2) || (l_l_op1 * f_l_op2 != l_l_op1 * d_l_op2) || ((decimal)(l_l_op1 * d_l_op2) != l_l_op1 * m_l_op2) || (l_l_op1 * m_l_op2 != l_l_op1 * i_l_op2) || (l_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((l_l_op1 * s_i_s_op2 != l_l_op1 * s_ui_s_op2) || (l_l_op1 * s_ui_s_op2 != l_l_op1 * s_l_s_op2) || (l_l_op1 * s_l_s_op2 != l_l_op1 * (long)s_ul_s_op2) || (l_l_op1 * (long)s_ul_s_op2 != l_l_op1 * s_f_s_op2) || (l_l_op1 * s_f_s_op2 != l_l_op1 * s_d_s_op2) || ((decimal)(l_l_op1 * s_d_s_op2) != l_l_op1 * s_m_s_op2) || (l_l_op1 * s_m_s_op2 != l_l_op1 * s_i_s_op2) || (l_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 * i_l_op2 != s_l_s_op1 * ui_l_op2) || (s_l_s_op1 * ui_l_op2 != s_l_s_op1 * l_l_op2) || (s_l_s_op1 * l_l_op2 != s_l_s_op1 * (long)ul_l_op2) || (s_l_s_op1 * (long)ul_l_op2 != s_l_s_op1 * f_l_op2) || (s_l_s_op1 * f_l_op2 != s_l_s_op1 * d_l_op2) || ((decimal)(s_l_s_op1 * d_l_op2) != s_l_s_op1 * m_l_op2) || (s_l_s_op1 * m_l_op2 != s_l_s_op1 * i_l_op2) || (s_l_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 * s_i_s_op2 != s_l_s_op1 * s_ui_s_op2) || (s_l_s_op1 * s_ui_s_op2 != s_l_s_op1 * s_l_s_op2) || (s_l_s_op1 * s_l_s_op2 != s_l_s_op1 * (long)s_ul_s_op2) || (s_l_s_op1 * (long)s_ul_s_op2 != s_l_s_op1 * s_f_s_op2) || (s_l_s_op1 * s_f_s_op2 != s_l_s_op1 * s_d_s_op2) || ((decimal)(s_l_s_op1 * s_d_s_op2) != s_l_s_op1 * s_m_s_op2) || (s_l_s_op1 * s_m_s_op2 != s_l_s_op1 * s_i_s_op2) || (s_l_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+        }
+
+        {
+            ulong ul_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((ul_l_op1 * (ulong)i_l_op2 != ul_l_op1 * ui_l_op2) || (ul_l_op1 * ui_l_op2 != ul_l_op1 * (ulong)l_l_op2) || (ul_l_op1 * (ulong)l_l_op2 != ul_l_op1 * ul_l_op2) || (ul_l_op1 * ul_l_op2 != ul_l_op1 * f_l_op2) || (ul_l_op1 * f_l_op2 != ul_l_op1 * d_l_op2) || ((decimal)(ul_l_op1 * d_l_op2) != ul_l_op1 * m_l_op2) || (ul_l_op1 * m_l_op2 != ul_l_op1 * (ulong)i_l_op2) || (ul_l_op1 * (ulong)i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 * (ulong)s_i_s_op2 != ul_l_op1 * s_ui_s_op2) || (ul_l_op1 * s_ui_s_op2 != ul_l_op1 * (ulong)s_l_s_op2) || (ul_l_op1 * (ulong)s_l_s_op2 != ul_l_op1 * s_ul_s_op2) || (ul_l_op1 * s_ul_s_op2 != ul_l_op1 * s_f_s_op2) || (ul_l_op1 * s_f_s_op2 != ul_l_op1 * s_d_s_op2) || ((decimal)(ul_l_op1 * s_d_s_op2) != ul_l_op1 * s_m_s_op2) || (ul_l_op1 * s_m_s_op2 != ul_l_op1 * (ulong)s_i_s_op2) || (ul_l_op1 * (ulong)s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 * (ulong)i_l_op2 != s_ul_s_op1 * ui_l_op2) || (s_ul_s_op1 * ui_l_op2 != s_ul_s_op1 * (ulong)l_l_op2) || (s_ul_s_op1 * (ulong)l_l_op2 != s_ul_s_op1 * ul_l_op2) || (s_ul_s_op1 * ul_l_op2 != s_ul_s_op1 * f_l_op2) || (s_ul_s_op1 * f_l_op2 != s_ul_s_op1 * d_l_op2) || ((decimal)(s_ul_s_op1 * d_l_op2) != s_ul_s_op1 * m_l_op2) || (s_ul_s_op1 * m_l_op2 != s_ul_s_op1 * (ulong)i_l_op2) || (s_ul_s_op1 * (ulong)i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 * (ulong)s_i_s_op2 != s_ul_s_op1 * s_ui_s_op2) || (s_ul_s_op1 * s_ui_s_op2 != s_ul_s_op1 * (ulong)s_l_s_op2) || (s_ul_s_op1 * (ulong)s_l_s_op2 != s_ul_s_op1 * s_ul_s_op2) || (s_ul_s_op1 * s_ul_s_op2 != s_ul_s_op1 * s_f_s_op2) || (s_ul_s_op1 * s_f_s_op2 != s_ul_s_op1 * s_d_s_op2) || ((decimal)(s_ul_s_op1 * s_d_s_op2) != s_ul_s_op1 * s_m_s_op2) || (s_ul_s_op1 * s_m_s_op2 != s_ul_s_op1 * (ulong)s_i_s_op2) || (s_ul_s_op1 * (ulong)s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+        }
+
+        {
+            float f_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((f_l_op1 * i_l_op2 != f_l_op1 * ui_l_op2) || (f_l_op1 * ui_l_op2 != f_l_op1 * l_l_op2) || (f_l_op1 * l_l_op2 != f_l_op1 * ul_l_op2) || (f_l_op1 * ul_l_op2 != f_l_op1 * f_l_op2) || (f_l_op1 * f_l_op2 != f_l_op1 * d_l_op2) || (f_l_op1 * d_l_op2 != f_l_op1 * (float)m_l_op2) || (f_l_op1 * (float)m_l_op2 != f_l_op1 * i_l_op2) || (f_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_l_op1 * s_i_s_op2 != f_l_op1 * s_ui_s_op2) || (f_l_op1 * s_ui_s_op2 != f_l_op1 * s_l_s_op2) || (f_l_op1 * s_l_s_op2 != f_l_op1 * s_ul_s_op2) || (f_l_op1 * s_ul_s_op2 != f_l_op1 * s_f_s_op2) || (f_l_op1 * s_f_s_op2 != f_l_op1 * s_d_s_op2) || (f_l_op1 * s_d_s_op2 != f_l_op1 * (float)s_m_s_op2) || (f_l_op1 * (float)s_m_s_op2 != f_l_op1 * s_i_s_op2) || (f_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 * i_l_op2 != s_f_s_op1 * ui_l_op2) || (s_f_s_op1 * ui_l_op2 != s_f_s_op1 * l_l_op2) || (s_f_s_op1 * l_l_op2 != s_f_s_op1 * ul_l_op2) || (s_f_s_op1 * ul_l_op2 != s_f_s_op1 * f_l_op2) || (s_f_s_op1 * f_l_op2 != s_f_s_op1 * d_l_op2) || (s_f_s_op1 * d_l_op2 != s_f_s_op1 * (float)m_l_op2) || (s_f_s_op1 * (float)m_l_op2 != s_f_s_op1 * i_l_op2) || (s_f_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 * s_i_s_op2 != s_f_s_op1 * s_ui_s_op2) || (s_f_s_op1 * s_ui_s_op2 != s_f_s_op1 * s_l_s_op2) || (s_f_s_op1 * s_l_s_op2 != s_f_s_op1 * s_ul_s_op2) || (s_f_s_op1 * s_ul_s_op2 != s_f_s_op1 * s_f_s_op2) || (s_f_s_op1 * s_f_s_op2 != s_f_s_op1 * s_d_s_op2) || (s_f_s_op1 * s_d_s_op2 != s_f_s_op1 * (float)s_m_s_op2) || (s_f_s_op1 * (float)s_m_s_op2 != s_f_s_op1 * s_i_s_op2) || (s_f_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+        }
+
+        {
+            double d_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((d_l_op1 * i_l_op2 != d_l_op1 * ui_l_op2) || (d_l_op1 * ui_l_op2 != d_l_op1 * l_l_op2) || (d_l_op1 * l_l_op2 != d_l_op1 * ul_l_op2) || (d_l_op1 * ul_l_op2 != d_l_op1 * f_l_op2) || (d_l_op1 * f_l_op2 != d_l_op1 * d_l_op2) || (d_l_op1 * d_l_op2 != d_l_op1 * (double)m_l_op2) || (d_l_op1 * (double)m_l_op2 != d_l_op1 * i_l_op2) || (d_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_l_op1 * s_i_s_op2 != d_l_op1 * s_ui_s_op2) || (d_l_op1 * s_ui_s_op2 != d_l_op1 * s_l_s_op2) || (d_l_op1 * s_l_s_op2 != d_l_op1 * s_ul_s_op2) || (d_l_op1 * s_ul_s_op2 != d_l_op1 * s_f_s_op2) || (d_l_op1 * s_f_s_op2 != d_l_op1 * s_d_s_op2) || (d_l_op1 * s_d_s_op2 != d_l_op1 * (double)s_m_s_op2) || (d_l_op1 * (double)s_m_s_op2 != d_l_op1 * s_i_s_op2) || (d_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 * i_l_op2 != s_d_s_op1 * ui_l_op2) || (s_d_s_op1 * ui_l_op2 != s_d_s_op1 * l_l_op2) || (s_d_s_op1 * l_l_op2 != s_d_s_op1 * ul_l_op2) || (s_d_s_op1 * ul_l_op2 != s_d_s_op1 * f_l_op2) || (s_d_s_op1 * f_l_op2 != s_d_s_op1 * d_l_op2) || (s_d_s_op1 * d_l_op2 != s_d_s_op1 * (double)m_l_op2) || (s_d_s_op1 * (double)m_l_op2 != s_d_s_op1 * i_l_op2) || (s_d_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 * s_i_s_op2 != s_d_s_op1 * s_ui_s_op2) || (s_d_s_op1 * s_ui_s_op2 != s_d_s_op1 * s_l_s_op2) || (s_d_s_op1 * s_l_s_op2 != s_d_s_op1 * s_ul_s_op2) || (s_d_s_op1 * s_ul_s_op2 != s_d_s_op1 * s_f_s_op2) || (s_d_s_op1 * s_f_s_op2 != s_d_s_op1 * s_d_s_op2) || (s_d_s_op1 * s_d_s_op2 != s_d_s_op1 * (double)s_m_s_op2) || (s_d_s_op1 * (double)s_m_s_op2 != s_d_s_op1 * s_i_s_op2) || (s_d_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+        }
+
+        {
+            decimal m_l_op1 = 3;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            numHolder nHldr_l_op2 = new numHolder(7);
+            if ((m_l_op1 * i_l_op2 != m_l_op1 * ui_l_op2) || (m_l_op1 * ui_l_op2 != m_l_op1 * l_l_op2) || (m_l_op1 * l_l_op2 != m_l_op1 * ul_l_op2) || (m_l_op1 * ul_l_op2 != m_l_op1 * (decimal)f_l_op2) || (m_l_op1 * (decimal)f_l_op2 != m_l_op1 * (decimal)d_l_op2) || (m_l_op1 * (decimal)d_l_op2 != m_l_op1 * m_l_op2) || (m_l_op1 * m_l_op2 != m_l_op1 * i_l_op2) || (m_l_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((m_l_op1 * s_i_s_op2 != m_l_op1 * s_ui_s_op2) || (m_l_op1 * s_ui_s_op2 != m_l_op1 * s_l_s_op2) || (m_l_op1 * s_l_s_op2 != m_l_op1 * s_ul_s_op2) || (m_l_op1 * s_ul_s_op2 != m_l_op1 * (decimal)s_f_s_op2) || (m_l_op1 * (decimal)s_f_s_op2 != m_l_op1 * (decimal)s_d_s_op2) || (m_l_op1 * (decimal)s_d_s_op2 != m_l_op1 * s_m_s_op2) || (m_l_op1 * s_m_s_op2 != m_l_op1 * s_i_s_op2) || (m_l_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 * i_l_op2 != s_m_s_op1 * ui_l_op2) || (s_m_s_op1 * ui_l_op2 != s_m_s_op1 * l_l_op2) || (s_m_s_op1 * l_l_op2 != s_m_s_op1 * ul_l_op2) || (s_m_s_op1 * ul_l_op2 != s_m_s_op1 * (decimal)f_l_op2) || (s_m_s_op1 * (decimal)f_l_op2 != s_m_s_op1 * (decimal)d_l_op2) || (s_m_s_op1 * (decimal)d_l_op2 != s_m_s_op1 * m_l_op2) || (s_m_s_op1 * m_l_op2 != s_m_s_op1 * i_l_op2) || (s_m_s_op1 * i_l_op2 != 21))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 * s_i_s_op2 != s_m_s_op1 * s_ui_s_op2) || (s_m_s_op1 * s_ui_s_op2 != s_m_s_op1 * s_l_s_op2) || (s_m_s_op1 * s_l_s_op2 != s_m_s_op1 * s_ul_s_op2) || (s_m_s_op1 * s_ul_s_op2 != s_m_s_op1 * (decimal)s_f_s_op2) || (s_m_s_op1 * (decimal)s_f_s_op2 != s_m_s_op1 * (decimal)s_d_s_op2) || (s_m_s_op1 * (decimal)s_d_s_op2 != s_m_s_op1 * s_m_s_op2) || (s_m_s_op1 * s_m_s_op2 != s_m_s_op1 * s_i_s_op2) || (s_m_s_op1 * s_i_s_op2 != 21))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Directed/coverage/oldtests/lclfldrem.cs b/tests/src/JIT/Directed/coverage/oldtests/lclfldrem.cs
new file mode 100644 (file)
index 0000000..d7b9a88
--- /dev/null
@@ -0,0 +1,558 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Testing simple math on local vars and fields - rem
+
+#pragma warning disable 0414
+using System;
+internal class lclfldrem
+{
+    //user-defined class that overloads operator %
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator %(numHolder a, int b)
+        {
+            return a._i_num % b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator %(numHolder a, uint b)
+        {
+            return a._ui_num % b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator %(numHolder a, long b)
+        {
+            return a._l_num % b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator %(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num % b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator %(numHolder a, float b)
+        {
+            return a._f_num % b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator %(numHolder a, double b)
+        {
+            return a._d_num % b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator %(numHolder a, decimal b)
+        {
+            return (int)(a._m_num % b);
+        }
+
+        public static int operator %(numHolder a, numHolder b)
+        {
+            return a._i_num % b._i_num;
+        }
+    }
+
+    private static int s_i_s_op1 = 9;
+    private static uint s_ui_s_op1 = 9;
+    private static long s_l_s_op1 = 9;
+    private static ulong s_ul_s_op1 = 9;
+    private static float s_f_s_op1 = 9;
+    private static double s_d_s_op1 = 9;
+    private static decimal s_m_s_op1 = 9;
+
+    private static int s_i_s_op2 = 5;
+    private static uint s_ui_s_op2 = 5;
+    private static long s_l_s_op2 = 5;
+    private static ulong s_ul_s_op2 = 5;
+    private static float s_f_s_op2 = 5;
+    private static double s_d_s_op2 = 5;
+    private static decimal s_m_s_op2 = 5;
+    private static numHolder s_nHldr_s_op2 = new numHolder(5);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 5;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(9);
+        else
+            return new numHolder(5);
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 9;
+        public uint ui_cl_op1 = 9;
+        public long l_cl_op1 = 9;
+        public ulong ul_cl_op1 = 9;
+        public float f_cl_op1 = 9;
+        public double d_cl_op1 = 9;
+        public decimal m_cl_op1 = 9;
+
+        public int i_cl_op2 = 5;
+        public uint ui_cl_op2 = 5;
+        public long l_cl_op2 = 5;
+        public ulong ul_cl_op2 = 5;
+        public float f_cl_op2 = 5;
+        public double d_cl_op2 = 5;
+        public decimal m_cl_op2 = 5;
+        public numHolder nHldr_cl_op2 = new numHolder(5);
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public uint ui_vt_op1;
+        public long l_vt_op1;
+        public ulong ul_vt_op1;
+        public float f_vt_op1;
+        public double d_vt_op1;
+        public decimal m_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 9;
+        vt1.ui_vt_op1 = 9;
+        vt1.l_vt_op1 = 9;
+        vt1.ul_vt_op1 = 9;
+        vt1.f_vt_op1 = 9;
+        vt1.d_vt_op1 = 9;
+        vt1.m_vt_op1 = 9;
+        vt1.i_vt_op2 = 5;
+        vt1.ui_vt_op2 = 5;
+        vt1.l_vt_op2 = 5;
+        vt1.ul_vt_op2 = 5;
+        vt1.f_vt_op2 = 5;
+        vt1.d_vt_op2 = 5;
+        vt1.m_vt_op2 = 5;
+        vt1.nHldr_vt_op2 = new numHolder(5);
+
+        int[] i_arr1d_op1 = { 0, 9 };
+        int[,] i_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        uint[] ui_arr1d_op1 = { 0, 9 };
+        uint[,] ui_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        long[] l_arr1d_op1 = { 0, 9 };
+        long[,] l_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op1 = { 0, 9 };
+        ulong[,] ul_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        float[] f_arr1d_op1 = { 0, 9 };
+        float[,] f_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        double[] d_arr1d_op1 = { 0, 9 };
+        double[,] d_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+        decimal[] m_arr1d_op1 = { 0, 9 };
+        decimal[,] m_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 5, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 5, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 5, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 5, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 5, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 5, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 5, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(5), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(5) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(5) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((i_l_op1 % i_l_op2 != i_l_op1 % ui_l_op2) || (i_l_op1 % ui_l_op2 != i_l_op1 % l_l_op2) || (i_l_op1 % l_l_op2 != i_l_op1 % (int)ul_l_op2) || (i_l_op1 % (int)ul_l_op2 != i_l_op1 % f_l_op2) || (i_l_op1 % f_l_op2 != i_l_op1 % d_l_op2) || ((decimal)(i_l_op1 % d_l_op2) != i_l_op1 % m_l_op2) || (i_l_op1 % m_l_op2 != i_l_op1 % i_l_op2) || (i_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % s_i_s_op2 != i_l_op1 % s_ui_s_op2) || (i_l_op1 % s_ui_s_op2 != i_l_op1 % s_l_s_op2) || (i_l_op1 % s_l_s_op2 != i_l_op1 % (int)s_ul_s_op2) || (i_l_op1 % (int)s_ul_s_op2 != i_l_op1 % s_f_s_op2) || (i_l_op1 % s_f_s_op2 != i_l_op1 % s_d_s_op2) || ((decimal)(i_l_op1 % s_d_s_op2) != i_l_op1 % s_m_s_op2) || (i_l_op1 % s_m_s_op2 != i_l_op1 % s_i_s_op2) || (i_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_l_op2 != s_i_s_op1 % ui_l_op2) || (s_i_s_op1 % ui_l_op2 != s_i_s_op1 % l_l_op2) || (s_i_s_op1 % l_l_op2 != s_i_s_op1 % (int)ul_l_op2) || (s_i_s_op1 % (int)ul_l_op2 != s_i_s_op1 % f_l_op2) || (s_i_s_op1 % f_l_op2 != s_i_s_op1 % d_l_op2) || ((decimal)(s_i_s_op1 % d_l_op2) != s_i_s_op1 % m_l_op2) || (s_i_s_op1 % m_l_op2 != s_i_s_op1 % i_l_op2) || (s_i_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % s_i_s_op2 != s_i_s_op1 % s_ui_s_op2) || (s_i_s_op1 % s_ui_s_op2 != s_i_s_op1 % s_l_s_op2) || (s_i_s_op1 % s_l_s_op2 != s_i_s_op1 % (int)s_ul_s_op2) || (s_i_s_op1 % (int)s_ul_s_op2 != s_i_s_op1 % s_f_s_op2) || (s_i_s_op1 % s_f_s_op2 != s_i_s_op1 % s_d_s_op2) || ((decimal)(s_i_s_op1 % s_d_s_op2) != s_i_s_op1 % s_m_s_op2) || (s_i_s_op1 % s_m_s_op2 != s_i_s_op1 % s_i_s_op2) || (s_i_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+        }
+
+        {
+            uint ui_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((ui_l_op1 % i_l_op2 != ui_l_op1 % ui_l_op2) || (ui_l_op1 % ui_l_op2 != ui_l_op1 % l_l_op2) || ((ulong)(ui_l_op1 % l_l_op2) != ui_l_op1 % ul_l_op2) || (ui_l_op1 % ul_l_op2 != ui_l_op1 % f_l_op2) || (ui_l_op1 % f_l_op2 != ui_l_op1 % d_l_op2) || ((decimal)(ui_l_op1 % d_l_op2) != ui_l_op1 % m_l_op2) || (ui_l_op1 % m_l_op2 != ui_l_op1 % i_l_op2) || (ui_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % s_i_s_op2 != ui_l_op1 % s_ui_s_op2) || (ui_l_op1 % s_ui_s_op2 != ui_l_op1 % s_l_s_op2) || ((ulong)(ui_l_op1 % s_l_s_op2) != ui_l_op1 % s_ul_s_op2) || (ui_l_op1 % s_ul_s_op2 != ui_l_op1 % s_f_s_op2) || (ui_l_op1 % s_f_s_op2 != ui_l_op1 % s_d_s_op2) || ((decimal)(ui_l_op1 % s_d_s_op2) != ui_l_op1 % s_m_s_op2) || (ui_l_op1 % s_m_s_op2 != ui_l_op1 % s_i_s_op2) || (ui_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % i_l_op2 != s_ui_s_op1 % ui_l_op2) || (s_ui_s_op1 % ui_l_op2 != s_ui_s_op1 % l_l_op2) || ((ulong)(s_ui_s_op1 % l_l_op2) != s_ui_s_op1 % ul_l_op2) || (s_ui_s_op1 % ul_l_op2 != s_ui_s_op1 % f_l_op2) || (s_ui_s_op1 % f_l_op2 != s_ui_s_op1 % d_l_op2) || ((decimal)(s_ui_s_op1 % d_l_op2) != s_ui_s_op1 % m_l_op2) || (s_ui_s_op1 % m_l_op2 != s_ui_s_op1 % i_l_op2) || (s_ui_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % s_i_s_op2 != s_ui_s_op1 % s_ui_s_op2) || (s_ui_s_op1 % s_ui_s_op2 != s_ui_s_op1 % s_l_s_op2) || ((ulong)(s_ui_s_op1 % s_l_s_op2) != s_ui_s_op1 % s_ul_s_op2) || (s_ui_s_op1 % s_ul_s_op2 != s_ui_s_op1 % s_f_s_op2) || (s_ui_s_op1 % s_f_s_op2 != s_ui_s_op1 % s_d_s_op2) || ((decimal)(s_ui_s_op1 % s_d_s_op2) != s_ui_s_op1 % s_m_s_op2) || (s_ui_s_op1 % s_m_s_op2 != s_ui_s_op1 % s_i_s_op2) || (s_ui_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+        }
+
+        {
+            long l_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((l_l_op1 % i_l_op2 != l_l_op1 % ui_l_op2) || (l_l_op1 % ui_l_op2 != l_l_op1 % l_l_op2) || (l_l_op1 % l_l_op2 != l_l_op1 % (long)ul_l_op2) || (l_l_op1 % (long)ul_l_op2 != l_l_op1 % f_l_op2) || (l_l_op1 % f_l_op2 != l_l_op1 % d_l_op2) || ((decimal)(l_l_op1 % d_l_op2) != l_l_op1 % m_l_op2) || (l_l_op1 % m_l_op2 != l_l_op1 % i_l_op2) || (l_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % s_i_s_op2 != l_l_op1 % s_ui_s_op2) || (l_l_op1 % s_ui_s_op2 != l_l_op1 % s_l_s_op2) || (l_l_op1 % s_l_s_op2 != l_l_op1 % (long)s_ul_s_op2) || (l_l_op1 % (long)s_ul_s_op2 != l_l_op1 % s_f_s_op2) || (l_l_op1 % s_f_s_op2 != l_l_op1 % s_d_s_op2) || ((decimal)(l_l_op1 % s_d_s_op2) != l_l_op1 % s_m_s_op2) || (l_l_op1 % s_m_s_op2 != l_l_op1 % s_i_s_op2) || (l_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % i_l_op2 != s_l_s_op1 % ui_l_op2) || (s_l_s_op1 % ui_l_op2 != s_l_s_op1 % l_l_op2) || (s_l_s_op1 % l_l_op2 != s_l_s_op1 % (long)ul_l_op2) || (s_l_s_op1 % (long)ul_l_op2 != s_l_s_op1 % f_l_op2) || (s_l_s_op1 % f_l_op2 != s_l_s_op1 % d_l_op2) || ((decimal)(s_l_s_op1 % d_l_op2) != s_l_s_op1 % m_l_op2) || (s_l_s_op1 % m_l_op2 != s_l_s_op1 % i_l_op2) || (s_l_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % s_i_s_op2 != s_l_s_op1 % s_ui_s_op2) || (s_l_s_op1 % s_ui_s_op2 != s_l_s_op1 % s_l_s_op2) || (s_l_s_op1 % s_l_s_op2 != s_l_s_op1 % (long)s_ul_s_op2) || (s_l_s_op1 % (long)s_ul_s_op2 != s_l_s_op1 % s_f_s_op2) || (s_l_s_op1 % s_f_s_op2 != s_l_s_op1 % s_d_s_op2) || ((decimal)(s_l_s_op1 % s_d_s_op2) != s_l_s_op1 % s_m_s_op2) || (s_l_s_op1 % s_m_s_op2 != s_l_s_op1 % s_i_s_op2) || (s_l_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+        }
+
+        {
+            ulong ul_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((ul_l_op1 % (ulong)i_l_op2 != ul_l_op1 % ui_l_op2) || (ul_l_op1 % ui_l_op2 != ul_l_op1 % (ulong)l_l_op2) || (ul_l_op1 % (ulong)l_l_op2 != ul_l_op1 % ul_l_op2) || (ul_l_op1 % ul_l_op2 != ul_l_op1 % f_l_op2) || (ul_l_op1 % f_l_op2 != ul_l_op1 % d_l_op2) || ((decimal)(ul_l_op1 % d_l_op2) != ul_l_op1 % m_l_op2) || (ul_l_op1 % m_l_op2 != ul_l_op1 % (ulong)i_l_op2) || (ul_l_op1 % (ulong)i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)s_i_s_op2 != ul_l_op1 % s_ui_s_op2) || (ul_l_op1 % s_ui_s_op2 != ul_l_op1 % (ulong)s_l_s_op2) || (ul_l_op1 % (ulong)s_l_s_op2 != ul_l_op1 % s_ul_s_op2) || (ul_l_op1 % s_ul_s_op2 != ul_l_op1 % s_f_s_op2) || (ul_l_op1 % s_f_s_op2 != ul_l_op1 % s_d_s_op2) || ((decimal)(ul_l_op1 % s_d_s_op2) != ul_l_op1 % s_m_s_op2) || (ul_l_op1 % s_m_s_op2 != ul_l_op1 % (ulong)s_i_s_op2) || (ul_l_op1 % (ulong)s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)i_l_op2 != s_ul_s_op1 % ui_l_op2) || (s_ul_s_op1 % ui_l_op2 != s_ul_s_op1 % (ulong)l_l_op2) || (s_ul_s_op1 % (ulong)l_l_op2 != s_ul_s_op1 % ul_l_op2) || (s_ul_s_op1 % ul_l_op2 != s_ul_s_op1 % f_l_op2) || (s_ul_s_op1 % f_l_op2 != s_ul_s_op1 % d_l_op2) || ((decimal)(s_ul_s_op1 % d_l_op2) != s_ul_s_op1 % m_l_op2) || (s_ul_s_op1 % m_l_op2 != s_ul_s_op1 % (ulong)i_l_op2) || (s_ul_s_op1 % (ulong)i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)s_i_s_op2 != s_ul_s_op1 % s_ui_s_op2) || (s_ul_s_op1 % s_ui_s_op2 != s_ul_s_op1 % (ulong)s_l_s_op2) || (s_ul_s_op1 % (ulong)s_l_s_op2 != s_ul_s_op1 % s_ul_s_op2) || (s_ul_s_op1 % s_ul_s_op2 != s_ul_s_op1 % s_f_s_op2) || (s_ul_s_op1 % s_f_s_op2 != s_ul_s_op1 % s_d_s_op2) || ((decimal)(s_ul_s_op1 % s_d_s_op2) != s_ul_s_op1 % s_m_s_op2) || (s_ul_s_op1 % s_m_s_op2 != s_ul_s_op1 % (ulong)s_i_s_op2) || (s_ul_s_op1 % (ulong)s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+        }
+
+        {
+            float f_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((f_l_op1 % i_l_op2 != f_l_op1 % ui_l_op2) || (f_l_op1 % ui_l_op2 != f_l_op1 % l_l_op2) || (f_l_op1 % l_l_op2 != f_l_op1 % ul_l_op2) || (f_l_op1 % ul_l_op2 != f_l_op1 % f_l_op2) || (f_l_op1 % f_l_op2 != f_l_op1 % d_l_op2) || (f_l_op1 % d_l_op2 != f_l_op1 % (float)m_l_op2) || (f_l_op1 % (float)m_l_op2 != f_l_op1 % i_l_op2) || (f_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % s_i_s_op2 != f_l_op1 % s_ui_s_op2) || (f_l_op1 % s_ui_s_op2 != f_l_op1 % s_l_s_op2) || (f_l_op1 % s_l_s_op2 != f_l_op1 % s_ul_s_op2) || (f_l_op1 % s_ul_s_op2 != f_l_op1 % s_f_s_op2) || (f_l_op1 % s_f_s_op2 != f_l_op1 % s_d_s_op2) || (f_l_op1 % s_d_s_op2 != f_l_op1 % (float)s_m_s_op2) || (f_l_op1 % (float)s_m_s_op2 != f_l_op1 % s_i_s_op2) || (f_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % i_l_op2 != s_f_s_op1 % ui_l_op2) || (s_f_s_op1 % ui_l_op2 != s_f_s_op1 % l_l_op2) || (s_f_s_op1 % l_l_op2 != s_f_s_op1 % ul_l_op2) || (s_f_s_op1 % ul_l_op2 != s_f_s_op1 % f_l_op2) || (s_f_s_op1 % f_l_op2 != s_f_s_op1 % d_l_op2) || (s_f_s_op1 % d_l_op2 != s_f_s_op1 % (float)m_l_op2) || (s_f_s_op1 % (float)m_l_op2 != s_f_s_op1 % i_l_op2) || (s_f_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % s_i_s_op2 != s_f_s_op1 % s_ui_s_op2) || (s_f_s_op1 % s_ui_s_op2 != s_f_s_op1 % s_l_s_op2) || (s_f_s_op1 % s_l_s_op2 != s_f_s_op1 % s_ul_s_op2) || (s_f_s_op1 % s_ul_s_op2 != s_f_s_op1 % s_f_s_op2) || (s_f_s_op1 % s_f_s_op2 != s_f_s_op1 % s_d_s_op2) || (s_f_s_op1 % s_d_s_op2 != s_f_s_op1 % (float)s_m_s_op2) || (s_f_s_op1 % (float)s_m_s_op2 != s_f_s_op1 % s_i_s_op2) || (s_f_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+        }
+
+        {
+            double d_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((d_l_op1 % i_l_op2 != d_l_op1 % ui_l_op2) || (d_l_op1 % ui_l_op2 != d_l_op1 % l_l_op2) || (d_l_op1 % l_l_op2 != d_l_op1 % ul_l_op2) || (d_l_op1 % ul_l_op2 != d_l_op1 % f_l_op2) || (d_l_op1 % f_l_op2 != d_l_op1 % d_l_op2) || (d_l_op1 % d_l_op2 != d_l_op1 % (double)m_l_op2) || (d_l_op1 % (double)m_l_op2 != d_l_op1 % i_l_op2) || (d_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % s_i_s_op2 != d_l_op1 % s_ui_s_op2) || (d_l_op1 % s_ui_s_op2 != d_l_op1 % s_l_s_op2) || (d_l_op1 % s_l_s_op2 != d_l_op1 % s_ul_s_op2) || (d_l_op1 % s_ul_s_op2 != d_l_op1 % s_f_s_op2) || (d_l_op1 % s_f_s_op2 != d_l_op1 % s_d_s_op2) || (d_l_op1 % s_d_s_op2 != d_l_op1 % (double)s_m_s_op2) || (d_l_op1 % (double)s_m_s_op2 != d_l_op1 % s_i_s_op2) || (d_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % i_l_op2 != s_d_s_op1 % ui_l_op2) || (s_d_s_op1 % ui_l_op2 != s_d_s_op1 % l_l_op2) || (s_d_s_op1 % l_l_op2 != s_d_s_op1 % ul_l_op2) || (s_d_s_op1 % ul_l_op2 != s_d_s_op1 % f_l_op2) || (s_d_s_op1 % f_l_op2 != s_d_s_op1 % d_l_op2) || (s_d_s_op1 % d_l_op2 != s_d_s_op1 % (double)m_l_op2) || (s_d_s_op1 % (double)m_l_op2 != s_d_s_op1 % i_l_op2) || (s_d_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % s_i_s_op2 != s_d_s_op1 % s_ui_s_op2) || (s_d_s_op1 % s_ui_s_op2 != s_d_s_op1 % s_l_s_op2) || (s_d_s_op1 % s_l_s_op2 != s_d_s_op1 % s_ul_s_op2) || (s_d_s_op1 % s_ul_s_op2 != s_d_s_op1 % s_f_s_op2) || (s_d_s_op1 % s_f_s_op2 != s_d_s_op1 % s_d_s_op2) || (s_d_s_op1 % s_d_s_op2 != s_d_s_op1 % (double)s_m_s_op2) || (s_d_s_op1 % (double)s_m_s_op2 != s_d_s_op1 % s_i_s_op2) || (s_d_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+        }
+
+        {
+            decimal m_l_op1 = 9;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            numHolder nHldr_l_op2 = new numHolder(5);
+            if ((m_l_op1 % i_l_op2 != m_l_op1 % ui_l_op2) || (m_l_op1 % ui_l_op2 != m_l_op1 % l_l_op2) || (m_l_op1 % l_l_op2 != m_l_op1 % ul_l_op2) || (m_l_op1 % ul_l_op2 != m_l_op1 % (decimal)f_l_op2) || (m_l_op1 % (decimal)f_l_op2 != m_l_op1 % (decimal)d_l_op2) || (m_l_op1 % (decimal)d_l_op2 != m_l_op1 % m_l_op2) || (m_l_op1 % m_l_op2 != m_l_op1 % i_l_op2) || (m_l_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % s_i_s_op2 != m_l_op1 % s_ui_s_op2) || (m_l_op1 % s_ui_s_op2 != m_l_op1 % s_l_s_op2) || (m_l_op1 % s_l_s_op2 != m_l_op1 % s_ul_s_op2) || (m_l_op1 % s_ul_s_op2 != m_l_op1 % (decimal)s_f_s_op2) || (m_l_op1 % (decimal)s_f_s_op2 != m_l_op1 % (decimal)s_d_s_op2) || (m_l_op1 % (decimal)s_d_s_op2 != m_l_op1 % s_m_s_op2) || (m_l_op1 % s_m_s_op2 != m_l_op1 % s_i_s_op2) || (m_l_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % i_l_op2 != s_m_s_op1 % ui_l_op2) || (s_m_s_op1 % ui_l_op2 != s_m_s_op1 % l_l_op2) || (s_m_s_op1 % l_l_op2 != s_m_s_op1 % ul_l_op2) || (s_m_s_op1 % ul_l_op2 != s_m_s_op1 % (decimal)f_l_op2) || (s_m_s_op1 % (decimal)f_l_op2 != s_m_s_op1 % (decimal)d_l_op2) || (s_m_s_op1 % (decimal)d_l_op2 != s_m_s_op1 % m_l_op2) || (s_m_s_op1 % m_l_op2 != s_m_s_op1 % i_l_op2) || (s_m_s_op1 % i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % s_i_s_op2 != s_m_s_op1 % s_ui_s_op2) || (s_m_s_op1 % s_ui_s_op2 != s_m_s_op1 % s_l_s_op2) || (s_m_s_op1 % s_l_s_op2 != s_m_s_op1 % s_ul_s_op2) || (s_m_s_op1 % s_ul_s_op2 != s_m_s_op1 % (decimal)s_f_s_op2) || (s_m_s_op1 % (decimal)s_f_s_op2 != s_m_s_op1 % (decimal)s_d_s_op2) || (s_m_s_op1 % (decimal)s_d_s_op2 != s_m_s_op1 % s_m_s_op2) || (s_m_s_op1 % s_m_s_op2 != s_m_s_op1 % s_i_s_op2) || (s_m_s_op1 % s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Directed/coverage/oldtests/lclfldsub.cs b/tests/src/JIT/Directed/coverage/oldtests/lclfldsub.cs
new file mode 100644 (file)
index 0000000..ce8d247
--- /dev/null
@@ -0,0 +1,558 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Testing simple math on local vars and fields - sub
+
+#pragma warning disable 0414
+using System;
+internal class lclfldsub
+{
+    //user-defined class that overloads operator -
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator -(numHolder a, int b)
+        {
+            return a._i_num - b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator -(numHolder a, uint b)
+        {
+            return a._ui_num - b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator -(numHolder a, long b)
+        {
+            return a._l_num - b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator -(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num - b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator -(numHolder a, float b)
+        {
+            return a._f_num - b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator -(numHolder a, double b)
+        {
+            return a._d_num - b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator -(numHolder a, decimal b)
+        {
+            return (int)(a._m_num - b);
+        }
+
+        public static int operator -(numHolder a, numHolder b)
+        {
+            return a._i_num - b._i_num;
+        }
+    }
+
+    private static int s_i_s_op1 = 16;
+    private static uint s_ui_s_op1 = 16;
+    private static long s_l_s_op1 = 16;
+    private static ulong s_ul_s_op1 = 16;
+    private static float s_f_s_op1 = 16;
+    private static double s_d_s_op1 = 16;
+    private static decimal s_m_s_op1 = 16;
+
+    private static int s_i_s_op2 = 15;
+    private static uint s_ui_s_op2 = 15;
+    private static long s_l_s_op2 = 15;
+    private static ulong s_ul_s_op2 = 15;
+    private static float s_f_s_op2 = 15;
+    private static double s_d_s_op2 = 15;
+    private static decimal s_m_s_op2 = 15;
+    private static numHolder s_nHldr_s_op2 = new numHolder(15);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 16;
+        else
+            return 15;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(16);
+        else
+            return new numHolder(15);
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 16;
+        public uint ui_cl_op1 = 16;
+        public long l_cl_op1 = 16;
+        public ulong ul_cl_op1 = 16;
+        public float f_cl_op1 = 16;
+        public double d_cl_op1 = 16;
+        public decimal m_cl_op1 = 16;
+
+        public int i_cl_op2 = 15;
+        public uint ui_cl_op2 = 15;
+        public long l_cl_op2 = 15;
+        public ulong ul_cl_op2 = 15;
+        public float f_cl_op2 = 15;
+        public double d_cl_op2 = 15;
+        public decimal m_cl_op2 = 15;
+        public numHolder nHldr_cl_op2 = new numHolder(15);
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public uint ui_vt_op1;
+        public long l_vt_op1;
+        public ulong ul_vt_op1;
+        public float f_vt_op1;
+        public double d_vt_op1;
+        public decimal m_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 16;
+        vt1.ui_vt_op1 = 16;
+        vt1.l_vt_op1 = 16;
+        vt1.ul_vt_op1 = 16;
+        vt1.f_vt_op1 = 16;
+        vt1.d_vt_op1 = 16;
+        vt1.m_vt_op1 = 16;
+        vt1.i_vt_op2 = 15;
+        vt1.ui_vt_op2 = 15;
+        vt1.l_vt_op2 = 15;
+        vt1.ul_vt_op2 = 15;
+        vt1.f_vt_op2 = 15;
+        vt1.d_vt_op2 = 15;
+        vt1.m_vt_op2 = 15;
+        vt1.nHldr_vt_op2 = new numHolder(15);
+
+        int[] i_arr1d_op1 = { 0, 16 };
+        int[,] i_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        uint[] ui_arr1d_op1 = { 0, 16 };
+        uint[,] ui_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        long[] l_arr1d_op1 = { 0, 16 };
+        long[,] l_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op1 = { 0, 16 };
+        ulong[,] ul_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        float[] f_arr1d_op1 = { 0, 16 };
+        float[,] f_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        double[] d_arr1d_op1 = { 0, 16 };
+        double[,] d_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+        decimal[] m_arr1d_op1 = { 0, 16 };
+        decimal[,] m_arr2d_op1 = { { 0, 16 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 16 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 15, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 15, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 15, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 15, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 15, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 15, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 15, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 15 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 15 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(15), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(15) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(15) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((i_l_op1 - i_l_op2 != i_l_op1 - ui_l_op2) || (i_l_op1 - ui_l_op2 != i_l_op1 - l_l_op2) || (i_l_op1 - l_l_op2 != i_l_op1 - (int)ul_l_op2) || (i_l_op1 - (int)ul_l_op2 != i_l_op1 - f_l_op2) || (i_l_op1 - f_l_op2 != i_l_op1 - d_l_op2) || ((decimal)(i_l_op1 - d_l_op2) != i_l_op1 - m_l_op2) || (i_l_op1 - m_l_op2 != i_l_op1 - i_l_op2) || (i_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 - s_i_s_op2 != i_l_op1 - s_ui_s_op2) || (i_l_op1 - s_ui_s_op2 != i_l_op1 - s_l_s_op2) || (i_l_op1 - s_l_s_op2 != i_l_op1 - (int)s_ul_s_op2) || (i_l_op1 - (int)s_ul_s_op2 != i_l_op1 - s_f_s_op2) || (i_l_op1 - s_f_s_op2 != i_l_op1 - s_d_s_op2) || ((decimal)(i_l_op1 - s_d_s_op2) != i_l_op1 - s_m_s_op2) || (i_l_op1 - s_m_s_op2 != i_l_op1 - s_i_s_op2) || (i_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 - i_l_op2 != s_i_s_op1 - ui_l_op2) || (s_i_s_op1 - ui_l_op2 != s_i_s_op1 - l_l_op2) || (s_i_s_op1 - l_l_op2 != s_i_s_op1 - (int)ul_l_op2) || (s_i_s_op1 - (int)ul_l_op2 != s_i_s_op1 - f_l_op2) || (s_i_s_op1 - f_l_op2 != s_i_s_op1 - d_l_op2) || ((decimal)(s_i_s_op1 - d_l_op2) != s_i_s_op1 - m_l_op2) || (s_i_s_op1 - m_l_op2 != s_i_s_op1 - i_l_op2) || (s_i_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 - s_i_s_op2 != s_i_s_op1 - s_ui_s_op2) || (s_i_s_op1 - s_ui_s_op2 != s_i_s_op1 - s_l_s_op2) || (s_i_s_op1 - s_l_s_op2 != s_i_s_op1 - (int)s_ul_s_op2) || (s_i_s_op1 - (int)s_ul_s_op2 != s_i_s_op1 - s_f_s_op2) || (s_i_s_op1 - s_f_s_op2 != s_i_s_op1 - s_d_s_op2) || ((decimal)(s_i_s_op1 - s_d_s_op2) != s_i_s_op1 - s_m_s_op2) || (s_i_s_op1 - s_m_s_op2 != s_i_s_op1 - s_i_s_op2) || (s_i_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+        }
+
+        {
+            uint ui_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((ui_l_op1 - i_l_op2 != ui_l_op1 - ui_l_op2) || (ui_l_op1 - ui_l_op2 != ui_l_op1 - l_l_op2) || ((ulong)(ui_l_op1 - l_l_op2) != ui_l_op1 - ul_l_op2) || (ui_l_op1 - ul_l_op2 != ui_l_op1 - f_l_op2) || (ui_l_op1 - f_l_op2 != ui_l_op1 - d_l_op2) || ((decimal)(ui_l_op1 - d_l_op2) != ui_l_op1 - m_l_op2) || (ui_l_op1 - m_l_op2 != ui_l_op1 - i_l_op2) || (ui_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 - s_i_s_op2 != ui_l_op1 - s_ui_s_op2) || (ui_l_op1 - s_ui_s_op2 != ui_l_op1 - s_l_s_op2) || ((ulong)(ui_l_op1 - s_l_s_op2) != ui_l_op1 - s_ul_s_op2) || (ui_l_op1 - s_ul_s_op2 != ui_l_op1 - s_f_s_op2) || (ui_l_op1 - s_f_s_op2 != ui_l_op1 - s_d_s_op2) || ((decimal)(ui_l_op1 - s_d_s_op2) != ui_l_op1 - s_m_s_op2) || (ui_l_op1 - s_m_s_op2 != ui_l_op1 - s_i_s_op2) || (ui_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 - i_l_op2 != s_ui_s_op1 - ui_l_op2) || (s_ui_s_op1 - ui_l_op2 != s_ui_s_op1 - l_l_op2) || ((ulong)(s_ui_s_op1 - l_l_op2) != s_ui_s_op1 - ul_l_op2) || (s_ui_s_op1 - ul_l_op2 != s_ui_s_op1 - f_l_op2) || (s_ui_s_op1 - f_l_op2 != s_ui_s_op1 - d_l_op2) || ((decimal)(s_ui_s_op1 - d_l_op2) != s_ui_s_op1 - m_l_op2) || (s_ui_s_op1 - m_l_op2 != s_ui_s_op1 - i_l_op2) || (s_ui_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 - s_i_s_op2 != s_ui_s_op1 - s_ui_s_op2) || (s_ui_s_op1 - s_ui_s_op2 != s_ui_s_op1 - s_l_s_op2) || ((ulong)(s_ui_s_op1 - s_l_s_op2) != s_ui_s_op1 - s_ul_s_op2) || (s_ui_s_op1 - s_ul_s_op2 != s_ui_s_op1 - s_f_s_op2) || (s_ui_s_op1 - s_f_s_op2 != s_ui_s_op1 - s_d_s_op2) || ((decimal)(s_ui_s_op1 - s_d_s_op2) != s_ui_s_op1 - s_m_s_op2) || (s_ui_s_op1 - s_m_s_op2 != s_ui_s_op1 - s_i_s_op2) || (s_ui_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+        }
+
+        {
+            long l_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((l_l_op1 - i_l_op2 != l_l_op1 - ui_l_op2) || (l_l_op1 - ui_l_op2 != l_l_op1 - l_l_op2) || (l_l_op1 - l_l_op2 != l_l_op1 - (long)ul_l_op2) || (l_l_op1 - (long)ul_l_op2 != l_l_op1 - f_l_op2) || (l_l_op1 - f_l_op2 != l_l_op1 - d_l_op2) || ((decimal)(l_l_op1 - d_l_op2) != l_l_op1 - m_l_op2) || (l_l_op1 - m_l_op2 != l_l_op1 - i_l_op2) || (l_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((l_l_op1 - s_i_s_op2 != l_l_op1 - s_ui_s_op2) || (l_l_op1 - s_ui_s_op2 != l_l_op1 - s_l_s_op2) || (l_l_op1 - s_l_s_op2 != l_l_op1 - (long)s_ul_s_op2) || (l_l_op1 - (long)s_ul_s_op2 != l_l_op1 - s_f_s_op2) || (l_l_op1 - s_f_s_op2 != l_l_op1 - s_d_s_op2) || ((decimal)(l_l_op1 - s_d_s_op2) != l_l_op1 - s_m_s_op2) || (l_l_op1 - s_m_s_op2 != l_l_op1 - s_i_s_op2) || (l_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 - i_l_op2 != s_l_s_op1 - ui_l_op2) || (s_l_s_op1 - ui_l_op2 != s_l_s_op1 - l_l_op2) || (s_l_s_op1 - l_l_op2 != s_l_s_op1 - (long)ul_l_op2) || (s_l_s_op1 - (long)ul_l_op2 != s_l_s_op1 - f_l_op2) || (s_l_s_op1 - f_l_op2 != s_l_s_op1 - d_l_op2) || ((decimal)(s_l_s_op1 - d_l_op2) != s_l_s_op1 - m_l_op2) || (s_l_s_op1 - m_l_op2 != s_l_s_op1 - i_l_op2) || (s_l_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 - s_i_s_op2 != s_l_s_op1 - s_ui_s_op2) || (s_l_s_op1 - s_ui_s_op2 != s_l_s_op1 - s_l_s_op2) || (s_l_s_op1 - s_l_s_op2 != s_l_s_op1 - (long)s_ul_s_op2) || (s_l_s_op1 - (long)s_ul_s_op2 != s_l_s_op1 - s_f_s_op2) || (s_l_s_op1 - s_f_s_op2 != s_l_s_op1 - s_d_s_op2) || ((decimal)(s_l_s_op1 - s_d_s_op2) != s_l_s_op1 - s_m_s_op2) || (s_l_s_op1 - s_m_s_op2 != s_l_s_op1 - s_i_s_op2) || (s_l_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+        }
+
+        {
+            ulong ul_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((ul_l_op1 - (ulong)i_l_op2 != ul_l_op1 - ui_l_op2) || (ul_l_op1 - ui_l_op2 != ul_l_op1 - (ulong)l_l_op2) || (ul_l_op1 - (ulong)l_l_op2 != ul_l_op1 - ul_l_op2) || (ul_l_op1 - ul_l_op2 != ul_l_op1 - f_l_op2) || (ul_l_op1 - f_l_op2 != ul_l_op1 - d_l_op2) || ((decimal)(ul_l_op1 - d_l_op2) != ul_l_op1 - m_l_op2) || (ul_l_op1 - m_l_op2 != ul_l_op1 - (ulong)i_l_op2) || (ul_l_op1 - (ulong)i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 - (ulong)s_i_s_op2 != ul_l_op1 - s_ui_s_op2) || (ul_l_op1 - s_ui_s_op2 != ul_l_op1 - (ulong)s_l_s_op2) || (ul_l_op1 - (ulong)s_l_s_op2 != ul_l_op1 - s_ul_s_op2) || (ul_l_op1 - s_ul_s_op2 != ul_l_op1 - s_f_s_op2) || (ul_l_op1 - s_f_s_op2 != ul_l_op1 - s_d_s_op2) || ((decimal)(ul_l_op1 - s_d_s_op2) != ul_l_op1 - s_m_s_op2) || (ul_l_op1 - s_m_s_op2 != ul_l_op1 - (ulong)s_i_s_op2) || (ul_l_op1 - (ulong)s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 - (ulong)i_l_op2 != s_ul_s_op1 - ui_l_op2) || (s_ul_s_op1 - ui_l_op2 != s_ul_s_op1 - (ulong)l_l_op2) || (s_ul_s_op1 - (ulong)l_l_op2 != s_ul_s_op1 - ul_l_op2) || (s_ul_s_op1 - ul_l_op2 != s_ul_s_op1 - f_l_op2) || (s_ul_s_op1 - f_l_op2 != s_ul_s_op1 - d_l_op2) || ((decimal)(s_ul_s_op1 - d_l_op2) != s_ul_s_op1 - m_l_op2) || (s_ul_s_op1 - m_l_op2 != s_ul_s_op1 - (ulong)i_l_op2) || (s_ul_s_op1 - (ulong)i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 - (ulong)s_i_s_op2 != s_ul_s_op1 - s_ui_s_op2) || (s_ul_s_op1 - s_ui_s_op2 != s_ul_s_op1 - (ulong)s_l_s_op2) || (s_ul_s_op1 - (ulong)s_l_s_op2 != s_ul_s_op1 - s_ul_s_op2) || (s_ul_s_op1 - s_ul_s_op2 != s_ul_s_op1 - s_f_s_op2) || (s_ul_s_op1 - s_f_s_op2 != s_ul_s_op1 - s_d_s_op2) || ((decimal)(s_ul_s_op1 - s_d_s_op2) != s_ul_s_op1 - s_m_s_op2) || (s_ul_s_op1 - s_m_s_op2 != s_ul_s_op1 - (ulong)s_i_s_op2) || (s_ul_s_op1 - (ulong)s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+        }
+
+        {
+            float f_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((f_l_op1 - i_l_op2 != f_l_op1 - ui_l_op2) || (f_l_op1 - ui_l_op2 != f_l_op1 - l_l_op2) || (f_l_op1 - l_l_op2 != f_l_op1 - ul_l_op2) || (f_l_op1 - ul_l_op2 != f_l_op1 - f_l_op2) || (f_l_op1 - f_l_op2 != f_l_op1 - d_l_op2) || (f_l_op1 - d_l_op2 != f_l_op1 - (float)m_l_op2) || (f_l_op1 - (float)m_l_op2 != f_l_op1 - i_l_op2) || (f_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_l_op1 - s_i_s_op2 != f_l_op1 - s_ui_s_op2) || (f_l_op1 - s_ui_s_op2 != f_l_op1 - s_l_s_op2) || (f_l_op1 - s_l_s_op2 != f_l_op1 - s_ul_s_op2) || (f_l_op1 - s_ul_s_op2 != f_l_op1 - s_f_s_op2) || (f_l_op1 - s_f_s_op2 != f_l_op1 - s_d_s_op2) || (f_l_op1 - s_d_s_op2 != f_l_op1 - (float)s_m_s_op2) || (f_l_op1 - (float)s_m_s_op2 != f_l_op1 - s_i_s_op2) || (f_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 - i_l_op2 != s_f_s_op1 - ui_l_op2) || (s_f_s_op1 - ui_l_op2 != s_f_s_op1 - l_l_op2) || (s_f_s_op1 - l_l_op2 != s_f_s_op1 - ul_l_op2) || (s_f_s_op1 - ul_l_op2 != s_f_s_op1 - f_l_op2) || (s_f_s_op1 - f_l_op2 != s_f_s_op1 - d_l_op2) || (s_f_s_op1 - d_l_op2 != s_f_s_op1 - (float)m_l_op2) || (s_f_s_op1 - (float)m_l_op2 != s_f_s_op1 - i_l_op2) || (s_f_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 - s_i_s_op2 != s_f_s_op1 - s_ui_s_op2) || (s_f_s_op1 - s_ui_s_op2 != s_f_s_op1 - s_l_s_op2) || (s_f_s_op1 - s_l_s_op2 != s_f_s_op1 - s_ul_s_op2) || (s_f_s_op1 - s_ul_s_op2 != s_f_s_op1 - s_f_s_op2) || (s_f_s_op1 - s_f_s_op2 != s_f_s_op1 - s_d_s_op2) || (s_f_s_op1 - s_d_s_op2 != s_f_s_op1 - (float)s_m_s_op2) || (s_f_s_op1 - (float)s_m_s_op2 != s_f_s_op1 - s_i_s_op2) || (s_f_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+        }
+
+        {
+            double d_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((d_l_op1 - i_l_op2 != d_l_op1 - ui_l_op2) || (d_l_op1 - ui_l_op2 != d_l_op1 - l_l_op2) || (d_l_op1 - l_l_op2 != d_l_op1 - ul_l_op2) || (d_l_op1 - ul_l_op2 != d_l_op1 - f_l_op2) || (d_l_op1 - f_l_op2 != d_l_op1 - d_l_op2) || (d_l_op1 - d_l_op2 != d_l_op1 - (double)m_l_op2) || (d_l_op1 - (double)m_l_op2 != d_l_op1 - i_l_op2) || (d_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_l_op1 - s_i_s_op2 != d_l_op1 - s_ui_s_op2) || (d_l_op1 - s_ui_s_op2 != d_l_op1 - s_l_s_op2) || (d_l_op1 - s_l_s_op2 != d_l_op1 - s_ul_s_op2) || (d_l_op1 - s_ul_s_op2 != d_l_op1 - s_f_s_op2) || (d_l_op1 - s_f_s_op2 != d_l_op1 - s_d_s_op2) || (d_l_op1 - s_d_s_op2 != d_l_op1 - (double)s_m_s_op2) || (d_l_op1 - (double)s_m_s_op2 != d_l_op1 - s_i_s_op2) || (d_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 - i_l_op2 != s_d_s_op1 - ui_l_op2) || (s_d_s_op1 - ui_l_op2 != s_d_s_op1 - l_l_op2) || (s_d_s_op1 - l_l_op2 != s_d_s_op1 - ul_l_op2) || (s_d_s_op1 - ul_l_op2 != s_d_s_op1 - f_l_op2) || (s_d_s_op1 - f_l_op2 != s_d_s_op1 - d_l_op2) || (s_d_s_op1 - d_l_op2 != s_d_s_op1 - (double)m_l_op2) || (s_d_s_op1 - (double)m_l_op2 != s_d_s_op1 - i_l_op2) || (s_d_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 - s_i_s_op2 != s_d_s_op1 - s_ui_s_op2) || (s_d_s_op1 - s_ui_s_op2 != s_d_s_op1 - s_l_s_op2) || (s_d_s_op1 - s_l_s_op2 != s_d_s_op1 - s_ul_s_op2) || (s_d_s_op1 - s_ul_s_op2 != s_d_s_op1 - s_f_s_op2) || (s_d_s_op1 - s_f_s_op2 != s_d_s_op1 - s_d_s_op2) || (s_d_s_op1 - s_d_s_op2 != s_d_s_op1 - (double)s_m_s_op2) || (s_d_s_op1 - (double)s_m_s_op2 != s_d_s_op1 - s_i_s_op2) || (s_d_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+        }
+
+        {
+            decimal m_l_op1 = 16;
+            int i_l_op2 = 15;
+            uint ui_l_op2 = 15;
+            long l_l_op2 = 15;
+            ulong ul_l_op2 = 15;
+            float f_l_op2 = 15;
+            double d_l_op2 = 15;
+            decimal m_l_op2 = 15;
+            numHolder nHldr_l_op2 = new numHolder(15);
+            if ((m_l_op1 - i_l_op2 != m_l_op1 - ui_l_op2) || (m_l_op1 - ui_l_op2 != m_l_op1 - l_l_op2) || (m_l_op1 - l_l_op2 != m_l_op1 - ul_l_op2) || (m_l_op1 - ul_l_op2 != m_l_op1 - (decimal)f_l_op2) || (m_l_op1 - (decimal)f_l_op2 != m_l_op1 - (decimal)d_l_op2) || (m_l_op1 - (decimal)d_l_op2 != m_l_op1 - m_l_op2) || (m_l_op1 - m_l_op2 != m_l_op1 - i_l_op2) || (m_l_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((m_l_op1 - s_i_s_op2 != m_l_op1 - s_ui_s_op2) || (m_l_op1 - s_ui_s_op2 != m_l_op1 - s_l_s_op2) || (m_l_op1 - s_l_s_op2 != m_l_op1 - s_ul_s_op2) || (m_l_op1 - s_ul_s_op2 != m_l_op1 - (decimal)s_f_s_op2) || (m_l_op1 - (decimal)s_f_s_op2 != m_l_op1 - (decimal)s_d_s_op2) || (m_l_op1 - (decimal)s_d_s_op2 != m_l_op1 - s_m_s_op2) || (m_l_op1 - s_m_s_op2 != m_l_op1 - s_i_s_op2) || (m_l_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 - i_l_op2 != s_m_s_op1 - ui_l_op2) || (s_m_s_op1 - ui_l_op2 != s_m_s_op1 - l_l_op2) || (s_m_s_op1 - l_l_op2 != s_m_s_op1 - ul_l_op2) || (s_m_s_op1 - ul_l_op2 != s_m_s_op1 - (decimal)f_l_op2) || (s_m_s_op1 - (decimal)f_l_op2 != s_m_s_op1 - (decimal)d_l_op2) || (s_m_s_op1 - (decimal)d_l_op2 != s_m_s_op1 - m_l_op2) || (s_m_s_op1 - m_l_op2 != s_m_s_op1 - i_l_op2) || (s_m_s_op1 - i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 - s_i_s_op2 != s_m_s_op1 - s_ui_s_op2) || (s_m_s_op1 - s_ui_s_op2 != s_m_s_op1 - s_l_s_op2) || (s_m_s_op1 - s_l_s_op2 != s_m_s_op1 - s_ul_s_op2) || (s_m_s_op1 - s_ul_s_op2 != s_m_s_op1 - (decimal)s_f_s_op2) || (s_m_s_op1 - (decimal)s_f_s_op2 != s_m_s_op1 - (decimal)s_d_s_op2) || (s_m_s_op1 - (decimal)s_d_s_op2 != s_m_s_op1 - s_m_s_op2) || (s_m_s_op1 - s_m_s_op2 != s_m_s_op1 - s_i_s_op2) || (s_m_s_op1 - s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
index 33b2928..6f3522c 100644 (file)
@@ -16,4 +16,4 @@
     </PropertyGroup>
     <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
   </Target>
-</Project>
+</Project>
\ No newline at end of file
index 06d3d11..37e10b9 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <packages>
     <package id="System.Console" version="4.0.0-beta-22405" />
     <package id="System.Runtime" version="4.0.20-beta-22405" />
     <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
-</packages>
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/app.config b/tests/src/JIT/Methodical/Arrays/lcs/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/cs_template.proj b/tests/src/JIT/Methodical/Arrays/lcs/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcs.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcs.cs
new file mode 100644 (file)
index 0000000..942a78f
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(int[,,,] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = b[ind[0], ind[1], ind[2], ind[3]];
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(int[,,,] c, int[,,,] b, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0], ind[1], ind[2], ind[3]] =
+                                    c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] + 1;
+                                b[ind[0], ind[1], ind[2], ind[3]] = RANK;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (c[ind[0], ind[1], ind[2], ind[3]] > M)
+                                {
+                                    R = i;
+                                    M = c[ind[0], ind[1], ind[2], ind[3]];
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            c[ind[0], ind[1], ind[2], ind[3]] = M;
+                            b[ind[0], ind[1], ind[2], ind[3]] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[,,,] c = new int[len[0], len[1], len[2], len[3]];
+            int[,,,] b = new int[len[0], len[1], len[2], len[3]];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcs.csproj b/tests/src/JIT/Methodical/Arrays/lcs/lcs.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcs2.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcs2.cs
new file mode 100644 (file)
index 0000000..c3fc10e
--- /dev/null
@@ -0,0 +1,138 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(int[][][][] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = b[ind[0]][ind[1]][ind[2]][ind[3]];
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(ref int[][][][] c, ref int[][][][] b, ref char[][] seq, ref int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0]][ind[1]][ind[2]][ind[3]] =
+                                    c[ind[0] - 1][ind[1] - 1][ind[2] - 1][ind[3] - 1] + 1;
+                                b[ind[0]][ind[1]][ind[2]][ind[3]] = RANK;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (c[ind[0]][ind[1]][ind[2]][ind[3]] > M)
+                                {
+                                    R = i;
+                                    M = c[ind[0]][ind[1]][ind[2]][ind[3]];
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            c[ind[0]][ind[1]][ind[2]][ind[3]] = M;
+                            b[ind[0]][ind[1]][ind[2]][ind[3]] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[][][][] c = new int[len[0]][][][];
+            int[][][][] b = new int[len[0]][][][];
+            for (int i = 0; i < len[0]; i++)
+            {
+                c[i] = new int[len[1]][][];
+                b[i] = new int[len[1]][][];
+                for (int j = 0; j < len[1]; j++)
+                {
+                    c[i][j] = new int[len[2]][];
+                    b[i][j] = new int[len[2]][];
+                    for (int k = 0; k < len[2]; k++)
+                    {
+                        c[i][j][k] = new int[len[3]];
+                        b[i][j][k] = new int[len[3]];
+                    }
+                }
+            }
+
+            findLCS(ref c, ref b, ref seq, ref len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsbas.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsbas.cs
new file mode 100644 (file)
index 0000000..b11986e
--- /dev/null
@@ -0,0 +1,147 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(int[,,,] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = b[ind[0], ind[1], ind[2], ind[3]];
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static int get_c(int[,,,] c, params int[] ind)
+        {
+            try
+            {
+                return c[ind[0], ind[1], ind[2], ind[3]];
+            }
+            catch (IndexOutOfRangeException)
+            {
+                return 0;
+            }
+        }
+
+        private static int get_cm1(int[,,,] c, int[] ind)
+        {
+            try
+            {
+                return c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1];
+            }
+            catch (IndexOutOfRangeException)
+            {
+                return 0;
+            }
+        }
+
+        private static void findLCS(int[,,,] c, int[,,,] b, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0], ind[1], ind[2], ind[3]] = get_cm1(c, ind) + 1;
+                                b[ind[0], ind[1], ind[2], ind[3]] = RANK;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                int L = get_c(c, ind);
+                                if (L > M)
+                                {
+                                    R = i;
+                                    M = L;
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            c[ind[0], ind[1], ind[2], ind[3]] = M;
+                            b[ind[0], ind[1], ind[2], ind[3]] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[,,,] c = new int[len[0], len[1], len[2], len[3]];
+            int[,,,] b = new int[len[0], len[1], len[2], len[3]];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsbox.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsbox.cs
new file mode 100644 (file)
index 0000000..7232a24
--- /dev/null
@@ -0,0 +1,124 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(int[,,,] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = (int)b.GetValue(ind);
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(int[,,,] c, int[,,,] b, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c.SetValue(c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] + 1, ind);
+                                b.SetValue(RANK, ind);
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                int L = (int)c.GetValue(ind);
+                                if (L > M)
+                                {
+                                    R = i;
+                                    M = L;
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            c.SetValue(M, ind);
+                            b.SetValue(R, ind);
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "abbdccd",
+                "abcbdcd",
+                "abbcdcd",
+                "bdabccd"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[,,,] c = new int[len[0], len[1], len[2], len[3]];
+            int[,,,] b = new int[len[0], len[1], len[2], len[3]];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            String lcs = buildLCS(b, seq[0], len);
+            if ("abccd" == lcs)
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsmax.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsmax.cs
new file mode 100644 (file)
index 0000000..d055e0d
--- /dev/null
@@ -0,0 +1,132 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 8;
+
+        private static String buildLCS(int[,,,,,,,] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = b[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]];
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(int[,,,,,,,] c, int[,,,,,,,] b, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (int i = 0; i < RANK; i++)
+                ind[i] = 1;
+
+            int R = 0;
+            while (R < RANK)
+            {
+                bool eqFlag = true;
+                for (int i = 1; i < RANK; i++)
+                {
+                    if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                    {
+                        eqFlag = false;
+                        break;
+                    }
+                }
+
+                if (eqFlag)
+                {
+                    c[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]] =
+                        c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1,
+                            ind[4] - 1, ind[5] - 1, ind[6] - 1, ind[7] - 1] + 1;
+                    b[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]] = RANK;
+                }
+                else
+                {
+                    R = -1;
+                    int M = -1;
+                    for (int i = 0; i < RANK; i++)
+                    {
+                        ind[i]--;
+                        if (c[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]] > M)
+                        {
+                            R = i;
+                            M = c[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]];
+                        }
+                        ind[i]++;
+                    }
+                    if (R < 0 || M < 0)
+                        throw new Exception();
+
+                    c[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]] = M;
+                    b[ind[0], ind[1], ind[2], ind[3], ind[4], ind[5], ind[6], ind[7]] = R;
+                }
+
+                R = 0;
+                while (R < RANK)
+                {
+                    ind[R]++;
+                    if (ind[R] < len[R]) break;
+                    ind[R++] = 1;
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 8 strings\n\n");
+            String[] str = new String[RANK] {
+                "abdc",
+                "badc",
+                "bdacw",
+                "bdca",
+                "bcfdc",
+                "bddsc",
+                "bdccca",
+                "bbdc"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[,,,,,,,] c = new int[len[0], len[1], len[2], len[3], len[4], len[5], len[6], len[7]];
+            int[,,,,,,,] b = new int[len[0], len[1], len[2], len[3], len[4], len[5], len[6], len[7]];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("bdc" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsmixed.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsmixed.cs
new file mode 100644 (file)
index 0000000..a7e61ac
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 8;
+
+        private static String buildLCS(int[,][,][,][,] b, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = b[ind[0], ind[1]][ind[2], ind[3]][ind[4], ind[5]][ind[6], ind[7]];
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(int[,,,][,,,] c, int[,][,][,][,] b, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (int i = 0; i < RANK; i++)
+                ind[i] = 1;
+
+            int R = 0;
+            while (R < RANK)
+            {
+                bool eqFlag = true;
+                for (int i = 1; i < RANK; i++)
+                {
+                    if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                    {
+                        eqFlag = false;
+                        break;
+                    }
+                }
+
+                if (eqFlag)
+                {
+                    c[ind[0], ind[1], ind[2], ind[3]][ind[4], ind[5], ind[6], ind[7]] =
+                        c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1]
+                            [ind[4] - 1, ind[5] - 1, ind[6] - 1, ind[7] - 1] + 1;
+                    b[ind[0], ind[1]][ind[2], ind[3]][ind[4], ind[5]][ind[6], ind[7]] = RANK;
+                }
+                else
+                {
+                    R = -1;
+                    int M = -1;
+                    for (int i = 0; i < RANK; i++)
+                    {
+                        ind[i]--;
+                        if (c[ind[0], ind[1], ind[2], ind[3]][ind[4], ind[5], ind[6], ind[7]] > M)
+                        {
+                            R = i;
+                            M = c[ind[0], ind[1], ind[2], ind[3]][ind[4], ind[5], ind[6], ind[7]];
+                        }
+                        ind[i]++;
+                    }
+                    if (R < 0 || M < 0)
+                        throw new Exception();
+
+                    c[ind[0], ind[1], ind[2], ind[3]][ind[4], ind[5], ind[6], ind[7]] = M;
+                    b[ind[0], ind[1]][ind[2], ind[3]][ind[4], ind[5]][ind[6], ind[7]] = R;
+                }
+
+                R = 0;
+                while (R < RANK)
+                {
+                    ind[R]++;
+                    if (ind[R] < len[R]) break;
+                    ind[R++] = 1;
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 8 strings\n\n");
+            String[] str = {
+                "abdc",
+                "badc",
+                "bdacw",
+                "bdca",
+                "bcfdc",
+                "bddsc",
+                "bdccca",
+                "bbdc"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            // allocate weird matrices
+            int[,,,][,,,] c = new int[len[0], len[1], len[2], len[3]][,,,];
+            int[,][,][,][,] b = new int[len[0], len[1]][,][,][,];
+            int[] ind = new int[RANK];
+            for (ind[0] = 0; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 0; ind[1] < len[1]; ind[1]++)
+                {
+                    b[ind[0], ind[1]] = new int[len[2], len[3]][,][,];
+                    for (ind[2] = 0; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 0; ind[3] < len[3]; ind[3]++)
+                        {
+                            b[ind[0], ind[1]][ind[2], ind[3]] = new int[len[4], len[5]][,];
+                            c[ind[0], ind[1], ind[2], ind[3]] = new int[len[4], len[5], len[6], len[7]];
+                            for (ind[4] = 0; ind[4] < len[4]; ind[4]++)
+                            {
+                                for (ind[5] = 0; ind[5] < len[5]; ind[5]++)
+                                    b[ind[0], ind[1]][ind[2], ind[3]][ind[4], ind[5]] = new int[len[6], len[7]];
+                            }
+                        }
+                    }
+                }
+            }
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("bdc" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsval.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsval.cs
new file mode 100644 (file)
index 0000000..5d65f77
--- /dev/null
@@ -0,0 +1,127 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Data
+    {
+        public int b, c;
+    };
+
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(Data[,,,] mtx, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = mtx[ind[0], ind[1], ind[2], ind[3]].b;
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(mtx, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(mtx, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(Data[,,,] mtx, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                mtx[ind[0], ind[1], ind[2], ind[3]].c =
+                                    mtx[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1].c + 1;
+                                mtx[ind[0], ind[1], ind[2], ind[3]].b = RANK;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (mtx[ind[0], ind[1], ind[2], ind[3]].c > M)
+                                {
+                                    R = i;
+                                    M = mtx[ind[0], ind[1], ind[2], ind[3]].c;
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            mtx[ind[0], ind[1], ind[2], ind[3]].c = M;
+                            mtx[ind[0], ind[1], ind[2], ind[3]].b = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            Data[,,,] mtx = new Data[len[0], len[1], len[2], len[3]];
+
+            findLCS(mtx, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(mtx, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/lcsvalbox.cs b/tests/src/JIT/Methodical/Arrays/lcs/lcsvalbox.cs
new file mode 100644 (file)
index 0000000..56f136d
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Data
+    {
+        public int b, c;
+    };
+
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(object[,,,] mtx, char[] X, int[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            int L = ((Data)mtx[ind[0], ind[1], ind[2], ind[3]]).b;
+            if (L == RANK)
+            {
+                for (int i = 0; i < RANK; i++)
+                    ind[i]--;
+                int idx = ind[0];
+                return buildLCS(mtx, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(mtx, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(object[,,,] mtx, char[][] seq, int[] len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                Data d;
+                                if (mtx[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] == null)
+                                    d.c = 1;
+                                else
+                                    d.c = ((Data)mtx[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1]).c + 1;
+                                d.b = RANK;
+                                mtx[ind[0], ind[1], ind[2], ind[3]] = d;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                int cc;
+                                try
+                                {
+                                    if (mtx[ind[0], ind[1], ind[2], ind[3]] == null)
+                                        cc = 0;
+                                    else
+                                        cc = ((Data)mtx[ind[0], ind[1], ind[2], ind[3]]).c;
+                                }
+                                catch (NullReferenceException)
+                                {
+                                    cc = 0;
+                                }
+                                if (cc > M)
+                                {
+                                    R = i;
+                                    M = cc;
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            Data d1;
+                            d1.c = M;
+                            d1.b = R;
+                            mtx[ind[0], ind[1], ind[2], ind[3]] = d1;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            object[,,,] mtx = new object[len[0], len[1], len[2], len[3]];
+
+            findLCS(mtx, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(mtx, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/lcs/packages.config b/tests/src/JIT/Methodical/Arrays/lcs/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/misc/app.config b/tests/src/JIT/Methodical/Arrays/misc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/misc/arrres.cs b/tests/src/JIT/Methodical/Arrays/misc/arrres.cs
new file mode 100644 (file)
index 0000000..5d24202
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace GCTest
+{
+    internal class Test
+    {
+        private int _indx;
+        public bool m_die = false;
+        private static Test[] s_arr = new Test[50];
+
+        public Test(int indx) { _indx = indx; }
+
+        public virtual void CheckValid()
+        {
+            if (s_arr[_indx] != this)
+                throw new Exception();
+        }
+
+        ~Test()
+        {
+            if (!m_die)
+            {
+                if (s_arr[_indx] != null)
+                {
+                    throw new Exception("arr[" + _indx.ToString() + "] != null");
+                }
+                s_arr[_indx] = this;
+                GC.ReRegisterForFinalize(this);
+            }
+        }
+
+        private static int Main()
+        {
+            Test1();
+            Test2();
+            Test3();
+            Test4();
+            Test5();
+            Test6();
+            Console.WriteLine("Test passed.");
+            return 100;
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test1()
+        {
+            for (int i = 0; i < 50; i++)
+                s_arr[i] = new Test(i);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test2()
+        {
+            for (int i = 0; i < 50; i++)
+            {
+                if (s_arr[i] == null) throw new Exception();
+                s_arr[i].CheckValid();
+                s_arr[i] = null;
+            }
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test3()
+        {
+            for (int i = 0; i < 50; i++)
+            {
+                if (s_arr[i] == null) throw new Exception();
+                s_arr[i].CheckValid();
+                s_arr[i] = null;
+            }
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test4()
+        {
+            for (int i = 0; i < 50; i++)
+            {
+                if (s_arr[i] == null) throw new Exception();
+                s_arr[i].CheckValid();
+                s_arr[i] = null;
+            }
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test5()
+        {
+            for (int i = 0; i < 50; i++)
+            {
+                if (s_arr[i] == null) throw new Exception();
+                s_arr[i].CheckValid();
+                s_arr[i] = null;
+            }
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+        }
+        [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
+        private static void Test6()
+        {
+            for (int i = 0; i < 50; i++)
+            {
+                if (s_arr[i] == null) throw new Exception();
+                s_arr[i].CheckValid();
+                s_arr[i].m_die = true;
+                s_arr[i] = null;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/misc/cs_template.proj b/tests/src/JIT/Methodical/Arrays/misc/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/misc/gcarr.cs b/tests/src/JIT/Methodical/Arrays/misc/gcarr.cs
new file mode 100644 (file)
index 0000000..9dc1e4c
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace GCTest
+{
+    internal class Test
+    {
+        private int _magic = 0x12345678;
+        public virtual void CheckValid()
+        {
+            if (_magic != 0x12345678)
+                throw new Exception();
+        }
+
+        private static int Main()
+        {
+            Test[] arr = new Test[97];
+            for (int i = 0; i < 97; i++)
+                arr[i] = new Test();
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+            for (int i = 0; i < 97; i++)
+                arr[i].CheckValid();
+            arr = null;
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            GC.Collect();
+            Console.WriteLine("Test passed.");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Arrays/misc/misc.csproj b/tests/src/JIT/Methodical/Arrays/misc/misc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/misc/packages.config b/tests/src/JIT/Methodical/Arrays/misc/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Arrays/misc/selfref.cs b/tests/src/JIT/Methodical/Arrays/misc/selfref.cs
new file mode 100644 (file)
index 0000000..2f0ebf2
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace GCTest
+{
+    internal class Test
+    {
+        private static int Main()
+        {
+            object aref = null;
+            object[] arr = new object[16];
+            for (int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0); i++)
+                arr[i] = arr;
+            aref = arr[11];
+            arr = null; //but keep reference to element
+
+            GC.Collect();
+
+            Array a2 = (Array)aref;
+            for (int i = a2.GetLowerBound(0); i <= a2.GetUpperBound(0); i++)
+            {
+                if (((Array)a2.GetValue(i)).GetLowerBound(0) != 0 ||
+                    ((Array)a2.GetValue(i)).GetUpperBound(0) != 15)
+                {
+                    Console.WriteLine("TEST FAILED!");
+                    return 1;
+                }
+            }
+            Console.WriteLine("TEST PASSED!");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/app.config b/tests/src/JIT/Methodical/AsgOp/i4/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/cs_template.proj b/tests/src/JIT/Methodical/AsgOp/i4/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/i4.cs b/tests/src/JIT/Methodical/AsgOp/i4/i4.cs
new file mode 100644 (file)
index 0000000..1250599
--- /dev/null
@@ -0,0 +1,1562 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    private static int f00(int x, int y)
+    {
+        x = x + y;
+        return x;
+    }
+
+    private static int f01(int x, int y)
+    {
+        x = x - y;
+        return x;
+    }
+
+    private static int f02(int x, int y)
+    {
+        x = x * y;
+        return x;
+    }
+
+    private static int f03(int x, int y)
+    {
+        x = x / y;
+        return x;
+    }
+
+    private static int f04(int x, int y)
+    {
+        x = x % y;
+        return x;
+    }
+
+    private static int f05(int x, int y)
+    {
+        x = x << y;
+        return x;
+    }
+
+    private static int f06(int x, int y)
+    {
+        x = x >> y;
+        return x;
+    }
+
+    private static int f07(int x, int y)
+    {
+        x = x & y;
+        return x;
+    }
+
+    private static int f08(int x, int y)
+    {
+        x = x ^ y;
+        return x;
+    }
+
+    private static int f09(int x, int y)
+    {
+        x = x | y;
+        return x;
+    }
+
+    private static int f10(int x, int y)
+    {
+        x += x + y;
+        return x;
+    }
+
+    private static int f11(int x, int y)
+    {
+        x += x - y;
+        return x;
+    }
+
+    private static int f12(int x, int y)
+    {
+        x += x * y;
+        return x;
+    }
+
+    private static int f13(int x, int y)
+    {
+        x += x / y;
+        return x;
+    }
+
+    private static int f14(int x, int y)
+    {
+        x += x % y;
+        return x;
+    }
+
+    private static int f15(int x, int y)
+    {
+        x += x << y;
+        return x;
+    }
+
+    private static int f16(int x, int y)
+    {
+        x += x >> y;
+        return x;
+    }
+
+    private static int f17(int x, int y)
+    {
+        x += x & y;
+        return x;
+    }
+
+    private static int f18(int x, int y)
+    {
+        x += x ^ y;
+        return x;
+    }
+
+    private static int f19(int x, int y)
+    {
+        x += x | y;
+        return x;
+    }
+
+    private static int f20(int x, int y)
+    {
+        x -= x + y;
+        return x;
+    }
+
+    private static int f21(int x, int y)
+    {
+        x -= x - y;
+        return x;
+    }
+
+    private static int f22(int x, int y)
+    {
+        x -= x * y;
+        return x;
+    }
+
+    private static int f23(int x, int y)
+    {
+        x -= x / y;
+        return x;
+    }
+
+    private static int f24(int x, int y)
+    {
+        x -= x % y;
+        return x;
+    }
+
+    private static int f25(int x, int y)
+    {
+        x -= x << y;
+        return x;
+    }
+
+    private static int f26(int x, int y)
+    {
+        x -= x >> y;
+        return x;
+    }
+
+    private static int f27(int x, int y)
+    {
+        x -= x & y;
+        return x;
+    }
+
+    private static int f28(int x, int y)
+    {
+        x -= x ^ y;
+        return x;
+    }
+
+    private static int f29(int x, int y)
+    {
+        x -= x | y;
+        return x;
+    }
+
+    private static int f30(int x, int y)
+    {
+        x *= x + y;
+        return x;
+    }
+
+    private static int f31(int x, int y)
+    {
+        x *= x - y;
+        return x;
+    }
+
+    private static int f32(int x, int y)
+    {
+        x *= x * y;
+        return x;
+    }
+
+    private static int f33(int x, int y)
+    {
+        x *= x / y;
+        return x;
+    }
+
+    private static int f34(int x, int y)
+    {
+        x *= x % y;
+        return x;
+    }
+
+    private static int f35(int x, int y)
+    {
+        x *= x << y;
+        return x;
+    }
+
+    private static int f36(int x, int y)
+    {
+        x *= x >> y;
+        return x;
+    }
+
+    private static int f37(int x, int y)
+    {
+        x *= x & y;
+        return x;
+    }
+
+    private static int f38(int x, int y)
+    {
+        x *= x ^ y;
+        return x;
+    }
+
+    private static int f39(int x, int y)
+    {
+        x *= x | y;
+        return x;
+    }
+
+    private static int f40(int x, int y)
+    {
+        x /= x + y;
+        return x;
+    }
+
+    private static int f41(int x, int y)
+    {
+        x /= x - y;
+        return x;
+    }
+
+    private static int f42(int x, int y)
+    {
+        x /= x * y;
+        return x;
+    }
+
+    private static int f43(int x, int y)
+    {
+        x /= x / y;
+        return x;
+    }
+
+    private static int f44(int x, int y)
+    {
+        x /= x % y;
+        return x;
+    }
+
+    private static int f45(int x, int y)
+    {
+        x /= x << y;
+        return x;
+    }
+
+    private static int f46(int x, int y)
+    {
+        x /= x >> y;
+        return x;
+    }
+
+    private static int f47(int x, int y)
+    {
+        x /= x & y;
+        return x;
+    }
+
+    private static int f48(int x, int y)
+    {
+        x /= x ^ y;
+        return x;
+    }
+
+    private static int f49(int x, int y)
+    {
+        x /= x | y;
+        return x;
+    }
+
+    private static int f50(int x, int y)
+    {
+        x %= x + y;
+        return x;
+    }
+
+    private static int f51(int x, int y)
+    {
+        x %= x - y;
+        return x;
+    }
+
+    private static int f52(int x, int y)
+    {
+        x %= x * y;
+        return x;
+    }
+
+    private static int f53(int x, int y)
+    {
+        x %= x / y;
+        return x;
+    }
+
+    private static int f54(int x, int y)
+    {
+        x %= x % y;
+        return x;
+    }
+
+    private static int f55(int x, int y)
+    {
+        x %= x << y;
+        return x;
+    }
+
+    private static int f56(int x, int y)
+    {
+        x %= x >> y;
+        return x;
+    }
+
+    private static int f57(int x, int y)
+    {
+        x %= x & y;
+        return x;
+    }
+
+    private static int f58(int x, int y)
+    {
+        x %= x ^ y;
+        return x;
+    }
+
+    private static int f59(int x, int y)
+    {
+        x %= x | y;
+        return x;
+    }
+
+    private static int f60(int x, int y)
+    {
+        x <<= x + y;
+        return x;
+    }
+
+    private static int f61(int x, int y)
+    {
+        x <<= x - y;
+        return x;
+    }
+
+    private static int f62(int x, int y)
+    {
+        x <<= x * y;
+        return x;
+    }
+
+    private static int f63(int x, int y)
+    {
+        x <<= x / y;
+        return x;
+    }
+
+    private static int f64(int x, int y)
+    {
+        x <<= x % y;
+        return x;
+    }
+
+    private static int f65(int x, int y)
+    {
+        x <<= x << y;
+        return x;
+    }
+
+    private static int f66(int x, int y)
+    {
+        x <<= x >> y;
+        return x;
+    }
+
+    private static int f67(int x, int y)
+    {
+        x <<= x & y;
+        return x;
+    }
+
+    private static int f68(int x, int y)
+    {
+        x <<= x ^ y;
+        return x;
+    }
+
+    private static int f69(int x, int y)
+    {
+        x <<= x | y;
+        return x;
+    }
+
+    private static int f70(int x, int y)
+    {
+        x >>= x + y;
+        return x;
+    }
+
+    private static int f71(int x, int y)
+    {
+        x >>= x - y;
+        return x;
+    }
+
+    private static int f72(int x, int y)
+    {
+        x >>= x * y;
+        return x;
+    }
+
+    private static int f73(int x, int y)
+    {
+        x >>= x / y;
+        return x;
+    }
+
+    private static int f74(int x, int y)
+    {
+        x >>= x % y;
+        return x;
+    }
+
+    private static int f75(int x, int y)
+    {
+        x >>= x << y;
+        return x;
+    }
+
+    private static int f76(int x, int y)
+    {
+        x >>= x >> y;
+        return x;
+    }
+
+    private static int f77(int x, int y)
+    {
+        x >>= x & y;
+        return x;
+    }
+
+    private static int f78(int x, int y)
+    {
+        x >>= x ^ y;
+        return x;
+    }
+
+    private static int f79(int x, int y)
+    {
+        x >>= x | y;
+        return x;
+    }
+
+    private static int f80(int x, int y)
+    {
+        x &= x + y;
+        return x;
+    }
+
+    private static int f81(int x, int y)
+    {
+        x &= x - y;
+        return x;
+    }
+
+    private static int f82(int x, int y)
+    {
+        x &= x * y;
+        return x;
+    }
+
+    private static int f83(int x, int y)
+    {
+        x &= x / y;
+        return x;
+    }
+
+    private static int f84(int x, int y)
+    {
+        x &= x % y;
+        return x;
+    }
+
+    private static int f85(int x, int y)
+    {
+        x &= x << y;
+        return x;
+    }
+
+    private static int f86(int x, int y)
+    {
+        x &= x >> y;
+        return x;
+    }
+
+    private static int f87(int x, int y)
+    {
+        x &= x & y;
+        return x;
+    }
+
+    private static int f88(int x, int y)
+    {
+        x &= x ^ y;
+        return x;
+    }
+
+    private static int f89(int x, int y)
+    {
+        x &= x | y;
+        return x;
+    }
+
+    private static int f90(int x, int y)
+    {
+        x ^= x + y;
+        return x;
+    }
+
+    private static int f91(int x, int y)
+    {
+        x ^= x - y;
+        return x;
+    }
+
+    private static int f92(int x, int y)
+    {
+        x ^= x * y;
+        return x;
+    }
+
+    private static int f93(int x, int y)
+    {
+        x ^= x / y;
+        return x;
+    }
+
+    private static int f94(int x, int y)
+    {
+        x ^= x % y;
+        return x;
+    }
+
+    private static int f95(int x, int y)
+    {
+        x ^= x << y;
+        return x;
+    }
+
+    private static int f96(int x, int y)
+    {
+        x ^= x >> y;
+        return x;
+    }
+
+    private static int f97(int x, int y)
+    {
+        x ^= x & y;
+        return x;
+    }
+
+    private static int f98(int x, int y)
+    {
+        x ^= x ^ y;
+        return x;
+    }
+
+    private static int f99(int x, int y)
+    {
+        x ^= x | y;
+        return x;
+    }
+
+    private static int f100(int x, int y)
+    {
+        x |= x + y;
+        return x;
+    }
+
+    private static int f101(int x, int y)
+    {
+        x |= x - y;
+        return x;
+    }
+
+    private static int f102(int x, int y)
+    {
+        x |= x * y;
+        return x;
+    }
+
+    private static int f103(int x, int y)
+    {
+        x |= x / y;
+        return x;
+    }
+
+    private static int f104(int x, int y)
+    {
+        x |= x % y;
+        return x;
+    }
+
+    private static int f105(int x, int y)
+    {
+        x |= x << y;
+        return x;
+    }
+
+    private static int f106(int x, int y)
+    {
+        x |= x >> y;
+        return x;
+    }
+
+    private static int f107(int x, int y)
+    {
+        x |= x & y;
+        return x;
+    }
+
+    private static int f108(int x, int y)
+    {
+        x |= x ^ y;
+        return x;
+    }
+
+    private static int f109(int x, int y)
+    {
+        x |= x | y;
+        return x;
+    }
+
+
+    public static int Main()
+    {
+        int x;
+        bool pass = true;
+
+        x = f00(-10, 4);
+        if (x != -6)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f00     x = x + y failed.       x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = f01(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f01     x = x - y failed.       x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f02(-10, 4);
+        if (x != -40)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f02     x = x * y failed.       x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = f03(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f03     x = x / y failed.       x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f04(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f04     x = x % y failed.       x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f05(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f05     x = x << y failed.      x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = f06(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f06     x = x >> y failed.      x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f07(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f07     x = x & y failed.       x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f08(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f08     x = x ^ y failed.       x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f09(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f09     x = x | y failed.       x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f10(-10, 4);
+        if (x != -16)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f10     x += x + y failed.      x: {0}, \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = f11(-10, 4);
+        if (x != -24)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f11     x += x - y failed.      x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = f12(-10, 4);
+        if (x != -50)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f12     x += x * y failed.      x: {0}, \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = f13(-10, 4);
+        if (x != -12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f13     x += x / y failed.      x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = f14(-10, 4);
+        if (x != -12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f14     x += x % y failed.      x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = f15(-10, 4);
+        if (x != -170)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f15     x += x << y failed.     x: {0}, \texpected: -170\n", x);
+            pass = false;
+        }
+
+        x = f16(-10, 4);
+        if (x != -11)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f16     x += x >> y failed.     x: {0}, \texpected: -11\n", x);
+            pass = false;
+        }
+
+        x = f17(-10, 4);
+        if (x != -6)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f17     x += x & y failed.      x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = f18(-10, 4);
+        if (x != -24)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f18     x += x ^ y failed.      x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = f19(-10, 4);
+        if (x != -20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f19     x += x | y failed.      x: {0}, \texpected: -20\n", x);
+            pass = false;
+        }
+
+        x = f20(-10, 4);
+        if (x != -4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f20     x -= x + y failed.      x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = f21(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f21     x -= x - y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f22(-10, 4);
+        if (x != 30)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f22     x -= x * y failed.      x: {0}, \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = f23(-10, 4);
+        if (x != -8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f23     x -= x / y failed.      x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = f24(-10, 4);
+        if (x != -8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f24     x -= x % y failed.      x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = f25(-10, 4);
+        if (x != 150)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f25     x -= x << y failed.     x: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = f26(-10, 4);
+        if (x != -9)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f26     x -= x >> y failed.     x: {0}, \texpected: -9\n", x);
+            pass = false;
+        }
+
+        x = f27(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f27     x -= x & y failed.      x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f28(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f28     x -= x ^ y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f29(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f29     x -= x | y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f30(-10, 4);
+        if (x != 60)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f30     x *= x + y failed.      x: {0}, \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = f31(-10, 4);
+        if (x != 140)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f31     x *= x - y failed.      x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = f32(-10, 4);
+        if (x != 400)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f32     x *= x * y failed.      x: {0}, \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = f33(-10, 4);
+        if (x != 20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f33     x *= x / y failed.      x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = f34(-10, 4);
+        if (x != 20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f34     x *= x % y failed.      x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = f35(-10, 4);
+        if (x != 1600)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f35     x *= x << y failed.     x: {0}, \texpected: 1600\n", x);
+            pass = false;
+        }
+
+        x = f36(-10, 4);
+        if (x != 10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f36     x *= x >> y failed.     x: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = f37(-10, 4);
+        if (x != -40)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f37     x *= x & y failed.      x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = f38(-10, 4);
+        if (x != 140)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f38     x *= x ^ y failed.      x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = f39(-10, 4);
+        if (x != 100)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f39     x *= x | y failed.      x: {0}, \texpected: 100\n", x);
+            pass = false;
+        }
+
+        x = f40(-10, 4);
+        if (x != 1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f40     x /= x + y failed.      x: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = f41(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f41     x /= x - y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f42(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f42     x /= x * y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f43(-10, 4);
+        if (x != 5)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f43     x /= x / y failed.      x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = f44(-10, 4);
+        if (x != 5)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f44     x /= x % y failed.      x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = f45(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f45     x /= x << y failed.     x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f46(-10, 4);
+        if (x != 10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f46     x /= x >> y failed.     x: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = f47(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f47     x /= x & y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f48(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f48     x /= x ^ y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f49(-10, 4);
+        if (x != 1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f49     x /= x | y failed.      x: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = f50(-10, 4);
+        if (x != -4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f50     x %= x + y failed.      x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = f51(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f51     x %= x - y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f52(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f52     x %= x * y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f53(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f53     x %= x / y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f54(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f54     x %= x % y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f55(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f55     x %= x << y failed.     x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f56(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f56     x %= x >> y failed.     x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f57(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f57     x %= x & y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f58(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f58     x %= x ^ y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f59(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f59     x %= x | y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f60(-10, 4);
+        if (x != -671088640)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f60     x <<= x + y failed.     x: {0}, \texpected: -671088640\n", x);
+            pass = false;
+        }
+
+        x = f61(-10, 4);
+        if (x != -2621440)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f61     x <<= x - y failed.     x: {0}, \texpected: -2621440\n", x);
+            pass = false;
+        }
+
+        x = f62(-10, 4);
+        if (x != -167772160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f62     x <<= x * y failed.     x: {0}, \texpected: -167772160\n", x);
+            pass = false;
+        }
+
+        x = f63(-10, 4);
+        if (x != -2147483648)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f63     x <<= x / y failed.     x: {0}, \texpected: -2147483648\n", x);
+            pass = false;
+        }
+
+        x = f64(-10, 4);
+        if (x != -2147483648)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f64     x <<= x % y failed.     x: {0}, \texpected: -2147483648\n", x);
+            pass = false;
+        }
+
+        x = f65(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f65     x <<= x << y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f66(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f66     x <<= x >> y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f67(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f67     x <<= x & y failed.     x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = f68(-10, 4);
+        if (x != -2621440)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f68     x <<= x ^ y failed.     x: {0}, \texpected: -2621440\n", x);
+            pass = false;
+        }
+
+        x = f69(-10, 4);
+        if (x != -41943040)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f69     x <<= x | y failed.     x: {0}, \texpected: -41943040\n", x);
+            pass = false;
+        }
+
+        x = f70(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f70     x >>= x + y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f71(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f71     x >>= x - y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f72(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f72     x >>= x * y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f73(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f73     x >>= x / y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f74(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f74     x >>= x % y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f75(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f75     x >>= x << y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f76(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f76     x >>= x >> y failed.    x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f77(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f77     x >>= x & y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f78(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f78     x >>= x ^ y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f79(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f79     x >>= x | y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f80(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f80     x &= x + y failed.      x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f81(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f81     x &= x - y failed.      x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f82(-10, 4);
+        if (x != -48)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f82     x &= x * y failed.      x: {0}, \texpected: -48\n", x);
+            pass = false;
+        }
+
+        x = f83(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f83     x &= x / y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f84(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f84     x &= x % y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f85(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f85     x &= x << y failed.     x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = f86(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f86     x &= x >> y failed.     x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f87(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f87     x &= x & y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f88(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f88     x &= x ^ y failed.      x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f89(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f89     x &= x | y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f90(-10, 4);
+        if (x != 12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f90     x ^= x + y failed.      x: {0}, \texpected: 12\n", x);
+            pass = false;
+        }
+
+        x = f91(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f91     x ^= x - y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f92(-10, 4);
+        if (x != 46)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f92     x ^= x * y failed.      x: {0}, \texpected: 46\n", x);
+            pass = false;
+        }
+
+        x = f93(-10, 4);
+        if (x != 8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f93     x ^= x / y failed.      x: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = f94(-10, 4);
+        if (x != 8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f94     x ^= x % y failed.      x: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = f95(-10, 4);
+        if (x != 150)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f95     x ^= x << y failed.     x: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = f96(-10, 4);
+        if (x != 9)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f96     x ^= x >> y failed.     x: {0}, \texpected: 9\n", x);
+            pass = false;
+        }
+
+        x = f97(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f97     x ^= x & y failed.      x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f98(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f98     x ^= x ^ y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f99(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f99     x ^= x | y failed.      x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = f100(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f100    x |= x + y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f101(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f101    x |= x - y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f102(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f102    x |= x * y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f103(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f103    x |= x / y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f104(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f104    x |= x % y failed.      x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f105(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f105    x |= x << y failed.     x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f106(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f106    x |= x >> y failed.     x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = f107(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f107    x |= x & y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f108(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f108    x |= x ^ y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = f109(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f109    x |= x | y failed.      x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED.");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/i4.csproj b/tests/src/JIT/Methodical/AsgOp/i4/i4.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/i4flat.cs b/tests/src/JIT/Methodical/AsgOp/i4/i4flat.cs
new file mode 100644 (file)
index 0000000..307d21c
--- /dev/null
@@ -0,0 +1,1123 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    public static int Main()
+    {
+        int x;
+        int y;
+
+        bool pass = true;
+
+        x = -10;
+        y = 4;
+        x = x + y;
+        if (x != -6)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x + y failed.     x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x - y failed.     x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x * y;
+        if (x != -40)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x * y failed.     x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x / y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x / y failed.     x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x % y failed.     x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x << y;
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x << y failed.    x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x >> y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x >> y failed.    x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x & y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x & y failed.     x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x ^ y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x ^ y failed.     x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x = x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx = x | y failed.     x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x + y;
+        if (x != -16)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x + y failed.    x: {0}, \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x - y;
+        if (x != -24)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x - y failed.    x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x * y;
+        if (x != -50)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x * y failed.    x: {0}, \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x / y;
+        if (x != -12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x / y failed.    x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x % y;
+        if (x != -12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x % y failed.    x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x << y;
+        if (x != -170)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x << y failed.   x: {0}, \texpected: -170\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x >> y;
+        if (x != -11)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x >> y failed.   x: {0}, \texpected: -11\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x & y;
+        if (x != -6)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x & y failed.    x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x ^ y;
+        if (x != -24)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x ^ y failed.    x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x += x | y;
+        if (x != -20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx += x | y failed.    x: {0}, \texpected: -20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x + y failed.    x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x - y failed.    x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x * y;
+        if (x != 30)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x * y failed.    x: {0}, \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x / y;
+        if (x != -8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x / y failed.    x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x % y;
+        if (x != -8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x % y failed.    x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x << y;
+        if (x != 150)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x << y failed.   x: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x >> y;
+        if (x != -9)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x >> y failed.   x: {0}, \texpected: -9\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x & y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x & y failed.    x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x ^ y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x ^ y failed.    x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x -= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx -= x | y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x + y;
+        if (x != 60)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x + y failed.    x: {0}, \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x - y;
+        if (x != 140)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x - y failed.    x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x * y;
+        if (x != 400)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x * y failed.    x: {0}, \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x / y;
+        if (x != 20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x / y failed.    x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x % y;
+        if (x != 20)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x % y failed.    x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x << y;
+        if (x != 1600)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x << y failed.   x: {0}, \texpected: 1600\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x >> y;
+        if (x != 10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x >> y failed.   x: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x & y;
+        if (x != -40)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x & y failed.    x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x ^ y;
+        if (x != 140)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x ^ y failed.    x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x *= x | y;
+        if (x != 100)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx *= x | y failed.    x: {0}, \texpected: 100\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x + y;
+        if (x != 1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x + y failed.    x: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x - y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x - y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x * y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x * y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x / y;
+        if (x != 5)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x / y failed.    x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x % y;
+        if (x != 5)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x % y failed.    x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x << y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x << y failed.   x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x >> y;
+        if (x != 10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x >> y failed.   x: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x & y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x & y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x ^ y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x ^ y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x /= x | y;
+        if (x != 1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx /= x | y failed.    x: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x + y failed.    x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x - y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x - y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x * y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x * y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x / y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x / y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x % y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x % y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x << y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x << y failed.   x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x >> y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x >> y failed.   x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x & y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x & y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x ^ y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x ^ y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x %= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx %= x | y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x + y;
+        if (x != -671088640)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x + y failed.   x: {0}, \texpected: -671088640\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x - y;
+        if (x != -2621440)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x - y failed.   x: {0}, \texpected: -2621440\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x * y;
+        if (x != -167772160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x * y failed.   x: {0}, \texpected: -167772160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x / y;
+        if (x != -2147483648)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x / y failed.   x: {0}, \texpected: -2147483648\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x % y;
+        if (x != -2147483648)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x % y failed.   x: {0}, \texpected: -2147483648\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x << y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x << y failed.  x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x >> y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x >> y failed.  x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x & y;
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x & y failed.   x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x ^ y;
+        if (x != -2621440)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x ^ y failed.   x: {0}, \texpected: -2621440\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x <<= x | y;
+        if (x != -41943040)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx <<= x | y failed.   x: {0}, \texpected: -41943040\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x + y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x + y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x - y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x - y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x * y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x * y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x / y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x / y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x % y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x % y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x << y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x << y failed.  x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x >> y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x >> y failed.  x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x & y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x & y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x ^ y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x ^ y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x >>= x | y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx >>= x | y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x + y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x + y failed.    x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x - y failed.    x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x * y;
+        if (x != -48)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x * y failed.    x: {0}, \texpected: -48\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x / y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x / y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x % y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x % y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x << y;
+        if (x != -160)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x << y failed.   x: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x >> y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x >> y failed.   x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x & y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x & y failed.    x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x ^ y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x ^ y failed.    x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x &= x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx &= x | y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x + y;
+        if (x != 12)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x + y failed.    x: {0}, \texpected: 12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x - y failed.    x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x * y;
+        if (x != 46)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x * y failed.    x: {0}, \texpected: 46\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x / y;
+        if (x != 8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x / y failed.    x: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x % y;
+        if (x != 8)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x % y failed.    x: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x << y;
+        if (x != 150)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x << y failed.   x: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x >> y;
+        if (x != 9)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x >> y failed.   x: {0}, \texpected: 9\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x & y;
+        if (x != -14)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x & y failed.    x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x ^ y;
+        if (x != 4)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x ^ y failed.    x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x ^= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx ^= x | y failed.    x: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x + y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x + y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x - y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x - y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x * y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x * y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x / y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x / y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x % y failed.    x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x << y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x << y failed.   x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x >> y;
+        if (x != -1)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x >> y failed.   x: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x & y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x & y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x ^ y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x ^ y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+        x |= x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("Initial parameters: x is -10 and y is 4.");
+            Console.WriteLine("\tx |= x | y failed.    x: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED.");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/i4/packages.config b/tests/src/JIT/Methodical/AsgOp/i4/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/app.config b/tests/src/JIT/Methodical/AsgOp/i8/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/cs_template.proj b/tests/src/JIT/Methodical/AsgOp/i8/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/i8.cs b/tests/src/JIT/Methodical/AsgOp/i8/i8.cs
new file mode 100644 (file)
index 0000000..af101ce
--- /dev/null
@@ -0,0 +1,1678 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    private static Int64 f00(Int64 x, Int64 y)
+    {
+        x = x + y;
+        return x;
+    }
+
+    private static Int64 f01(Int64 x, Int64 y)
+    {
+        x = x - y;
+        return x;
+    }
+
+    private static Int64 f02(Int64 x, Int64 y)
+    {
+        x = x * y;
+        return x;
+    }
+
+    private static Int64 f03(Int64 x, Int64 y)
+    {
+        x = x / y;
+        return x;
+    }
+
+    private static Int64 f04(Int64 x, Int64 y)
+    {
+        x = x % y;
+        return x;
+    }
+
+    private static Int64 f05(Int64 x, Int64 y)
+    {
+        x = x << (int)y;
+        return x;
+    }
+
+    private static Int64 f06(Int64 x, Int64 y)
+    {
+        x = x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f07(Int64 x, Int64 y)
+    {
+        x = x & y;
+        return x;
+    }
+
+    private static Int64 f08(Int64 x, Int64 y)
+    {
+        x = x ^ y;
+        return x;
+    }
+
+    private static Int64 f09(Int64 x, Int64 y)
+    {
+        x = x | y;
+        return x;
+    }
+
+    private static Int64 f10(Int64 x, Int64 y)
+    {
+        x += x + y;
+        return x;
+    }
+
+    private static Int64 f11(Int64 x, Int64 y)
+    {
+        x += x - y;
+        return x;
+    }
+
+    private static Int64 f12(Int64 x, Int64 y)
+    {
+        x += x * y;
+        return x;
+    }
+
+    private static Int64 f13(Int64 x, Int64 y)
+    {
+        x += x / y;
+        return x;
+    }
+
+    private static Int64 f14(Int64 x, Int64 y)
+    {
+        x += x % y;
+        return x;
+    }
+
+    private static Int64 f15(Int64 x, Int64 y)
+    {
+        x += x << (int)y;
+        return x;
+    }
+
+    private static Int64 f16(Int64 x, Int64 y)
+    {
+        x += x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f17(Int64 x, Int64 y)
+    {
+        x += x & y;
+        return x;
+    }
+
+    private static Int64 f18(Int64 x, Int64 y)
+    {
+        x += x ^ y;
+        return x;
+    }
+
+    private static Int64 f19(Int64 x, Int64 y)
+    {
+        x += x | y;
+        return x;
+    }
+
+    private static Int64 f20(Int64 x, Int64 y)
+    {
+        x -= x + y;
+        return x;
+    }
+
+    private static Int64 f21(Int64 x, Int64 y)
+    {
+        x -= x - y;
+        return x;
+    }
+
+    private static Int64 f22(Int64 x, Int64 y)
+    {
+        x -= x * y;
+        return x;
+    }
+
+    private static Int64 f23(Int64 x, Int64 y)
+    {
+        x -= x / y;
+        return x;
+    }
+
+    private static Int64 f24(Int64 x, Int64 y)
+    {
+        x -= x % y;
+        return x;
+    }
+
+    private static Int64 f25(Int64 x, Int64 y)
+    {
+        x -= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f26(Int64 x, Int64 y)
+    {
+        x -= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f27(Int64 x, Int64 y)
+    {
+        x -= x & y;
+        return x;
+    }
+
+    private static Int64 f28(Int64 x, Int64 y)
+    {
+        x -= x ^ y;
+        return x;
+    }
+
+    private static Int64 f29(Int64 x, Int64 y)
+    {
+        x -= x | y;
+        return x;
+    }
+
+    private static Int64 f30(Int64 x, Int64 y)
+    {
+        x *= x + y;
+        return x;
+    }
+
+    private static Int64 f31(Int64 x, Int64 y)
+    {
+        x *= x - y;
+        return x;
+    }
+
+    private static Int64 f32(Int64 x, Int64 y)
+    {
+        x *= x * y;
+        return x;
+    }
+
+    private static Int64 f33(Int64 x, Int64 y)
+    {
+        x *= x / y;
+        return x;
+    }
+
+    private static Int64 f34(Int64 x, Int64 y)
+    {
+        x *= x % y;
+        return x;
+    }
+
+    private static Int64 f35(Int64 x, Int64 y)
+    {
+        x *= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f36(Int64 x, Int64 y)
+    {
+        x *= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f37(Int64 x, Int64 y)
+    {
+        x *= x & y;
+        return x;
+    }
+
+    private static Int64 f38(Int64 x, Int64 y)
+    {
+        x *= x ^ y;
+        return x;
+    }
+
+    private static Int64 f39(Int64 x, Int64 y)
+    {
+        x *= x | y;
+        return x;
+    }
+
+    private static Int64 f40(Int64 x, Int64 y)
+    {
+        x /= x + y;
+        return x;
+    }
+
+    private static Int64 f41(Int64 x, Int64 y)
+    {
+        x /= x - y;
+        return x;
+    }
+
+    private static Int64 f42(Int64 x, Int64 y)
+    {
+        x /= x * y;
+        return x;
+    }
+
+    private static Int64 f43(Int64 x, Int64 y)
+    {
+        x /= x / y;
+        return x;
+    }
+
+    private static Int64 f44(Int64 x, Int64 y)
+    {
+        x /= x % y;
+        return x;
+    }
+
+    private static Int64 f45(Int64 x, Int64 y)
+    {
+        x /= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f46(Int64 x, Int64 y)
+    {
+        x /= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f47(Int64 x, Int64 y)
+    {
+        x /= x & y;
+        return x;
+    }
+
+    private static Int64 f48(Int64 x, Int64 y)
+    {
+        x /= x ^ y;
+        return x;
+    }
+
+    private static Int64 f49(Int64 x, Int64 y)
+    {
+        x /= x | y;
+        return x;
+    }
+
+    private static Int64 f50(Int64 x, Int64 y)
+    {
+        x %= x + y;
+        return x;
+    }
+
+    private static Int64 f51(Int64 x, Int64 y)
+    {
+        x %= x - y;
+        return x;
+    }
+
+    private static Int64 f52(Int64 x, Int64 y)
+    {
+        x %= x * y;
+        return x;
+    }
+
+    private static Int64 f53(Int64 x, Int64 y)
+    {
+        x %= x / y;
+        return x;
+    }
+
+    private static Int64 f54(Int64 x, Int64 y)
+    {
+        x %= x % y;
+        return x;
+    }
+
+    private static Int64 f55(Int64 x, Int64 y)
+    {
+        x %= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f56(Int64 x, Int64 y)
+    {
+        x %= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f57(Int64 x, Int64 y)
+    {
+        x %= x & y;
+        return x;
+    }
+
+    private static Int64 f58(Int64 x, Int64 y)
+    {
+        x %= x ^ y;
+        return x;
+    }
+
+    private static Int64 f59(Int64 x, Int64 y)
+    {
+        x %= x | y;
+        return x;
+    }
+
+    private static Int64 f60(Int64 x, Int64 y)
+    {
+        x <<= (int)(x + y);
+        return x;
+    }
+
+    private static Int64 f61(Int64 x, Int64 y)
+    {
+        x <<= (int)(x - y);
+        return x;
+    }
+
+    private static Int64 f62(Int64 x, Int64 y)
+    {
+        x <<= (int)(x * y);
+        return x;
+    }
+
+    private static Int64 f63(Int64 x, Int64 y)
+    {
+        x <<= (int)(x / y);
+        return x;
+    }
+
+    private static Int64 f64(Int64 x, Int64 y)
+    {
+        x <<= (int)(x % y);
+        return x;
+    }
+
+    private static Int64 f65(Int64 x, Int64 y)
+    {
+        x <<= (int)(x << (int)y);
+        return x;
+    }
+
+    private static Int64 f66(Int64 x, Int64 y)
+    {
+        x <<= (int)(x >> (int)y);
+        return x;
+    }
+
+    private static Int64 f67(Int64 x, Int64 y)
+    {
+        x <<= (int)(x & y);
+        return x;
+    }
+
+    private static Int64 f68(Int64 x, Int64 y)
+    {
+        x <<= (int)(x ^ y);
+        return x;
+    }
+
+    private static Int64 f69(Int64 x, Int64 y)
+    {
+        x <<= (int)(x | y);
+        return x;
+    }
+
+    private static Int64 f70(Int64 x, Int64 y)
+    {
+        x >>= (int)(x + y);
+        return x;
+    }
+
+    private static Int64 f71(Int64 x, Int64 y)
+    {
+        x >>= (int)(x - y);
+        return x;
+    }
+
+    private static Int64 f72(Int64 x, Int64 y)
+    {
+        x >>= (int)(x * y);
+        return x;
+    }
+
+    private static Int64 f73(Int64 x, Int64 y)
+    {
+        x >>= (int)(x / y);
+        return x;
+    }
+
+    private static Int64 f74(Int64 x, Int64 y)
+    {
+        x >>= (int)(x % y);
+        return x;
+    }
+
+    private static Int64 f75(Int64 x, Int64 y)
+    {
+        x >>= (int)(x << (int)y);
+        return x;
+    }
+
+    private static Int64 f76(Int64 x, Int64 y)
+    {
+        x >>= (int)(x >> (int)y);
+        return x;
+    }
+
+    private static Int64 f77(Int64 x, Int64 y)
+    {
+        x >>= (int)(x & y);
+        return x;
+    }
+
+    private static Int64 f78(Int64 x, Int64 y)
+    {
+        x >>= (int)(x ^ y);
+        return x;
+    }
+
+    private static Int64 f79(Int64 x, Int64 y)
+    {
+        x >>= (int)(x | y);
+        return x;
+    }
+
+    private static Int64 f80(Int64 x, Int64 y)
+    {
+        x &= x + y;
+        return x;
+    }
+
+    private static Int64 f81(Int64 x, Int64 y)
+    {
+        x &= x - y;
+        return x;
+    }
+
+    private static Int64 f82(Int64 x, Int64 y)
+    {
+        x &= x * y;
+        return x;
+    }
+
+    private static Int64 f83(Int64 x, Int64 y)
+    {
+        x &= x / y;
+        return x;
+    }
+
+    private static Int64 f84(Int64 x, Int64 y)
+    {
+        x &= x % y;
+        return x;
+    }
+
+    private static Int64 f85(Int64 x, Int64 y)
+    {
+        x &= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f86(Int64 x, Int64 y)
+    {
+        x &= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f87(Int64 x, Int64 y)
+    {
+        x &= x & y;
+        return x;
+    }
+
+    private static Int64 f88(Int64 x, Int64 y)
+    {
+        x &= x ^ y;
+        return x;
+    }
+
+    private static Int64 f89(Int64 x, Int64 y)
+    {
+        x &= x | y;
+        return x;
+    }
+
+    private static Int64 f90(Int64 x, Int64 y)
+    {
+        x ^= x + y;
+        return x;
+    }
+
+    private static Int64 f91(Int64 x, Int64 y)
+    {
+        x ^= x - y;
+        return x;
+    }
+
+    private static Int64 f92(Int64 x, Int64 y)
+    {
+        x ^= x * y;
+        return x;
+    }
+
+    private static Int64 f93(Int64 x, Int64 y)
+    {
+        x ^= x / y;
+        return x;
+    }
+
+    private static Int64 f94(Int64 x, Int64 y)
+    {
+        x ^= x % y;
+        return x;
+    }
+
+    private static Int64 f95(Int64 x, Int64 y)
+    {
+        x ^= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f96(Int64 x, Int64 y)
+    {
+        x ^= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f97(Int64 x, Int64 y)
+    {
+        x ^= x & y;
+        return x;
+    }
+
+    private static Int64 f98(Int64 x, Int64 y)
+    {
+        x ^= x ^ y;
+        return x;
+    }
+
+    private static Int64 f99(Int64 x, Int64 y)
+    {
+        x ^= x | y;
+        return x;
+    }
+
+    private static Int64 f100(Int64 x, Int64 y)
+    {
+        x |= x + y;
+        return x;
+    }
+
+    private static Int64 f101(Int64 x, Int64 y)
+    {
+        x |= x - y;
+        return x;
+    }
+
+    private static Int64 f102(Int64 x, Int64 y)
+    {
+        x |= x * y;
+        return x;
+    }
+
+    private static Int64 f103(Int64 x, Int64 y)
+    {
+        x |= x / y;
+        return x;
+    }
+
+    private static Int64 f104(Int64 x, Int64 y)
+    {
+        x |= x % y;
+        return x;
+    }
+
+    private static Int64 f105(Int64 x, Int64 y)
+    {
+        x |= x << (int)y;
+        return x;
+    }
+
+    private static Int64 f106(Int64 x, Int64 y)
+    {
+        x |= x >> (int)y;
+        return x;
+    }
+
+    private static Int64 f107(Int64 x, Int64 y)
+    {
+        x |= x & y;
+        return x;
+    }
+
+    private static Int64 f108(Int64 x, Int64 y)
+    {
+        x |= x ^ y;
+        return x;
+    }
+
+    private static Int64 f109(Int64 x, Int64 y)
+    {
+        x |= x | y;
+        return x;
+    }
+
+
+    public static int Main()
+    {
+        Int64 x;
+        bool pass = true;
+
+        x = f00(-10, 4);
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f00     x = x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -6", x);
+            pass = false;
+        }
+
+        x = f01(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f01     x = x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f02(-10, 4);
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f02     x = x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -40", x);
+            pass = false;
+        }
+
+        x = f03(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f03     x = x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f04(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f04     x = x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f05(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f05     x = x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: -160", x);
+            pass = false;
+        }
+
+        x = f06(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f06     x = x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f07(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f07     x = x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f08(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f08     x = x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f09(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f09     x = x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f10(-10, 4);
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f10     x += x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -16", x);
+            pass = false;
+        }
+
+        x = f11(-10, 4);
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f11     x += x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -24", x);
+            pass = false;
+        }
+
+        x = f12(-10, 4);
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f12     x += x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -50", x);
+            pass = false;
+        }
+
+        x = f13(-10, 4);
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f13     x += x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -12", x);
+            pass = false;
+        }
+
+        x = f14(-10, 4);
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f14     x += x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -12", x);
+            pass = false;
+        }
+
+        x = f15(-10, 4);
+        if (x != -170)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f15     x += x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: -170", x);
+            pass = false;
+        }
+
+        x = f16(-10, 4);
+        if (x != -11)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f16     x += x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -11", x);
+            pass = false;
+        }
+
+        x = f17(-10, 4);
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f17     x += x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -6", x);
+            pass = false;
+        }
+
+        x = f18(-10, 4);
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f18     x += x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -24", x);
+            pass = false;
+        }
+
+        x = f19(-10, 4);
+        if (x != -20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f19     x += x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: -20", x);
+            pass = false;
+        }
+
+        x = f20(-10, 4);
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f20     x -= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -4", x);
+            pass = false;
+        }
+
+        x = f21(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f21     x -= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f22(-10, 4);
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f22     x -= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: 30", x);
+            pass = false;
+        }
+
+        x = f23(-10, 4);
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f23     x -= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -8", x);
+            pass = false;
+        }
+
+        x = f24(-10, 4);
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f24     x -= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -8", x);
+            pass = false;
+        }
+
+        x = f25(-10, 4);
+        if (x != 150)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f25     x -= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: 150", x);
+            pass = false;
+        }
+
+        x = f26(-10, 4);
+        if (x != -9)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f26     x -= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -9", x);
+            pass = false;
+        }
+
+        x = f27(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f27     x -= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f28(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f28     x -= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f29(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f29     x -= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f30(-10, 4);
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f30     x *= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: 60", x);
+            pass = false;
+        }
+
+        x = f31(-10, 4);
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f31     x *= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: 140", x);
+            pass = false;
+        }
+
+        x = f32(-10, 4);
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f32     x *= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: 400", x);
+            pass = false;
+        }
+
+        x = f33(-10, 4);
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f33     x *= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: 20", x);
+            pass = false;
+        }
+
+        x = f34(-10, 4);
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f34     x *= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: 20", x);
+            pass = false;
+        }
+
+        x = f35(-10, 4);
+        if (x != 1600)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f35     x *= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: 1600", x);
+            pass = false;
+        }
+
+        x = f36(-10, 4);
+        if (x != 10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f36     x *= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: 10", x);
+            pass = false;
+        }
+
+        x = f37(-10, 4);
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f37     x *= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -40", x);
+            pass = false;
+        }
+
+        x = f38(-10, 4);
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f38     x *= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: 140", x);
+            pass = false;
+        }
+
+        x = f39(-10, 4);
+        if (x != 100)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f39     x *= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: 100", x);
+            pass = false;
+        }
+
+        x = f40(-10, 4);
+        if (x != 1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f40     x /= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: 1", x);
+            pass = false;
+        }
+
+        x = f41(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f41     x /= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f42(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f42     x /= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f43(-10, 4);
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f43     x /= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: 5", x);
+            pass = false;
+        }
+
+        x = f44(-10, 4);
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f44     x /= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: 5", x);
+            pass = false;
+        }
+
+        x = f45(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f45     x /= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f46(-10, 4);
+        if (x != 10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f46     x /= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: 10", x);
+            pass = false;
+        }
+
+        x = f47(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f47     x /= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f48(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f48     x /= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f49(-10, 4);
+        if (x != 1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f49     x /= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: 1", x);
+            pass = false;
+        }
+
+        x = f50(-10, 4);
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f50     x %= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -4", x);
+            pass = false;
+        }
+
+        x = f51(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f51     x %= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f52(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f52     x %= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f53(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f53     x %= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f54(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f54     x %= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f55(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f55     x %= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f56(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f56     x %= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f57(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f57     x %= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f58(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f58     x %= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f59(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f59     x %= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        /*
+               x = f60(-10, 4);
+               if (x != -671088640)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f60  x <<= x + y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -671088640", x);
+                       pass = false;
+               }
+
+               x = f61(-10, 4);
+               if (x != -2621440)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f61  x <<= x - y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -2621440", x);
+                       pass = false;
+               }
+
+               x = f62(-10, 4);
+               if (x != -167772160)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f62  x <<= x * y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -167772160", x);
+                       pass = false;
+               }
+
+               x = f63(-10, 4);
+               if (x != -2147483648)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f63  x <<= x / y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -2147483648", x);
+                       pass = false;
+               }
+
+               x = f64(-10, 4);
+               if (x != -2147483648)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f64  x <<= x % y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -2147483648", x);
+                       pass = false;
+               }
+
+               x = f65(-10, 4);
+               if (x != -10)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f65  x <<= x << y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -10", x);
+                       pass = false;
+               }
+               */
+
+        x = f66(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f66     x <<= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f67(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f67     x <<= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -160", x);
+            pass = false;
+        }
+
+        /*
+               x = f68(-10, 4);
+               if (x != -2621440)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f68  x <<= x ^ y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -2621440", x);
+                       pass = false;
+               }
+
+               x = f69(-10, 4);
+               if (x != -41943040)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f69  x <<= x | y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -41943040", x);
+                       pass = false;
+               }
+               */
+
+        x = f70(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f70     x >>= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f71(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f71     x >>= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f72(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f72     x >>= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f73(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f73     x >>= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f74(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f74     x >>= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        /*
+               x = f75(-10, 4);
+               if (x != -10)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+                       Console.WriteLine("f75  x >>= x << y failed.");
+                       Console.WriteLine("x: {0}, \texpected: -10", x);
+                       pass = false;
+               }
+               */
+
+        x = f76(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f76     x >>= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f77(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f77     x >>= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f78(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f78     x >>= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f79(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f79     x >>= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f80(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f80     x &= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f81(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f81     x &= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f82(-10, 4);
+        if (x != -48)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f82     x &= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -48", x);
+            pass = false;
+        }
+
+        x = f83(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f83     x &= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f84(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f84     x &= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f85(-10, 4);
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f85     x &= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: -160", x);
+            pass = false;
+        }
+
+        x = f86(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f86     x &= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f87(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f87     x &= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f88(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f88     x &= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f89(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f89     x &= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f90(-10, 4);
+        if (x != 12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f90     x ^= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: 12", x);
+            pass = false;
+        }
+
+        x = f91(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f91     x ^= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f92(-10, 4);
+        if (x != 46)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f92     x ^= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: 46", x);
+            pass = false;
+        }
+
+        x = f93(-10, 4);
+        if (x != 8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f93     x ^= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: 8", x);
+            pass = false;
+        }
+
+        x = f94(-10, 4);
+        if (x != 8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f94     x ^= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: 8", x);
+            pass = false;
+        }
+
+        x = f95(-10, 4);
+        if (x != 150)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f95     x ^= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: 150", x);
+            pass = false;
+        }
+
+        x = f96(-10, 4);
+        if (x != 9)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f96     x ^= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: 9", x);
+            pass = false;
+        }
+
+        x = f97(-10, 4);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f97     x ^= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -14", x);
+            pass = false;
+        }
+
+        x = f98(-10, 4);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f98     x ^= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: 4", x);
+            pass = false;
+        }
+
+        x = f99(-10, 4);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f99     x ^= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: 0", x);
+            pass = false;
+        }
+
+        x = f100(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f100    x |= x + y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f101(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f101    x |= x - y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f102(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f102    x |= x * y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f103(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f103    x |= x / y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f104(-10, 4);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f104    x |= x % y failed.");
+            Console.WriteLine("x: {0}, \texpected: -2", x);
+            pass = false;
+        }
+
+        x = f105(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f105    x |= x << y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f106(-10, 4);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f106    x |= x >> y failed.");
+            Console.WriteLine("x: {0}, \texpected: -1", x);
+            pass = false;
+        }
+
+        x = f107(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f107    x |= x & y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f108(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f108    x |= x ^ y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        x = f109(-10, 4);
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4.");
+            Console.WriteLine("f109    x |= x | y failed.");
+            Console.WriteLine("x: {0}, \texpected: -10", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/i8.csproj b/tests/src/JIT/Methodical/AsgOp/i8/i8.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/i8flat.cs b/tests/src/JIT/Methodical/AsgOp/i8/i8flat.cs
new file mode 100644 (file)
index 0000000..8d424ab
--- /dev/null
@@ -0,0 +1,1239 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    public static int Main()
+    {
+        Int64 x;
+        Int64 y;
+
+        bool pass = true;
+
+        x = -10;
+        y = 4;
+
+        x = x + y;
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x + y   failed.\nx: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x - y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x * y;
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x * y   failed.\nx: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x / y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x / y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x % y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x << (int)y;
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x << (int)y   failed\nx: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x >> (int)y;
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x >> (int)y   failed\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x & y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x & y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x ^ y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x ^ y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x = x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x = x | y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x + y;
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x + y   failed.\nx: {0}, \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x - y;
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x - y   failed.\nx: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x * y;
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x * y   failed.\nx: {0}, \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x / y;
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x / y   failed.\nx: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x % y;
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x % y   failed.\nx: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x << (int)y;
+        if (x != -170)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x << (int)y   failed\nx: {0}, \texpected: -170\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x >> (int)y;
+        if (x != -11)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x >> (int)y   failed\nx: {0}, \texpected: -11\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x & y;
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x & y   failed.\nx: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x ^ y;
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x ^ y   failed.\nx: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x += x | y;
+        if (x != -20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x += x | y   failed.\nx: {0}, \texpected: -20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x + y   failed.\nx: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x - y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x * y;
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x * y   failed.\nx: {0}, \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x / y;
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x / y   failed.\nx: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x % y;
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x % y   failed.\nx: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x << (int)y;
+        if (x != 150)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x << (int)y   failed\nx: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x >> (int)y;
+        if (x != -9)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x >> (int)y   failed\nx: {0}, \texpected: -9\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x & y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x & y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x ^ y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x ^ y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x -= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x -= x | y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x + y;
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x + y   failed.\nx: {0}, \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x - y;
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x - y   failed.\nx: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x * y;
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x * y   failed.\nx: {0}, \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x / y;
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x / y   failed.\nx: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x % y;
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x % y   failed.\nx: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x << (int)y;
+        if (x != 1600)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x << (int)y   failed\nx: {0}, \texpected: 1600\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x >> (int)y;
+        if (x != 10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x >> (int)y   failed\nx: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x & y;
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x & y   failed.\nx: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x ^ y;
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x ^ y   failed.\nx: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x *= x | y;
+        if (x != 100)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x *= x | y   failed.\nx: {0}, \texpected: 100\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x + y;
+        if (x != 1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x + y   failed.\nx: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x - y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x - y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x * y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x * y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x / y;
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x / y   failed.\nx: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x % y;
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x % y   failed.\nx: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x << (int)y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x << (int)y   failed\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x >> (int)y;
+        if (x != 10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x >> (int)y   failed\nx: {0}, \texpected: 10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x & y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x & y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x ^ y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x ^ y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x /= x | y;
+        if (x != 1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x /= x | y   failed.\nx: {0}, \texpected: 1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x + y   failed.\nx: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x - y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x - y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x * y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x * y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x / y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x / y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x % y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x % y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x << (int)y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x << (int)y   failed\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x >> (int)y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x >> (int)y   failed\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x & y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x & y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x ^ y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x ^ y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x %= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x %= x | y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        /*
+               x <<= (int)( x + y);
+               if (x != -671088640)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x + y)   failed.\nx: {0}, \texpected: -671088640\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x - y);
+               if (x != -2621440)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x - y)   failed.\nx: {0}, \texpected: -2621440\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x * y);
+               if (x != -167772160)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x * y)   failed.\nx: {0}, \texpected: -167772160\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x / y);
+               if (x != -2147483648)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x / y)   failed.\nx: {0}, \texpected: -2147483648\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x % y);
+               if (x != -2147483648)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x % y)   failed.\nx: {0}, \texpected: -2147483648\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x << (int)y);
+               if (x != -10)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x << (int)y)   failed.\nx: {0}, \texpected: -10\n", x);
+                       pass = false;
+               }
+               */
+
+        x = -10;
+        y = 4;
+
+        x <<= (int)(x >> (int)y);
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x <<= (int)( x >> (int)y)   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x <<= (int)(x & y);
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x <<= (int)( x & y)   failed.\nx: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        /*
+               x <<= (int)( x ^ y);
+               if (x != -2621440)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x ^ y)   failed.\nx: {0}, \texpected: -2621440\n", x);
+                       pass = false;
+               }
+
+               x = -10;
+               y = 4;
+
+               x <<= (int)( x | y);
+               if (x != -41943040)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x <<= (int)( x | y)   failed.\nx: {0}, \texpected: -41943040\n", x);
+                       pass = false;
+               }
+               */
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x + y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x + y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x - y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x - y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x * y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x * y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x / y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x / y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x % y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x % y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        /*
+               x >>= (int)( x << (int)y);
+               if (x != -10)
+               {
+                       Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+                       Console.WriteLine("x >>= (int)( x << (int)y)   failed.\nx: {0}, \texpected: -10\n", x);
+                       pass = false;
+               }
+               */
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x >> (int)y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x >> (int)y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x & y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x & y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x ^ y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x ^ y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x >>= (int)(x | y);
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x >>= (int)( x | y)   failed.\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x + y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x + y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x - y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x * y;
+        if (x != -48)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x * y   failed.\nx: {0}, \texpected: -48\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x / y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x / y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x % y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x % y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x << (int)y;
+        if (x != -160)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x << (int)y   failed\nx: {0}, \texpected: -160\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x >> (int)y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x >> (int)y   failed\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x & y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x & y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x ^ y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x ^ y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x &= x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x &= x | y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x + y;
+        if (x != 12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x + y   failed.\nx: {0}, \texpected: 12\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x - y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x * y;
+        if (x != 46)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x * y   failed.\nx: {0}, \texpected: 46\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x / y;
+        if (x != 8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x / y   failed.\nx: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x % y;
+        if (x != 8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x % y   failed.\nx: {0}, \texpected: 8\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x << (int)y;
+        if (x != 150)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x << (int)y   failed\nx: {0}, \texpected: 150\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x >> (int)y;
+        if (x != 9)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x >> (int)y   failed\nx: {0}, \texpected: 9\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x & y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x & y   failed.\nx: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x ^ y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x ^ y   failed.\nx: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x ^= x | y;
+        if (x != 0)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x ^= x | y   failed.\nx: {0}, \texpected: 0\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x + y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x + y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x - y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x - y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x * y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x * y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x / y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x / y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x % y   failed.\nx: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x << (int)y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x << (int)y   failed\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x >> (int)y;
+        if (x != -1)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x >> (int)y   failed\nx: {0}, \texpected: -1\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x & y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x & y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x ^ y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x ^ y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        x = -10;
+        y = 4;
+
+        x |= x | y;
+        if (x != -10)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10 and y is 4");
+            Console.WriteLine("x |= x | y   failed.\nx: {0}, \texpected: -10\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/i8/packages.config b/tests/src/JIT/Methodical/AsgOp/i8/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/app.config b/tests/src/JIT/Methodical/AsgOp/r4/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/cs_template.proj b/tests/src/JIT/Methodical/AsgOp/r4/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/packages.config b/tests/src/JIT/Methodical/AsgOp/r4/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/r4.cs b/tests/src/JIT/Methodical/AsgOp/r4/r4.cs
new file mode 100644 (file)
index 0000000..68493aa
--- /dev/null
@@ -0,0 +1,372 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    private static float f00(float x, float y)
+    {
+        x = x + y;
+        return x;
+    }
+
+    private static float f01(float x, float y)
+    {
+        x = x - y;
+        return x;
+    }
+
+    private static float f02(float x, float y)
+    {
+        x = x * y;
+        return x;
+    }
+
+    private static float f03(float x, float y)
+    {
+        x = x / y;
+        return x;
+    }
+
+    private static float f04(float x, float y)
+    {
+        x = x % y;
+        return x;
+    }
+
+    private static float f10(float x, float y)
+    {
+        x += x + y;
+        return x;
+    }
+
+    private static float f11(float x, float y)
+    {
+        x += x - y;
+        return x;
+    }
+
+    private static float f12(float x, float y)
+    {
+        x += x * y;
+        return x;
+    }
+
+    private static float f13(float x, float y)
+    {
+        x += x / y;
+        return x;
+    }
+
+    private static float f14(float x, float y)
+    {
+        x += x % y;
+        return x;
+    }
+
+    private static float f20(float x, float y)
+    {
+        x -= x + y;
+        return x;
+    }
+
+    private static float f21(float x, float y)
+    {
+        x -= x - y;
+        return x;
+    }
+
+    private static float f22(float x, float y)
+    {
+        x -= x * y;
+        return x;
+    }
+
+    private static float f23(float x, float y)
+    {
+        x -= x / y;
+        return x;
+    }
+
+    private static float f24(float x, float y)
+    {
+        x -= x % y;
+        return x;
+    }
+
+    private static float f30(float x, float y)
+    {
+        x *= x + y;
+        return x;
+    }
+
+    private static float f31(float x, float y)
+    {
+        x *= x - y;
+        return x;
+    }
+
+    private static float f32(float x, float y)
+    {
+        x *= x * y;
+        return x;
+    }
+
+    private static float f33(float x, float y)
+    {
+        x *= x / y;
+        return x;
+    }
+
+    private static float f34(float x, float y)
+    {
+        x *= x % y;
+        return x;
+    }
+
+    private static float f40(float x, float y)
+    {
+        x /= x + y;
+        return x;
+    }
+
+    private static float f41(float x, float y)
+    {
+        x /= x - y;
+        return x;
+    }
+
+    private static float f42(float x, float y)
+    {
+        x /= x * y;
+        return x;
+    }
+
+    private static float f43(float x, float y)
+    {
+        x /= x / y;
+        return x;
+    }
+
+    private static float f44(float x, float y)
+    {
+        x /= x % y;
+        return x;
+    }
+
+
+    public static int Main()
+    {
+        float x;
+        bool pass = true;
+
+        x = f00(-10.0F, 4.0F);
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f00     x =     x + y;  failed.\nx: {0} \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = f01(-10.0F, 4.0F);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f01     x =     x - y;  failed.\nx: {0} \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f02(-10.0F, 4.0F);
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f02     x =     x * y;  failed.\nx: {0} \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = f03(-10.0F, 4.0F);
+        if (x != -2.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f03     x =     x / y;  failed.\nx: {0} \texpected: -2.5\n", x);
+            pass = false;
+        }
+
+        x = f04(-10.0F, 4.0F);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f04     x =     x % y;  failed.\nx: {0} \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f10(-10.0F, 4.0F);
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f10     x +=    x + y;  failed.\nx: {0} \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = f11(-10.0F, 4.0F);
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f11     x +=    x - y;  failed.\nx: {0} \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = f12(-10.0F, 4.0F);
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f12     x +=    x * y;  failed.\nx: {0} \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = f13(-10.0F, 4.0F);
+        if (x != -12.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f13     x +=    x / y;  failed.\nx: {0} \texpected: -12.5\n", x);
+            pass = false;
+        }
+
+        x = f14(-10.0F, 4.0F);
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f14     x +=    x % y;  failed.\nx: {0} \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = f20(-10.0F, 4.0F);
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f20     x -=    x + y;  failed.\nx: {0} \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = f21(-10.0F, 4.0F);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f21     x -=    x - y;  failed.\nx: {0} \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f22(-10.0F, 4.0F);
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f22     x -=    x * y;  failed.\nx: {0} \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = f23(-10.0F, 4.0F);
+        if (x != -7.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f23     x -=    x / y;  failed.\nx: {0} \texpected: -7.5\n", x);
+            pass = false;
+        }
+
+        x = f24(-10.0F, 4.0F);
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f24     x -=    x % y;  failed.\nx: {0} \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = f30(-10.0F, 4.0F);
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f30     x *=    x + y;  failed.\nx: {0} \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = f31(-10.0F, 4.0F);
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f31     x *=    x - y;  failed.\nx: {0} \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = f32(-10.0F, 4.0F);
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f32     x *=    x * y;  failed.\nx: {0} \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = f33(-10.0F, 4.0F);
+        if (x != 25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f33     x *=    x / y;  failed.\nx: {0} \texpected: 25\n", x);
+            pass = false;
+        }
+
+        x = f34(-10.0F, 4.0F);
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f34     x *=    x % y;  failed.\nx: {0} \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = f40(-10.0F, 4.0F);
+        if ((x - 1.66666663F) > Single.Epsilon)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f40     x /=    x + y;  failed.\nx: {0} \texpected: 1.66666663F\n", x);
+            pass = false;
+        }
+
+        x = f41(-10.0F, 4.0F);
+        if (!x.Equals(0.714285731F))
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f41     x /=    x - y;  failed.\nx: {0} \texpected: 0.714285731F\n", x);
+            pass = false;
+        }
+
+        x = f42(-10.0F, 4.0F);
+        if (x != 0.25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f42     x /=    x * y;  failed.\nx: {0} \texpected: 0.25\n", x);
+            pass = false;
+        }
+
+        x = f43(-10.0F, 4.0F);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f43     x /=    x / y;  failed.\nx: {0} \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f44(-10.0F, 4.0F);
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("f44     x /=    x % y;  failed.\nx: {0} \texpected: 5\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/r4.csproj b/tests/src/JIT/Methodical/AsgOp/r4/r4.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r4/r4flat.cs b/tests/src/JIT/Methodical/AsgOp/r4/r4flat.cs
new file mode 100644 (file)
index 0000000..4b8297b
--- /dev/null
@@ -0,0 +1,273 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    public static int Main()
+    {
+        float x;
+        float y;
+
+        bool pass = true;
+
+        x = -10.0F;
+        y = 4.0F;
+        x = x + y;
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x = x + y failed.       x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x = x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x = x - y failed.       x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x = x * y;
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x = x * y failed.       x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x = x / y;
+        if (x != -2.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x = x / y failed.       x: {0}, \texpected: -2.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x = x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x = x % y failed.       x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x += x + y;
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x += x + y failed.      x: {0}, \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x += x - y;
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x += x - y failed.      x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x += x * y;
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x += x * y failed.      x: {0}, \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x += x / y;
+        if (x != -12.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x += x / y failed.      x: {0}, \texpected: -12.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x += x % y;
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x += x % y failed.      x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x -= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x -= x + y failed.      x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x -= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x -= x - y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x -= x * y;
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x -= x * y failed.      x: {0}, \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x -= x / y;
+        if (x != -7.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x -= x / y failed.      x: {0}, \texpected: -7.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x -= x % y;
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x -= x % y failed.      x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x *= x + y;
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x *= x + y failed.      x: {0}, \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x *= x - y;
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x *= x - y failed.      x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x *= x * y;
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x *= x * y failed.      x: {0}, \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x *= x / y;
+        if (x != 25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x *= x / y failed.      x: {0}, \texpected: 25\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x *= x % y;
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x *= x % y failed.      x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x /= x + y;
+        if (!x.Equals(1.66666663F))
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x /= x + y failed.      x: {0}, \texpected: 1.66666663F\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x /= x - y;
+        if (!x.Equals(0.714285731F))
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x /= x - y failed.      x: {0}, \texpected: 0.714285731F\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x /= x * y;
+        if (x != 0.25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x /= x * y failed.      x: {0}, \texpected: 0.25\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x /= x / y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x /= x / y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10.0F;
+        y = 4.0F;
+        x /= x % y;
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0F and y is 4.0F");
+            Console.WriteLine("x /= x % y failed.      x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/app.config b/tests/src/JIT/Methodical/AsgOp/r8/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/cs_template.proj b/tests/src/JIT/Methodical/AsgOp/r8/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/packages.config b/tests/src/JIT/Methodical/AsgOp/r8/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/r8.cs b/tests/src/JIT/Methodical/AsgOp/r8/r8.cs
new file mode 100644 (file)
index 0000000..bf2e2e4
--- /dev/null
@@ -0,0 +1,372 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    private static double f00(double x, double y)
+    {
+        x = x + y;
+        return x;
+    }
+
+    private static double f01(double x, double y)
+    {
+        x = x - y;
+        return x;
+    }
+
+    private static double f02(double x, double y)
+    {
+        x = x * y;
+        return x;
+    }
+
+    private static double f03(double x, double y)
+    {
+        x = x / y;
+        return x;
+    }
+
+    private static double f04(double x, double y)
+    {
+        x = x % y;
+        return x;
+    }
+
+    private static double f10(double x, double y)
+    {
+        x += x + y;
+        return x;
+    }
+
+    private static double f11(double x, double y)
+    {
+        x += x - y;
+        return x;
+    }
+
+    private static double f12(double x, double y)
+    {
+        x += x * y;
+        return x;
+    }
+
+    private static double f13(double x, double y)
+    {
+        x += x / y;
+        return x;
+    }
+
+    private static double f14(double x, double y)
+    {
+        x += x % y;
+        return x;
+    }
+
+    private static double f20(double x, double y)
+    {
+        x -= x + y;
+        return x;
+    }
+
+    private static double f21(double x, double y)
+    {
+        x -= x - y;
+        return x;
+    }
+
+    private static double f22(double x, double y)
+    {
+        x -= x * y;
+        return x;
+    }
+
+    private static double f23(double x, double y)
+    {
+        x -= x / y;
+        return x;
+    }
+
+    private static double f24(double x, double y)
+    {
+        x -= x % y;
+        return x;
+    }
+
+    private static double f30(double x, double y)
+    {
+        x *= x + y;
+        return x;
+    }
+
+    private static double f31(double x, double y)
+    {
+        x *= x - y;
+        return x;
+    }
+
+    private static double f32(double x, double y)
+    {
+        x *= x * y;
+        return x;
+    }
+
+    private static double f33(double x, double y)
+    {
+        x *= x / y;
+        return x;
+    }
+
+    private static double f34(double x, double y)
+    {
+        x *= x % y;
+        return x;
+    }
+
+    private static double f40(double x, double y)
+    {
+        x /= x + y;
+        return x;
+    }
+
+    private static double f41(double x, double y)
+    {
+        x /= x - y;
+        return x;
+    }
+
+    private static double f42(double x, double y)
+    {
+        x /= x * y;
+        return x;
+    }
+
+    private static double f43(double x, double y)
+    {
+        x /= x / y;
+        return x;
+    }
+
+    private static double f44(double x, double y)
+    {
+        x /= x % y;
+        return x;
+    }
+
+
+    public static int Main()
+    {
+        double x;
+        bool pass = true;
+
+        x = f00(-10.0, 4.0);
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f00     x =     x + y;  failed.\nx: {0} \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = f01(-10.0, 4.0);
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f01     x =     x - y;  failed.\nx: {0} \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = f02(-10.0, 4.0);
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f02     x =     x * y;  failed.\nx: {0} \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = f03(-10.0, 4.0);
+        if (x != -2.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f03     x =     x / y;  failed.\nx: {0} \texpected: -2.5\n", x);
+            pass = false;
+        }
+
+        x = f04(-10.0, 4.0);
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f04     x =     x % y;  failed.\nx: {0} \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = f10(-10.0, 4.0);
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f10     x +=    x + y;  failed.\nx: {0} \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = f11(-10.0, 4.0);
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f11     x +=    x - y;  failed.\nx: {0} \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = f12(-10.0, 4.0);
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f12     x +=    x * y;  failed.\nx: {0} \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = f13(-10.0, 4.0);
+        if (x != -12.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f13     x +=    x / y;  failed.\nx: {0} \texpected: -12.5\n", x);
+            pass = false;
+        }
+
+        x = f14(-10.0, 4.0);
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f14     x +=    x % y;  failed.\nx: {0} \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = f20(-10.0, 4.0);
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f20     x -=    x + y;  failed.\nx: {0} \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = f21(-10.0, 4.0);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f21     x -=    x - y;  failed.\nx: {0} \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f22(-10.0, 4.0);
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f22     x -=    x * y;  failed.\nx: {0} \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = f23(-10.0, 4.0);
+        if (x != -7.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f23     x -=    x / y;  failed.\nx: {0} \texpected: -7.5\n", x);
+            pass = false;
+        }
+
+        x = f24(-10.0, 4.0);
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f24     x -=    x % y;  failed.\nx: {0} \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = f30(-10.0, 4.0);
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f30     x *=    x + y;  failed.\nx: {0} \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = f31(-10.0, 4.0);
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f31     x *=    x - y;  failed.\nx: {0} \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = f32(-10.0, 4.0);
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f32     x *=    x * y;  failed.\nx: {0} \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = f33(-10.0, 4.0);
+        if (x != 25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f33     x *=    x / y;  failed.\nx: {0} \texpected: 25\n", x);
+            pass = false;
+        }
+
+        x = f34(-10.0, 4.0);
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f34     x *=    x % y;  failed.\nx: {0} \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = f40(-10.0, 4.0);
+        if (!x.Equals(1.6666666666666667D))
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f40     x /=    x + y;  failed.\nx: {0} \texpected: 1.6666666666666667\n", x);
+            pass = false;
+        }
+
+        x = f41(-10.0, 4.0);
+        if (!x.Equals(0.7142857142857143))
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f41     x /=    x - y;  failed.\nx: {0} \texpected: 0.7142857142857143\n", x);
+            pass = false;
+        }
+
+        x = f42(-10.0, 4.0);
+        if (x != 0.25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f42     x /=    x * y;  failed.\nx: {0} \texpected: 0.25\n", x);
+            pass = false;
+        }
+
+        x = f43(-10.0, 4.0);
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f43     x /=    x / y;  failed.\nx: {0} \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = f44(-10.0, 4.0);
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("f44     x /=    x % y;  failed.\nx: {0} \texpected: 5\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/r8.csproj b/tests/src/JIT/Methodical/AsgOp/r8/r8.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/AsgOp/r8/r8flat.cs b/tests/src/JIT/Methodical/AsgOp/r8/r8flat.cs
new file mode 100644 (file)
index 0000000..c3ed2cd
--- /dev/null
@@ -0,0 +1,273 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class test
+{
+    public static int Main()
+    {
+        double x;
+        double y;
+
+        bool pass = true;
+
+        x = -10.0;
+        y = 4.0;
+        x = x + y;
+        if (x != -6)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x = x + y failed.       x: {0}, \texpected: -6\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x = x - y;
+        if (x != -14)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x = x - y failed.       x: {0}, \texpected: -14\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x = x * y;
+        if (x != -40)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x = x * y failed.       x: {0}, \texpected: -40\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x = x / y;
+        if (x != -2.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x = x / y failed.       x: {0}, \texpected: -2.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x = x % y;
+        if (x != -2)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x = x % y failed.       x: {0}, \texpected: -2\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x += x + y;
+        if (x != -16)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x += x + y failed.      x: {0}, \texpected: -16\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x += x - y;
+        if (x != -24)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x += x - y failed.      x: {0}, \texpected: -24\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x += x * y;
+        if (x != -50)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x += x * y failed.      x: {0}, \texpected: -50\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x += x / y;
+        if (x != -12.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x += x / y failed.      x: {0}, \texpected: -12.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x += x % y;
+        if (x != -12)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x += x % y failed.      x: {0}, \texpected: -12\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x -= x + y;
+        if (x != -4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x -= x + y failed.      x: {0}, \texpected: -4\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x -= x - y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x -= x - y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x -= x * y;
+        if (x != 30)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x -= x * y failed.      x: {0}, \texpected: 30\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x -= x / y;
+        if (x != -7.5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x -= x / y failed.      x: {0}, \texpected: -7.5\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x -= x % y;
+        if (x != -8)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x -= x % y failed.      x: {0}, \texpected: -8\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x *= x + y;
+        if (x != 60)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x *= x + y failed.      x: {0}, \texpected: 60\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x *= x - y;
+        if (x != 140)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x *= x - y failed.      x: {0}, \texpected: 140\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x *= x * y;
+        if (x != 400)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x *= x * y failed.      x: {0}, \texpected: 400\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x *= x / y;
+        if (x != 25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x *= x / y failed.      x: {0}, \texpected: 25\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x *= x % y;
+        if (x != 20)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x *= x % y failed.      x: {0}, \texpected: 20\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x /= x + y;
+        if (x != 1.6666666666666667)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x /= x + y failed.      x: {0}, \texpected: 1.6666666666666667\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x /= x - y;
+        if (x != 0.7142857142857143)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x /= x - y failed.      x: {0}, \texpected: 0.7142857142857143\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x /= x * y;
+        if (x != 0.25)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x /= x * y failed.      x: {0}, \texpected: 0.25\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x /= x / y;
+        if (x != 4)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x /= x / y failed.      x: {0}, \texpected: 4\n", x);
+            pass = false;
+        }
+
+        x = -10.0;
+        y = 4.0;
+        x /= x % y;
+        if (x != 5)
+        {
+            Console.WriteLine("\nInitial parameters: x is -10.0 and y is 4.0");
+            Console.WriteLine("x /= x % y failed.      x: {0}, \texpected: 5\n", x);
+            pass = false;
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+            return 1;
+    }
+}
diff --git a/tests/src/JIT/Methodical/Boxing/misc/app.config b/tests/src/JIT/Methodical/Boxing/misc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Boxing/misc/cs_template.proj b/tests/src/JIT/Methodical/Boxing/misc/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Boxing/misc/enum.cs b/tests/src/JIT/Methodical/Boxing/misc/enum.cs
new file mode 100644 (file)
index 0000000..b213f61
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace BoxTest
+{
+    internal enum ToPrintOrNotToPrint
+    {
+        Print,
+        DoNotPrint
+    }
+
+    internal class Test
+    {
+        protected object Fibonacci(object num, object flag)
+        {
+            if ((ToPrintOrNotToPrint)flag == ToPrintOrNotToPrint.DoNotPrint)
+                return Fibonacci2(num, flag);
+            if (((int)num % 2) == 0)
+                return Fibonacci2(num, flag);
+            return Fibonacci2(num, flag);
+        }
+
+        protected object Fibonacci2(object num, object flag)
+        {
+            int N;
+            if ((int)num <= 1)
+                N = (int)num;
+            else
+                N = (int)Fibonacci((int)num - 2,
+                        ToPrintOrNotToPrint.DoNotPrint) + (int)Fibonacci((int)num - 1, flag);
+            if ((ToPrintOrNotToPrint)flag == ToPrintOrNotToPrint.Print)
+                Console.Write(N.ToString() + " ");
+            return N;
+        }
+
+        private static int Main()
+        {
+            new Test().Fibonacci(20, ToPrintOrNotToPrint.Print);
+            Console.WriteLine();
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Boxing/misc/misc.csproj b/tests/src/JIT/Methodical/Boxing/misc/misc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Boxing/misc/nestval.cs b/tests/src/JIT/Methodical/Boxing/misc/nestval.cs
new file mode 100644 (file)
index 0000000..2aa4f72
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace BoxTest
+{
+    internal struct MyBool { public bool val; }
+    internal struct MyInt { public int val; }
+
+    internal struct ArgInfo
+    {
+        public MyBool m_flag;
+        public MyInt m_num;
+    }
+
+    internal class Test
+    {
+        protected object Fibonacci(object args)
+        {
+            if (args.GetType() != typeof(ArgInfo))
+                throw new Exception();
+            return FibonacciImpl(args);
+        }
+
+        protected object FibonacciImpl(object args)
+        {
+            object N;
+            if (((ArgInfo)args).m_num.val <= 1)
+                N = ((ArgInfo)args).m_num.val;
+            else
+            {
+                ArgInfo newargs1 = new ArgInfo();
+                newargs1.m_num.val = ((ArgInfo)args).m_num.val - 2;
+                newargs1.m_flag.val = false;
+                ArgInfo newargs2 = new ArgInfo();
+                newargs2.m_num.val = ((ArgInfo)args).m_num.val - 1;
+                newargs2.m_flag.val = ((ArgInfo)args).m_flag.val;
+                N = (int)Fibonacci(newargs1) + (int)Fibonacci(newargs2);
+            }
+            if (((ArgInfo)args).m_flag.val)
+            {
+                if ((((ArgInfo)args).m_num.val % 2) == 0)
+                    Console.Write(N.ToString() + " ");
+                else
+                    Console.Write(N.ToString() + " ");
+            }
+            return N;
+        }
+
+        private static int Main()
+        {
+            ArgInfo args = new ArgInfo();
+            args.m_flag.val = true;
+            args.m_num.val = 20;
+            new Test().Fibonacci(args);
+            Console.WriteLine();
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Boxing/misc/packages.config b/tests/src/JIT/Methodical/Boxing/misc/packages.config
new file mode 100644 (file)
index 0000000..c5ec75f
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
diff --git a/tests/src/JIT/Methodical/Boxing/misc/tailjump.cs b/tests/src/JIT/Methodical/Boxing/misc/tailjump.cs
new file mode 100644 (file)
index 0000000..a645651
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace BoxTest
+{
+    internal class Test
+    {
+        protected object Fibonacci(object num, object flag)
+        {
+            if ((bool)flag)
+                return Fibonacci2(num, flag);
+            if (((int)num % 2) == 0)
+                return Fibonacci2(num, flag);
+            return Fibonacci2(num, flag);
+        }
+
+        protected object Fibonacci2(object num, object flag)
+        {
+            int N;
+            if ((int)num <= 1)
+                N = (int)num;
+            else
+                N = (int)Fibonacci((int)num - 2, false) + (int)Fibonacci((int)num - 1, flag);
+            if ((bool)flag)
+                Console.Write(N.ToString() + " ");
+            return N;
+        }
+
+        private static int Main()
+        {
+            new Test().Fibonacci(20, true);
+            Console.WriteLine();
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Coverage/Coverage.csproj b/tests/src/JIT/Methodical/Coverage/Coverage.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Coverage/app.config b/tests/src/JIT/Methodical/Coverage/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Coverage/b433189.cs b/tests/src/JIT/Methodical/Coverage/b433189.cs
new file mode 100644 (file)
index 0000000..d9e4ed0
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.Security;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Collections;
+
+public delegate void MyDelegate();
+
+public class GenType<T>
+{
+    [MethodImplAttribute(MethodImplOptions.NoInlining)]
+    public void foo()
+    {
+        bar();
+    }
+
+    public MyDelegate bar()
+    {
+        return new MyDelegate(this.baz);
+    }
+
+    [MethodImplAttribute(MethodImplOptions.NoInlining)]
+    public virtual void baz()
+    {
+    }
+}
+
+public class cs1
+{
+    internal static int s_Zero = 0;
+    internal static int s_i = 0;
+
+    public cs1()
+    {
+    }
+
+    [MethodImplAttribute(MethodImplOptions.NoInlining)]
+    public static void foo()
+    {
+    }
+
+    public static int Main(String[] args)
+    {
+        try
+        {
+            GenType<string> o = new GenType<string>();
+            o.foo();
+            Console.WriteLine("Test SUCCESS");
+            return 100;
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine(ex);
+            Console.WriteLine("Test FAILED");
+            return 666;
+        }
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/Coverage/cs_template.proj b/tests/src/JIT/Methodical/Coverage/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Coverage/packages.config b/tests/src/JIT/Methodical/Coverage/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/FPtrunc/FPtrunc.csproj b/tests/src/JIT/Methodical/FPtrunc/FPtrunc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/FPtrunc/app.config b/tests/src/JIT/Methodical/FPtrunc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/FPtrunc/convr4a.cs b/tests/src/JIT/Methodical/FPtrunc/convr4a.cs
new file mode 100644 (file)
index 0000000..6f1fb41
--- /dev/null
@@ -0,0 +1,353 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//testing float narrowing upon conv.r4 explicit cast
+
+using System;
+
+public struct VT
+{
+    public float f1;
+    public float delta1;
+    public int a1;
+    public float b1;
+    public float temp;
+}
+
+public class CL
+{
+    //used for add and sub
+    public float f1 = 1.0F;
+    public float delta1 = 1.0E-10F;
+    //used for mul and div
+    public int a1 = 3;
+    public float b1 = (1.0F / 3.0F);
+    //used as temp variable
+    public float temp;
+}
+
+public class ConvR4test
+{
+    //static field of a1 class
+    private static float s_f1 = 1.0F;
+    private static float s_delta1 = 1.0E-10F;
+    private static int s_a1 = 3;
+    private static float s_b1 = (1.0F / 3.0F);
+
+    private static void disableInline(ref int x) { }
+
+    //f1 and delta1 are static filed of a1 class
+    private static float floatadd()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 + s_delta1;
+    }
+
+    private static float floatsub()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 - s_delta1;
+    }
+
+    private static float floatmul()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_a1 * s_b1;
+    }
+
+    private static float floatdiv()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 / s_a1;
+    }
+
+    private static float floatadd_inline()
+    {
+        return s_f1 + s_delta1;
+    }
+
+    private static float floatsub_inline()
+    {
+        return s_f1 - s_delta1;
+    }
+
+    private static float floatmul_inline()
+    {
+        return s_a1 * s_b1;
+    }
+
+    private static float floatdiv_inline()
+    {
+        return s_f1 / s_a1;
+    }
+
+    public static int Main()
+    {
+        bool pass = true;
+
+        float temp;
+        float[] arr = new float[3];
+        VT vt1;
+        CL cl1 = new CL();
+
+        //*** add ***
+        Console.WriteLine();
+        Console.WriteLine("***add***");
+
+        //local, in-line
+        if (((float)(s_f1 + s_delta1)) != s_f1)
+        {
+            Console.WriteLine("((float)(f1+delta1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 + s_delta1;
+        if (((float)temp) != s_f1)
+        {
+            Console.WriteLine("((float)temp)!=f1, temp=f1+delta1");
+            pass = false;
+        }
+
+        //method call
+        if (((float)floatadd()) != s_f1)
+        {
+            Console.WriteLine("((float)floatadd())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((float)floatadd_inline()) != s_f1)
+        {
+            Console.WriteLine("((float)floatadd_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_delta1;
+        arr[2] = arr[0] + arr[1];
+        if (((float)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((float)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0F;
+        vt1.delta1 = 1.0E-10F;
+        vt1.temp = vt1.f1 + vt1.delta1;
+        if (((float)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 + cl1.delta1;
+        if (((float)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** minus ***
+        Console.WriteLine();
+        Console.WriteLine("***sub***");
+
+        //local, in-line
+        if (((float)(s_f1 - s_delta1)) != s_f1)
+        {
+            Console.WriteLine("((float)(f1-delta1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 - s_delta1;
+        if (((float)temp) != s_f1)
+        {
+            Console.WriteLine("((float)temp)!=f1, temp=f1-delta1");
+            pass = false;
+        }
+
+        //method call
+        if (((float)floatsub()) != s_f1)
+        {
+            Console.WriteLine("((float)floatsub())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((float)floatsub_inline()) != s_f1)
+        {
+            Console.WriteLine("((float)floatsub_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_delta1;
+        arr[2] = arr[0] - arr[1];
+        if (((float)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((float)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0F;
+        vt1.delta1 = 1.0E-10F;
+        vt1.temp = vt1.f1 - vt1.delta1;
+        if (((float)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 - cl1.delta1;
+        if (((float)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** multiply ***
+        Console.WriteLine();
+        Console.WriteLine("***mul***");
+
+        //local, in-line
+        if (((float)(s_a1 * s_b1)) != s_f1)
+        {
+            Console.WriteLine("((float)(a1*b1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_a1 * s_b1;
+        if (((float)temp) != s_f1)
+        {
+            Console.WriteLine("((float)temp)!=f1, temp=a1*b1");
+            pass = false;
+        }
+
+        //method call
+        if (((float)floatmul()) != s_f1)
+        {
+            Console.WriteLine("((float)floatmul())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((float)floatmul_inline()) != s_f1)
+        {
+            Console.WriteLine("((float)floatmul_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_a1;
+        arr[1] = s_b1;
+        arr[2] = arr[0] * arr[1];
+        if (((float)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((float)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.a1 = 3;
+        vt1.b1 = 1.0F / 3.0F;
+        vt1.temp = vt1.a1 * vt1.b1;
+        if (((float)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.a1 * cl1.b1;
+        if (((float)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((float)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** divide ***
+        Console.WriteLine();
+        Console.WriteLine("***div***");
+
+        //local, in-line
+        if (((float)(s_f1 / s_a1)) != s_b1)
+        {
+            Console.WriteLine("((float)(f1/a1))!=b1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 / s_a1;
+        if (((float)temp) != s_b1)
+        {
+            Console.WriteLine("((float)temp)!=f1, temp=f1/a1");
+            pass = false;
+        }
+
+        //method call
+        if (((float)floatdiv()) != s_b1)
+        {
+            Console.WriteLine("((float)floatdivl())!=b1");
+            pass = false;
+        }
+
+        //method call
+        if (((float)floatdiv_inline()) != s_b1)
+        {
+            Console.WriteLine("((float)floatdiv_inline())!=b1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_a1;
+        arr[2] = arr[0] / arr[1];
+        if (((float)arr[2]) != s_b1)
+        {
+            Console.WriteLine("((float)arr[2])!=b1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0F;
+        vt1.a1 = 3;
+        vt1.temp = vt1.f1 / vt1.a1;
+        if (((float)vt1.temp) != s_b1)
+        {
+            Console.WriteLine("((float)vt1.temp)!=b1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 / cl1.a1;
+        if (((float)cl1.temp) != s_b1)
+        {
+            Console.WriteLine("((float)cl1.temp)!=b1");
+            pass = false;
+        }
+
+        Console.WriteLine();
+        if (pass)
+        {
+            Console.WriteLine("SUCCESS");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILURE: float not truncated properly");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/FPtrunc/convr8a.cs b/tests/src/JIT/Methodical/FPtrunc/convr8a.cs
new file mode 100644 (file)
index 0000000..603aa2d
--- /dev/null
@@ -0,0 +1,353 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//testing double narrowing
+
+using System;
+
+public struct VT
+{
+    public double f1;
+    public double delta1;
+    public int a1;
+    public double b1;
+    public double temp;
+}
+
+public class CL
+{
+    //used for add and sub
+    public double f1 = 1.0;
+    public double delta1 = 1.0E-18;
+    //used for mul and div
+    public int a1 = 3;
+    public double b1 = (1.0 / 3.0);
+    //used as temp variable
+    public double temp;
+}
+
+public class ConvR8test
+{
+    //static field of a1 class
+    private static double s_f1 = 1.0;
+    private static double s_delta1 = 1.0E-18;
+    private static int s_a1 = 3;
+    private static double s_b1 = (1.0 / 3.0);
+
+    private static void disableInline(ref int x) { }
+
+    //f1 and delta1 are static filed of a1 class
+    private static double doubleadd()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 + s_delta1;
+    }
+
+    private static double doublesub()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 - s_delta1;
+    }
+
+    private static double doublemul()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_a1 * s_b1;
+    }
+
+    private static double doublediv()
+    {
+        int i = 0;
+        disableInline(ref i);
+        return s_f1 / s_a1;
+    }
+
+    private static double doubleadd_inline()
+    {
+        return s_f1 + s_delta1;
+    }
+
+    private static double doublesub_inline()
+    {
+        return s_f1 - s_delta1;
+    }
+
+    private static double doublemul_inline()
+    {
+        return s_a1 * s_b1;
+    }
+
+    private static double doublediv_inline()
+    {
+        return s_f1 / s_a1;
+    }
+
+    public static int Main()
+    {
+        bool pass = true;
+
+        double temp;
+        double[] arr = new double[3];
+        VT vt1;
+        CL cl1 = new CL();
+
+        //*** add ***
+        Console.WriteLine();
+        Console.WriteLine("***add***");
+
+        //local, in-line
+        if (((double)(s_f1 + s_delta1)) != s_f1)
+        {
+            Console.WriteLine("((double)(f1+delta1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 + s_delta1;
+        if (((double)temp) != s_f1)
+        {
+            Console.WriteLine("((double)temp)!=f1, temp=f1+delta1");
+            pass = false;
+        }
+
+        //method call
+        if (((double)doubleadd()) != s_f1)
+        {
+            Console.WriteLine("((double)doubleadd())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((double)doubleadd_inline()) != s_f1)
+        {
+            Console.WriteLine("((double)doubleadd_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_delta1;
+        arr[2] = arr[0] + arr[1];
+        if (((double)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((double)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0;
+        vt1.delta1 = 1.0E-18;
+        vt1.temp = vt1.f1 + vt1.delta1;
+        if (((double)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 + cl1.delta1;
+        if (((double)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** minus ***
+        Console.WriteLine();
+        Console.WriteLine("***sub***");
+
+        //local, in-line
+        if (((double)(s_f1 - s_delta1)) != s_f1)
+        {
+            Console.WriteLine("((double)(f1-delta1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 - s_delta1;
+        if (((double)temp) != s_f1)
+        {
+            Console.WriteLine("((double)temp)!=f1, temp=f1-delta1");
+            pass = false;
+        }
+
+        //method call
+        if (((double)doublesub()) != s_f1)
+        {
+            Console.WriteLine("((double)doublesub())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((double)doublesub_inline()) != s_f1)
+        {
+            Console.WriteLine("((double)doublesub_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_delta1;
+        arr[2] = arr[0] - arr[1];
+        if (((double)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((double)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0;
+        vt1.delta1 = 1.0E-18;
+        vt1.temp = vt1.f1 - vt1.delta1;
+        if (((double)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 - cl1.delta1;
+        if (((double)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** multiply ***
+        Console.WriteLine();
+        Console.WriteLine("***mul***");
+
+        //local, in-line
+        if (((double)(s_a1 * s_b1)) != s_f1)
+        {
+            Console.WriteLine("((double)(a1*b1))!=f1");
+            pass = false;
+        }
+
+        //local
+        temp = s_a1 * s_b1;
+        if (((double)temp) != s_f1)
+        {
+            Console.WriteLine("((double)temp)!=f1, temp=a1*b1");
+            pass = false;
+        }
+
+        //method call
+        if (((double)doublemul()) != s_f1)
+        {
+            Console.WriteLine("((double)doublemul())!=f1");
+            pass = false;
+        }
+
+        //inline method call
+        if (((double)doublemul_inline()) != s_f1)
+        {
+            Console.WriteLine("((double)doublemul_inline())!=f1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_a1;
+        arr[1] = s_b1;
+        arr[2] = arr[0] * arr[1];
+        if (((double)arr[2]) != s_f1)
+        {
+            Console.WriteLine("((double)arr[2])!=f1");
+            pass = false;
+        }
+
+        //struct
+        vt1.a1 = 3;
+        vt1.b1 = 1.0 / 3.0;
+        vt1.temp = vt1.a1 * vt1.b1;
+        if (((double)vt1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)vt1.temp)!=f1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.a1 * cl1.b1;
+        if (((double)cl1.temp) != s_f1)
+        {
+            Console.WriteLine("((double)cl1.temp)!=f1");
+            pass = false;
+        }
+
+        //*** divide ***
+        Console.WriteLine();
+        Console.WriteLine("***div***");
+
+        //local, in-line
+        if (((double)(s_f1 / s_a1)) != s_b1)
+        {
+            Console.WriteLine("((double)(f1/a1))!=b1");
+            pass = false;
+        }
+
+        //local
+        temp = s_f1 / s_a1;
+        if (((double)temp) != s_b1)
+        {
+            Console.WriteLine("((double)temp)!=f1, temp=f1/a1");
+            pass = false;
+        }
+
+        //method call
+        if (((double)doublediv()) != s_b1)
+        {
+            Console.WriteLine("((double)doubledivl())!=b1");
+            pass = false;
+        }
+
+        //method call
+        if (((double)doublediv_inline()) != s_b1)
+        {
+            Console.WriteLine("((double)doublediv_inline())!=b1");
+            pass = false;
+        }
+
+        //array element
+        arr[0] = s_f1;
+        arr[1] = s_a1;
+        arr[2] = arr[0] / arr[1];
+        if (((double)arr[2]) != s_b1)
+        {
+            Console.WriteLine("((double)arr[2])!=b1");
+            pass = false;
+        }
+
+        //struct
+        vt1.f1 = 1.0;
+        vt1.a1 = 3;
+        vt1.temp = vt1.f1 / vt1.a1;
+        if (((double)vt1.temp) != s_b1)
+        {
+            Console.WriteLine("((double)vt1.temp)!=b1");
+            pass = false;
+        }
+
+        //class
+        cl1.temp = cl1.f1 / cl1.a1;
+        if (((double)cl1.temp) != s_b1)
+        {
+            Console.WriteLine("((double)cl1.temp)!=b1");
+            pass = false;
+        }
+
+        Console.WriteLine();
+        if (pass)
+        {
+            Console.WriteLine("SUCCESS");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILURE: double not truncated properly");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/FPtrunc/cs_template.proj b/tests/src/JIT/Methodical/FPtrunc/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/FPtrunc/packages.config b/tests/src/JIT/Methodical/FPtrunc/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/25params/25param1a.cs b/tests/src/JIT/Methodical/Invoke/25params/25param1a.cs
new file mode 100644 (file)
index 0000000..a8674c0
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+internal class test
+{
+    private static int f1(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        int sum = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
+            + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19
+            + a20 + a21 + a22 + a23 + a24 + a25;
+        Console.WriteLine("The sum is {0}", sum);
+        return sum;
+    }
+
+    private static int f(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a1);
+        Console.WriteLine(a2);
+        Console.WriteLine(a3);
+        Console.WriteLine(a4);
+        Console.WriteLine(a5);
+        Console.WriteLine(a6);
+        Console.WriteLine(a7);
+        Console.WriteLine(a8);
+        Console.WriteLine(a9);
+        Console.WriteLine(a10);
+        Console.WriteLine(a11);
+        Console.WriteLine(a12);
+        Console.WriteLine(a13);
+        Console.WriteLine(a14);
+        Console.WriteLine(a15);
+        Console.WriteLine(a16);
+        Console.WriteLine(a17);
+        Console.WriteLine(a18);
+        Console.WriteLine(a19);
+        Console.WriteLine(a20);
+        Console.WriteLine(a21);
+        Console.WriteLine(a22);
+        Console.WriteLine(a23);
+        Console.WriteLine(a24);
+        Console.WriteLine(a25);
+        int sum = f1(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int Main()
+    {
+        Console.WriteLine("Testing method of 25 parameters, all of int data type");
+        int sum = f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
+        if (sum == 325)
+            return 100;
+        else
+            return 1;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/Invoke/25params/25param2a.cs b/tests/src/JIT/Methodical/Invoke/25params/25param2a.cs
new file mode 100644 (file)
index 0000000..03b3fbf
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+internal struct VT
+{
+    public int m;
+}
+public class CL
+{
+    public int n;
+    public CL(int a)
+    {
+        n = a;
+    }
+}
+internal class test
+{
+    private static int f1(short a1, ushort a2, int a3, uint a4, long a5,
+            ulong a6, byte a7, sbyte a8, Decimal a9, int[] a10,
+            VT a11, CL a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        int sum = (int)(a1 + a2 + a3 + a4 + (int)a5 + (int)a6 + a7 + a8 + (int)a9 + a10[0]
+            + a11.m + a12.n + a13 + a14 + a15 + a16 + a17 + a18 + a19
+            + a20 + a21 + a22 + a23 + a24 + a25);
+        Console.WriteLine("The sum is {0}", sum);
+        return sum;
+    }
+
+    private static int f(short a1, ushort a2, int a3, uint a4, long a5,
+            ulong a6, byte a7, sbyte a8, Decimal a9, int[] a10,
+            VT a11, CL a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a1);
+        Console.WriteLine(a2);
+        Console.WriteLine(a3);
+        Console.WriteLine(a4);
+        Console.WriteLine(a5);
+        Console.WriteLine(a6);
+        Console.WriteLine(a7);
+        Console.WriteLine(a8);
+        Console.WriteLine(a9);
+        Console.WriteLine(a10[0]);
+        Console.WriteLine(a11.m);
+        Console.WriteLine(a12.n);
+        Console.WriteLine(a13);
+        Console.WriteLine(a14);
+        Console.WriteLine(a15);
+        Console.WriteLine(a16);
+        Console.WriteLine(a17);
+        Console.WriteLine(a18);
+        Console.WriteLine(a19);
+        Console.WriteLine(a20);
+        Console.WriteLine(a21);
+        Console.WriteLine(a22);
+        Console.WriteLine(a23);
+        Console.WriteLine(a24);
+        Console.WriteLine(a25);
+        int sum = f1(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int Main()
+    {
+        Console.WriteLine("Testing method of 25 parameters, mixed data type");
+        VT vt = new VT();
+        vt.m = 11;
+        CL cl = new CL(12);
+        int sum = f(1, 2, 3, 4, 5, 6, 7, 8, 9, new int[1] { 10 }, vt, cl, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
+        if (sum == 325) return 100;
+        else return 1;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/Invoke/25params/25param3a.cs b/tests/src/JIT/Methodical/Invoke/25params/25param3a.cs
new file mode 100644 (file)
index 0000000..f67fc04
--- /dev/null
@@ -0,0 +1,333 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// long chain of methods
+
+using System;
+internal class test
+{
+    private static int f1(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a1);
+        int sum = f2(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f2(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a2);
+        int sum = f3(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f3(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a3);
+        int sum = f4(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f4(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a4);
+        int sum = f5(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f5(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a5);
+        int sum = f6(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f6(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a6);
+        int sum = f7(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f7(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a7);
+        int sum = f8(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f8(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a8);
+        int sum = f9(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f9(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a9);
+        int sum = f10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f10(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a10);
+        int sum = f11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f11(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a11);
+        int sum = f12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f12(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a12);
+        int sum = f13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f13(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a13);
+        int sum = f14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f14(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a14);
+        int sum = f15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f15(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a15);
+        int sum = f16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f16(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a16);
+        int sum = f17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f17(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a17);
+        int sum = f18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f18(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a18);
+        int sum = f19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f19(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a19);
+        int sum = f20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f20(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a20);
+        int sum = f21(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f21(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a21);
+        int sum = f22(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f22(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a22);
+        int sum = f23(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f23(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a23);
+        int sum = f24(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f24(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a24);
+        int sum = f25(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int f25(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        Console.WriteLine(a25);
+        int sum = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
+            + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19
+            + a20 + a21 + a22 + a23 + a24 + a25;
+        return sum;
+    }
+
+
+    private static int f(int a1, int a2, int a3, int a4, int a5,
+            int a6, int a7, int a8, int a9, int a10,
+            int a11, int a12, int a13, int a14, int a15,
+            int a16, int a17, int a18, int a19, int a20,
+            int a21, int a22, int a23, int a24, int a25)
+    {
+        int sum = f1(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
+                a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
+        return sum;
+    }
+
+    private static int Main()
+    {
+        Console.WriteLine("Testing method of 25 parameters, all of int data type, long chain of method calls");
+        int sum = f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
+        Console.WriteLine("The sum is {0}", sum);
+        if (sum == 325)
+            return 100;
+        else
+            return 1;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/Invoke/25params/25params.csproj b/tests/src/JIT/Methodical/Invoke/25params/25params.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/25params/app.config b/tests/src/JIT/Methodical/Invoke/25params/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/25params/cs_template.proj b/tests/src/JIT/Methodical/Invoke/25params/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/25params/packages.config b/tests/src/JIT/Methodical/Invoke/25params/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/SEH.csproj b/tests/src/JIT/Methodical/Invoke/SEH/SEH.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/app.config b/tests/src/JIT/Methodical/Invoke/SEH/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/catchfinally.cs b/tests/src/JIT/Methodical/Invoke/SEH/catchfinally.cs
new file mode 100644 (file)
index 0000000..ffa095a
--- /dev/null
@@ -0,0 +1,110 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool s_globalFlag = false;
+
+        private static bool TestTryCatch(int recurseLevel)
+        {
+            if (recurseLevel > 1)
+            {
+                try
+                {
+                    if (s_globalFlag = !s_globalFlag)
+                    {
+                        //call recursively
+                        return TestTryFinally(recurseLevel - 2);
+                    }
+                    else
+                    {
+                        //raise an exception and allow the handler work
+                        int[] p = null;
+                        p[0] = 0;
+
+                        //paranoid check
+                        Console.WriteLine("Shouldn't have reached here.");
+                        throw new Exception();
+                    }
+                }
+                catch (NullReferenceException)
+                {
+                    return TestTryCatch(recurseLevel);
+                }
+            }
+            return recurseLevel == 0;
+        }
+
+        private static bool TestTryFinally(int recurseLevel)
+        {
+            if (recurseLevel > 1)
+            {
+                bool ret = false;
+                try
+                {
+                    bool runHandler = false;
+                    try
+                    {
+                        if (s_globalFlag = !s_globalFlag)
+                        {
+                            //call recursively
+                            return TestTryCatch(recurseLevel - 2);
+                        }
+                        else
+                        {
+                            runHandler = true;
+
+                            //raise an exception and allow the handler work
+                            int[] p = null;
+                            p[0] = 0;
+
+                            //paranoid check
+                            Console.WriteLine("Shouldn't have reached here.");
+                            throw new Exception();
+                        }
+                    }
+                    finally
+                    {
+                        if (runHandler)
+                        {
+                            ret = TestTryFinally(recurseLevel);
+                        }
+                    }
+                }
+                catch (NullReferenceException)
+                {
+                }
+                return ret;
+            }
+            return recurseLevel == 0;
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                if (TestTryCatch(15) || !TestTryCatch(18))
+                {
+                    Console.WriteLine("try...catch test failed.");
+                    return 1;
+                }
+                if (TestTryFinally(19) || !TestTryFinally(12))
+                {
+                    Console.WriteLine("try...finally test failed.");
+                    return 2;
+                }
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("Failed w/ exception");
+                return -1;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/catchfinally_tail.cs b/tests/src/JIT/Methodical/Invoke/SEH/catchfinally_tail.cs
new file mode 100644 (file)
index 0000000..3600024
--- /dev/null
@@ -0,0 +1,118 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test1
+    {
+        private static bool s_globalFlag = false,s_globalFlag2 = true;
+
+        private static bool TestTryCatch(int recurseLevel)
+        {
+            if (recurseLevel > 1)
+            {
+                try
+                {
+                    if (s_globalFlag = !s_globalFlag)
+                    {
+                        //call recursively
+                        return TestTryCatch(recurseLevel - 2);
+                    }
+                    else
+                    {
+                        //raise an exception and allow the handler work
+                        int[] p = null;
+                        p[0] = 0;
+
+                        //paranoid check
+                        Console.WriteLine("Shouldn't have reached here.");
+                        throw new Exception();
+                    }
+                }
+                catch (NullReferenceException)
+                {
+                    return Test(recurseLevel);
+                }
+            }
+            return recurseLevel == 0;
+        }
+
+        private static bool TestTryFinally(int recurseLevel)
+        {
+            if (recurseLevel > 1)
+            {
+                bool ret = false;
+                try
+                {
+                    bool runHandler = false;
+                    try
+                    {
+                        if (s_globalFlag = !s_globalFlag)
+                        {
+                            //call recursively
+                            return Test(recurseLevel - 2);
+                        }
+                        else
+                        {
+                            runHandler = true;
+
+                            //raise an exception and allow the handler work
+                            int[] p = null;
+                            p[0] = 0;
+
+                            //paranoid check
+                            Console.WriteLine("Shouldn't have reached here.");
+                            throw new Exception();
+                        }
+                    }
+                    finally
+                    {
+                        if (runHandler)
+                        {
+                            ret = TestTryCatch(recurseLevel);
+                        }
+                    }
+                }
+                catch (NullReferenceException)
+                {
+                }
+                return ret;
+            }
+            return recurseLevel == 0;
+        }
+
+        private static bool Test(int recurseLevel)
+        {
+            if (s_globalFlag2 = !s_globalFlag2)
+                return TestTryCatch(recurseLevel);
+            else
+                return TestTryFinally(recurseLevel);
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                if (TestTryCatch(15) || !TestTryCatch(18))
+                {
+                    Console.WriteLine("try...catch test failed.");
+                    return 1;
+                }
+                if (TestTryFinally(19) || !TestTryFinally(12))
+                {
+                    Console.WriteLine("try...finally test failed.");
+                    return 2;
+                }
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("Failed w/ exception");
+                return -1;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/cs_template.proj b/tests/src/JIT/Methodical/Invoke/SEH/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/SEH/packages.config b/tests/src/JIT/Methodical/Invoke/SEH/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/callvirt/app.config b/tests/src/JIT/Methodical/Invoke/callvirt/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/callvirt/callvirt.csproj b/tests/src/JIT/Methodical/Invoke/callvirt/callvirt.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/callvirt/cs_template.proj b/tests/src/JIT/Methodical/Invoke/callvirt/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/callvirt/packages.config b/tests/src/JIT/Methodical/Invoke/callvirt/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/callvirt/test1.cs b/tests/src/JIT/Methodical/Invoke/callvirt/test1.cs
new file mode 100644 (file)
index 0000000..4d66a03
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class Base
+    {
+        public double m;
+        public Base() { m = 1.0; }
+
+        public virtual Base[] Clone(int numOfCopies)
+        {
+            Base[] arr = new Base[numOfCopies];
+            for (int L = 0; L < numOfCopies; L++)
+                arr[L] = new Base();
+            return arr;
+        }
+    }
+
+    internal class Derived : Base
+    {
+        public Derived() { m = 2.0; }
+
+        public override Base[] Clone(int numOfCopies)
+        {
+            Derived[] arr = new Derived[numOfCopies];
+            for (int L = 0; L < numOfCopies; L++)
+                arr[L] = new Derived();
+            return arr;
+        }
+
+        private static int Main()
+        {
+            Base bas = new Derived();
+            bas = bas.Clone(11)[10];
+            if (bas.m != 2.0)
+            {
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            Derived derived = (Derived)bas;
+            bas = derived.Clone(11)[10];
+            if (bas.m != 2.0)
+            {
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/ctor/app.config b/tests/src/JIT/Methodical/Invoke/ctor/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/ctor/cs_template.proj b/tests/src/JIT/Methodical/Invoke/ctor/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/ctor/ctor.csproj b/tests/src/JIT/Methodical/Invoke/ctor/ctor.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/ctor/packages.config b/tests/src/JIT/Methodical/Invoke/ctor/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/ctor/val_ctor.cs b/tests/src/JIT/Methodical/Invoke/ctor/val_ctor.cs
new file mode 100644 (file)
index 0000000..9cbadcc
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct TestStruct
+    {
+        private long _m_testParam;
+        private static long s_m_sum = 0;
+
+        private TestStruct(ulong testParam)
+        {
+            _m_testParam = (long)testParam;
+            s_m_sum += _m_testParam;
+            if (s_m_sum < 100)
+            {
+                //In IL, this will be changed to newobj
+                TestStruct ts = new TestStruct(testParam + 1);
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                //In IL, this will be changed to newobj
+                TestStruct test = new TestStruct(0);
+                if (s_m_sum != 105)
+                {
+                    Console.WriteLine("Failed");
+                    return 1;
+                }
+            }
+            catch
+            {
+                Console.WriteLine("Failed w/ exception");
+                return 2;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/deep/app.config b/tests/src/JIT/Methodical/Invoke/deep/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/deep/cs_template.proj b/tests/src/JIT/Methodical/Invoke/deep/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/deep/deep.cs b/tests/src/JIT/Methodical/Invoke/deep/deep.cs
new file mode 100644 (file)
index 0000000..7d89f4a
--- /dev/null
@@ -0,0 +1,146 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static double[] Method(double arg1, float arg2, ref double refarg)
+        {
+            double[] ret = new double[4];
+            if (arg1 < 11.0)
+            {
+                ret[0] = arg1 + Method(arg1 + 1.0, arg2, ref refarg)[0];
+                ret[1] = arg2 + Method(arg1 + 2.0, arg2, ref ret[0])[1];
+                ret[2] = arg1 + arg2 + Method(arg1 + 3.0, arg2, ref ret[1])[2];
+                ret[3] = arg1 + arg2 * 2 + Method(arg1 + 4.0, arg2, ref ret[2])[3];
+            }
+            refarg += 1.0d;
+            return ret;
+        }
+
+        private static double Method2(double arg1, int arg2, double refarg)
+        {
+            double[] ret = new double[4];
+            if (arg1 < 11.0)
+            {
+                ret[0] = arg1 + Method2(arg1 + 1.0, arg2, refarg);
+                ret[1] = arg2 + Method2(arg1 + 2.0, arg2, ret[0]);
+                ret[2] = arg1 + arg2 + Method2(arg1 + 3.0, arg2, ret[1]);
+                ret[3] = arg1 + arg2 * 2 + Method2(arg1 + 4.0, arg2, ret[2]);
+            }
+            return ret[0] + ret[1] + ret[2] + ret[3];
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                double L = -1.0;
+                if (Method(0.0d, 1.0f, ref L)[3] != 18.0)
+                    throw new Exception();
+
+                L = Method2(
+
+                    Method(0.0d, 0.0f, ref
+                    Method(1.0d, 0.0f, ref
+                    Method(2.0d, 0.0f, ref
+                    Method(3.0d, 0.0f, ref
+                    Method(4.0d, 0.0f, ref
+                    Method(5.0d, 0.0f, ref
+                    Method(6.0d, 0.0f, ref
+                    Method(7.0d, 0.0f, ref
+                    Method(8.0d, 0.0f, ref
+                    Method(9.0d, 0.0f, ref
+                    Method(0.0d, 1.0f, ref
+                    Method(0.0d, 2.0f, ref
+                    Method(0.0d, 3.0f, ref
+                    Method(0.0d, 4.0f, ref
+                    Method(0.0d, 5.0f, ref
+                    Method(0.0d, 6.0f, ref
+                    Method(0.0d, 7.0f, ref
+                    Method(0.0d, 8.0f, ref
+                    Method(0.0d, 9.0f, ref
+                    Method(0.0d, 10.0f, ref
+                    Method(0.0d, 11.0f, ref
+                    Method(0.0d, 12.0f, ref L
+                    )[1]
+                    )[2]
+                    )[3]
+                    )[0]
+                    )[1]
+                    )[2]
+                    )[3]
+                    )[2]
+                    )[1]
+                    )[0]
+                    )[0]
+                    )[1]
+                    )[2]
+                    )[2]
+                    )[3]
+                    )[2]
+                    )[1]
+                    )[0]
+                    )[1]
+                    )[1]
+                    )[1]
+                    )[1]
+
+                    , 0,
+                    Method2(1.0d, 0,
+                    Method2(2.0d, 0,
+                    Method2(3.0d, 0,
+                    Method2(4.0d, 0,
+                    Method2(5.0d, 0,
+                    Method2(6.0d, 0,
+                    Method2(7.0d, 0,
+                    Method2(8.0d, 0,
+                    Method2(9.0d, 0,
+                    Method2(0.0d, 1,
+                    Method2(0.0d, 2,
+                    Method2(0.0d, 3,
+                    Method2(0.0d, 4,
+                    Method2(0.0d, 5,
+                    Method2(0.0d, 6,
+                    Method2(0.0d, 7,
+                    Method2(0.0d, 8,
+                    Method2(0.0d, 9,
+                    Method2(0.0d, 10,
+                    Method2(0.0d, 11,
+                    Method2(0.0d, 12, L
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    )
+                    );
+            }
+            catch
+            {
+                Console.WriteLine("Failed w/ exception");
+                return 1;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/deep/deep.csproj b/tests/src/JIT/Methodical/Invoke/deep/deep.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/deep/packages.config b/tests/src/JIT/Methodical/Invoke/deep/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/fptr/app.config b/tests/src/JIT/Methodical/Invoke/fptr/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/fptr/cs_template.proj b/tests/src/JIT/Methodical/Invoke/fptr/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/fptr/fptr.csproj b/tests/src/JIT/Methodical/Invoke/fptr/fptr.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/fptr/packages.config b/tests/src/JIT/Methodical/Invoke/fptr/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/fptr/recurse.cs b/tests/src/JIT/Methodical/Invoke/fptr/recurse.cs
new file mode 100644 (file)
index 0000000..35ee3fa
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace TestCase
+{
+    internal class Test
+    {
+        private static int Fact1(ref int arg, ref int result)
+        {
+            if (arg > 1)
+            {
+                result *= arg;
+                arg--;
+                return Fact1(ref arg, ref result);
+            }
+            return 0x12345;
+        }
+
+        private static int Main()
+        {
+            int arg = 6;
+            int result = 1;
+            if (Fact1(ref arg, ref result) != 0x12345)
+            {
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            if (result != 720)
+            {
+                Console.WriteLine("FAILED");
+                return 2;
+            }
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/implicit/app.config b/tests/src/JIT/Methodical/Invoke/implicit/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/implicit/cs_template.proj b/tests/src/JIT/Methodical/Invoke/implicit/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/implicit/implicit.csproj b/tests/src/JIT/Methodical/Invoke/implicit/implicit.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Invoke/implicit/obj.cs b/tests/src/JIT/Methodical/Invoke/implicit/obj.cs
new file mode 100644 (file)
index 0000000..b69af9b
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Base
+    {
+        public override String ToString() { return "Base class"; }
+    }
+
+    internal class Test : Base
+    {
+        public override String ToString() { return "Test class"; }
+
+        private static void TestFunc(Base obj)
+        {
+            Console.WriteLine(obj.ToString());
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                TestFunc(new Base());
+                TestFunc(new Test());
+            }
+            catch
+            {
+                Console.WriteLine("Failed w/ exception");
+                return 1;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Invoke/implicit/packages.config b/tests/src/JIT/Methodical/Invoke/implicit/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/GaussJordan.csproj b/tests/src/JIT/Methodical/MDArray/GaussJordan/GaussJordan.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/app.config b/tests/src/JIT/Methodical/MDArray/GaussJordan/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/classarr.cs b/tests/src/JIT/Methodical/MDArray/GaussJordan/classarr.cs
new file mode 100644 (file)
index 0000000..516e929
--- /dev/null
@@ -0,0 +1,184 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Solving AX=B and the inverse of A with Gauss-Jordan algorithm
+
+using System;
+
+internal class MatrixCls
+{
+    public double[,] arr;
+    public MatrixCls(int n, int m)
+    {
+        arr = new double[n, m];
+    }
+}
+
+internal class classarr
+{
+    private static double s_tolerance = 0.0000000000001;
+    public static bool AreEqual(double left, double right)
+    {
+        return Math.Abs(left - right) < s_tolerance;
+    }
+
+
+    public static void swap(double a, double b)
+    {
+        double temp;
+        temp = a;
+        a = b;
+        b = temp;
+    }
+
+    public static void gaussj(MatrixCls a, int n, MatrixCls b, int m)
+    {
+        int i, icol = 0, irow = 0, j, k, l, ll;
+        double big = 0.0, dum = 0.0, pivinv = 0.0;
+
+        int[] indxc = new int[3];
+        int[] indxr = new int[3];
+        int[] ipiv = new int[3];
+
+        for (j = 0; j < n; j++)
+            ipiv[j] = 0;
+
+        for (i = 0; i < n; i++)
+        {
+            big = 0.0;
+            for (j = 0; j < n; j++)
+                if (ipiv[j] != 1)
+                    for (k = 0; k < n; k++)
+                    {
+                        if (ipiv[k] == 0)
+                        {
+                            if (Math.Abs(a.arr[j, k]) >= big)
+                            {
+                                big = Math.Abs(a.arr[j, k]);
+                                irow = j;
+                                icol = k;
+                            }
+                        }
+                        else if (ipiv[k] > 1)
+                            Console.WriteLine("GAUSSJ: Singular matrix-1\n");
+                    }
+            ++(ipiv[icol]);
+            if (irow != icol)
+            {
+                for (l = 0; l < n; l++) swap(a.arr[irow, l], a.arr[icol, l]);
+                for (l = 0; l < m; l++) swap(b.arr[irow, l], b.arr[icol, l]);
+            }
+
+            indxr[i] = irow;
+            indxc[i] = icol;
+            if (a.arr[icol, icol] == 0.0)
+                Console.WriteLine("GAUSSJ: Singular Matrix-2. icol is {0}\n", icol);
+            pivinv = 1.0 / a.arr[icol, icol];
+            a.arr[icol, icol] = 1.0;
+            for (l = 0; l < n; l++) a.arr[icol, l] *= pivinv;
+            for (l = 0; l < m; l++) b.arr[icol, l] *= pivinv;
+            for (ll = 0; ll < n; ll++)
+                if (ll != icol)
+                {
+                    dum = a.arr[ll, icol];
+                    a.arr[ll, icol] = 0.0;
+                    for (l = 0; l < n; l++) a.arr[ll, l] -= a.arr[icol, l] * dum;
+                    for (l = 0; l < m; l++) b.arr[ll, l] -= b.arr[icol, l] * dum;
+                }
+        }
+        for (l = n - 1; l >= 0; l--)
+        {
+            if (indxr[l] != indxc[l])
+                for (k = 0; k < n; k++)
+                    swap(a.arr[k, indxr[l]], a.arr[k, indxc[l]]);
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        Console.WriteLine("Solving AX=B and the inverse of A with Gauss-Jordan algorithm");
+        int n = 3;
+        int m = 1;
+
+        MatrixCls a = new MatrixCls(3, 3);
+        MatrixCls b = new MatrixCls(3, 1);
+
+        a.arr[0, 0] = 1;
+        a.arr[0, 1] = 1;
+        a.arr[0, 2] = 1;
+        a.arr[1, 0] = 1;
+        a.arr[1, 1] = 2;
+        a.arr[1, 2] = 4;
+        a.arr[2, 0] = 1;
+        a.arr[2, 1] = 3;
+        a.arr[2, 2] = 9;
+
+        b.arr[0, 0] = -1;
+        b.arr[1, 0] = 3;
+        b.arr[2, 0] = 3;
+
+        /*
+               int i, j;
+                               
+               Console.WriteLine("Matrix A is \n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a.arr[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("Matrix B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b.arr[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        gaussj(a, n, b, m);
+
+        /*
+               Console.WriteLine();
+               Console.WriteLine("The inverse of matrix A is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a.arr[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("The solution X of AX=B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b.arr[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        if (
+               AreEqual(a.arr[0, 0], 3)
+            && AreEqual(a.arr[1, 1], 4)
+            && AreEqual(b.arr[0, 0], -9)
+            && AreEqual(b.arr[1, 0], 10)
+            )
+            pass = true;
+
+        if (!pass)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/cs_template.proj b/tests/src/JIT/Methodical/MDArray/GaussJordan/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/jaggedarr.cs b/tests/src/JIT/Methodical/MDArray/GaussJordan/jaggedarr.cs
new file mode 100644 (file)
index 0000000..8459080
--- /dev/null
@@ -0,0 +1,180 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Solving AX=B and the inverse of A with Gauss-Jordan algorithm
+
+using System;
+
+internal class jaggedarr
+{
+    public static double[][,] jaggeda;
+    public static double[][,] jaggedb;
+
+    private static double s_tolerance = 0.0000000000001;
+    public static bool AreEqual(double left, double right)
+    {
+        return Math.Abs(left - right) < s_tolerance;
+    }
+
+    public static void swap(double a, double b)
+    {
+        double temp;
+        temp = a;
+        a = b;
+        b = temp;
+    }
+
+    public static void gaussj(double[][,] a, int n, double[][,] b, int m)
+    {
+        int i, icol = 0, irow = 0, j, k, l, ll;
+        double big = 0.0, dum = 0.0, pivinv = 0.0;
+
+        int[] indxc = new int[3];
+        int[] indxr = new int[3];
+        int[] ipiv = new int[3];
+
+        for (j = 0; j < n; j++)
+            ipiv[j] = 0;
+
+        for (i = 0; i < n; i++)
+        {
+            big = 0.0;
+            for (j = 0; j < n; j++)
+                if (ipiv[j] != 1)
+                    for (k = 0; k < n; k++)
+                    {
+                        if (ipiv[k] == 0)
+                        {
+                            if (Math.Abs(jaggeda[2][j, k]) >= big)
+                            {
+                                big = Math.Abs(jaggeda[2][j, k]);
+                                irow = j;
+                                icol = k;
+                            }
+                        }
+                        else if (ipiv[k] > 1)
+                            Console.WriteLine("GAUSSJ: Singular matrix-1\n");
+                    }
+            ++(ipiv[icol]);
+            if (irow != icol)
+            {
+                for (l = 0; l < n; l++) swap(jaggeda[2][irow, l], jaggeda[2][icol, l]);
+                for (l = 0; l < m; l++) swap(jaggedb[1][irow, l], jaggedb[1][icol, l]);
+            }
+
+            indxr[i] = irow;
+            indxc[i] = icol;
+            if (jaggeda[2][icol, icol] == 0.0)
+                Console.WriteLine("GAUSSJ: Singular Matrix-2. icol is {0}\n", icol);
+            pivinv = 1.0 / jaggeda[2][icol, icol];
+            jaggeda[2][icol, icol] = 1.0;
+            for (l = 0; l < n; l++) jaggeda[2][icol, l] *= pivinv;
+            for (l = 0; l < m; l++) jaggedb[1][icol, l] *= pivinv;
+            for (ll = 0; ll < n; ll++)
+                if (ll != icol)
+                {
+                    dum = jaggeda[2][ll, icol];
+                    jaggeda[2][ll, icol] = 0.0;
+                    for (l = 0; l < n; l++) jaggeda[2][ll, l] -= jaggeda[2][icol, l] * dum;
+                    for (l = 0; l < m; l++) jaggedb[1][ll, l] -= jaggedb[1][icol, l] * dum;
+                }
+        }
+        for (l = n - 1; l >= 0; l--)
+        {
+            if (indxr[l] != indxc[l])
+                for (k = 0; k < n; k++)
+                    swap(jaggeda[2][k, indxr[l]], jaggeda[2][k, indxc[l]]);
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        Console.WriteLine("Solving AX=B and the inverse of A with Gauss-Jordan algorithm");
+        int n = 3;
+        int m = 1;
+
+        jaggeda = new double[3][,];
+        jaggeda[2] = new double[3, 3];
+
+        jaggedb = new double[5][,];
+        jaggedb[1] = new double[3, 1];
+
+        jaggeda[2][0, 0] = 1;
+        jaggeda[2][0, 1] = 1;
+        jaggeda[2][0, 2] = 1;
+        jaggeda[2][1, 0] = 1;
+        jaggeda[2][1, 1] = 2;
+        jaggeda[2][1, 2] = 4;
+        jaggeda[2][2, 0] = 1;
+        jaggeda[2][2, 1] = 3;
+        jaggeda[2][2, 2] = 9;
+
+        jaggedb[1][0, 0] = -1;
+        jaggedb[1][1, 0] = 3;
+        jaggedb[1][2, 0] = 3;
+
+        /*
+               int i, j;
+                               
+               Console.WriteLine("Matrix A is \n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", jaggeda[2][i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("Matrix B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", jaggedb[1][i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        gaussj(jaggeda, n, jaggedb, m);
+
+        /*
+               Console.WriteLine();
+               Console.WriteLine("The inverse of matrix A is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", jaggeda[2][i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("The solution X of AX=B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", jaggedb[1][i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        if (
+               AreEqual(jaggeda[2][0, 0], 3)
+            && AreEqual(jaggeda[2][1, 1], 4)
+            && AreEqual(jaggedb[1][0, 0], -9)
+            && AreEqual(jaggedb[1][1, 0], 10)
+            )
+            pass = true;
+
+        if (!pass)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/packages.config b/tests/src/JIT/Methodical/MDArray/GaussJordan/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/plainarr.cs b/tests/src/JIT/Methodical/MDArray/GaussJordan/plainarr.cs
new file mode 100644 (file)
index 0000000..0bade51
--- /dev/null
@@ -0,0 +1,174 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Solving AX=B and the inverse of A with Gauss-Jordan algorithm
+
+using System;
+
+internal class plainarr
+{
+    private static double s_tolerance = 0.0000000000001;
+    public static bool AreEqual(double left, double right)
+    {
+        return Math.Abs(left - right) < s_tolerance;
+    }
+
+    public static void swap(double a, double b)
+    {
+        double temp;
+        temp = a;
+        a = b;
+        b = temp;
+    }
+
+    public static void gaussj(double[,] a, int n, double[,] b, int m)
+    {
+        int i, icol = 0, irow = 0, j, k, l, ll;
+        double big = 0.0, dum = 0.0, pivinv = 0.0;
+
+        int[] indxc = new int[3];
+        int[] indxr = new int[3];
+        int[] ipiv = new int[3];
+
+        for (j = 0; j < n; j++)
+            ipiv[j] = 0;
+
+        for (i = 0; i < n; i++)
+        {
+            big = 0.0;
+            for (j = 0; j < n; j++)
+                if (ipiv[j] != 1)
+                    for (k = 0; k < n; k++)
+                    {
+                        if (ipiv[k] == 0)
+                        {
+                            if (Math.Abs(a[j, k]) >= big)
+                            {
+                                big = Math.Abs(a[j, k]);
+                                irow = j;
+                                icol = k;
+                            }
+                        }
+                        else if (ipiv[k] > 1)
+                            Console.WriteLine("GAUSSJ: Singular matrix-1\n");
+                    }
+            ++(ipiv[icol]);
+            if (irow != icol)
+            {
+                for (l = 0; l < n; l++) swap(a[irow, l], a[icol, l]);
+                for (l = 0; l < m; l++) swap(b[irow, l], b[icol, l]);
+            }
+
+            indxr[i] = irow;
+            indxc[i] = icol;
+            if (a[icol, icol] == 0.0)
+                Console.WriteLine("GAUSSJ: Singular Matrix-2. icol is {0}\n", icol);
+            pivinv = 1.0 / a[icol, icol];
+            a[icol, icol] = 1.0;
+            for (l = 0; l < n; l++) a[icol, l] *= pivinv;
+            for (l = 0; l < m; l++) b[icol, l] *= pivinv;
+            for (ll = 0; ll < n; ll++)
+                if (ll != icol)
+                {
+                    dum = a[ll, icol];
+                    a[ll, icol] = 0.0;
+                    for (l = 0; l < n; l++) a[ll, l] -= a[icol, l] * dum;
+                    for (l = 0; l < m; l++) b[ll, l] -= b[icol, l] * dum;
+                }
+        }
+        for (l = n - 1; l >= 0; l--)
+        {
+            if (indxr[l] != indxc[l])
+                for (k = 0; k < n; k++)
+                    swap(a[k, indxr[l]], a[k, indxc[l]]);
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        Console.WriteLine("Solving AX=B and the inverse of A with Gauss-Jordan algorithm");
+        int n = 3;
+        int m = 1;
+
+        double[,] a = new double[3, 3];
+        double[,] b = new double[3, 1];
+
+        a[0, 0] = 1;
+        a[0, 1] = 1;
+        a[0, 2] = 1;
+        a[1, 0] = 1;
+        a[1, 1] = 2;
+        a[1, 2] = 4;
+        a[2, 0] = 1;
+        a[2, 1] = 3;
+        a[2, 2] = 9;
+
+        b[0, 0] = -1;
+        b[1, 0] = 3;
+        b[2, 0] = 3;
+
+        /*
+               int i, j;
+                               
+               Console.WriteLine("Matrix A is \n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("Matrix B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        gaussj(a, n, b, m);
+
+        /*
+               Console.WriteLine();
+               Console.WriteLine("The inverse of matrix A is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("The solution X of AX=B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        if (
+               AreEqual(a[0, 0], 3)
+            && AreEqual(a[1, 1], 4)
+            && AreEqual(b[0, 0], -9)
+            && AreEqual(b[1, 0], 10)
+            )
+            pass = true;
+
+        if (!pass)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/GaussJordan/structarr.cs b/tests/src/JIT/Methodical/MDArray/GaussJordan/structarr.cs
new file mode 100644 (file)
index 0000000..65bd181
--- /dev/null
@@ -0,0 +1,183 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Solving AX=B and the inverse of A with Gauss-Jordan algorithm
+
+using System;
+
+internal struct MatrixStruct
+{
+    public double[,] arr;
+    public MatrixStruct(int n, int m)
+    {
+        arr = new double[n, m];
+    }
+}
+
+internal class structarr
+{
+    private static double s_tolerance = 0.0000000000001;
+    public static bool AreEqual(double left, double right)
+    {
+        return Math.Abs(left - right) < s_tolerance;
+    }
+
+    public static void swap(double a, double b)
+    {
+        double temp;
+        temp = a;
+        a = b;
+        b = temp;
+    }
+
+    public static void gaussj(MatrixStruct a, int n, MatrixStruct b, int m)
+    {
+        int i, icol = 0, irow = 0, j, k, l, ll;
+        double big = 0.0, dum = 0.0, pivinv = 0.0;
+
+        int[] indxc = new int[3];
+        int[] indxr = new int[3];
+        int[] ipiv = new int[3];
+
+        for (j = 0; j < n; j++)
+            ipiv[j] = 0;
+
+        for (i = 0; i < n; i++)
+        {
+            big = 0.0;
+            for (j = 0; j < n; j++)
+                if (ipiv[j] != 1)
+                    for (k = 0; k < n; k++)
+                    {
+                        if (ipiv[k] == 0)
+                        {
+                            if (Math.Abs(a.arr[j, k]) >= big)
+                            {
+                                big = Math.Abs(a.arr[j, k]);
+                                irow = j;
+                                icol = k;
+                            }
+                        }
+                        else if (ipiv[k] > 1)
+                            Console.WriteLine("GAUSSJ: Singular matrix-1\n");
+                    }
+            ++(ipiv[icol]);
+            if (irow != icol)
+            {
+                for (l = 0; l < n; l++) swap(a.arr[irow, l], a.arr[icol, l]);
+                for (l = 0; l < m; l++) swap(b.arr[irow, l], b.arr[icol, l]);
+            }
+
+            indxr[i] = irow;
+            indxc[i] = icol;
+            if (a.arr[icol, icol] == 0.0)
+                Console.WriteLine("GAUSSJ: Singular Matrix-2. icol is {0}\n", icol);
+            pivinv = 1.0 / a.arr[icol, icol];
+            a.arr[icol, icol] = 1.0;
+            for (l = 0; l < n; l++) a.arr[icol, l] *= pivinv;
+            for (l = 0; l < m; l++) b.arr[icol, l] *= pivinv;
+            for (ll = 0; ll < n; ll++)
+                if (ll != icol)
+                {
+                    dum = a.arr[ll, icol];
+                    a.arr[ll, icol] = 0.0;
+                    for (l = 0; l < n; l++) a.arr[ll, l] -= a.arr[icol, l] * dum;
+                    for (l = 0; l < m; l++) b.arr[ll, l] -= b.arr[icol, l] * dum;
+                }
+        }
+        for (l = n - 1; l >= 0; l--)
+        {
+            if (indxr[l] != indxc[l])
+                for (k = 0; k < n; k++)
+                    swap(a.arr[k, indxr[l]], a.arr[k, indxc[l]]);
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        Console.WriteLine("Solving AX=B and the inverse of A with Gauss-Jordan algorithm");
+        int n = 3;
+        int m = 1;
+
+        MatrixStruct a = new MatrixStruct(3, 3);
+        MatrixStruct b = new MatrixStruct(3, 1);
+
+        a.arr[0, 0] = 1;
+        a.arr[0, 1] = 1;
+        a.arr[0, 2] = 1;
+        a.arr[1, 0] = 1;
+        a.arr[1, 1] = 2;
+        a.arr[1, 2] = 4;
+        a.arr[2, 0] = 1;
+        a.arr[2, 1] = 3;
+        a.arr[2, 2] = 9;
+
+        b.arr[0, 0] = -1;
+        b.arr[1, 0] = 3;
+        b.arr[2, 0] = 3;
+
+        /*
+               int i, j;
+                               
+               Console.WriteLine("Matrix A is \n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a.arr[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("Matrix B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b.arr[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        gaussj(a, n, b, m);
+
+        /*
+               Console.WriteLine();
+               Console.WriteLine("The inverse of matrix A is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<n; j++)
+                               Console.Write("{0}\t", a.arr[i,j]);
+                       Console.WriteLine();
+               }
+
+               Console.WriteLine();
+               Console.WriteLine("The solution X of AX=B is:\n");
+               for (i=0; i<n; i++)
+               {
+                       for (j=0; j<m; j++)
+                               Console.Write("{0}\t", b.arr[i,j]);
+                       Console.WriteLine();
+               }
+               */
+
+        if (
+               AreEqual(a.arr[0, 0], 3)
+                        && AreEqual(a.arr[1, 1], 4)
+            && AreEqual(b.arr[0, 0], -9)
+            && AreEqual(b.arr[1, 0], 10)
+            )
+            pass = true;
+
+        if (!pass)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/InnerProd.csproj b/tests/src/JIT/Methodical/MDArray/InnerProd/InnerProd.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/app.config b/tests/src/JIT/Methodical/MDArray/InnerProd/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/classarr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/classarr.cs
new file mode 100644 (file)
index 0000000..90c62ad
--- /dev/null
@@ -0,0 +1,236 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Inner Product of two 2D array
+
+using System;
+
+public class ArrayClass
+{
+    public int[,] a2d;
+    public int[,,] a3d;
+
+    public ArrayClass(int size)
+    {
+        a2d = new int[size, size];
+        a3d = new int[size, size, size];
+    }
+}
+
+
+public class intmm
+{
+    public static int size;
+    public static Random rand;
+    public static ArrayClass ima;
+    public static ArrayClass imb;
+    public static ArrayClass imr;
+
+    public static void Init2DMatrix(out ArrayClass m, out int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        //m = new int[size, size];
+        m = new ArrayClass(size);
+        refm = new int[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new int[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m.a2d[i, j] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out int res, ref ArrayClass a2d, ref ArrayClass b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a2d.a2d[row, i] * b.a2d[i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out int res, ref int[][] a2d, ref int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a2d[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(ArrayClass m, int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m.a3d[i, j, 0] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out int res, ArrayClass a3d, ArrayClass b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a3d.a3d[row, i, 0] * b.a3d[i, col, 0];
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out int res, int[][] a3d, int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a3d[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("the matrices are members of class");
+        Console.WriteLine("Matrix element stores random integer");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        ima = new ArrayClass(size);
+        imb = new ArrayClass(size);
+        imr = new ArrayClass(size);
+
+        int[][] refa2d = new int[size][];
+        int[][] refb2d = new int[size][];
+        int[][] refr2d = new int[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new int[size];
+
+        Init2DMatrix(out ima, out refa2d);
+        Init2DMatrix(out imb, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr.a2d[m, n], ref ima, ref imb, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr.a2d[i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr.a2d[i,j] {2}!=refr2d[i][j] {3}", i, j, imr.a2d[i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two {0} by {0} by {0} matrices", size);
+        Console.WriteLine("the matrices are members of class and matrix element stores random integer");
+
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr.a3d[i, j, 0] = 1;
+
+        int[][] refa3d = new int[size][];
+        int[][] refb3d = new int[size][];
+        int[][] refr3d = new int[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new int[size];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new int[size];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new int[size];
+
+        Init3DMatrix(ima, refa3d);
+        Init3DMatrix(imb, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr.a3d[m, n, 0], ima, imb, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr.a3d[i, j, 0] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr.a3d[i,j,0] {2}!=refr3d[i][j] {3}", i, j, imr.a3d[i, j, 0], refr3d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/cs_template.proj b/tests/src/JIT/Methodical/MDArray/InnerProd/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/doublearr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/doublearr.cs
new file mode 100644 (file)
index 0000000..5b2d833
--- /dev/null
@@ -0,0 +1,233 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+public class doublemm
+{
+    public static Random rand;
+    public static int size;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 1000);
+        else
+            e = +rand.Next(0, 1000);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out double res, ref double[,] a, ref double[,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row, i] * b[i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out double res, ref double[][] a, ref double[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, 0, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out double res, double[,,] a, double[,,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row, 0, i] * b[i, 0, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out double res, double[][] a, double[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("Matrix element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        double[,] ima2d = new double[size, size];
+        double[,] imb2d = new double[size, size];
+        double[,] imr2d = new double[size, size];
+
+        double[][] refa2d = new double[size][];
+        double[][] refb2d = new double[size][];
+        double[][] refr2d = new double[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new double[size];
+
+        Init2DMatrix(out ima2d, out refa2d);
+        Init2DMatrix(out imb2d, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr2d[m, n], ref ima2d, ref imb2d, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr2d[i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr2d[i,j] {2}!=refr2d[i][j] {3}", i, j, imr2d[i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two {0} by 2 by {0} matrices", size);
+        Console.WriteLine("Matrix element stores random double");
+
+        double[,,] ima3d = new double[size, 2, size];
+        double[,,] imb3d = new double[size, 2, size];
+        double[,,] imr3d = new double[size, 2, size];
+
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr3d[i, 0, j] = 1.0;
+
+        double[][] refa3d = new double[size][];
+        double[][] refb3d = new double[size][];
+        double[][] refr3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new double[size];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new double[size];
+
+        Init3DMatrix(ima3d, refa3d);
+        Init3DMatrix(imb3d, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr3d[m, 0, n], ima3d, imb3d, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr3d[i, 0, j] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr3d[i,0,j] {2}!=refr3d[i][j] {3}", i, j, imr3d[i, 0, j], refr3d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/intarr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/intarr.cs
new file mode 100644 (file)
index 0000000..0a19ed5
--- /dev/null
@@ -0,0 +1,220 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+public class intmm
+{
+    public static int size;
+    public static Random rand;
+
+    public static void Init2DMatrix(out int[,] m, out int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        m = new int[size, size];
+        refm = new int[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new int[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m[i, j] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out int res, ref int[,] a, ref int[,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row, i] * b[i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out int res, ref int[][] a, ref int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(int[,,] m, int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m[0, i, j] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out int res, int[,,] a, int[,,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[0, row, i] * b[0, i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out int res, int[][] a, int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("Matrix element stores random integer");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        int[,] ima2d = new int[size, size];
+        int[,] imb2d = new int[size, size];
+        int[,] imr2d = new int[size, size];
+
+        int[][] refa2d = new int[size][];
+        int[][] refb2d = new int[size][];
+        int[][] refr2d = new int[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new int[size];
+
+        Init2DMatrix(out ima2d, out refa2d);
+        Init2DMatrix(out imb2d, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr2d[m, n], ref ima2d, ref imb2d, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr2d[i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr2d[i,j] {2}!=refr2d[i][j] {3}", i, j, imr2d[i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two 3D matrices");
+        Console.WriteLine("Matrix element stores random integer");
+
+        int[,,] ima3d = new int[size + 5, size, size + 1];
+        int[,,] imb3d = new int[size + 4, size + 1, size];
+        int[,,] imr3d = new int[size + 3, size, size];
+
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr3d[i, j, 0] = 1;
+
+        int[][] refa3d = new int[size][];
+        int[][] refb3d = new int[size][];
+        int[][] refr3d = new int[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new int[size];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new int[size];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new int[size];
+
+        Init3DMatrix(ima3d, refa3d);
+        Init3DMatrix(imb3d, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr3d[m, n, 0], ima3d, imb3d, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr3d[i, j, 0] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr3d[i,j,0] {2}!=refr3d[i][j] {3}", i, j, imr3d[i, j, 0], refr3d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/jaggedarr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/jaggedarr.cs
new file mode 100644 (file)
index 0000000..2dc2445
--- /dev/null
@@ -0,0 +1,239 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+public class doublemm
+{
+    public static Random rand;
+    public static int size;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 1000);
+        else
+            e = +rand.Next(0, 1000);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out double res, ref double[,] a, ref double[,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row, i] * b[i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out double res, ref double[][] a, ref double[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j, size] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out double res, double[,,] a, double[,,] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row, i, size] * b[i, col, size];
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out double res, double[][] a, double[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("Matrix is member of a Jagged array, element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        double[][,] ima2d = new double[3][,];
+        ima2d[2] = new double[size, size];
+
+        double[,] imb2d = new double[size, size];
+
+        double[][,] imr2d = new double[5][,];
+        imr2d[0] = new double[size, size];
+
+        double[][] refa2d = new double[size][];
+        double[][] refb2d = new double[size][];
+        double[][] refr2d = new double[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new double[size];
+
+        Init2DMatrix(out ima2d[2], out refa2d);
+        Init2DMatrix(out imb2d, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr2d[0][m, n], ref ima2d[2], ref imb2d, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr2d[0][i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr2d[0][i,j] {2}!=refr2d[i][j] {3}", i, j, imr2d[0][i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two 3D matrices", size);
+        Console.WriteLine("Matrix is member of a Jagged array, element stores random double");
+
+        double[][,,] ima3d = new double[3][,,];
+        ima3d[2] = new double[size + 3, size + 2, size + 1];
+
+        double[,,] imb3d = new double[size + 1, size + 3, size + 2];
+
+        double[][,,] imr3d = new double[5][,,];
+        imr3d[0] = new double[size + 5, size + 4, size + 3];
+
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr3d[0][size, i, j] = 1;
+
+        double[][] refa3d = new double[size][];
+        double[][] refb3d = new double[size][];
+        double[][] refr3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size + 1];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new double[size + 2];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new double[size + 2];
+
+        Init3DMatrix(ima3d[2], refa3d);
+        Init3DMatrix(imb3d, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr3d[0][size, m, n], ima3d[2], imb3d, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr3d[0][size, i, j] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr3d[0][{4},i,j] {2}!=refr3d[i][j] {3}", i, j, imr3d[0][size, i, j], refr3d[i][j], size);
+                    pass = false;
+                }
+        }
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/packages.config b/tests/src/JIT/Methodical/MDArray/InnerProd/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/stringarr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/stringarr.cs
new file mode 100644 (file)
index 0000000..0e418fc
--- /dev/null
@@ -0,0 +1,251 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+public class Stringmm
+{
+    public static int size;
+    public static Random rand;
+
+    public static void InitMatrix2D(out String[,] m, out String[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        m = new String[size, size];
+        refm = new String[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new String[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                temp = temp - (temp / 120) * 120 - 60;
+                m[i, j] = Convert.ToString(temp);
+                refm[i][j] = Convert.ToString(temp);
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out String res, ref String[,] a, ref String[,] b, int row, int col)
+    {
+        int i;
+        res = "";
+
+        int temp1, temp2, temp3;
+        temp3 = 0;
+
+        i = 0;
+        while (i < size)
+        {
+            temp1 = Convert.ToInt32(a[row, i]);
+            temp2 = Convert.ToInt32(b[i, col]);
+            temp3 = temp3 + temp1 * temp2;
+            res = Convert.ToString(temp3);
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out String res, ref String[][] a, ref String[][] b, int row, int col)
+    {
+        int i;
+        res = "";
+
+        int temp1, temp2, temp3;
+        temp3 = 0;
+
+        i = 0;
+        while (i < size)
+        {
+            temp1 = Convert.ToInt32(a[row][i]);
+            temp2 = Convert.ToInt32(b[i][col]);
+            temp3 = temp3 + temp1 * temp2;
+            res = Convert.ToString(temp3);
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(String[,,] m, String[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                temp = temp - (temp / 120) * 120 - 60;
+                m[i, 0, j] = Convert.ToString(temp);
+                refm[i][j] = Convert.ToString(temp);
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out String res, String[,,] a, String[,,] b, int row, int col)
+    {
+        int i;
+        res = "";
+
+        int temp1, temp2, temp3;
+        temp3 = 0;
+
+        i = 0;
+        while (i < size)
+        {
+            temp1 = Convert.ToInt32(a[row, 0, i]);
+            temp2 = Convert.ToInt32(b[i, 0, col]);
+            temp3 = temp3 + temp1 * temp2;
+            res = Convert.ToString(temp3);
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out String res, String[][] a, String[][] b, int row, int col)
+    {
+        int i;
+        res = "";
+
+        int temp1, temp2, temp3;
+        temp3 = 0;
+
+        i = 0;
+        while (i < size)
+        {
+            temp1 = Convert.ToInt32(a[row][i]);
+            temp2 = Convert.ToInt32(b[i][col]);
+            temp3 = temp3 + temp1 * temp2;
+            res = Convert.ToString(temp3);
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("Matrix element stores string data converted from random integer");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        String[,] ima2d = new String[size, size];
+        String[,] imb2d = new String[size, size];
+        String[,] imr2d = new String[size, size];
+
+        String[][] refa2d = new String[size][];
+        String[][] refb2d = new String[size][];
+        String[][] refr2d = new String[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new String[size];
+
+        InitMatrix2D(out ima2d, out refa2d);
+        InitMatrix2D(out imb2d, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr2d[m, n], ref ima2d, ref imb2d, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr2d[i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr2d[i,j] {2}!=refr2d[i][j] {3}", i, j, imr2d[i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two 3D matrices");
+        Console.WriteLine("Matrix element stores string data converted from random integer");
+
+        String[,,] ima3d = new String[size, 2, size];
+        String[,,] imb3d = new String[size, 3, size];
+        String[,,] imr3d = new String[size, size, size];
+
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr3d[i, j, 0] = "";
+
+
+        String[][] refa3d = new String[size][];
+        String[][] refb3d = new String[size][];
+        String[][] refr3d = new String[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new String[size];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new String[size];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new String[size];
+
+        Init3DMatrix(ima3d, refa3d);
+        Init3DMatrix(imb3d, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr3d[m, n, 0], ima3d, imb3d, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr3d[i, j, 0] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr3d[i,j,0] {2}!=refr3d[i][j] {3}", i, j, imr3d[i, j, 0], refr3d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/InnerProd/structarr.cs b/tests/src/JIT/Methodical/MDArray/InnerProd/structarr.cs
new file mode 100644 (file)
index 0000000..36ddcb4
--- /dev/null
@@ -0,0 +1,236 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+public struct ArrayStruct
+{
+    public int[,] a2d;
+    public int[,,] a3d;
+
+    public ArrayStruct(int size)
+    {
+        a2d = new int[size, size];
+        a3d = new int[size + 2, size + 5, size + 1];
+    }
+}
+
+
+public class intmm
+{
+    public static int size;
+    public static Random rand;
+    public static ArrayStruct ima;
+    public static ArrayStruct imb;
+    public static ArrayStruct imr;
+
+    public static void Init2DMatrix(out ArrayStruct m, out int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        m = new ArrayStruct(size);
+        refm = new int[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new int[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m.a2d[i, j] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct2D(out int res, ref ArrayStruct a2d, ref ArrayStruct b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a2d.a2d[row, i] * b.a2d[i, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct2DRef(out int res, ref int[][] a2d, ref int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a2d[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static void Init3DMatrix(ref ArrayStruct m, int[][] refm)
+    {
+        int i, j, temp;
+        i = 0;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = rand.Next();
+                m.a3d[i, size - 2, j] = temp - (temp / 120) * 120 - 60;
+                refm[i][j] = temp - (temp / 120) * 120 - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void InnerProduct3D(out int res, ref ArrayStruct a3d, ref ArrayStruct b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a3d.a3d[row, size - 2, i] * b.a3d[i, size - 2, col];
+            i++;
+        }
+    }
+
+    public static void InnerProduct3DRef(out int res, int[][] a3d, int[][] b, int row, int col)
+    {
+        int i;
+        res = 0;
+        i = 0;
+        while (i < size)
+        {
+            res = res + a3d[row][i] * b[i][col];
+            i++;
+        }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(2, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Testing inner product of {0} by {0} matrices", size);
+        Console.WriteLine("the matrices are members of Struct");
+        Console.WriteLine("Matrix element stores random integer");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        ima = new ArrayStruct(size);
+        imb = new ArrayStruct(size);
+        imr = new ArrayStruct(size);
+
+        int[][] refa2d = new int[size][];
+        int[][] refb2d = new int[size][];
+        int[][] refr2d = new int[size][];
+        for (int k = 0; k < refr2d.Length; k++)
+            refr2d[k] = new int[size];
+
+        Init2DMatrix(out ima, out refa2d);
+        Init2DMatrix(out imb, out refb2d);
+
+        int m = 0;
+        int n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct2D(out imr.a2d[m, n], ref ima, ref imb, m, n);
+                InnerProduct2DRef(out refr2d[m][n], ref refa2d, ref refb2d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr.a2d[i, j] != refr2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr.a2d[i,j] {2}!=refr2d[i][j] {3}", i, j, imr.a2d[i, j], refr2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Testing inner product of one slice of two 3D matrices, size is {0}", size);
+        Console.WriteLine("the matrices are members of Struct, matrix element stores random integer");
+
+        ima = new ArrayStruct(size);
+        imb = new ArrayStruct(size);
+        imr = new ArrayStruct(size);
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+                imr.a3d[i, j, size - 2] = 1;
+
+        int[][] refa3d = new int[size][];
+        int[][] refb3d = new int[size][];
+        int[][] refr3d = new int[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new int[size];
+        for (int k = 0; k < refb3d.Length; k++)
+            refb3d[k] = new int[size];
+        for (int k = 0; k < refr3d.Length; k++)
+            refr3d[k] = new int[size];
+
+        Init3DMatrix(ref ima, refa3d);
+        Init3DMatrix(ref imb, refb3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                InnerProduct3D(out imr.a3d[m, n, size - 2], ref ima, ref imb, m, n);
+                InnerProduct3DRef(out refr3d[m][n], refa3d, refb3d, m, n);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (imr.a3d[i, j, size - 2] != refr3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr.a3d[i,j,size-2] {2}!=refr3d[i][j] {3}", i, j, imr.a3d[i, j, size - 2], refr3d[i][j]);
+                    pass = false;
+                }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/basics/app.config b/tests/src/JIT/Methodical/MDArray/basics/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/basics/basics.csproj b/tests/src/JIT/Methodical/MDArray/basics/basics.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/basics/classarr.cs b/tests/src/JIT/Methodical/MDArray/basics/classarr.cs
new file mode 100644 (file)
index 0000000..5fcebc0
--- /dev/null
@@ -0,0 +1,274 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Simple arithmatic manipulation of one 2D array elements
+
+using System;
+
+public class Arrayclass
+{
+    public double[,] a2d;
+    public double[,,] a3d;
+
+    public Arrayclass(int size)
+    {
+        a2d = new double[size, size];
+        a3d = new double[size, size + 5, size + 10];
+    }
+}
+public class class1
+{
+    public static Random rand;
+    public static int size;
+    public static Arrayclass ima;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 14);
+        else
+            e = +rand.Next(0, 14);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process2DArray(ref double[,] a2d)
+    {
+        for (int i = 3; i < size + 3; i++)
+            for (int j = -10; j < size - 10; j++)
+            {
+                int b = j + 5;
+                a2d[i - 3, b + 5] += a2d[0, b + 5] + a2d[1, b + 5];
+                a2d[i - 3, b + 5] *= a2d[i - 3, j + 10] + a2d[2, b + 5];
+                a2d[i - 3, j + 10] -= a2d[i - 3, b + 5] * a2d[3, j + 10];
+                if ((a2d[i - 3, b + 5] + a2d[4, j + 10]) != 0)
+                    a2d[i - 3, b + 5] /= a2d[i - 3, b + 5] + a2d[4, b + 5];
+                else
+                    a2d[i - 3, j + 10] += a2d[i - 3, j + 10] * a2d[4, j + 10];
+                for (int k = 5; k < size; k++)
+                    a2d[i - 3, b + 5] += a2d[k, j + 10];
+            }
+    }
+
+    public static void ProcessJagged2DArray(ref double[][] a2d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a2d[i][j] += a2d[0][j] + a2d[1][j];
+                a2d[i][j] *= a2d[i][j] + a2d[2][j];
+                a2d[i][j] -= a2d[i][j] * a2d[3][j];
+                if ((a2d[i][j] + a2d[4][j]) != 0)
+                    a2d[i][j] /= a2d[i][j] + a2d[4][j];
+                else
+                    a2d[i][j] += a2d[i][j] * a2d[4][j];
+                for (int k = 5; k < size; k++)
+                    a2d[i][j] += a2d[k][j];
+            }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        //m = new double[size, size, size];
+        //refm = new double[size][];
+
+        //for (int k=0; k<refm.Length; k++) 
+        //refm[k] = new double[size];          
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j, size] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process3DArray(double[,,] a3d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a3d[i, j, size] += a3d[0, j, size] + a3d[1, j, size];
+                a3d[i, j, size] *= a3d[i, j, size] + a3d[2, j, size];
+                a3d[i, j, size] -= a3d[i, j, size] * a3d[3, j, size];
+                if ((a3d[i, j, size] + a3d[4, j, size]) != 0)
+                    a3d[i, j, size] /= a3d[i, j, size] + a3d[4, j, size];
+                else
+                    a3d[i, j, size] += a3d[i, j, size] * a3d[4, j, size];
+                for (int k = 5; k < size; k++)
+                    a3d[i, j, size] *= a3d[k, j, size];
+            }
+    }
+
+    public static void ProcessJagged3DArray(double[][] a3d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a3d[i][j] += a3d[0][j] + a3d[1][j];
+                a3d[i][j] *= a3d[i][j] + a3d[2][j];
+                a3d[i][j] -= a3d[i][j] * a3d[3][j];
+                if ((a3d[i][j] + a3d[4][j]) != 0)
+                    a3d[i][j] /= a3d[i][j] + a3d[4][j];
+                else
+                    a3d[i][j] += a3d[i][j] * a3d[4][j];
+                for (int k = 5; k < size; k++)
+                    a3d[i][j] *= a3d[k][j];
+            }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(5, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Element manipulation of {0} by {0} matrices with different arithmatic operations", size);
+        Console.WriteLine("Matrix is member of class, element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        ima = new Arrayclass(size);
+        double[][] refa2d = new double[size][];
+
+        Init2DMatrix(out ima.a2d, out refa2d);
+
+        int m = 0;
+        int n;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process2DArray(ref ima.a2d);
+                ProcessJagged2DArray(ref refa2d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima.a2d[i, j] != refa2d[i][j])
+                    if (!Double.IsNaN(ima.a2d[i, j]) || !Double.IsNaN(refa2d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima.a2d[i,j] {2}!=refa2d[i][j] {3}", i, j, ima.a2d[i, j], refa2d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima.a2d[size, 0] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Element manipulation of {0} by {1} by {2} matrices with different arithmatic operations", size, size + 5, size + 10);
+        Console.WriteLine("Matrix is member of class, element stores random double");
+
+        double[][] refa3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size];
+
+        Init3DMatrix(ima.a3d, refa3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process3DArray(ima.a3d);
+                ProcessJagged3DArray(refa3d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima.a3d[i, j, size] != refa3d[i][j])
+                    if (!Double.IsNaN(ima.a3d[i, j, size]) || !Double.IsNaN(refa3d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima.a3d[i,j,size] {2}!=refa3d[i][j] {3}", i, j, ima.a3d[i, j, size], refa3d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima.a3d[-1, 0, 0] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/basics/cs_template.proj b/tests/src/JIT/Methodical/MDArray/basics/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/basics/doublearr.cs b/tests/src/JIT/Methodical/MDArray/basics/doublearr.cs
new file mode 100644 (file)
index 0000000..98033b5
--- /dev/null
@@ -0,0 +1,251 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Simple arithmatic manipulation of one 2D array elements
+
+using System;
+
+public class double1
+{
+    public static Random rand;
+    public static int size;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 14);
+        else
+            e = +rand.Next(0, 14);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process2DArray(ref double[,] a)
+    {
+        for (int i = 10; i < size + 10; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i - 10, j] += a[0, j] + a[1, j];
+                a[i - 10, j] *= a[i - 10, j] + a[2, j];
+                a[i - 10, j] -= a[i - 10, j] * a[3, j];
+                a[i - 10, j] /= a[i - 10, j] + a[4, j];
+                for (int k = 5; k < size; k++)
+                    a[i - 10, j] += a[k, j];
+            }
+    }
+
+    public static void ProcessJagged2DArray(ref double[][] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i][j] += a[0][j] + a[1][j];
+                a[i][j] *= a[i][j] + a[2][j];
+                a[i][j] -= a[i][j] * a[3][j];
+                a[i][j] /= a[i][j] + a[4][j];
+                for (int k = 5; k < size; k++)
+                    a[i][j] += a[k][j];
+            }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[size, i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process3DArray(double[,,] a)
+    {
+        for (int i = 10; i < size + 10; i++)
+            for (int j = -4; j < size - 4; j++)
+            {
+                int b = j + 1;
+                a[size, i - 10, j + 4] += a[size, 0, j + 4] + a[size, 1, b + 3];
+                a[size, i - 10, j + 4] += 2;
+                b = b + 1;
+                a[size, i - 10, b + 2] *= a[size, i - 10, b + 2] + a[size, 2, j + 4];
+                b = b + 1;
+                a[size, i - 10, j + 4] -= a[size, i - 10, j + 4] * a[size, 3, b + 1];
+                b = b + 1;
+                a[size, i - 10, j + 4] /= a[size, i - 10, j + 4] + a[size, 4, b];
+                for (int k = 5; k < size; k++)
+                    a[size, i - 10, j + 4] += a[size, k, j + 4];
+            }
+    }
+
+    public static void ProcessJagged3DArray(double[][] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i][j] += a[0][j] + a[1][j];
+                a[i][j] += 2;
+                a[i][j] *= a[i][j] + a[2][j];
+                a[i][j] -= a[i][j] * a[3][j];
+                a[i][j] /= a[i][j] + a[4][j];
+                for (int k = 5; k < size; k++)
+                    a[i][j] += a[k][j];
+            }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(5, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Element manipulation of {0} by {0} matrices with different arithmatic operations", size);
+        Console.WriteLine("Matrix element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        double[,] ima2d = new double[size, size];
+        double[][] refa2d = new double[size][];
+
+        Init2DMatrix(out ima2d, out refa2d);
+
+        int m = 0;
+        int n;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process2DArray(ref ima2d);
+                ProcessJagged2DArray(ref refa2d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima2d[i, j] != refa2d[i][j])
+                    if (!Double.IsNaN(ima2d[i, j]) || !Double.IsNaN(refa2d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima2d[i,j] {2}!=refa2d[i][j] {3}", i, j, ima2d[i, j], refa2d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima2d[-1, -1] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Element manipulation of {0} by {1} by {2} matrices with different arithmatic operations", size + 1, size + 2, size + 3);
+        Console.WriteLine("Matrix element stores random double");
+
+        double[,,] ima3d = new double[size + 1, size + 2, size + 3];
+        double[][] refa3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size];
+
+        Init3DMatrix(ima3d, refa3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process3DArray(ima3d);
+                ProcessJagged3DArray(refa3d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima3d[size, i, j] != refa3d[i][j])
+                    if (!Double.IsNaN(ima3d[size, i, j]) || !Double.IsNaN(refa3d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima3d[{4},i,j] {2}!=refa3d[i][j] {3}", i, j, ima3d[size, i, j], refa3d[i][j], size);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima3d[Int32.MaxValue, 0, 0] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/basics/jaggedarr.cs b/tests/src/JIT/Methodical/MDArray/basics/jaggedarr.cs
new file mode 100644 (file)
index 0000000..6bdd66e
--- /dev/null
@@ -0,0 +1,249 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Simple arithmatic manipulation of one 2D array elements
+
+using System;
+
+public class double1
+{
+    public static Random rand;
+    public static int size;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 14);
+        else
+            e = +rand.Next(0, 14);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process2DArray(ref double[,] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i, j] += a[0, j] + a[1, j];
+                a[i, j] *= a[i, j] + a[2, j];
+                a[i, j] -= a[i, j] * a[3, j];
+                a[i, j] /= a[i, j] + a[4, j];
+                for (int k = 5; k < size; k++)
+                    a[i, j] += a[k, j];
+            }
+    }
+
+    public static void ProcessJagged2DArray(ref double[][] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i][j] += a[0][j] + a[1][j];
+                a[i][j] *= a[i][j] + a[2][j];
+                a[i][j] -= a[i][j] * a[3][j];
+                a[i][j] /= a[i][j] + a[4][j];
+                for (int k = 5; k < size; k++)
+                    a[i][j] += a[k][j];
+            }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, size, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process3DArray(double[,,] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a[i, size, j] += a[0, size, j] + a[1, size, j];
+                a[i, size, j] *= a[i, size, j] + a[2, size, j];
+                a[i, size, j] -= a[i, size, j] * a[3, size, j];
+                a[i, size, j] /= a[i, size, j] + a[4, size, j];
+                for (int k = 5; k < size; k++)
+                    a[i, size, j] += a[k, size, j];
+            }
+    }
+
+    public static void ProcessJagged3DArray(double[][] a)
+    {
+        for (int i = 10; i < size + 10; i++)
+            for (int j = 0; j < size; j++)
+            {
+                int b = i - 4;
+                a[i - 10][j] += a[0][j] + a[1][j];
+                a[i - 10][j] *= a[b - 6][j] + a[2][j];
+                a[b - 6][j] -= a[i - 10][j] * a[3][j];
+                a[i - 10][j] /= a[b - 6][j] + a[4][j];
+                for (int k = 5; k < size; k++)
+                    a[i - 10][j] += a[k][j];
+            }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(5, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Element manipulation of {0} by {0} matrices with different arithmatic operations", size);
+        Console.WriteLine("Matrix is member of a Jagged array, element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        double[][,] ima2d = new double[3][,];
+        ima2d[2] = new double[size, size];
+
+        double[][] refa2d = new double[size][];
+
+        Init2DMatrix(out ima2d[2], out refa2d);
+
+        int m = 0;
+        int n;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process2DArray(ref ima2d[2]);
+                ProcessJagged2DArray(ref refa2d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima2d[2][i, j] != refa2d[i][j])
+                    if (!Double.IsNaN(ima2d[2][i, j]) || !Double.IsNaN(refa2d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima2d[2][i,j] {2}!=refa2d[i][j] {3}", i, j, ima2d[2][i, j], refa2d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima2d[2][Int32.MinValue, 0] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Element manipulation of {0} by {1} by {2} matrices with different arithmatic operations", size, size + 1, size + 2);
+        Console.WriteLine("Matrix is member of a Jagged array, element stores random double");
+
+        double[][,,] ima3d = new double[3][,,];
+        ima3d[2] = new double[size, size + 1, size + 2];
+        double[][] refa3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size];
+
+        Init3DMatrix(ima3d[2], refa3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process3DArray(ima3d[2]);
+                ProcessJagged3DArray(refa3d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima3d[2][i, size, j] != refa3d[i][j])
+                    if (!Double.IsNaN(ima3d[2][i, size, j]) || !Double.IsNaN(refa3d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima3d[2][i,{3},j] {4}!=refa3d[i][j] {5}", i, j, size, ima3d[2][i, size, j], refa3d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima3d[2][size, -1, size] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/basics/packages.config b/tests/src/JIT/Methodical/MDArray/basics/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/MDArray/basics/stringarr.cs b/tests/src/JIT/Methodical/MDArray/basics/stringarr.cs
new file mode 100644 (file)
index 0000000..12f7ee1
--- /dev/null
@@ -0,0 +1,250 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Simple arithmatic manipulation of one 2D array elements
+
+using System;
+
+public class string1
+{
+    public static Random rand;
+    public static int size;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 14);
+        else
+            e = +rand.Next(0, 14);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out String[,] m, out String[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new String[size, size];
+        refm = new String[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new String[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = Convert.ToString(temp - 60);
+                refm[i][j] = Convert.ToString(temp - 60);
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process2DArray(ref String[,] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                double temp = Convert.ToDouble(a[i, j]);
+                temp += Convert.ToDouble(a[0, j]) + Convert.ToDouble(a[1, j]);
+                temp *= Convert.ToDouble(a[i, j]) + Convert.ToDouble(a[2, j]);
+                temp -= Convert.ToDouble(a[i, j]) * Convert.ToDouble(a[3, j]);
+                temp /= Convert.ToDouble(a[i, j]) + Convert.ToDouble(a[4, j]);
+                for (int k = 5; k < size; k++)
+                    temp += Convert.ToDouble(a[k, j]);
+                a[i, j] = Convert.ToString(temp);
+            }
+    }
+
+    public static void ProcessJagged2DArray(ref String[][] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                double temp = Convert.ToDouble(a[i][j]);
+                temp += Convert.ToDouble(a[0][j]) + Convert.ToDouble(a[1][j]);
+                temp *= Convert.ToDouble(a[i][j]) + Convert.ToDouble(a[2][j]);
+                temp -= Convert.ToDouble(a[i][j]) * Convert.ToDouble(a[3][j]);
+                temp /= Convert.ToDouble(a[i][j]) + Convert.ToDouble(a[4][j]);
+                for (int k = 5; k < size; k++)
+                    temp += Convert.ToDouble(a[k][j]);
+                a[i][j] = Convert.ToString(temp);
+            }
+    }
+
+    public static void Init3DMatrix(String[,,] m, String[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, size, j] = Convert.ToString(temp - 60);
+                refm[i][j] = Convert.ToString(temp - 60);
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process3DArray(String[,,] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                double temp = Convert.ToDouble(a[i, size, j]);
+                temp += Convert.ToDouble(a[0, size, j]) + Convert.ToDouble(a[1, size, j]);
+                temp *= Convert.ToDouble(a[i, size, j]) + Convert.ToDouble(a[2, size, j]);
+                temp -= Convert.ToDouble(a[i, size, j]) * Convert.ToDouble(a[3, size, j]);
+                temp /= Convert.ToDouble(a[i, size, j]) + Convert.ToDouble(a[4, size, j]);
+                for (int k = 5; k < size; k++)
+                    temp += Convert.ToDouble(a[k, size, j]);
+                a[i, size, j] = Convert.ToString(temp);
+            }
+    }
+
+    public static void ProcessJagged3DArray(String[][] a)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                double temp = Convert.ToDouble(a[i][j]);
+                temp += Convert.ToDouble(a[0][j]) + Convert.ToDouble(a[1][j]);
+                temp *= Convert.ToDouble(a[i][j]) + Convert.ToDouble(a[2][j]);
+                temp -= Convert.ToDouble(a[i][j]) * Convert.ToDouble(a[3][j]);
+                temp /= Convert.ToDouble(a[i][j]) + Convert.ToDouble(a[4][j]);
+                for (int k = 5; k < size; k++)
+                    temp += Convert.ToDouble(a[k][j]);
+                a[i][j] = Convert.ToString(temp);
+            }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(5, 8);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Element manipulation of {0} by {0} matrices with different arithmatic operations", size);
+        Console.WriteLine("Matrix element stores string converted from random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        String[,] ima2d = new String[size, size];
+        String[][] refa2d = new String[size][];
+
+        Init2DMatrix(out ima2d, out refa2d);
+
+        int m = 0;
+        int n;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process2DArray(ref ima2d);
+                ProcessJagged2DArray(ref refa2d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima2d[i, j] != refa2d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr[i,j] {2}!=refr[i][j] {3}", i, j, ima2d[i, j], refa2d[i][j]);
+                    pass = false;
+                }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima2d[0, -1] = "5";
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Element manipulation of {0} by {1} by {0} matrices with different arithmatic operations", size, size + 1);
+
+        String[,,] ima3d = new String[size, size + 1, size];
+        String[][] refa3d = new String[size][];
+
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new String[size];
+
+        Init3DMatrix(ima3d, refa3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process3DArray(ima3d);
+                ProcessJagged3DArray(refa3d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima3d[i, size, j] != refa3d[i][j])
+                {
+                    Console.WriteLine("i={0}, j={1}, imr[i,{4},j] {2}!=refr[i][j] {3}", i, j, ima3d[i, size, j], refa3d[i][j], size);
+                    pass = false;
+                }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima3d[0, 100, 0] = "";
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/MDArray/basics/structarr.cs b/tests/src/JIT/Methodical/MDArray/basics/structarr.cs
new file mode 100644 (file)
index 0000000..1119e6a
--- /dev/null
@@ -0,0 +1,271 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//Simple arithmatic manipulation of one 2D array elements
+
+using System;
+
+public struct ArrayStruct
+{
+    public double[,] a2d;
+    public double[,,] a3d;
+
+    public ArrayStruct(int size)
+    {
+        a2d = new double[size, size];
+        a3d = new double[size, size, size];
+    }
+}
+public class struct1
+{
+    public static Random rand;
+    public static int size;
+    public static ArrayStruct ima;
+
+    public static double GenerateDbl()
+    {
+        int e;
+        int op1 = (int)((float)rand.Next() / Int32.MaxValue * 2);
+        if (op1 == 0)
+            e = -rand.Next(0, 14);
+        else
+            e = +rand.Next(0, 14);
+        return Math.Pow(2, e);
+    }
+
+    public static void Init2DMatrix(out double[,] m, out double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        m = new double[size, size];
+        refm = new double[size][];
+
+        for (int k = 0; k < refm.Length; k++)
+            refm[k] = new double[size];
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process2DArray(ref double[,] a2d)
+    {
+        for (int i = 10; i < size + 10; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a2d[i - 10, j] += a2d[0, j] + a2d[1, j];
+                a2d[i - 10, j] += 10;
+                a2d[i - 10, j] *= a2d[i - 10, j] + a2d[2, j];
+                a2d[i - 10, j] -= a2d[i - 10, j] * a2d[3, j];
+                if ((a2d[i - 10, j] + a2d[4, j]) != 0)
+                    a2d[i - 10, j] /= a2d[i - 10, j] + a2d[4, j];
+                else
+                    a2d[i - 10, j] += a2d[i - 10, j] * a2d[4, j];
+                for (int k = 5; k < size; k++)
+                    a2d[i - 10, j] += a2d[k, j];
+            }
+    }
+
+    public static void ProcessJagged2DArray(ref double[][] a2d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a2d[i][j] += a2d[0][j] + a2d[1][j];
+                a2d[i][j] += 10;
+                a2d[i][j] *= a2d[i][j] + a2d[2][j];
+                a2d[i][j] -= a2d[i][j] * a2d[3][j];
+                if ((a2d[i][j] + a2d[4][j]) != 0)
+                    a2d[i][j] /= a2d[i][j] + a2d[4][j];
+                else
+                    a2d[i][j] += a2d[i][j] * a2d[4][j];
+                for (int k = 5; k < size; k++)
+                    a2d[i][j] += a2d[k][j];
+            }
+    }
+
+    public static void Init3DMatrix(double[,,] m, double[][] refm)
+    {
+        int i, j;
+        i = 0;
+        double temp;
+
+        while (i < size)
+        {
+            j = 0;
+            while (j < size)
+            {
+                temp = GenerateDbl();
+                m[i, 0, j] = temp - 60;
+                refm[i][j] = temp - 60;
+                j++;
+            }
+            i++;
+        }
+    }
+
+    public static void Process3DArray(double[,,] a3d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a3d[i, 0, j] += a3d[0, 0, j] + a3d[1, 0, j];
+                a3d[i, 0, j] *= a3d[i, 0, j] + a3d[2, 0, j];
+                a3d[i, 0, j] -= a3d[i, 0, j] * a3d[3, 0, j];
+                if ((a3d[i, 0, j] + a3d[4, 0, j]) != 0)
+                    a3d[i, 0, j] /= a3d[i, 0, j] + a3d[4, 0, j];
+                else
+                    a3d[i, 0, j] += a3d[i, 0, j] * a3d[4, 0, j];
+                for (int k = 5; k < size; k++)
+                    a3d[i, 0, j] += a3d[k, 0, j];
+            }
+    }
+
+    public static void ProcessJagged3DArray(double[][] a3d)
+    {
+        for (int i = 0; i < size; i++)
+            for (int j = 0; j < size; j++)
+            {
+                a3d[i][j] += a3d[0][j] + a3d[1][j];
+                a3d[i][j] *= a3d[i][j] + a3d[2][j];
+                a3d[i][j] -= a3d[i][j] * a3d[3][j];
+                if ((a3d[i][j] + a3d[4][j]) != 0)
+                    a3d[i][j] /= a3d[i][j] + a3d[4][j];
+                else
+                    a3d[i][j] += a3d[i][j] * a3d[4][j];
+                for (int k = 5; k < size; k++)
+                    a3d[i][j] += a3d[k][j];
+            }
+    }
+
+    public static int Main()
+    {
+        bool pass = false;
+
+        rand = new Random();
+        size = rand.Next(5, 10);
+
+        Console.WriteLine();
+        Console.WriteLine("2D Array");
+        Console.WriteLine("Element manipulation of {0} by {0} matrices with different arithmatic operations", size);
+        Console.WriteLine("Matrix is member of struct, element stores random double");
+        Console.WriteLine("array set/get, ref/out param are used");
+
+        ima = new ArrayStruct(size);
+        double[][] refa2d = new double[size][];
+
+        Init2DMatrix(out ima.a2d, out refa2d);
+
+        int m = 0;
+        int n;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process2DArray(ref ima.a2d);
+                ProcessJagged2DArray(ref refa2d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima.a2d[i, j] != refa2d[i][j])
+                    if (!Double.IsNaN(ima.a2d[i, j]) || !Double.IsNaN(refa2d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima.a2d[i,j] {2}!=refa2d[i][j] {3}", i, j, ima.a2d[i, j], refa2d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima.a2d[size, size] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+        Console.WriteLine("3D Array");
+        Console.WriteLine("Element manipulation of 3D matrice with different arithmatic operations, size is {0}", size);
+        Console.WriteLine("Matrix is member of struct, element stores random double");
+
+        ima = new ArrayStruct(size);
+        double[][] refa3d = new double[size][];
+        for (int k = 0; k < refa3d.Length; k++)
+            refa3d[k] = new double[size];
+
+        Init3DMatrix(ima.a3d, refa3d);
+
+        m = 0;
+        n = 0;
+
+        while (m < size)
+        {
+            n = 0;
+            while (n < size)
+            {
+                Process3DArray(ima.a3d);
+                ProcessJagged3DArray(refa3d);
+                n++;
+            }
+            m++;
+        }
+
+        for (int i = 0; i < size; i++)
+        {
+            pass = true;
+            for (int j = 0; j < size; j++)
+                if (ima.a3d[i, 0, j] != refa3d[i][j])
+                    if (!Double.IsNaN(ima.a3d[i, 0, j]) || !Double.IsNaN(refa3d[i][j]))
+                    {
+                        Console.WriteLine("i={0}, j={1}, ima.a3d[i,0,j] {2}!=refa3d[i][j] {3}", i, j, ima.a3d[i, 0, j], refa3d[i][j]);
+                        pass = false;
+                    }
+        }
+
+        if (pass)
+        {
+            try
+            {
+                ima.a3d[size, size, size] = 5;
+                pass = false;
+            }
+            catch (IndexOutOfRangeException)
+            { }
+        }
+
+        Console.WriteLine();
+
+        if (pass)
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/Overflow/FloatInfinitiesToInt.cs b/tests/src/JIT/Methodical/Overflow/FloatInfinitiesToInt.cs
new file mode 100644 (file)
index 0000000..22ff2e6
--- /dev/null
@@ -0,0 +1,331 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal class FloatOvfToInt
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static long FloatToLong(float f)
+    {
+        return (long)f;
+    }
+    public static long FloatToLongInline(float f)
+    {
+        return (long)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ulong FloatToUlong(float f)
+    {
+        return (ulong)f;
+    }
+    public static ulong FloatToUlongInline(float f)
+    {
+        return (ulong)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int FloatToInt(float f)
+    {
+        return (int)f;
+    }
+    public static int FloatToIntInline(float f)
+    {
+        return (int)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static uint FloatToUint(float f)
+    {
+        return (uint)f;
+    }
+    public static uint FloatToUintInline(float f)
+    {
+        return (uint)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static short FloatToShort(float f)
+    {
+        return (short)f;
+    }
+    public static short FloatToShortInline(float f)
+    {
+        return (short)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ushort FloatToUshort(float f)
+    {
+        return (ushort)f;
+    }
+    public static ushort FloatToUshortInline(float f)
+    {
+        return (ushort)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static sbyte FloatToSbyte(float f)
+    {
+        return (sbyte)f;
+    }
+    public static sbyte FloatToSbyteInline(float f)
+    {
+        return (sbyte)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static byte FloatToByte(float f)
+    {
+        return (byte)f;
+    }
+    public static byte FloatToByteInline(float f)
+    {
+        return (byte)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static long DoubleToLong(double d)
+    {
+        return (long)d;
+    }
+    public static long DoubleToLongInline(double d)
+    {
+        return (long)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ulong DoubleToUlong(double d)
+    {
+        return (ulong)d;
+    }
+    public static ulong DoubleToUlongInline(double d)
+    {
+        return (ulong)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int DoubleToInt(double d)
+    {
+        return (int)d;
+    }
+    public static int DoubleToIntInline(double d)
+    {
+        return (int)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static uint DoubleToUint(double d)
+    {
+        return (uint)d;
+    }
+    public static uint DoubleToUintInline(double d)
+    {
+        return (uint)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static short DoubleToShort(double d)
+    {
+        return (short)d;
+    }
+    public static short DoubleToShortInline(double d)
+    {
+        return (short)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ushort DoubleToUshort(double d)
+    {
+        return (ushort)d;
+    }
+    public static ushort DoubleToUshortInline(double d)
+    {
+        return (ushort)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static sbyte DoubleToSbyte(double d)
+    {
+        return (sbyte)d;
+    }
+    public static sbyte DoubleToSbyteInline(double d)
+    {
+        return (sbyte)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static byte DoubleToByte(double d)
+    {
+        return (byte)d;
+    }
+    public static byte DoubleToByteInline(double d)
+    {
+        return (byte)d;
+    }
+
+    public static void PrintValues()
+    {
+        float inff = 1.0f / 0.0f;
+        Console.WriteLine("InfF to long = 0x{0}", FloatToLong(inff).ToString("x"));
+        Console.WriteLine("InfF to ulong = 0x{0}", FloatToUlong(inff).ToString("x"));
+        Console.WriteLine("-InfF to long = 0x{0}", FloatToLong(-inff).ToString("x"));
+        Console.WriteLine("-InfF to ulong = 0x{0}", FloatToUlong(-inff).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfF to int = 0x{0}", FloatToInt(inff).ToString("x"));
+        Console.WriteLine("InfF to uint = 0x{0}", FloatToUint(inff).ToString("x"));
+        Console.WriteLine("-InfF to int = 0x{0}", FloatToInt(-inff).ToString("x"));
+        Console.WriteLine("-InfF to uint = 0x{0}", FloatToUint(-inff).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfF to short = 0x{0}", FloatToShort(inff).ToString("x"));
+        Console.WriteLine("InfF to ushort = 0x{0}", FloatToUshort(inff).ToString("x"));
+        Console.WriteLine("-InfF to short = 0x{0}", FloatToShort(-inff).ToString("x"));
+        Console.WriteLine("-InfF to ushort = 0x{0}", FloatToUshort(-inff).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfF to sbyte = 0x{0}", FloatToSbyte(inff).ToString("x"));
+        Console.WriteLine("InfF to byte = 0x{0}", FloatToByte(inff).ToString("x"));
+        Console.WriteLine("-InfF to sbyte = 0x{0}", FloatToSbyte(-inff).ToString("x"));
+        Console.WriteLine("-InfF to byte = 0x{0}", FloatToByte(-inff).ToString("x"));
+        Console.WriteLine("");
+
+        double infd = 1.0 / 0.0;
+        Console.WriteLine("InfD to long = 0x{0}", DoubleToLong(infd).ToString("x"));
+        Console.WriteLine("InfD to ulong = 0x{0}", DoubleToUlong(infd).ToString("x"));
+        Console.WriteLine("-InfD to long = 0x{0}", DoubleToLong(-infd).ToString("x"));
+        Console.WriteLine("-InfD to ulong = 0x{0}", DoubleToUlong(-infd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfD to int = 0x{0}", DoubleToInt(infd).ToString("x"));
+        Console.WriteLine("InfD to uint = 0x{0}", DoubleToUint(infd).ToString("x"));
+        Console.WriteLine("-InfD to int = 0x{0}", DoubleToInt(-infd).ToString("x"));
+        Console.WriteLine("-InfD to uint = 0x{0}", DoubleToUint(-infd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfD to short = 0x{0}", DoubleToShort(infd).ToString("x"));
+        Console.WriteLine("InfD to ushort = 0x{0}", DoubleToUshort(infd).ToString("x"));
+        Console.WriteLine("-InfD to short = 0x{0}", DoubleToShort(-infd).ToString("x"));
+        Console.WriteLine("-InfD to ushort = 0x{0}", DoubleToUshort(-infd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("InfD to sbyte = 0x{0}", DoubleToSbyte(infd).ToString("x"));
+        Console.WriteLine("InfD to byte = 0x{0}", DoubleToByte(infd).ToString("x"));
+        Console.WriteLine("-InfD to sbyte = 0x{0}", DoubleToSbyte(-infd).ToString("x"));
+        Console.WriteLine("-InfD to byte = 0x{0}", DoubleToByte(-infd).ToString("x"));
+        Console.WriteLine("");
+    }
+
+    public static int TestValuesFloatLong()
+    {
+        float inff = 1.0f / 0.0f;
+        if (FloatToLong(inff) != FloatToLongInline(inff)) return 101;
+        if (FloatToUlong(inff) != FloatToUlongInline(inff)) return 102;
+        if (FloatToLong(-inff) != FloatToLongInline(-inff)) return 103;
+        if (FloatToUlong(-inff) != FloatToUlongInline(-inff)) return 104;
+        return 100;
+    }
+
+    public static int TestValuesFloatInt()
+    {
+        float inff = 1.0f / 0.0f;
+        if (FloatToInt(inff) != FloatToIntInline(inff)) return 111;
+        if (FloatToUint(inff) != FloatToUintInline(inff)) return 112;
+        if (FloatToInt(-inff) != FloatToIntInline(-inff)) return 113;
+        if (FloatToUint(-inff) != FloatToUintInline(-inff)) return 114;
+        return 100;
+    }
+
+    public static int TestValuesFloatShort()
+    {
+        float inff = 1.0f / 0.0f;
+        if (FloatToShort(inff) != FloatToShortInline(inff)) return 121;
+        if (FloatToUshort(inff) != FloatToUshortInline(inff)) return 122;
+        if (FloatToShort(-inff) != FloatToShortInline(-inff)) return 123;
+        if (FloatToUshort(-inff) != FloatToUshortInline(-inff)) return 124;
+        return 100;
+    }
+
+    public static int TestValuesFloatByte()
+    {
+        float inff = 1.0f / 0.0f;
+        if (FloatToSbyte(inff) != FloatToSbyteInline(inff)) return 141;
+        if (FloatToByte(inff) != FloatToByteInline(inff)) return 142;
+        if (FloatToSbyte(-inff) != FloatToSbyteInline(-inff)) return 143;
+        if (FloatToByte(-inff) != FloatToByteInline(-inff)) return 144;
+        return 100;
+    }
+
+    public static int TestValuesDoubleLong()
+    {
+        double infd = 1.0 / 0.0;
+        if (DoubleToLong(infd) != DoubleToLongInline(infd)) return 201;
+        if (DoubleToUlong(infd) != DoubleToUlongInline(infd)) return 202;
+        if (DoubleToLong(-infd) != DoubleToLongInline(-infd)) return 203;
+        if (DoubleToUlong(-infd) != DoubleToUlongInline(-infd)) return 204;
+        return 100;
+    }
+
+    public static int TestValuesDoubleInt()
+    {
+        double infd = 1.0 / 0.0;
+        if (DoubleToInt(infd) != DoubleToIntInline(infd)) return 211;
+        if (DoubleToUint(infd) != DoubleToUintInline(infd)) return 212;
+        if (DoubleToInt(-infd) != DoubleToIntInline(-infd)) return 213;
+        if (DoubleToUint(-infd) != DoubleToUintInline(-infd)) return 214;
+        return 100;
+    }
+
+    public static int TestValuesDoubleShort()
+    {
+        double infd = 1.0 / 0.0;
+        if (DoubleToShort(infd) != DoubleToShortInline(infd)) return 221;
+        if (DoubleToUshort(infd) != DoubleToUshortInline(infd)) return 222;
+        if (DoubleToShort(-infd) != DoubleToShortInline(-infd)) return 223;
+        if (DoubleToUshort(-infd) != DoubleToUshortInline(-infd)) return 224;
+        return 100;
+    }
+
+    public static int TestValuesDoubleByte()
+    {
+        double infd = 1.0 / 0.0;
+        if (DoubleToSbyte(infd) != DoubleToSbyteInline(infd)) return 241;
+        if (DoubleToByte(infd) != DoubleToByteInline(infd)) return 242;
+        if (DoubleToSbyte(-infd) != DoubleToSbyteInline(-infd)) return 243;
+        if (DoubleToByte(-infd) != DoubleToByteInline(-infd)) return 244;
+        return 100;
+    }
+
+    public static int TestValues()
+    {
+        int res = TestValuesFloatLong(); if (res != 100) return res;
+        res = TestValuesFloatInt(); if (res != 100) return res;
+        res = TestValuesFloatShort(); if (res != 100) return res;
+        res = TestValuesFloatByte(); if (res != 100) return res;
+
+        res = TestValuesDoubleLong(); if (res != 100) return res;
+        res = TestValuesDoubleInt(); if (res != 100) return res;
+        res = TestValuesDoubleShort(); if (res != 100) return res;
+        res = TestValuesDoubleByte(); if (res != 100) return res;
+
+        return res;
+    }
+
+    public static void Usage()
+    {
+        Console.WriteLine("FloatOvfToInt [print|test]");
+    }
+
+    public static int Main(String[] args)
+    {
+        if (args.Length != 1)
+        {
+            int res = TestValues();
+            Console.WriteLine("Test " + (res == 100 ? "passed" : "failed"));
+            return res;
+        }
+        switch (args[0])
+        {
+            case "print":
+                PrintValues();
+                break;
+            case "test":
+                int res = TestValues();
+                Console.WriteLine("Test " + (res == 100 ? "passed" : "failed"));
+                return res;
+            default:
+                Usage();
+                break;
+        }
+        return 0;
+    }
+}
diff --git a/tests/src/JIT/Methodical/Overflow/FloatOvfToInt2.cs b/tests/src/JIT/Methodical/Overflow/FloatOvfToInt2.cs
new file mode 100644 (file)
index 0000000..d9edf02
--- /dev/null
@@ -0,0 +1,435 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal class FloatOvfToInt
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static long FloatToLong(float f)
+    {
+        return (long)f;
+    }
+    public static long FloatToLongInline(float f)
+    {
+        return (long)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ulong FloatToUlong(float f)
+    {
+        return (ulong)f;
+    }
+    public static ulong FloatToUlongInline(float f)
+    {
+        return (ulong)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int FloatToInt(float f)
+    {
+        return (int)f;
+    }
+    public static int FloatToIntInline(float f)
+    {
+        return (int)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static uint FloatToUint(float f)
+    {
+        return (uint)f;
+    }
+    public static uint FloatToUintInline(float f)
+    {
+        return (uint)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static short FloatToShort(float f)
+    {
+        return (short)f;
+    }
+    public static short FloatToShortInline(float f)
+    {
+        return (short)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ushort FloatToUshort(float f)
+    {
+        return (ushort)f;
+    }
+    public static ushort FloatToUshortInline(float f)
+    {
+        return (ushort)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static sbyte FloatToSbyte(float f)
+    {
+        return (sbyte)f;
+    }
+    public static sbyte FloatToSbyteInline(float f)
+    {
+        return (sbyte)f;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static byte FloatToByte(float f)
+    {
+        return (byte)f;
+    }
+    public static byte FloatToByteInline(float f)
+    {
+        return (byte)f;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static long DoubleToLong(double d)
+    {
+        return (long)d;
+    }
+    public static long DoubleToLongInline(double d)
+    {
+        return (long)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ulong DoubleToUlong(double d)
+    {
+        return (ulong)d;
+    }
+    public static ulong DoubleToUlongInline(double d)
+    {
+        return (ulong)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static int DoubleToInt(double d)
+    {
+        return (int)d;
+    }
+    public static int DoubleToIntInline(double d)
+    {
+        return (int)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static uint DoubleToUint(double d)
+    {
+        return (uint)d;
+    }
+    public static uint DoubleToUintInline(double d)
+    {
+        return (uint)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static short DoubleToShort(double d)
+    {
+        return (short)d;
+    }
+    public static short DoubleToShortInline(double d)
+    {
+        return (short)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static ushort DoubleToUshort(double d)
+    {
+        return (ushort)d;
+    }
+    public static ushort DoubleToUshortInline(double d)
+    {
+        return (ushort)d;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static sbyte DoubleToSbyte(double d)
+    {
+        return (sbyte)d;
+    }
+    public static sbyte DoubleToSbyteInline(double d)
+    {
+        return (sbyte)d;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public static byte DoubleToByte(double d)
+    {
+        return (byte)d;
+    }
+    public static byte DoubleToByteInline(double d)
+    {
+        return (byte)d;
+    }
+
+    public static void PrintValues()
+    {
+        float bigf = 100000000000000000000000000000.0f;
+        Console.WriteLine("F to long = 0x{0}", FloatToLong(bigf).ToString("x"));
+        Console.WriteLine("F to ulong = 0x{0}", FloatToUlong(bigf).ToString("x"));
+        Console.WriteLine("-F to long = 0x{0}", FloatToLong(-bigf).ToString("x"));
+        Console.WriteLine("-F to ulong = 0x{0}", FloatToUlong(-bigf).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("F to int = 0x{0}", FloatToInt(bigf).ToString("x"));
+        Console.WriteLine("F to uint = 0x{0}", FloatToUint(bigf).ToString("x"));
+        Console.WriteLine("-F to int = 0x{0}", FloatToInt(-bigf).ToString("x"));
+        Console.WriteLine("-F to uint = 0x{0}", FloatToUint(-bigf).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("F to short = 0x{0}", FloatToShort(bigf).ToString("x"));
+        Console.WriteLine("F to ushort = 0x{0}", FloatToUshort(bigf).ToString("x"));
+        Console.WriteLine("-F to short = 0x{0}", FloatToShort(-bigf).ToString("x"));
+        Console.WriteLine("-F to ushort = 0x{0}", FloatToUshort(-bigf).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("F to sbyte = 0x{0}", FloatToSbyte(bigf).ToString("x"));
+        Console.WriteLine("F to byte = 0x{0}", FloatToByte(bigf).ToString("x"));
+        Console.WriteLine("-F to sbyte = 0x{0}", FloatToSbyte(-bigf).ToString("x"));
+        Console.WriteLine("-F to byte = 0x{0}", FloatToByte(-bigf).ToString("x"));
+        Console.WriteLine("");
+
+        double bigd = 100000000000000000000000000000.0;
+        Console.WriteLine("D to long = 0x{0}", DoubleToLong(bigd).ToString("x"));
+        Console.WriteLine("D to ulong = 0x{0}", DoubleToUlong(bigd).ToString("x"));
+        Console.WriteLine("-D to long = 0x{0}", DoubleToLong(-bigd).ToString("x"));
+        Console.WriteLine("-D to ulong = 0x{0}", DoubleToUlong(-bigd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("D to int = 0x{0}", DoubleToInt(bigd).ToString("x"));
+        Console.WriteLine("D to uint = 0x{0}", DoubleToUint(bigd).ToString("x"));
+        Console.WriteLine("-D to int = 0x{0}", DoubleToInt(-bigd).ToString("x"));
+        Console.WriteLine("-D to uint = 0x{0}", DoubleToUint(-bigd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("D to short = 0x{0}", DoubleToShort(bigd).ToString("x"));
+        Console.WriteLine("D to ushort = 0x{0}", DoubleToUshort(bigd).ToString("x"));
+        Console.WriteLine("-D to short = 0x{0}", DoubleToShort(-bigd).ToString("x"));
+        Console.WriteLine("-D to ushort = 0x{0}", DoubleToUshort(-bigd).ToString("x"));
+        Console.WriteLine("");
+        Console.WriteLine("D to sbyte = 0x{0}", DoubleToSbyte(bigd).ToString("x"));
+        Console.WriteLine("D to byte = 0x{0}", DoubleToByte(bigd).ToString("x"));
+        Console.WriteLine("-D to sbyte = 0x{0}", DoubleToSbyte(-bigd).ToString("x"));
+        Console.WriteLine("-D to byte = 0x{0}", DoubleToByte(-bigd).ToString("x"));
+        Console.WriteLine("");
+    }
+
+    public static int TestValuesFloatLong()
+    {
+        float bigf = 100000000000000000000000000000.0f;
+        if (FloatToLong(bigf) != FloatToLongInline(bigf)) return 101;
+        if (FloatToUlong(bigf) != FloatToUlongInline(bigf)) return 102;
+        if (FloatToLong(-bigf) != FloatToLongInline(-bigf)) return 103;
+        if (FloatToUlong(-bigf) != FloatToUlongInline(-bigf)) return 104;
+
+        bigf = 987654321001234567899876543210.0f;
+        if (FloatToLong(bigf) != FloatToLongInline(bigf)) return 101;
+        if (FloatToUlong(bigf) != FloatToUlongInline(bigf)) return 102;
+        if (FloatToLong(-bigf) != FloatToLongInline(-bigf)) return 103;
+        if (FloatToUlong(-bigf) != FloatToUlongInline(-bigf)) return 104;
+
+        bigf = 254783961024896571038054632179.0f;
+        if (FloatToLong(bigf) != FloatToLongInline(bigf)) return 101;
+        if (FloatToUlong(bigf) != FloatToUlongInline(bigf)) return 102;
+        if (FloatToLong(-bigf) != FloatToLongInline(-bigf)) return 103;
+        if (FloatToUlong(-bigf) != FloatToUlongInline(-bigf)) return 104;
+
+        return 100;
+    }
+
+    public static int TestValuesFloatInt()
+    {
+        float bigf = 100000000000000000000000000000.0f;
+        if (FloatToInt(bigf) != FloatToIntInline(bigf)) return 111;
+        if (FloatToUint(bigf) != FloatToUintInline(bigf)) return 112;
+        if (FloatToInt(-bigf) != FloatToIntInline(-bigf)) return 113;
+        if (FloatToUint(-bigf) != FloatToUintInline(-bigf)) return 114;
+
+        bigf = 987654321001234567899876543210.0f;
+        if (FloatToInt(bigf) != FloatToIntInline(bigf)) return 111;
+        if (FloatToUint(bigf) != FloatToUintInline(bigf)) return 112;
+        if (FloatToInt(-bigf) != FloatToIntInline(-bigf)) return 113;
+        if (FloatToUint(-bigf) != FloatToUintInline(-bigf)) return 114;
+
+        bigf = 254783961024896571038054632179.0f;
+        if (FloatToInt(bigf) != FloatToIntInline(bigf)) return 111;
+        if (FloatToUint(bigf) != FloatToUintInline(bigf)) return 112;
+        if (FloatToInt(-bigf) != FloatToIntInline(-bigf)) return 113;
+        if (FloatToUint(-bigf) != FloatToUintInline(-bigf)) return 114;
+
+        return 100;
+    }
+
+    public static int TestValuesFloatShort()
+    {
+        float bigf = 100000000000000000000000000000.0f;
+        if (FloatToShort(bigf) != FloatToShortInline(bigf)) return 121;
+        if (FloatToUshort(bigf) != FloatToUshortInline(bigf)) return 122;
+        if (FloatToShort(-bigf) != FloatToShortInline(-bigf)) return 123;
+        if (FloatToUshort(-bigf) != FloatToUshortInline(-bigf)) return 124;
+
+        bigf = 987654321001234567899876543210.0f;
+        if (FloatToShort(bigf) != FloatToShortInline(bigf)) return 121;
+        if (FloatToUshort(bigf) != FloatToUshortInline(bigf)) return 122;
+        if (FloatToShort(-bigf) != FloatToShortInline(-bigf)) return 123;
+        if (FloatToUshort(-bigf) != FloatToUshortInline(-bigf)) return 124;
+
+        bigf = 254783961024896571038054632179.0f;
+        if (FloatToShort(bigf) != FloatToShortInline(bigf)) return 121;
+        if (FloatToUshort(bigf) != FloatToUshortInline(bigf)) return 122;
+        if (FloatToShort(-bigf) != FloatToShortInline(-bigf)) return 123;
+        if (FloatToUshort(-bigf) != FloatToUshortInline(-bigf)) return 124;
+
+        return 100;
+    }
+
+    public static int TestValuesFloatByte()
+    {
+        float bigf = 100000000000000000000000000000.0f;
+        if (FloatToSbyte(bigf) != FloatToSbyteInline(bigf)) return 141;
+        if (FloatToByte(bigf) != FloatToByteInline(bigf)) return 142;
+        if (FloatToSbyte(-bigf) != FloatToSbyteInline(-bigf)) return 143;
+        if (FloatToByte(-bigf) != FloatToByteInline(-bigf)) return 144;
+
+        bigf = 987654321001234567899876543210.0f;
+        if (FloatToSbyte(bigf) != FloatToSbyteInline(bigf)) return 141;
+        if (FloatToByte(bigf) != FloatToByteInline(bigf)) return 142;
+        if (FloatToSbyte(-bigf) != FloatToSbyteInline(-bigf)) return 143;
+        if (FloatToByte(-bigf) != FloatToByteInline(-bigf)) return 144;
+
+        bigf = 254783961024896571038054632179.0f;
+        if (FloatToSbyte(bigf) != FloatToSbyteInline(bigf)) return 141;
+        if (FloatToByte(bigf) != FloatToByteInline(bigf)) return 142;
+        if (FloatToSbyte(-bigf) != FloatToSbyteInline(-bigf)) return 143;
+        if (FloatToByte(-bigf) != FloatToByteInline(-bigf)) return 144;
+
+        return 100;
+    }
+
+    public static int TestValuesDoubleLong()
+    {
+        double bigd = 100000000000000000000000000000.0;
+        if (DoubleToLong(bigd) != DoubleToLongInline(bigd)) return 201;
+        if (DoubleToUlong(bigd) != DoubleToUlongInline(bigd)) return 202;
+        if (DoubleToLong(-bigd) != DoubleToLongInline(-bigd)) return 203;
+        if (DoubleToUlong(-bigd) != DoubleToUlongInline(-bigd)) return 204;
+
+        bigd = 987654321001234567899876543210.0;
+        if (DoubleToLong(bigd) != DoubleToLongInline(bigd)) return 201;
+        if (DoubleToUlong(bigd) != DoubleToUlongInline(bigd)) return 202;
+        if (DoubleToLong(-bigd) != DoubleToLongInline(-bigd)) return 203;
+        if (DoubleToUlong(-bigd) != DoubleToUlongInline(-bigd)) return 204;
+
+        bigd = 254783961024896571038054632179.0;
+        if (DoubleToLong(bigd) != DoubleToLongInline(bigd)) return 201;
+        if (DoubleToUlong(bigd) != DoubleToUlongInline(bigd)) return 202;
+        if (DoubleToLong(-bigd) != DoubleToLongInline(-bigd)) return 203;
+        if (DoubleToUlong(-bigd) != DoubleToUlongInline(-bigd)) return 204;
+
+        return 100;
+    }
+
+    public static int TestValuesDoubleInt()
+    {
+        double bigd = 100000000000000000000000000000.0;
+        if (DoubleToInt(bigd) != DoubleToIntInline(bigd)) return 211;
+        if (DoubleToUint(bigd) != DoubleToUintInline(bigd)) return 212;
+        if (DoubleToInt(-bigd) != DoubleToIntInline(-bigd)) return 213;
+        if (DoubleToUint(-bigd) != DoubleToUintInline(-bigd)) return 214;
+
+        bigd = 987654321001234567899876543210.0;
+        if (DoubleToInt(bigd) != DoubleToIntInline(bigd)) return 211;
+        if (DoubleToUint(bigd) != DoubleToUintInline(bigd)) return 212;
+        if (DoubleToInt(-bigd) != DoubleToIntInline(-bigd)) return 213;
+        if (DoubleToUint(-bigd) != DoubleToUintInline(-bigd)) return 214;
+
+        bigd = 254783961024896571038054632179.0;
+        if (DoubleToInt(bigd) != DoubleToIntInline(bigd)) return 211;
+        if (DoubleToUint(bigd) != DoubleToUintInline(bigd)) return 212;
+        if (DoubleToInt(-bigd) != DoubleToIntInline(-bigd)) return 213;
+        if (DoubleToUint(-bigd) != DoubleToUintInline(-bigd)) return 214;
+
+        return 100;
+    }
+
+    public static int TestValuesDoubleShort()
+    {
+        double bigd = 100000000000000000000000000000.0;
+        if (DoubleToShort(bigd) != DoubleToShortInline(bigd)) return 221;
+        if (DoubleToUshort(bigd) != DoubleToUshortInline(bigd)) return 222;
+        if (DoubleToShort(-bigd) != DoubleToShortInline(-bigd)) return 223;
+        if (DoubleToUshort(-bigd) != DoubleToUshortInline(-bigd)) return 224;
+
+        bigd = 987654321001234567899876543210.0;
+        if (DoubleToShort(bigd) != DoubleToShortInline(bigd)) return 221;
+        if (DoubleToUshort(bigd) != DoubleToUshortInline(bigd)) return 222;
+        if (DoubleToShort(-bigd) != DoubleToShortInline(-bigd)) return 223;
+        if (DoubleToUshort(-bigd) != DoubleToUshortInline(-bigd)) return 224;
+
+        bigd = 254783961024896571038054632179.0;
+        if (DoubleToShort(bigd) != DoubleToShortInline(bigd)) return 221;
+        if (DoubleToUshort(bigd) != DoubleToUshortInline(bigd)) return 222;
+        if (DoubleToShort(-bigd) != DoubleToShortInline(-bigd)) return 223;
+        if (DoubleToUshort(-bigd) != DoubleToUshortInline(-bigd)) return 224;
+
+        return 100;
+    }
+
+    public static int TestValuesDoubleByte()
+    {
+        double bigd = 100000000000000000000000000000.0;
+        if (DoubleToSbyte(bigd) != DoubleToSbyteInline(bigd)) return 241;
+        if (DoubleToByte(bigd) != DoubleToByteInline(bigd)) return 242;
+        if (DoubleToSbyte(-bigd) != DoubleToSbyteInline(-bigd)) return 243;
+        if (DoubleToByte(-bigd) != DoubleToByteInline(-bigd)) return 244;
+
+        bigd = 987654321001234567899876543210.0;
+        if (DoubleToSbyte(bigd) != DoubleToSbyteInline(bigd)) return 241;
+        if (DoubleToByte(bigd) != DoubleToByteInline(bigd)) return 242;
+        if (DoubleToSbyte(-bigd) != DoubleToSbyteInline(-bigd)) return 243;
+        if (DoubleToByte(-bigd) != DoubleToByteInline(-bigd)) return 244;
+
+        bigd = 254783961024896571038054632179.0;
+        if (DoubleToSbyte(bigd) != DoubleToSbyteInline(bigd)) return 241;
+        if (DoubleToByte(bigd) != DoubleToByteInline(bigd)) return 242;
+        if (DoubleToSbyte(-bigd) != DoubleToSbyteInline(-bigd)) return 243;
+        if (DoubleToByte(-bigd) != DoubleToByteInline(-bigd)) return 244;
+
+        return 100;
+    }
+
+    public static int TestValues()
+    {
+        int res = TestValuesFloatLong(); if (res != 100) return res;
+        res = TestValuesFloatInt(); if (res != 100) return res;
+        res = TestValuesFloatShort(); if (res != 100) return res;
+        res = TestValuesFloatByte(); if (res != 100) return res;
+
+        res = TestValuesDoubleLong(); if (res != 100) return res;
+        res = TestValuesDoubleInt(); if (res != 100) return res;
+        res = TestValuesDoubleShort(); if (res != 100) return res;
+        res = TestValuesDoubleByte(); if (res != 100) return res;
+
+        return res;
+    }
+
+    public static void Usage()
+    {
+        Console.WriteLine("FloatOvfToInt [print|test]");
+    }
+
+    public static int Main(String[] args)
+    {
+        if (args.Length != 1)
+        {
+            int res = TestValues();
+            Console.WriteLine("Test " + (res == 100 ? "passed" : "failed"));
+            return res;
+        }
+        switch (args[0])
+        {
+            case "print":
+                PrintValues();
+                break;
+            case "test":
+                int res = TestValues();
+                Console.WriteLine("Test " + (res == 100 ? "passed" : "failed"));
+                return res;
+            default:
+                Usage();
+                break;
+        }
+        return 0;
+    }
+}
diff --git a/tests/src/JIT/Methodical/Overflow/Overflow.csproj b/tests/src/JIT/Methodical/Overflow/Overflow.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Overflow/app.config b/tests/src/JIT/Methodical/Overflow/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Overflow/cs_template.proj b/tests/src/JIT/Methodical/Overflow/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/Overflow/packages.config b/tests/src/JIT/Methodical/Overflow/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/callconv/app.config b/tests/src/JIT/Methodical/VT/callconv/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/callconv/call.cs b/tests/src/JIT/Methodical/VT/callconv/call.cs
new file mode 100644 (file)
index 0000000..d3d6c02
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal interface ISomething
+    {
+        void DoSomething(VT vt1, ref VT vt2);
+        VT RetSomething(VT vt);
+    }
+
+    internal struct VT : ISomething
+    {
+        private int _m_vn;
+        private String _m_vs;
+
+        private VT(int vn, String vs)
+        {
+            _m_vn = vn;
+            _m_vs = vs;
+        }
+
+        public void DoSomething(VT vt1, ref VT vt2)
+        {
+            Console.WriteLine("ISomething::DoSomething - " + vt1.ToString() + " " + vt2.ToString());
+            Console.WriteLine("this is {" + ToString() + "}");
+        }
+
+        public VT RetSomething(VT vt)
+        {
+            Console.WriteLine("ISomething::RetSomething - " + vt.ToString());
+            Console.WriteLine("this is {" + ToString() + "}");
+            return new VT(vt._m_vn, vt._m_vs);
+        }
+
+        public void _DoSomething(VT vt1, ref VT vt2)
+        {
+            Console.WriteLine("ISomething::DoSomething - " + vt1.ToString() + " " + vt2.ToString());
+            Console.WriteLine("this is {" + ToString() + "}");
+        }
+
+        public VT _RetSomething(VT vt)
+        {
+            Console.WriteLine("ISomething::RetSomething - " + vt.ToString());
+            Console.WriteLine("this is {" + ToString() + "}");
+            return new VT(vt._m_vn, vt._m_vs);
+        }
+
+        public override String ToString()
+        {
+            return _m_vn.ToString() + "/" + _m_vs;
+        }
+
+        private static void TryInterface(ISomething smth)
+        {
+            VT vt = new VT(11, "11");
+            smth.DoSomething(new VT(0, "-"), ref vt);
+            vt = smth.RetSomething(vt);
+            Console.WriteLine("Got : " + vt.ToString());
+        }
+
+        private static int Main()
+        {
+            VT vt = new VT(10, "10");
+            vt._DoSomething(new VT(0, "-"), ref vt);
+            vt = vt._RetSomething(vt);
+            Console.WriteLine("Got : " + vt.ToString());
+            if (vt._m_vn != 10 || vt._m_vs != "10")
+            {
+                Console.WriteLine("Failed");
+                return 101;
+            }
+
+            vt.DoSomething(new VT(0, "-"), ref vt);
+            vt = vt.RetSomething(vt);
+            Console.WriteLine("Got : " + vt.ToString());
+            if (vt._m_vn != 10 || vt._m_vs != "10")
+            {
+                Console.WriteLine("Failed");
+                return 101;
+            }
+
+            TryInterface(vt);
+
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/callconv/callconv.csproj b/tests/src/JIT/Methodical/VT/callconv/callconv.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/callconv/cs_template.proj b/tests/src/JIT/Methodical/VT/callconv/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/callconv/jumper.cs b/tests/src/JIT/Methodical/VT/callconv/jumper.cs
new file mode 100644 (file)
index 0000000..b75ce92
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace MS
+{
+    internal struct VT
+    {
+        private int _m_n;
+        private VT[] _m_dummyGCRef;
+        private VT(int n) { _m_n = n; _m_dummyGCRef = new VT[10]; }
+
+        private VT add(VT what) { _m_n += what._m_n; return this; }
+        private VT sub(VT what) { _m_n -= what._m_n; return this; }   //this will be implemented via NEG+JMP in IL
+
+        private static int Main()
+        {
+            VT vt = new VT(100);
+            VT what = new VT(99);
+            vt = vt.add(what);
+            vt = vt.sub(what);
+            if (vt._m_n != 100)
+                return vt._m_n;
+            VT what2 = new VT(96);
+            vt.add(what2);
+            vt.sub(what2);
+            return vt._m_n;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/callconv/jumps.cs b/tests/src/JIT/Methodical/VT/callconv/jumps.cs
new file mode 100644 (file)
index 0000000..6b31235
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace MS
+{
+    internal struct VT
+    {
+        private String _path;
+        private int _target;
+
+        public override String ToString()
+        {
+            _path += "->ToString";
+            switch (_target)
+            {
+                case 0:
+                    return "VT";
+                case 1:
+                    _target = 0;
+                    return ToStringHelper();
+                case 2:
+                    _target = 0;
+                    return ToString();
+                default:
+                    throw new Exception();
+            }
+        }
+
+        public String ToStringHelper()
+        {
+            _path += "->ToStringHelper";
+            switch (_target)
+            {
+                case 0:
+                    return "VT";
+                case 1:
+                    _target = 0;
+                    return ToStringHelper();
+                case 2:
+                    _target = 0;
+                    return ToString();
+                default:
+                    throw new Exception();
+            }
+        }
+
+        private bool RunTests()
+        {
+            _target = 0;
+            _path = null;
+            Console.WriteLine(ToStringHelper() + " : " + _path);
+            if (_path != "->ToStringHelper")
+                return false;
+            _target = 1;
+            _path = null;
+            Console.WriteLine(ToStringHelper() + " : " + _path);
+            if (_path != "->ToStringHelper->ToStringHelper")
+                return false;
+            _target = 2;
+            _path = null;
+            Console.WriteLine(ToStringHelper() + " : " + _path);
+            if (_path != "->ToStringHelper->ToString")
+                return false;
+            _target = 0;
+            _path = null;
+            Console.WriteLine(ToString() + " : " + _path);
+            if (_path != "->ToString")
+                return false;
+            _target = 1;
+            _path = null;
+            Console.WriteLine(ToString() + " : " + _path);
+            if (_path != "->ToString->ToStringHelper")
+                return false;
+            _target = 2;
+            _path = null;
+            Console.WriteLine(ToString() + " : " + _path);
+            if (_path != "->ToString->ToString")
+                return false;
+            return true;
+        }
+
+        private static int Main()
+        {
+            if (new VT().RunTests())
+            {
+                Console.WriteLine("PASSED.");
+                return 100;
+            }
+            Console.WriteLine("FAILED.");
+            return 101;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/callconv/packages.config b/tests/src/JIT/Methodical/VT/callconv/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/callconv/vtret.cs b/tests/src/JIT/Methodical/VT/callconv/vtret.cs
new file mode 100644 (file)
index 0000000..2d808a1
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace MS
+{
+    internal struct VT
+    {
+        private int _m_n;
+        private VT[] _m_dummyGCRef;
+        private VT(int n) { _m_n = n; _m_dummyGCRef = new VT[10]; }
+
+        private static VT add(VT me, VT what) { me._m_n += what._m_n; return me; }
+        private static VT sub(VT me, VT what) { me._m_n -= what._m_n; return me; }
+
+        private static int Main()
+        {
+            VT vt = new VT(100);
+            VT what = new VT(99);
+            vt = VT.add(vt, what);
+            vt = VT.sub(vt, what);
+            return vt._m_n;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/app.config b/tests/src/JIT/Methodical/VT/etc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/etc/cs_template.proj b/tests/src/JIT/Methodical/VT/etc/cs_template.proj
new file mode 100644 (file)
index 0000000..dccc73f
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <LinkLocalMscorlib>true</LinkLocalMscorlib>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
diff --git a/tests/src/JIT/Methodical/VT/etc/ctor_recurse.cs b/tests/src/JIT/Methodical/VT/etc/ctor_recurse.cs
new file mode 100644 (file)
index 0000000..9d8c500
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class S
+    {
+        private T _nvalue;
+        public S(T t) { _nvalue = t; }
+    }
+
+    internal struct T
+    {
+        private static T s_stat;
+        private S _gcref;
+
+        public T(T t) { t.DoMethod(); _gcref = new S(t); }
+        public T(S s) { _gcref = s; }
+
+        private void DoMethod() { }
+
+        private static int Main()
+        {
+            s_stat =
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                new T(new S(new T(new S(new T(new S(new T(new S(new T(new S(
+                        s_stat
+                ))))))))))
+                ))))))))))
+                ))))))))))
+                ))))))))))
+                ))))))))))
+                ))))))))))
+                ;
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/etc.csproj b/tests/src/JIT/Methodical/VT/etc/etc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/etc/gc_nested.cs b/tests/src/JIT/Methodical/VT/etc/gc_nested.cs
new file mode 100644 (file)
index 0000000..65b7687
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Struct1
+    {
+        private int _m_i1;
+        private long _m_l1;
+        public class Struct2
+        {
+            private int _m_i2;
+            private long _m_l2;
+            public void Verify()
+            {
+                if (_m_i2 != 0 || _m_l2 != 0) throw new Exception();
+            }
+        }
+        public Struct2 m_str2 = new Struct2();
+        public void Verify()
+        {
+            if (_m_i1 != 0 || _m_l1 != 0) throw new Exception();
+            m_str2.Verify();
+        }
+    }
+
+    internal class Test
+    {
+        private static int Main()
+        {
+            Struct1 str1 = new Struct1();
+            TypedReference _ref = __makeref(str1);
+            str1 = __refvalue(_ref, Struct1);
+            str1.Verify();
+            _ref = __makeref(str1.m_str2);
+            Struct1.Struct2 str2 = __refvalue(_ref, Struct1.Struct2);
+            str2.Verify();
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/han2.cs b/tests/src/JIT/Methodical/VT/etc/han2.cs
new file mode 100644 (file)
index 0000000..e5b9dc0
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Ring
+    {
+        public int size;
+    }
+
+    internal struct Column
+    {
+        public Ring[] rings;
+        private int[] _heightPtr;
+
+        public int height
+        {
+            get { return _heightPtr[0]; }
+            set { _heightPtr[0] = value; }
+        }
+
+        public void Init(int maxHeight, int curHeight)
+        {
+            rings = new Ring[maxHeight];
+            for (int i = 0; i < curHeight; i++)
+            {
+                rings[i].size = maxHeight - i;
+            }
+            _heightPtr = new int[] { curHeight };
+        }
+
+        public void Validate()
+        {
+            for (int i = 1; i < _heightPtr[0]; i++)
+            {
+                if (rings[i - 1].size <= rings[i].size)
+                    throw new Exception();
+            }
+        }
+
+        private static void move1(Column from, Column to)
+        {
+            to.rings[to.height] = from.rings[from.height - 1];
+            to.height = to.height + 1;
+            from.height = from.height - 1;
+            to.Validate();
+            from.Validate();
+        }
+
+        private static int move(Column from, Column to, Column temp, int num)
+        {
+            int C = 1;
+            if (num == 1)
+            {
+                move1(from, to);
+            }
+            else
+            {
+                C += move(from, temp, to, num - 1);
+                move1(from, to);
+                C += move(temp, to, from, num - 1);
+            }
+            return C;
+        }
+
+        private static int Main()
+        {
+            int NUM = 17;
+            Column[] cols = new Column[3];
+            cols[0].Init(NUM, NUM);
+            cols[1].Init(NUM, 0);
+            cols[2].Init(NUM, 0);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/han3.cs b/tests/src/JIT/Methodical/VT/etc/han3.cs
new file mode 100644 (file)
index 0000000..59ed17a
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Ring
+    {
+        public int size;
+    }
+
+    internal struct Column
+    {
+        public Ring[] rings;
+        private int[] _heightPtr;
+
+        public int height
+        {
+            get { return _heightPtr[0]; }
+            set { _heightPtr[0] = value; }
+        }
+
+        public void Init(int maxHeight, int curHeight)
+        {
+            rings = new Ring[maxHeight];
+            for (int i = 0; i < curHeight; i++)
+            {
+                rings[i].size = maxHeight - i;
+            }
+            _heightPtr = new int[] { curHeight };
+        }
+
+        public void Validate()
+        {
+            for (int i = 1; i < _heightPtr[0]; i++)
+            {
+                if (rings[i - 1].size <= rings[i].size)
+                    throw new Exception();
+            }
+        }
+
+        private static void move1(Column from, Column to)
+        {
+            to.rings[to.height] = from.rings[from.height - 1];
+            to.height = to.height + 1;
+            from.height = from.height - 1;
+            to.Validate();
+            from.Validate();
+        }
+
+        private static int move(Column from, Column to, Column temp, int num)
+        {
+            int C = 1;
+            if (num == 1)
+            {
+                move1(from, to);
+            }
+            else
+            {
+                C += move(from, temp, to, num - 1);
+                move1(from, to);
+                C += move(temp, to, from, num - 1);
+            }
+            return C;
+        }
+
+        private static int Main()
+        {
+            int NUM = 17;
+            Column c1 = new Column();
+            Column c2 = new Column();
+            Column c3 = new Column();
+            c1.Init(NUM, NUM);
+            c2.Init(NUM, 0);
+            c3.Init(NUM, 0);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/han3_ctor.cs b/tests/src/JIT/Methodical/VT/etc/han3_ctor.cs
new file mode 100644 (file)
index 0000000..ccaccf7
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Ring
+    {
+        public int size;
+    }
+
+    internal struct Column
+    {
+        public Ring[] rings;
+        private int[] _heightPtr;
+
+        public int height
+        {
+            get { return _heightPtr[0]; }
+            set { _heightPtr[0] = value; }
+        }
+
+        public Column(int maxHeight, int curHeight)
+        {
+            rings = new Ring[maxHeight];
+            for (int i = 0; i < curHeight; i++)
+            {
+                rings[i].size = maxHeight - i;
+            }
+            _heightPtr = new int[] { curHeight };
+        }
+
+        public void Validate()
+        {
+            for (int i = 1; i < _heightPtr[0]; i++)
+            {
+                if (rings[i - 1].size <= rings[i].size)
+                    throw new Exception();
+            }
+        }
+
+        private static void move1(Column from, Column to)
+        {
+            to.rings[to.height] = from.rings[from.height - 1];
+            to.height = to.height + 1;
+            from.height = from.height - 1;
+            to.Validate();
+            from.Validate();
+        }
+
+        private static int move(Column from, Column to, Column temp, int num)
+        {
+            to.Validate();
+            from.Validate();
+            temp.Validate();
+            int C = 1;
+            if (num == 1)
+            {
+                move1(from, to);
+            }
+            else
+            {
+                C += move(from, temp, to, num - 1);
+                move1(from, to);
+                C += move(temp, to, from, num - 1);
+            }
+            return C;
+        }
+
+        private static int Main()
+        {
+            return move(new Column(17, 17),
+                        new Column(17, 0),
+                        new Column(17, 0),
+                        17) - 130971;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/han3_ref.cs b/tests/src/JIT/Methodical/VT/etc/han3_ref.cs
new file mode 100644 (file)
index 0000000..8a07912
--- /dev/null
@@ -0,0 +1,83 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Ring
+    {
+        public int size;
+    }
+
+    internal struct Column
+    {
+        public Ring[] rings;
+        private int[] _heightPtr;
+
+        public int height
+        {
+            get { return _heightPtr[0]; }
+            set { _heightPtr[0] = value; }
+        }
+
+        public Column(int maxHeight, int curHeight)
+        {
+            rings = new Ring[maxHeight];
+            for (int i = 0; i < curHeight; i++)
+            {
+                rings[i].size = maxHeight - i;
+            }
+            _heightPtr = new int[] { curHeight };
+        }
+
+        public void Validate()
+        {
+            for (int i = 1; i < _heightPtr[0]; i++)
+            {
+                if (rings[i - 1].size <= rings[i].size)
+                    throw new Exception();
+            }
+        }
+
+        private static void move1(ref Column from, ref Column to)
+        {
+            to.rings[to.height] = from.rings[from.height - 1];
+            to.height = to.height + 1;
+            from.height = from.height - 1;
+            to.Validate();
+            from.Validate();
+        }
+
+        private static int move(ref Column from, ref Column to, ref Column temp, int num)
+        {
+            to.Validate();
+            from.Validate();
+            temp.Validate();
+            int C = 1;
+            if (num == 1)
+            {
+                move1(ref from, ref to);
+            }
+            else
+            {
+                C += move(ref from, ref temp, ref to, num - 1);
+                move1(ref from, ref to);
+                C += move(ref temp, ref to, ref from, num - 1);
+            }
+            return C;
+        }
+
+        private static int Main()
+        {
+            Column c1 = new Column(17, 17);
+            Column c2 = new Column(17, 0);
+            Column c3 = new Column(17, 0);
+            int ec = move(ref c1, ref c2, ref c3, 17) - 130971;
+            c1.Validate();
+            c2.Validate();
+            c3.Validate();
+            return ec;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/hanoi.cs b/tests/src/JIT/Methodical/VT/etc/hanoi.cs
new file mode 100644 (file)
index 0000000..4bfa630
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct CI
+    {
+        public int index;
+    }
+
+    internal class Test
+    {
+        private static int[][] s_cols;
+        private static int[] s_heights;
+
+        private static void test()
+        {
+            for (int c = 0; c < 3; c++)
+            {
+                for (int i = 1; i < s_heights[c]; i++)
+                {
+                    if (s_cols[c][i - 1] <= s_cols[c][i])
+                        throw new Exception();
+                }
+            }
+        }
+
+        private static void move1(CI from, CI to)
+        {
+            s_cols[to.index][s_heights[to.index]++] = s_cols[from.index][--s_heights[from.index]];
+        }
+
+        private static int move(CI from, CI to, int num)
+        {
+            if (num == 1)
+            {
+                move1(from, to);
+                return 1;
+            }
+            else
+            {
+                CI F, T;
+                F.index = from.index;
+                T.index = 3 - from.index - to.index;
+                int c = move(F, T, num - 1);
+                move1(from, to);
+                F.index = 3 - from.index - to.index;
+                T.index = to.index;
+                return c + 1 + move(F, T, num - 1);
+            }
+        }
+
+        private static int Main()
+        {
+            int NUM = 17;
+            s_cols = new int[3][];
+            s_cols[0] = new int[NUM];
+            s_cols[1] = new int[NUM];
+            s_cols[2] = new int[NUM];
+            s_heights = new int[] { NUM, 0, 0 };
+            for (int i = 0; i < NUM; i++)
+                s_cols[0][i] = NUM - i;
+            test();
+
+            CI F, T;
+            F.index = 0;
+            T.index = 1;
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/knight.cs b/tests/src/JIT/Methodical/VT/etc/knight.cs
new file mode 100644 (file)
index 0000000..17cb2f7
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace KnightMove
+{
+    internal struct MV
+    {
+        public int x, y;
+        public int v;
+    }
+    internal struct SQ
+    {
+        public int visited;
+
+        private static int Main()
+        {
+            const int SIZE = 5;
+            const int VARNUM = 8;
+            const int STARTX = 0;
+            const int STARTY = 0;
+            SQ[,] sq = new SQ[SIZE, SIZE];
+            int[] xt = new int[] { 1, 1, -1, -1, 2, 2, -2, -2 };
+            int[] yt = new int[] { 2, -2, 2, -2, 1, -1, 1, -1 };
+
+            MV[] mv = new MV[SIZE * SIZE];
+            sq[STARTX, STARTY].visited = 1;
+            mv[0].x = STARTX;
+            mv[0].y = STARTY;
+            int i = 1;
+            while (true)
+            {
+                if (mv[i].v >= VARNUM)
+                {
+                    i--;
+                    if (i == 0)
+                    {
+                        return 1;
+                    }
+                    if (sq[mv[i].x, mv[i].y].visited != i + 1)
+                        throw new Exception();
+                    sq[mv[i].x, mv[i].y].visited = 0;
+                    mv[i].v++;
+                    continue;
+                }
+                int nx = mv[i - 1].x + xt[mv[i].v];
+                int ny = mv[i - 1].y + yt[mv[i].v];
+                if (nx < 0 || nx >= SIZE || ny < 0 || ny >= SIZE || sq[nx, ny].visited != 0)
+                {
+                    mv[i].v++;
+                    continue;
+                }
+                mv[i].x = nx;
+                mv[i++].y = ny;
+                sq[nx, ny].visited = i;
+                if (i == SIZE * SIZE)
+                {
+                    for (int x = 0; x < SIZE; x++)
+                    {
+                        for (int y = 0; y < SIZE; y++)
+                        {
+                            String n = sq[x, y].visited.ToString();
+                            n += n.Length == 1 ? "  " : " ";
+                        }
+                    }
+                    return 100;
+                }
+                mv[i].v = 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/nested.cs b/tests/src/JIT/Methodical/VT/etc/nested.cs
new file mode 100644 (file)
index 0000000..88f199f
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Struct1
+    {
+        private int _m_i1;
+        private long _m_l1;
+        public struct Struct2
+        {
+            private int _m_i2;
+            private long _m_l2;
+            public void Verify()
+            {
+                if (_m_i2 != 0 || _m_l2 != 0) throw new Exception();
+            }
+        }
+        public Struct2 m_str2;
+        public void Verify()
+        {
+            if (_m_i1 != 0 || _m_l1 != 0) throw new Exception();
+            m_str2.Verify();
+        }
+    }
+
+    internal class Test
+    {
+        private static int Main()
+        {
+            Struct1 str1 = new Struct1();
+            TypedReference _ref = __makeref(str1);
+            str1 = __refvalue(_ref, Struct1);
+            str1.Verify();
+            _ref = __makeref(str1.m_str2);
+            Struct1.Struct2 str2 = __refvalue(_ref, Struct1.Struct2);
+            str2.Verify();
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/etc/packages.config b/tests/src/JIT/Methodical/VT/etc/packages.config
new file mode 100644 (file)
index 0000000..79ece06
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+</packages>
diff --git a/tests/src/JIT/Methodical/VT/identity/accum.cs b/tests/src/JIT/Methodical/VT/identity/accum.cs
new file mode 100644 (file)
index 0000000..a2829e1
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct CI
+    {
+        private int _m_v;
+
+        private static int test(CI c1, CI c2, CI c3, int dummy, CI c4, CI c5)
+        {
+            c1._m_v = 10;
+            c2._m_v = -10;
+            return c1._m_v + c2._m_v + c3._m_v + c4._m_v + c5._m_v;
+        }
+
+        private static int Main()
+        {
+            CI c = new CI();
+            return 100 + test(c, c, c, 0, c, c);
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/identity/app.config b/tests/src/JIT/Methodical/VT/identity/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/identity/cs_template.proj b/tests/src/JIT/Methodical/VT/identity/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/identity/identity.csproj b/tests/src/JIT/Methodical/VT/identity/identity.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/identity/packages.config b/tests/src/JIT/Methodical/VT/identity/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/identity/vcall.cs b/tests/src/JIT/Methodical/VT/identity/vcall.cs
new file mode 100644 (file)
index 0000000..56a8a27
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace MS
+{
+    internal struct VT
+    {
+        private int _v;
+
+        private static void Test(VT arg1, ref VT arg2)
+        {
+            arg2._v = 100;
+            arg1._v = 10;
+        }
+
+        private static int Main()
+        {
+            VT vt;
+            vt._v = 99;
+            Test(vt, ref vt);
+            return vt._v;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/port/app.config b/tests/src/JIT/Methodical/VT/port/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/port/cs_template.proj b/tests/src/JIT/Methodical/VT/port/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/port/lcs.cs b/tests/src/JIT/Methodical/VT/port/lcs.cs
new file mode 100644 (file)
index 0000000..c00971a
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct LCSV
+    {
+        private int _v;
+        private const int RANK = 4;
+
+        private static String buildLCS(LCSV[,,,] b, char[] X, LCSV[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i]._v == 0) return "";
+
+            LCSV L = b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v];
+            LCSV Z;
+            Z._v = 0;
+            if (L._v == RANK)
+            {
+                for (LCSV i = Z; i._v < RANK; i._v++)
+                    ind[i._v]._v--;
+                LCSV idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx._v];
+            }
+            if (L._v >= 0 && L._v < RANK)
+            {
+                ind[L._v]._v--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(LCSV[,,,] c, LCSV[,,,] b, char[][] seq, LCSV[] len)
+        {
+            LCSV[] ind = new LCSV[RANK];
+            for (ind[0]._v = 1; ind[0]._v < len[0]._v; ind[0]._v++)
+            {
+                for (ind[1]._v = 1; ind[1]._v < len[1]._v; ind[1]._v++)
+                {
+                    for (ind[2]._v = 1; ind[2]._v < len[2]._v; ind[2]._v++)
+                    {
+                        for (ind[3]._v = 1; ind[3]._v < len[3]._v; ind[3]._v++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i]._v - 1] != seq[i - 1][ind[i - 1]._v - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v =
+                                    c[ind[0]._v - 1, ind[1]._v - 1, ind[2]._v - 1, ind[3]._v - 1]._v + 1;
+                                b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v = RANK;
+                                continue;
+                            }
+
+                            LCSV Z;
+                            Z._v = 0;
+
+                            LCSV R, M;
+                            R._v = M._v = -1;
+                            for (LCSV i = Z; i._v < RANK; i._v++)
+                            {
+                                ind[i._v]._v--;
+                                if (c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v > M._v)
+                                {
+                                    R = i;
+                                    M = c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v];
+                                }
+                                ind[i._v]._v++;
+                            }
+                            if (R._v < 0 || M._v < 0)
+                                throw new Exception();
+
+                            c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v] = M;
+                            b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            LCSV[] len = new LCSV[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i]._v = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            LCSV[,,,] c = new LCSV[len[0]._v, len[1]._v, len[2]._v, len[3]._v];
+            LCSV[,,,] b = new LCSV[len[0]._v, len[1]._v, len[2]._v, len[3]._v];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]._v--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/port/lcs_gcref.cs b/tests/src/JIT/Methodical/VT/port/lcs_gcref.cs
new file mode 100644 (file)
index 0000000..2b06c6a
--- /dev/null
@@ -0,0 +1,139 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCSO
+    {
+        private LCSO _m_child;
+        public LCSO(LCSO child) { _m_child = child; }
+    }
+
+    internal struct LCSV
+    {
+        private int _v;
+        private LCSO[] _gcref;
+        private const int RANK = 4;
+
+        private static String buildLCS(LCSV[,,,] b, char[] X, LCSV[] ind)
+        {
+            for (int i = 0; i < RANK; i++)
+                if (ind[i]._v == 0) return "";
+
+            LCSV L = b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v];
+            LCSV Z;
+            Z._v = 0;
+            Z._gcref = new LCSO[] { new LCSO(new LCSO(null)) };
+            if (L._v == RANK)
+            {
+                for (LCSV i = Z; i._v < RANK; i._v++)
+                    ind[i._v]._v--;
+                LCSV idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx._v];
+            }
+            if (L._v >= 0 && L._v < RANK)
+            {
+                ind[L._v]._v--;
+                ind[L._v]._gcref = new LCSO[] { new LCSO(null) };
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(LCSV[,,,] c, LCSV[,,,] b, char[][] seq, LCSV[] len)
+        {
+            LCSV[] ind = new LCSV[RANK];
+            for (ind[0]._v = 1; ind[0]._v < len[0]._v; ind[0]._v++)
+            {
+                for (ind[1]._v = 1; ind[1]._v < len[1]._v; ind[1]._v++)
+                {
+                    for (ind[2]._v = 1; ind[2]._v < len[2]._v; ind[2]._v++)
+                    {
+                        ind[2]._gcref = new LCSO[] { new LCSO(null) };
+                        for (ind[3]._v = 1; ind[3]._v < len[3]._v; ind[3]._v++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i]._v - 1] != seq[i - 1][ind[i - 1]._v - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v =
+                                    c[ind[0]._v - 1, ind[1]._v - 1, ind[2]._v - 1, ind[3]._v - 1]._v + 1;
+                                b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v = RANK;
+                                continue;
+                            }
+
+                            LCSV R, M, Z;
+                            Z._v = 0;
+                            R._v = M._v = -1;
+                            Z._gcref = R._gcref = M._gcref = null;
+
+                            for (LCSV i = Z; i._v < RANK; i._v++)
+                            {
+                                ind[i._v]._v--;
+                                if (c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v]._v > M._v)
+                                {
+                                    R = i;
+                                    M = c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v];
+                                }
+                                ind[i._v]._v++;
+                            }
+                            if (R._v < 0 || M._v < 0)
+                                throw new Exception();
+
+                            c[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v] = M;
+                            b[ind[0]._v, ind[1]._v, ind[2]._v, ind[3]._v] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            LCSV[] len = new LCSV[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i]._v = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            LCSV[,,,] c = new LCSV[len[0]._v, len[1]._v, len[2]._v, len[3]._v];
+            LCSV[,,,] b = new LCSV[len[0]._v, len[1]._v, len[2]._v, len[3]._v];
+
+            findLCS(c, b, seq, len);
+
+            for (int i = 0; i < RANK; i++)
+                len[i]._v--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/VT/port/packages.config b/tests/src/JIT/Methodical/VT/port/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/VT/port/port.csproj b/tests/src/JIT/Methodical/VT/port/port.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/SEH/SEH.csproj b/tests/src/JIT/Methodical/casts/SEH/SEH.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/SEH/app.config b/tests/src/JIT/Methodical/casts/SEH/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/SEH/cast_throw.cs b/tests/src/JIT/Methodical/casts/SEH/cast_throw.cs
new file mode 100644 (file)
index 0000000..c31baa5
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class BaseException : Exception { }
+internal class DerivedException : BaseException { }
+
+internal class Test
+{
+    private static int Main()
+    {
+        BaseException ex = new DerivedException();
+        try
+        {
+            if (ex is DerivedException)
+                throw (DerivedException)ex;
+        }
+        catch (DerivedException)
+        {
+            goto continue_1;
+        }
+        Console.WriteLine("failed(1)");
+        return 101;
+
+    continue_1:
+        try
+        {
+            if (ex is DerivedException)
+                throw (DerivedException)ex;
+        }
+        catch (DerivedException)
+        {
+            goto continue_2;
+        }
+        Console.WriteLine("failed(2)");
+        return 102;
+
+    continue_2:
+        Console.WriteLine("Good");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/casts/SEH/cs_template.proj b/tests/src/JIT/Methodical/casts/SEH/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/SEH/packages.config b/tests/src/JIT/Methodical/casts/SEH/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/SEH/throw.cs b/tests/src/JIT/Methodical/casts/SEH/throw.cs
new file mode 100644 (file)
index 0000000..739382b
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Exception1 : Exception
+    {
+        override public String ToString() { return "Exception1"; }
+    }
+
+    internal class Exception2 : Exception
+    {
+        override public String ToString() { return "Exception2"; }
+    }
+
+    internal class Test
+    {
+        private static int Main()
+        {
+            object excep = new Exception1();
+
+            try
+            {
+                throw (Exception)excep;
+            }
+            catch (Exception x)
+            {
+                Console.WriteLine(x.ToString());
+                if (x is Exception1)
+                    goto continue_1;
+            }
+            Console.WriteLine("castclass test failed.");
+            return 101;
+
+        continue_1:
+            try
+            {
+                throw excep as Exception1;
+            }
+            catch (Exception x)
+            {
+                Console.WriteLine(x.ToString());
+                if (x is Exception1)
+                    goto continue_2;
+            }
+            Console.WriteLine("isinst test failed.");
+            return 102;
+
+        continue_2:
+            try
+            {
+                throw (Exception2)excep;
+            }
+            catch (InvalidCastException x)
+            {
+                Console.WriteLine(x.ToString());
+                goto continue_3;
+            }
+            catch (Exception x)
+            {
+                Console.WriteLine(x.ToString());
+            }
+            Console.WriteLine("negative castclass test failed.");
+            return 103;
+
+        continue_3:
+            try
+            {
+                throw excep as Exception2;
+            }
+            catch (NullReferenceException x)
+            {
+                Console.WriteLine(x.ToString());
+                goto continue_4;
+            }
+            catch (Exception x)
+            {
+                Console.WriteLine(x.ToString());
+            }
+            Console.WriteLine("negative isinst test failed.");
+            return 104;
+
+        continue_4:
+            Console.WriteLine("all tests passed.");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/app.config b/tests/src/JIT/Methodical/casts/coverage/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/coverage/castclass_call.cs b/tests/src/JIT/Methodical/casts/coverage/castclass_call.cs
new file mode 100644 (file)
index 0000000..2c5462b
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private object Method_To_Call(int cookie)
+        {
+            switch (cookie)
+            {
+                case 0:
+                    return new TestClass();
+                case 1:
+                    return new DerivedClass();
+                case 2:
+                    return new BaseClass();
+                case 3:
+                    return new OtherClass();
+                default:
+                    return null;
+            }
+        }
+
+        private static bool Test_CALL(TestClass _this, int cookie, bool flag)
+        {
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = (TestClass)(_this.Method_To_Call(cookie));
+                    return inst != null;
+                }
+                else
+                {
+                    inst = (TestClass)(_this.Method_To_Call(cookie));
+                    return inst == null && _this.Method_To_Call(cookie) == null;
+                }
+            }
+            catch (Exception X)
+            {
+                return !flag && X is InvalidCastException;
+            }
+        }
+
+        private static int Main()
+        {
+            TestClass _this = new TestClass();
+            if (!Test_CALL(_this, 0, true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_CALL(_this, 1, true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_CALL(_this, 2, false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_CALL(_this, 3, false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_CALL(_this, 4, false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/castclass_ldarg.cs b/tests/src/JIT/Methodical/casts/coverage/castclass_ldarg.cs
new file mode 100644 (file)
index 0000000..a121208
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_LDARG(object obj, bool flag)
+        {
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = (TestClass)obj;
+                    return inst != null;
+                }
+                else
+                {
+                    inst = (TestClass)obj;
+                    return obj == null;
+                }
+            }
+            catch (Exception X)
+            {
+                return !flag && X is InvalidCastException;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!Test_LDARG(new TestClass(), true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_LDARG(new DerivedClass(), true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_LDARG(new BaseClass(), false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_LDARG(new OtherClass(), false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_LDARG(null, false))
+            {
+                Console.WriteLine("Failed => 105");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/castclass_ldloc.cs b/tests/src/JIT/Methodical/casts/coverage/castclass_ldloc.cs
new file mode 100644 (file)
index 0000000..eee314f
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_LDLOC(object _obj, bool flag)
+        {
+            object obj = _obj;
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = (TestClass)obj;
+                    return inst != null;
+                }
+                else
+                {
+                    inst = (TestClass)obj;
+                    return obj == null;
+                }
+            }
+            catch (Exception X)
+            {
+                return !flag && X is InvalidCastException;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!Test_LDLOC(new TestClass(), true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_LDLOC(new DerivedClass(), true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_LDLOC(new BaseClass(), false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_LDLOC(new OtherClass(), false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_LDLOC(null, false))
+            {
+                Console.WriteLine("Failed => 105");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/castclass_newobj.cs b/tests/src/JIT/Methodical/casts/coverage/castclass_newobj.cs
new file mode 100644 (file)
index 0000000..039f728
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_NEWOBJ(TestClass _this, int cookie, bool flag)
+        {
+            TestClass inst;
+            switch (cookie)
+            {
+                case 0:
+                    try
+                    {
+                        inst = (TestClass)(object)(new TestClass());
+                        return inst != null;
+                    }
+                    catch (Exception) { return false; }
+                case 1:
+                    try
+                    {
+                        inst = (TestClass)(object)(new DerivedClass());
+                        return inst != null;
+                    }
+                    catch (Exception) { return false; }
+                case 2:
+                    try
+                    {
+                        inst = (TestClass)(object)(new BaseClass());
+                        return false;
+                    }
+                    catch (Exception X) { return X is InvalidCastException; }
+                case 3:
+                    try
+                    {
+                        inst = (TestClass)(object)(new OtherClass());
+                        return false;
+                    }
+                    catch (Exception X) { return X is InvalidCastException; }
+                default:
+                    return false;
+            }
+        }
+
+        private static int Main()
+        {
+            TestClass _this = new TestClass();
+            if (!Test_NEWOBJ(_this, 0, true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_NEWOBJ(_this, 1, true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_NEWOBJ(_this, 2, false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_NEWOBJ(_this, 3, false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/coverage.csproj b/tests/src/JIT/Methodical/casts/coverage/coverage.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/coverage/cs_template.proj b/tests/src/JIT/Methodical/casts/coverage/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/coverage/isinst_call.cs b/tests/src/JIT/Methodical/casts/coverage/isinst_call.cs
new file mode 100644 (file)
index 0000000..42b2222
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static object Method_To_Call(int cookie)
+        {
+            switch (cookie)
+            {
+                case 0:
+                    return new TestClass();
+                case 1:
+                    return new DerivedClass();
+                case 2:
+                    return new BaseClass();
+                case 3:
+                    return new OtherClass();
+                default:
+                    return null;
+            }
+        }
+
+        private static bool Test_CALL(int cookie, bool flag)
+        {
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = Method_To_Call(cookie) as TestClass;
+                    return inst != null;
+                }
+                else
+                {
+                    inst = Method_To_Call(cookie) as TestClass;
+                    return inst == null;
+                }
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!Test_CALL(0, true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_CALL(1, true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_CALL(2, false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_CALL(3, false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_CALL(4, false))
+            {
+                Console.WriteLine("Failed => 105");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/isinst_ldarg.cs b/tests/src/JIT/Methodical/casts/coverage/isinst_ldarg.cs
new file mode 100644 (file)
index 0000000..cc29ed0
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_LDARG(object obj, bool flag)
+        {
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = obj as TestClass;
+                    return inst != null;
+                }
+                else
+                {
+                    inst = obj as TestClass;
+                    return inst == null;
+                }
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!Test_LDARG(new TestClass(), true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_LDARG(new DerivedClass(), true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_LDARG(new BaseClass(), false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_LDARG(new OtherClass(), false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_LDARG(null, false))
+            {
+                Console.WriteLine("Failed => 105");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/isinst_ldloc.cs b/tests/src/JIT/Methodical/casts/coverage/isinst_ldloc.cs
new file mode 100644 (file)
index 0000000..248f15d
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_LDLOC(object _obj, bool flag)
+        {
+            object obj = _obj;
+            try
+            {
+                TestClass inst;
+                if (flag)
+                {
+                    inst = obj as TestClass;
+                    return inst != null;
+                }
+                else
+                {
+                    inst = obj as TestClass;
+                    return inst == null;
+                }
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!Test_LDLOC(new TestClass(), true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_LDLOC(new DerivedClass(), true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_LDLOC(new BaseClass(), false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_LDLOC(new OtherClass(), false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            if (!Test_LDLOC(null, false))
+            {
+                Console.WriteLine("Failed => 105");
+                return 105;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/isinst_newobj.cs b/tests/src/JIT/Methodical/casts/coverage/isinst_newobj.cs
new file mode 100644 (file)
index 0000000..2cc99c5
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class BaseClass { }
+
+    internal class TestClass : BaseClass
+    {
+        private static bool Test_NEWOBJ(TestClass _this, int cookie, bool flag)
+        {
+            TestClass inst;
+            switch (cookie)
+            {
+                case 0:
+                    try
+                    {
+                        inst = ((object)(new TestClass())) as TestClass;
+                        return inst != null;
+                    }
+                    catch (Exception) { return false; }
+                case 1:
+                    try
+                    {
+                        inst = ((object)(new DerivedClass())) as TestClass;
+                        return inst != null;
+                    }
+                    catch (Exception) { return false; }
+                case 2:
+                    try
+                    {
+                        inst = ((object)(new BaseClass())) as TestClass;
+                        return inst == null;
+                    }
+                    catch (Exception) { return false; }
+                case 3:
+                    try
+                    {
+                        inst = ((object)(new OtherClass())) as TestClass;
+                        return inst == null;
+                    }
+                    catch (Exception) { return false; }
+                default:
+                    return false;
+            }
+        }
+
+        private static int Main()
+        {
+            TestClass _this = new TestClass();
+            if (!Test_NEWOBJ(_this, 0, true))
+            {
+                Console.WriteLine("Failed => 101");
+                return 101;
+            }
+            if (!Test_NEWOBJ(_this, 1, true))
+            {
+                Console.WriteLine("Failed => 102");
+                return 102;
+            }
+            if (!Test_NEWOBJ(_this, 2, false))
+            {
+                Console.WriteLine("Failed => 103");
+                return 103;
+            }
+            if (!Test_NEWOBJ(_this, 3, false))
+            {
+                Console.WriteLine("Failed => 104");
+                return 104;
+            }
+            Console.WriteLine("Passed => 100");
+            return 100;
+        }
+    }
+
+    internal class DerivedClass : TestClass { }
+    internal class OtherClass { }
+}
diff --git a/tests/src/JIT/Methodical/casts/coverage/packages.config b/tests/src/JIT/Methodical/casts/coverage/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/iface/app.config b/tests/src/JIT/Methodical/casts/iface/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/iface/cs_template.proj b/tests/src/JIT/Methodical/casts/iface/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/iface/iface.csproj b/tests/src/JIT/Methodical/casts/iface/iface.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/iface/iface1.cs b/tests/src/JIT/Methodical/casts/iface/iface1.cs
new file mode 100644 (file)
index 0000000..de89a12
--- /dev/null
@@ -0,0 +1,130 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal interface Iface1
+    {
+        int Method1a();
+    }
+
+    internal interface Iface2 : Iface1
+    {
+        int Method2a();
+    }
+
+    internal interface Iface3 : Iface1
+    {
+        int Method3a();
+    }
+
+    internal class BaseClass : Iface2
+    {
+        public int Method1a() { return 1; }
+        public int Method2a() { return 10; }
+    }
+
+    internal class CoClass : BaseClass, Iface3
+    {
+        public int Method3a() { return 100; }
+
+        private static int Static0(BaseClass co)
+        {
+            int s = 0;
+            s += ((Iface1)co).Method1a();
+            s += (co as Iface1).Method1a();
+            s += ((Iface2)co).Method2a();
+            s += (co as Iface2).Method2a();
+            if (co is Iface3)
+            {
+                s += ((Iface3)co).Method3a();
+                s += (co as Iface3).Method3a();
+            }
+            else
+            {
+                try
+                {
+                    return ((Iface3)co).Method3a() +
+                        (co as Iface3).Method3a();
+                }
+                catch { s += 1000; }
+            }
+            return s;
+        }
+
+        private static int Static1(Iface1 i)
+        {
+            return
+                Static0((CoClass)i) +
+                Static0(i as CoClass)
+                ;
+        }
+
+        private static int Static2(Iface2 i)
+        {
+            return
+                Static0((CoClass)i) +
+                Static0(i as CoClass)
+                ;
+        }
+
+        private static int Static3(Iface3 i)
+        {
+            return
+                Static0((CoClass)i) +
+                Static0(i as CoClass)
+                ;
+        }
+
+        private static int Static4(Iface1 i)
+        {
+            return
+                Static0((BaseClass)i) +
+                Static0(i as BaseClass)
+                ;
+        }
+
+        private static int Static5(Iface2 i)
+        {
+            return
+                Static0((BaseClass)i) +
+                Static0(i as BaseClass)
+                ;
+        }
+
+        private static int Main()
+        {
+            CoClass co = new CoClass();
+            if (Static1(co) != 444)
+            {
+                Console.WriteLine("Test 1 failed.");
+                return 101;
+            }
+            if (Static2(co) != 444)
+            {
+                Console.WriteLine("Test 2 failed.");
+                return 102;
+            }
+            if (Static3(co) != 444)
+            {
+                Console.WriteLine("Test 3 failed.");
+                return 103;
+            }
+            BaseClass bs = new BaseClass();
+            if (Static4(bs) != 2044)
+            {
+                Console.WriteLine("Test 4 failed.");
+                return 104;
+            }
+            if (Static5(bs) != 2044)
+            {
+                Console.WriteLine("Test 5 failed.");
+                return 105;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/casts/iface/packages.config b/tests/src/JIT/Methodical/casts/iface/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/ilseq/app.config b/tests/src/JIT/Methodical/casts/ilseq/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/ilseq/commonBase.cs b/tests/src/JIT/Methodical/casts/ilseq/commonBase.cs
new file mode 100644 (file)
index 0000000..b91f282
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+internal class Base { };
+internal class Sibling1 : Base { };
+internal class Sibling2 : Base { };
+
+internal static class Repro
+{
+    private static int Bug(object o)
+    {
+        Base b = o as Sibling1;
+        if (b == null)
+        {
+            b = o as Sibling2;
+        }
+
+        // At this point b is either null, Sibling1, or Sibling2
+        if (b != null)
+        {
+            // But the bug makes us think it is only Sibling1 here (since we've eliminated null)
+            if (b is Sibling2)
+            {
+                Console.WriteLine("Pass");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("b is {0}", b.GetType().ToString());
+                Console.WriteLine("b is Sibling1 = {0}", b is Sibling1);
+                Console.WriteLine("b is Sibling2 = {0}", b is Sibling2);
+                Console.WriteLine("Fail");
+                return 9;
+            }
+        }
+        Console.WriteLine("bad");
+        return 0;
+    }
+
+    private static int Main()
+    {
+        return Bug(new Sibling2());
+    }
+}
diff --git a/tests/src/JIT/Methodical/casts/ilseq/cs_template.proj b/tests/src/JIT/Methodical/casts/ilseq/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/ilseq/ilseq.csproj b/tests/src/JIT/Methodical/casts/ilseq/ilseq.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/casts/ilseq/packages.config b/tests/src/JIT/Methodical/casts/ilseq/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/cctor/simple/app.config b/tests/src/JIT/Methodical/cctor/simple/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/cctor/simple/cs_template.proj b/tests/src/JIT/Methodical/cctor/simple/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/cctor/simple/packages.config b/tests/src/JIT/Methodical/cctor/simple/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/cctor/simple/precise1.cs b/tests/src/JIT/Methodical/cctor/simple/precise1.cs
new file mode 100644 (file)
index 0000000..57085f6
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// static method
+
+using System;
+internal class measure
+{
+    public static int a = 0xCC;
+}
+internal class test
+{
+    public static void f(ref byte b)
+    {
+        return;
+    }
+
+    static test()
+    {
+        if (measure.a != 0xCC)
+        {
+            Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+        measure.a = 8;
+        if (measure.a != 8)
+        {
+            Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+    }
+}
+
+internal class Driver
+{
+    public static int Main()
+    {
+        try
+        {
+            byte b = 0xF;
+            Console.WriteLine("Testing .cctor() invocation by calling static method");
+            Console.WriteLine();
+            Console.WriteLine("Before calling static method");
+            // .cctor should not run yet
+            if (measure.a != 0xCC)
+            {
+                Console.WriteLine("in Main(), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            // the next line should trigger .cctor
+            test.f(ref b);
+            Console.WriteLine("After calling static method");
+            if (measure.a != 8)
+            {
+                Console.WriteLine("in Main() after f(ref b), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return -1;
+            }
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine(e.StackTrace);
+            return -1;
+        }
+        Console.WriteLine();
+        Console.WriteLine("PASSED");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/cctor/simple/precise1b.cs b/tests/src/JIT/Methodical/cctor/simple/precise1b.cs
new file mode 100644 (file)
index 0000000..a6deb5e
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// static method - inlineable
+
+using System;
+internal class measure
+{
+    public static int a = 0xCC;
+}
+internal class test
+{
+    public static void f()
+    {
+    }
+
+    static test()
+    {
+        if (measure.a != 0xCC)
+        {
+            Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+        measure.a = 8;
+        if (measure.a != 8)
+        {
+            Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+    }
+}
+
+internal class Driver
+{
+    public static int Main()
+    {
+        try
+        {
+            Console.WriteLine("Testing .cctor() invocation by calling static method");
+            Console.WriteLine();
+            Console.WriteLine("Before calling static method");
+            // .cctor should not run yet
+            if (measure.a != 0xCC)
+            {
+                Console.WriteLine("in Main(), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            // the next line should trigger .cctor
+            test.f();
+            Console.WriteLine("After calling static method");
+            if (measure.a != 8)
+            {
+                Console.WriteLine("in Main() after f(ref b), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return -1;
+            }
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine(e.StackTrace);
+            return -1;
+        }
+        Console.WriteLine();
+        Console.WriteLine("PASSED");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/cctor/simple/precise2.cs b/tests/src/JIT/Methodical/cctor/simple/precise2.cs
new file mode 100644 (file)
index 0000000..9e90bcd
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// instance method
+
+using System;
+internal class measure
+{
+    public static int a = 0xCC;
+}
+internal class test
+{
+    static test()
+    {
+        if (measure.a != 0xCC)
+        {
+            Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+        measure.a = 8;
+        if (measure.a != 8)
+        {
+            Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+    }
+}
+
+internal class Driver
+{
+    public static int Main()
+    {
+        try
+        {
+            Console.WriteLine("Testing .cctor() invocation by calling instance method");
+            Console.WriteLine();
+            Console.WriteLine("Before calling instance method");
+            // .cctor should not run yet
+            if (measure.a != 0xCC)
+            {
+                Console.WriteLine("in Main(), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            // the next line should trigger .cctor because .ctor is an instance method
+            test t = new test();
+            Console.WriteLine("After calling instance method");
+            if (measure.a != 8)
+            {
+                Console.WriteLine("in Main() after new test(), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return -1;
+            }
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine(e.StackTrace);
+            return -1;
+        }
+        Console.WriteLine();
+        Console.WriteLine("PASSED");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/cctor/simple/precise4.cs b/tests/src/JIT/Methodical/cctor/simple/precise4.cs
new file mode 100644 (file)
index 0000000..b7a2169
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// static field
+
+using System;
+internal class measure
+{
+    public static int a = 0xCC;
+}
+internal class test
+{
+    public static byte b = 0xC;
+
+    static test()
+    {
+        if (measure.a != 0xCC)
+        {
+            Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor(), measure.a is {0}", measure.a);
+        measure.a += b;
+        if (measure.a != 216)
+        {
+            Console.WriteLine("in .cctor() after measure.a+=b, measure.a is {0}", measure.a);
+            Console.WriteLine("FAILED");
+            throw new Exception();
+        }
+        Console.WriteLine("in .cctor() after measure.a=8, measure.a is {0}", measure.a);
+    }
+}
+
+internal class Driver
+{
+    public static int Main()
+    {
+        try
+        {
+            Console.WriteLine("Testing .cctor() invocation by accessing static field");
+            Console.WriteLine();
+            Console.WriteLine("Before calling static field");
+            // .cctor should not run yet
+            if (measure.a != 0xCC)
+            {
+                Console.WriteLine("in Main(), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return 1;
+            }
+            // the next line should trigger .cctor
+            test.b = 0xF;
+            Console.WriteLine("After calling static field");
+            if (measure.a != 216)
+            {
+                Console.WriteLine("in Main() after f(ref b), measure.a is {0}", measure.a);
+                Console.WriteLine("FAILED");
+                return -1;
+            }
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine(e.StackTrace);
+            return -1;
+        }
+        Console.WriteLine();
+        Console.WriteLine("PASSED");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/cctor/simple/simple.csproj b/tests/src/JIT/Methodical/cctor/simple/simple.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/div/app.config b/tests/src/JIT/Methodical/divrem/div/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/div/cs_template.proj b/tests/src/JIT/Methodical/divrem/div/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/div/decimaldiv.cs b/tests/src/JIT/Methodical/divrem/div/decimaldiv.cs
new file mode 100644 (file)
index 0000000..3b28919
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type decimal, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class decimaldiv
+{
+    private static decimal s_m_s_op1 = 50;
+    private static int s_i_s_op2 = 2;
+    private static uint s_ui_s_op2 = 2;
+    private static long s_l_s_op2 = 2;
+    private static ulong s_ul_s_op2 = 2;
+    private static float s_f_s_op2 = 2;
+    private static double s_d_s_op2 = 2;
+    private static decimal s_m_s_op2 = 2;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 2;
+    }
+    private class CL
+    {
+        public decimal m_cl_op1 = 50;
+        public int i_cl_op2 = 2;
+        public uint ui_cl_op2 = 2;
+        public long l_cl_op2 = 2;
+        public ulong ul_cl_op2 = 2;
+        public float f_cl_op2 = 2;
+        public double d_cl_op2 = 2;
+        public decimal m_cl_op2 = 2;
+    }
+
+    private struct VT
+    {
+        public decimal m_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.m_vt_op1 = 50;
+        vt1.i_vt_op2 = 2;
+        vt1.ui_vt_op2 = 2;
+        vt1.l_vt_op2 = 2;
+        vt1.ul_vt_op2 = 2;
+        vt1.f_vt_op2 = 2;
+        vt1.d_vt_op2 = 2;
+        vt1.m_vt_op2 = 2;
+
+        decimal[] m_arr1d_op1 = { 0, 50 };
+        decimal[,] m_arr2d_op1 = { { 0, 50 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 50 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 2, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 2, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 2, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 2, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 2, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 2, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 2, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            decimal m_l_op1 = 50;
+            int i_l_op2 = 2;
+            uint ui_l_op2 = 2;
+            long l_l_op2 = 2;
+            ulong ul_l_op2 = 2;
+            float f_l_op2 = 2;
+            double d_l_op2 = 2;
+            decimal m_l_op2 = 2;
+            if ((m_l_op1 / i_l_op2 != m_l_op1 / ui_l_op2) || (m_l_op1 / ui_l_op2 != m_l_op1 / l_l_op2) || (m_l_op1 / l_l_op2 != m_l_op1 / ul_l_op2) || (m_l_op1 / ul_l_op2 != m_l_op1 / (decimal)f_l_op2) || (m_l_op1 / (decimal)f_l_op2 != m_l_op1 / (decimal)d_l_op2) || (m_l_op1 / (decimal)d_l_op2 != m_l_op1 / m_l_op2) || (m_l_op1 / m_l_op2 != m_l_op1 / i_l_op2) || (m_l_op1 / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / s_i_s_op2 != m_l_op1 / s_ui_s_op2) || (m_l_op1 / s_ui_s_op2 != m_l_op1 / s_l_s_op2) || (m_l_op1 / s_l_s_op2 != m_l_op1 / s_ul_s_op2) || (m_l_op1 / s_ul_s_op2 != m_l_op1 / (decimal)s_f_s_op2) || (m_l_op1 / (decimal)s_f_s_op2 != m_l_op1 / (decimal)s_d_s_op2) || (m_l_op1 / (decimal)s_d_s_op2 != m_l_op1 / s_m_s_op2) || (m_l_op1 / s_m_s_op2 != m_l_op1 / s_i_s_op2) || (m_l_op1 / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / m_f("op2") != m_l_op1 / m_f("op2")) || (m_l_op1 / m_f("op2") != m_l_op1 / m_f("op2")) || (m_l_op1 / m_f("op2") != m_l_op1 / m_f("op2")) || (m_l_op1 / m_f("op2") != m_l_op1 / (decimal)m_f("op2")) || (m_l_op1 / (decimal)m_f("op2") != m_l_op1 / (decimal)m_f("op2")) || (m_l_op1 / (decimal)m_f("op2") != m_l_op1 / m_f("op2")) || (m_l_op1 / m_f("op2") != m_l_op1 / m_f("op2")) || (m_l_op1 / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / cl1.i_cl_op2 != m_l_op1 / cl1.ui_cl_op2) || (m_l_op1 / cl1.ui_cl_op2 != m_l_op1 / cl1.l_cl_op2) || (m_l_op1 / cl1.l_cl_op2 != m_l_op1 / cl1.ul_cl_op2) || (m_l_op1 / cl1.ul_cl_op2 != m_l_op1 / (decimal)cl1.f_cl_op2) || (m_l_op1 / (decimal)cl1.f_cl_op2 != m_l_op1 / (decimal)cl1.d_cl_op2) || (m_l_op1 / (decimal)cl1.d_cl_op2 != m_l_op1 / cl1.m_cl_op2) || (m_l_op1 / cl1.m_cl_op2 != m_l_op1 / cl1.i_cl_op2) || (m_l_op1 / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / vt1.i_vt_op2 != m_l_op1 / vt1.ui_vt_op2) || (m_l_op1 / vt1.ui_vt_op2 != m_l_op1 / vt1.l_vt_op2) || (m_l_op1 / vt1.l_vt_op2 != m_l_op1 / vt1.ul_vt_op2) || (m_l_op1 / vt1.ul_vt_op2 != m_l_op1 / (decimal)vt1.f_vt_op2) || (m_l_op1 / (decimal)vt1.f_vt_op2 != m_l_op1 / (decimal)vt1.d_vt_op2) || (m_l_op1 / (decimal)vt1.d_vt_op2 != m_l_op1 / vt1.m_vt_op2) || (m_l_op1 / vt1.m_vt_op2 != m_l_op1 / vt1.i_vt_op2) || (m_l_op1 / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / i_arr1d_op2[0] != m_l_op1 / ui_arr1d_op2[0]) || (m_l_op1 / ui_arr1d_op2[0] != m_l_op1 / l_arr1d_op2[0]) || (m_l_op1 / l_arr1d_op2[0] != m_l_op1 / ul_arr1d_op2[0]) || (m_l_op1 / ul_arr1d_op2[0] != m_l_op1 / (decimal)f_arr1d_op2[0]) || (m_l_op1 / (decimal)f_arr1d_op2[0] != m_l_op1 / (decimal)d_arr1d_op2[0]) || (m_l_op1 / (decimal)d_arr1d_op2[0] != m_l_op1 / m_arr1d_op2[0]) || (m_l_op1 / m_arr1d_op2[0] != m_l_op1 / i_arr1d_op2[0]) || (m_l_op1 / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((m_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / i_l_op2 != s_m_s_op1 / ui_l_op2) || (s_m_s_op1 / ui_l_op2 != s_m_s_op1 / l_l_op2) || (s_m_s_op1 / l_l_op2 != s_m_s_op1 / ul_l_op2) || (s_m_s_op1 / ul_l_op2 != s_m_s_op1 / (decimal)f_l_op2) || (s_m_s_op1 / (decimal)f_l_op2 != s_m_s_op1 / (decimal)d_l_op2) || (s_m_s_op1 / (decimal)d_l_op2 != s_m_s_op1 / m_l_op2) || (s_m_s_op1 / m_l_op2 != s_m_s_op1 / i_l_op2) || (s_m_s_op1 / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / s_i_s_op2 != s_m_s_op1 / s_ui_s_op2) || (s_m_s_op1 / s_ui_s_op2 != s_m_s_op1 / s_l_s_op2) || (s_m_s_op1 / s_l_s_op2 != s_m_s_op1 / s_ul_s_op2) || (s_m_s_op1 / s_ul_s_op2 != s_m_s_op1 / (decimal)s_f_s_op2) || (s_m_s_op1 / (decimal)s_f_s_op2 != s_m_s_op1 / (decimal)s_d_s_op2) || (s_m_s_op1 / (decimal)s_d_s_op2 != s_m_s_op1 / s_m_s_op2) || (s_m_s_op1 / s_m_s_op2 != s_m_s_op1 / s_i_s_op2) || (s_m_s_op1 / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / m_f("op2") != s_m_s_op1 / m_f("op2")) || (s_m_s_op1 / m_f("op2") != s_m_s_op1 / m_f("op2")) || (s_m_s_op1 / m_f("op2") != s_m_s_op1 / m_f("op2")) || (s_m_s_op1 / m_f("op2") != s_m_s_op1 / (decimal)m_f("op2")) || (s_m_s_op1 / (decimal)m_f("op2") != s_m_s_op1 / (decimal)m_f("op2")) || (s_m_s_op1 / (decimal)m_f("op2") != s_m_s_op1 / m_f("op2")) || (s_m_s_op1 / m_f("op2") != s_m_s_op1 / m_f("op2")) || (s_m_s_op1 / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / cl1.i_cl_op2 != s_m_s_op1 / cl1.ui_cl_op2) || (s_m_s_op1 / cl1.ui_cl_op2 != s_m_s_op1 / cl1.l_cl_op2) || (s_m_s_op1 / cl1.l_cl_op2 != s_m_s_op1 / cl1.ul_cl_op2) || (s_m_s_op1 / cl1.ul_cl_op2 != s_m_s_op1 / (decimal)cl1.f_cl_op2) || (s_m_s_op1 / (decimal)cl1.f_cl_op2 != s_m_s_op1 / (decimal)cl1.d_cl_op2) || (s_m_s_op1 / (decimal)cl1.d_cl_op2 != s_m_s_op1 / cl1.m_cl_op2) || (s_m_s_op1 / cl1.m_cl_op2 != s_m_s_op1 / cl1.i_cl_op2) || (s_m_s_op1 / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / vt1.i_vt_op2 != s_m_s_op1 / vt1.ui_vt_op2) || (s_m_s_op1 / vt1.ui_vt_op2 != s_m_s_op1 / vt1.l_vt_op2) || (s_m_s_op1 / vt1.l_vt_op2 != s_m_s_op1 / vt1.ul_vt_op2) || (s_m_s_op1 / vt1.ul_vt_op2 != s_m_s_op1 / (decimal)vt1.f_vt_op2) || (s_m_s_op1 / (decimal)vt1.f_vt_op2 != s_m_s_op1 / (decimal)vt1.d_vt_op2) || (s_m_s_op1 / (decimal)vt1.d_vt_op2 != s_m_s_op1 / vt1.m_vt_op2) || (s_m_s_op1 / vt1.m_vt_op2 != s_m_s_op1 / vt1.i_vt_op2) || (s_m_s_op1 / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / i_arr1d_op2[0] != s_m_s_op1 / ui_arr1d_op2[0]) || (s_m_s_op1 / ui_arr1d_op2[0] != s_m_s_op1 / l_arr1d_op2[0]) || (s_m_s_op1 / l_arr1d_op2[0] != s_m_s_op1 / ul_arr1d_op2[0]) || (s_m_s_op1 / ul_arr1d_op2[0] != s_m_s_op1 / (decimal)f_arr1d_op2[0]) || (s_m_s_op1 / (decimal)f_arr1d_op2[0] != s_m_s_op1 / (decimal)d_arr1d_op2[0]) || (s_m_s_op1 / (decimal)d_arr1d_op2[0] != s_m_s_op1 / m_arr1d_op2[0]) || (s_m_s_op1 / m_arr1d_op2[0] != s_m_s_op1 / i_arr1d_op2[0]) || (s_m_s_op1 / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / i_l_op2 != m_f("op1") / ui_l_op2) || (m_f("op1") / ui_l_op2 != m_f("op1") / l_l_op2) || (m_f("op1") / l_l_op2 != m_f("op1") / ul_l_op2) || (m_f("op1") / ul_l_op2 != m_f("op1") / (decimal)f_l_op2) || (m_f("op1") / (decimal)f_l_op2 != m_f("op1") / (decimal)d_l_op2) || (m_f("op1") / (decimal)d_l_op2 != m_f("op1") / m_l_op2) || (m_f("op1") / m_l_op2 != m_f("op1") / i_l_op2) || (m_f("op1") / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / s_i_s_op2 != m_f("op1") / s_ui_s_op2) || (m_f("op1") / s_ui_s_op2 != m_f("op1") / s_l_s_op2) || (m_f("op1") / s_l_s_op2 != m_f("op1") / s_ul_s_op2) || (m_f("op1") / s_ul_s_op2 != m_f("op1") / (decimal)s_f_s_op2) || (m_f("op1") / (decimal)s_f_s_op2 != m_f("op1") / (decimal)s_d_s_op2) || (m_f("op1") / (decimal)s_d_s_op2 != m_f("op1") / s_m_s_op2) || (m_f("op1") / s_m_s_op2 != m_f("op1") / s_i_s_op2) || (m_f("op1") / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / m_f("op2") != m_f("op1") / m_f("op2")) || (m_f("op1") / m_f("op2") != m_f("op1") / m_f("op2")) || (m_f("op1") / m_f("op2") != m_f("op1") / m_f("op2")) || (m_f("op1") / m_f("op2") != m_f("op1") / (decimal)m_f("op2")) || (m_f("op1") / (decimal)m_f("op2") != m_f("op1") / (decimal)m_f("op2")) || (m_f("op1") / (decimal)m_f("op2") != m_f("op1") / m_f("op2")) || (m_f("op1") / m_f("op2") != m_f("op1") / m_f("op2")) || (m_f("op1") / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / cl1.i_cl_op2 != m_f("op1") / cl1.ui_cl_op2) || (m_f("op1") / cl1.ui_cl_op2 != m_f("op1") / cl1.l_cl_op2) || (m_f("op1") / cl1.l_cl_op2 != m_f("op1") / cl1.ul_cl_op2) || (m_f("op1") / cl1.ul_cl_op2 != m_f("op1") / (decimal)cl1.f_cl_op2) || (m_f("op1") / (decimal)cl1.f_cl_op2 != m_f("op1") / (decimal)cl1.d_cl_op2) || (m_f("op1") / (decimal)cl1.d_cl_op2 != m_f("op1") / cl1.m_cl_op2) || (m_f("op1") / cl1.m_cl_op2 != m_f("op1") / cl1.i_cl_op2) || (m_f("op1") / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / vt1.i_vt_op2 != m_f("op1") / vt1.ui_vt_op2) || (m_f("op1") / vt1.ui_vt_op2 != m_f("op1") / vt1.l_vt_op2) || (m_f("op1") / vt1.l_vt_op2 != m_f("op1") / vt1.ul_vt_op2) || (m_f("op1") / vt1.ul_vt_op2 != m_f("op1") / (decimal)vt1.f_vt_op2) || (m_f("op1") / (decimal)vt1.f_vt_op2 != m_f("op1") / (decimal)vt1.d_vt_op2) || (m_f("op1") / (decimal)vt1.d_vt_op2 != m_f("op1") / vt1.m_vt_op2) || (m_f("op1") / vt1.m_vt_op2 != m_f("op1") / vt1.i_vt_op2) || (m_f("op1") / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / i_arr1d_op2[0] != m_f("op1") / ui_arr1d_op2[0]) || (m_f("op1") / ui_arr1d_op2[0] != m_f("op1") / l_arr1d_op2[0]) || (m_f("op1") / l_arr1d_op2[0] != m_f("op1") / ul_arr1d_op2[0]) || (m_f("op1") / ul_arr1d_op2[0] != m_f("op1") / (decimal)f_arr1d_op2[0]) || (m_f("op1") / (decimal)f_arr1d_op2[0] != m_f("op1") / (decimal)d_arr1d_op2[0]) || (m_f("op1") / (decimal)d_arr1d_op2[0] != m_f("op1") / m_arr1d_op2[0]) || (m_f("op1") / m_arr1d_op2[0] != m_f("op1") / i_arr1d_op2[0]) || (m_f("op1") / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((m_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / i_l_op2 != cl1.m_cl_op1 / ui_l_op2) || (cl1.m_cl_op1 / ui_l_op2 != cl1.m_cl_op1 / l_l_op2) || (cl1.m_cl_op1 / l_l_op2 != cl1.m_cl_op1 / ul_l_op2) || (cl1.m_cl_op1 / ul_l_op2 != cl1.m_cl_op1 / (decimal)f_l_op2) || (cl1.m_cl_op1 / (decimal)f_l_op2 != cl1.m_cl_op1 / (decimal)d_l_op2) || (cl1.m_cl_op1 / (decimal)d_l_op2 != cl1.m_cl_op1 / m_l_op2) || (cl1.m_cl_op1 / m_l_op2 != cl1.m_cl_op1 / i_l_op2) || (cl1.m_cl_op1 / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / s_i_s_op2 != cl1.m_cl_op1 / s_ui_s_op2) || (cl1.m_cl_op1 / s_ui_s_op2 != cl1.m_cl_op1 / s_l_s_op2) || (cl1.m_cl_op1 / s_l_s_op2 != cl1.m_cl_op1 / s_ul_s_op2) || (cl1.m_cl_op1 / s_ul_s_op2 != cl1.m_cl_op1 / (decimal)s_f_s_op2) || (cl1.m_cl_op1 / (decimal)s_f_s_op2 != cl1.m_cl_op1 / (decimal)s_d_s_op2) || (cl1.m_cl_op1 / (decimal)s_d_s_op2 != cl1.m_cl_op1 / s_m_s_op2) || (cl1.m_cl_op1 / s_m_s_op2 != cl1.m_cl_op1 / s_i_s_op2) || (cl1.m_cl_op1 / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / m_f("op2") != cl1.m_cl_op1 / m_f("op2")) || (cl1.m_cl_op1 / m_f("op2") != cl1.m_cl_op1 / m_f("op2")) || (cl1.m_cl_op1 / m_f("op2") != cl1.m_cl_op1 / m_f("op2")) || (cl1.m_cl_op1 / m_f("op2") != cl1.m_cl_op1 / (decimal)m_f("op2")) || (cl1.m_cl_op1 / (decimal)m_f("op2") != cl1.m_cl_op1 / (decimal)m_f("op2")) || (cl1.m_cl_op1 / (decimal)m_f("op2") != cl1.m_cl_op1 / m_f("op2")) || (cl1.m_cl_op1 / m_f("op2") != cl1.m_cl_op1 / m_f("op2")) || (cl1.m_cl_op1 / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / cl1.i_cl_op2 != cl1.m_cl_op1 / cl1.ui_cl_op2) || (cl1.m_cl_op1 / cl1.ui_cl_op2 != cl1.m_cl_op1 / cl1.l_cl_op2) || (cl1.m_cl_op1 / cl1.l_cl_op2 != cl1.m_cl_op1 / cl1.ul_cl_op2) || (cl1.m_cl_op1 / cl1.ul_cl_op2 != cl1.m_cl_op1 / (decimal)cl1.f_cl_op2) || (cl1.m_cl_op1 / (decimal)cl1.f_cl_op2 != cl1.m_cl_op1 / (decimal)cl1.d_cl_op2) || (cl1.m_cl_op1 / (decimal)cl1.d_cl_op2 != cl1.m_cl_op1 / cl1.m_cl_op2) || (cl1.m_cl_op1 / cl1.m_cl_op2 != cl1.m_cl_op1 / cl1.i_cl_op2) || (cl1.m_cl_op1 / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / vt1.i_vt_op2 != cl1.m_cl_op1 / vt1.ui_vt_op2) || (cl1.m_cl_op1 / vt1.ui_vt_op2 != cl1.m_cl_op1 / vt1.l_vt_op2) || (cl1.m_cl_op1 / vt1.l_vt_op2 != cl1.m_cl_op1 / vt1.ul_vt_op2) || (cl1.m_cl_op1 / vt1.ul_vt_op2 != cl1.m_cl_op1 / (decimal)vt1.f_vt_op2) || (cl1.m_cl_op1 / (decimal)vt1.f_vt_op2 != cl1.m_cl_op1 / (decimal)vt1.d_vt_op2) || (cl1.m_cl_op1 / (decimal)vt1.d_vt_op2 != cl1.m_cl_op1 / vt1.m_vt_op2) || (cl1.m_cl_op1 / vt1.m_vt_op2 != cl1.m_cl_op1 / vt1.i_vt_op2) || (cl1.m_cl_op1 / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / i_arr1d_op2[0] != cl1.m_cl_op1 / ui_arr1d_op2[0]) || (cl1.m_cl_op1 / ui_arr1d_op2[0] != cl1.m_cl_op1 / l_arr1d_op2[0]) || (cl1.m_cl_op1 / l_arr1d_op2[0] != cl1.m_cl_op1 / ul_arr1d_op2[0]) || (cl1.m_cl_op1 / ul_arr1d_op2[0] != cl1.m_cl_op1 / (decimal)f_arr1d_op2[0]) || (cl1.m_cl_op1 / (decimal)f_arr1d_op2[0] != cl1.m_cl_op1 / (decimal)d_arr1d_op2[0]) || (cl1.m_cl_op1 / (decimal)d_arr1d_op2[0] != cl1.m_cl_op1 / m_arr1d_op2[0]) || (cl1.m_cl_op1 / m_arr1d_op2[0] != cl1.m_cl_op1 / i_arr1d_op2[0]) || (cl1.m_cl_op1 / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / i_l_op2 != vt1.m_vt_op1 / ui_l_op2) || (vt1.m_vt_op1 / ui_l_op2 != vt1.m_vt_op1 / l_l_op2) || (vt1.m_vt_op1 / l_l_op2 != vt1.m_vt_op1 / ul_l_op2) || (vt1.m_vt_op1 / ul_l_op2 != vt1.m_vt_op1 / (decimal)f_l_op2) || (vt1.m_vt_op1 / (decimal)f_l_op2 != vt1.m_vt_op1 / (decimal)d_l_op2) || (vt1.m_vt_op1 / (decimal)d_l_op2 != vt1.m_vt_op1 / m_l_op2) || (vt1.m_vt_op1 / m_l_op2 != vt1.m_vt_op1 / i_l_op2) || (vt1.m_vt_op1 / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / s_i_s_op2 != vt1.m_vt_op1 / s_ui_s_op2) || (vt1.m_vt_op1 / s_ui_s_op2 != vt1.m_vt_op1 / s_l_s_op2) || (vt1.m_vt_op1 / s_l_s_op2 != vt1.m_vt_op1 / s_ul_s_op2) || (vt1.m_vt_op1 / s_ul_s_op2 != vt1.m_vt_op1 / (decimal)s_f_s_op2) || (vt1.m_vt_op1 / (decimal)s_f_s_op2 != vt1.m_vt_op1 / (decimal)s_d_s_op2) || (vt1.m_vt_op1 / (decimal)s_d_s_op2 != vt1.m_vt_op1 / s_m_s_op2) || (vt1.m_vt_op1 / s_m_s_op2 != vt1.m_vt_op1 / s_i_s_op2) || (vt1.m_vt_op1 / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / m_f("op2") != vt1.m_vt_op1 / m_f("op2")) || (vt1.m_vt_op1 / m_f("op2") != vt1.m_vt_op1 / m_f("op2")) || (vt1.m_vt_op1 / m_f("op2") != vt1.m_vt_op1 / m_f("op2")) || (vt1.m_vt_op1 / m_f("op2") != vt1.m_vt_op1 / (decimal)m_f("op2")) || (vt1.m_vt_op1 / (decimal)m_f("op2") != vt1.m_vt_op1 / (decimal)m_f("op2")) || (vt1.m_vt_op1 / (decimal)m_f("op2") != vt1.m_vt_op1 / m_f("op2")) || (vt1.m_vt_op1 / m_f("op2") != vt1.m_vt_op1 / m_f("op2")) || (vt1.m_vt_op1 / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / cl1.i_cl_op2 != vt1.m_vt_op1 / cl1.ui_cl_op2) || (vt1.m_vt_op1 / cl1.ui_cl_op2 != vt1.m_vt_op1 / cl1.l_cl_op2) || (vt1.m_vt_op1 / cl1.l_cl_op2 != vt1.m_vt_op1 / cl1.ul_cl_op2) || (vt1.m_vt_op1 / cl1.ul_cl_op2 != vt1.m_vt_op1 / (decimal)cl1.f_cl_op2) || (vt1.m_vt_op1 / (decimal)cl1.f_cl_op2 != vt1.m_vt_op1 / (decimal)cl1.d_cl_op2) || (vt1.m_vt_op1 / (decimal)cl1.d_cl_op2 != vt1.m_vt_op1 / cl1.m_cl_op2) || (vt1.m_vt_op1 / cl1.m_cl_op2 != vt1.m_vt_op1 / cl1.i_cl_op2) || (vt1.m_vt_op1 / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / vt1.i_vt_op2 != vt1.m_vt_op1 / vt1.ui_vt_op2) || (vt1.m_vt_op1 / vt1.ui_vt_op2 != vt1.m_vt_op1 / vt1.l_vt_op2) || (vt1.m_vt_op1 / vt1.l_vt_op2 != vt1.m_vt_op1 / vt1.ul_vt_op2) || (vt1.m_vt_op1 / vt1.ul_vt_op2 != vt1.m_vt_op1 / (decimal)vt1.f_vt_op2) || (vt1.m_vt_op1 / (decimal)vt1.f_vt_op2 != vt1.m_vt_op1 / (decimal)vt1.d_vt_op2) || (vt1.m_vt_op1 / (decimal)vt1.d_vt_op2 != vt1.m_vt_op1 / vt1.m_vt_op2) || (vt1.m_vt_op1 / vt1.m_vt_op2 != vt1.m_vt_op1 / vt1.i_vt_op2) || (vt1.m_vt_op1 / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / i_arr1d_op2[0] != vt1.m_vt_op1 / ui_arr1d_op2[0]) || (vt1.m_vt_op1 / ui_arr1d_op2[0] != vt1.m_vt_op1 / l_arr1d_op2[0]) || (vt1.m_vt_op1 / l_arr1d_op2[0] != vt1.m_vt_op1 / ul_arr1d_op2[0]) || (vt1.m_vt_op1 / ul_arr1d_op2[0] != vt1.m_vt_op1 / (decimal)f_arr1d_op2[0]) || (vt1.m_vt_op1 / (decimal)f_arr1d_op2[0] != vt1.m_vt_op1 / (decimal)d_arr1d_op2[0]) || (vt1.m_vt_op1 / (decimal)d_arr1d_op2[0] != vt1.m_vt_op1 / m_arr1d_op2[0]) || (vt1.m_vt_op1 / m_arr1d_op2[0] != vt1.m_vt_op1 / i_arr1d_op2[0]) || (vt1.m_vt_op1 / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / i_l_op2 != m_arr1d_op1[1] / ui_l_op2) || (m_arr1d_op1[1] / ui_l_op2 != m_arr1d_op1[1] / l_l_op2) || (m_arr1d_op1[1] / l_l_op2 != m_arr1d_op1[1] / ul_l_op2) || (m_arr1d_op1[1] / ul_l_op2 != m_arr1d_op1[1] / (decimal)f_l_op2) || (m_arr1d_op1[1] / (decimal)f_l_op2 != m_arr1d_op1[1] / (decimal)d_l_op2) || (m_arr1d_op1[1] / (decimal)d_l_op2 != m_arr1d_op1[1] / m_l_op2) || (m_arr1d_op1[1] / m_l_op2 != m_arr1d_op1[1] / i_l_op2) || (m_arr1d_op1[1] / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / s_i_s_op2 != m_arr1d_op1[1] / s_ui_s_op2) || (m_arr1d_op1[1] / s_ui_s_op2 != m_arr1d_op1[1] / s_l_s_op2) || (m_arr1d_op1[1] / s_l_s_op2 != m_arr1d_op1[1] / s_ul_s_op2) || (m_arr1d_op1[1] / s_ul_s_op2 != m_arr1d_op1[1] / (decimal)s_f_s_op2) || (m_arr1d_op1[1] / (decimal)s_f_s_op2 != m_arr1d_op1[1] / (decimal)s_d_s_op2) || (m_arr1d_op1[1] / (decimal)s_d_s_op2 != m_arr1d_op1[1] / s_m_s_op2) || (m_arr1d_op1[1] / s_m_s_op2 != m_arr1d_op1[1] / s_i_s_op2) || (m_arr1d_op1[1] / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / m_f("op2") != m_arr1d_op1[1] / m_f("op2")) || (m_arr1d_op1[1] / m_f("op2") != m_arr1d_op1[1] / m_f("op2")) || (m_arr1d_op1[1] / m_f("op2") != m_arr1d_op1[1] / m_f("op2")) || (m_arr1d_op1[1] / m_f("op2") != m_arr1d_op1[1] / (decimal)m_f("op2")) || (m_arr1d_op1[1] / (decimal)m_f("op2") != m_arr1d_op1[1] / (decimal)m_f("op2")) || (m_arr1d_op1[1] / (decimal)m_f("op2") != m_arr1d_op1[1] / m_f("op2")) || (m_arr1d_op1[1] / m_f("op2") != m_arr1d_op1[1] / m_f("op2")) || (m_arr1d_op1[1] / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / cl1.i_cl_op2 != m_arr1d_op1[1] / cl1.ui_cl_op2) || (m_arr1d_op1[1] / cl1.ui_cl_op2 != m_arr1d_op1[1] / cl1.l_cl_op2) || (m_arr1d_op1[1] / cl1.l_cl_op2 != m_arr1d_op1[1] / cl1.ul_cl_op2) || (m_arr1d_op1[1] / cl1.ul_cl_op2 != m_arr1d_op1[1] / (decimal)cl1.f_cl_op2) || (m_arr1d_op1[1] / (decimal)cl1.f_cl_op2 != m_arr1d_op1[1] / (decimal)cl1.d_cl_op2) || (m_arr1d_op1[1] / (decimal)cl1.d_cl_op2 != m_arr1d_op1[1] / cl1.m_cl_op2) || (m_arr1d_op1[1] / cl1.m_cl_op2 != m_arr1d_op1[1] / cl1.i_cl_op2) || (m_arr1d_op1[1] / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / vt1.i_vt_op2 != m_arr1d_op1[1] / vt1.ui_vt_op2) || (m_arr1d_op1[1] / vt1.ui_vt_op2 != m_arr1d_op1[1] / vt1.l_vt_op2) || (m_arr1d_op1[1] / vt1.l_vt_op2 != m_arr1d_op1[1] / vt1.ul_vt_op2) || (m_arr1d_op1[1] / vt1.ul_vt_op2 != m_arr1d_op1[1] / (decimal)vt1.f_vt_op2) || (m_arr1d_op1[1] / (decimal)vt1.f_vt_op2 != m_arr1d_op1[1] / (decimal)vt1.d_vt_op2) || (m_arr1d_op1[1] / (decimal)vt1.d_vt_op2 != m_arr1d_op1[1] / vt1.m_vt_op2) || (m_arr1d_op1[1] / vt1.m_vt_op2 != m_arr1d_op1[1] / vt1.i_vt_op2) || (m_arr1d_op1[1] / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / i_arr1d_op2[0] != m_arr1d_op1[1] / ui_arr1d_op2[0]) || (m_arr1d_op1[1] / ui_arr1d_op2[0] != m_arr1d_op1[1] / l_arr1d_op2[0]) || (m_arr1d_op1[1] / l_arr1d_op2[0] != m_arr1d_op1[1] / ul_arr1d_op2[0]) || (m_arr1d_op1[1] / ul_arr1d_op2[0] != m_arr1d_op1[1] / (decimal)f_arr1d_op2[0]) || (m_arr1d_op1[1] / (decimal)f_arr1d_op2[0] != m_arr1d_op1[1] / (decimal)d_arr1d_op2[0]) || (m_arr1d_op1[1] / (decimal)d_arr1d_op2[0] != m_arr1d_op1[1] / m_arr1d_op2[0]) || (m_arr1d_op1[1] / m_arr1d_op2[0] != m_arr1d_op1[1] / i_arr1d_op2[0]) || (m_arr1d_op1[1] / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)s_f_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)s_f_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)s_d_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)s_d_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)cl1.f_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)cl1.f_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)cl1.d_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)cl1.d_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)vt1.f_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)vt1.f_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)vt1.d_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)vt1.d_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 25))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)s_f_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)s_f_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)s_d_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)s_d_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 25))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_f("op2") != 25))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)cl1.f_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)cl1.f_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)cl1.d_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)cl1.d_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 25))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)vt1.f_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)vt1.f_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)vt1.d_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)vt1.d_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 25))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 25))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 25))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 25))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/div.csproj b/tests/src/JIT/Methodical/divrem/div/div.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/div/i4div.cs b/tests/src/JIT/Methodical/divrem/div/i4div.cs
new file mode 100644 (file)
index 0000000..0b04b5d
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type i4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class i4div
+{
+    private static int s_i_s_op1 = 6;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 6;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 6;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 6;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        int[] i_arr1d_op1 = { 0, 6 };
+        int[,] i_arr2d_op1 = { { 0, 6 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 6 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 6;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((i_l_op1 / i_l_op2 != i_l_op1 / ui_l_op2) || (i_l_op1 / ui_l_op2 != i_l_op1 / l_l_op2) || (i_l_op1 / l_l_op2 != i_l_op1 / (int)ul_l_op2) || (i_l_op1 / (int)ul_l_op2 != i_l_op1 / f_l_op2) || (i_l_op1 / f_l_op2 != i_l_op1 / d_l_op2) || ((decimal)(i_l_op1 / d_l_op2) != i_l_op1 / m_l_op2) || (i_l_op1 / m_l_op2 != i_l_op1 / i_l_op2) || (i_l_op1 / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / s_i_s_op2 != i_l_op1 / s_ui_s_op2) || (i_l_op1 / s_ui_s_op2 != i_l_op1 / s_l_s_op2) || (i_l_op1 / s_l_s_op2 != i_l_op1 / (int)s_ul_s_op2) || (i_l_op1 / (int)s_ul_s_op2 != i_l_op1 / s_f_s_op2) || (i_l_op1 / s_f_s_op2 != i_l_op1 / s_d_s_op2) || ((decimal)(i_l_op1 / s_d_s_op2) != i_l_op1 / s_m_s_op2) || (i_l_op1 / s_m_s_op2 != i_l_op1 / s_i_s_op2) || (i_l_op1 / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / i_f("op2") != i_l_op1 / i_f("op2")) || (i_l_op1 / i_f("op2") != i_l_op1 / i_f("op2")) || (i_l_op1 / i_f("op2") != i_l_op1 / (int)i_f("op2")) || (i_l_op1 / (int)i_f("op2") != i_l_op1 / i_f("op2")) || (i_l_op1 / i_f("op2") != i_l_op1 / i_f("op2")) || ((decimal)(i_l_op1 / i_f("op2")) != i_l_op1 / i_f("op2")) || (i_l_op1 / i_f("op2") != i_l_op1 / i_f("op2")) || (i_l_op1 / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / cl1.i_cl_op2 != i_l_op1 / cl1.ui_cl_op2) || (i_l_op1 / cl1.ui_cl_op2 != i_l_op1 / cl1.l_cl_op2) || (i_l_op1 / cl1.l_cl_op2 != i_l_op1 / (int)cl1.ul_cl_op2) || (i_l_op1 / (int)cl1.ul_cl_op2 != i_l_op1 / cl1.f_cl_op2) || (i_l_op1 / cl1.f_cl_op2 != i_l_op1 / cl1.d_cl_op2) || ((decimal)(i_l_op1 / cl1.d_cl_op2) != i_l_op1 / cl1.m_cl_op2) || (i_l_op1 / cl1.m_cl_op2 != i_l_op1 / cl1.i_cl_op2) || (i_l_op1 / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / vt1.i_vt_op2 != i_l_op1 / vt1.ui_vt_op2) || (i_l_op1 / vt1.ui_vt_op2 != i_l_op1 / vt1.l_vt_op2) || (i_l_op1 / vt1.l_vt_op2 != i_l_op1 / (int)vt1.ul_vt_op2) || (i_l_op1 / (int)vt1.ul_vt_op2 != i_l_op1 / vt1.f_vt_op2) || (i_l_op1 / vt1.f_vt_op2 != i_l_op1 / vt1.d_vt_op2) || ((decimal)(i_l_op1 / vt1.d_vt_op2) != i_l_op1 / vt1.m_vt_op2) || (i_l_op1 / vt1.m_vt_op2 != i_l_op1 / vt1.i_vt_op2) || (i_l_op1 / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / i_arr1d_op2[0] != i_l_op1 / ui_arr1d_op2[0]) || (i_l_op1 / ui_arr1d_op2[0] != i_l_op1 / l_arr1d_op2[0]) || (i_l_op1 / l_arr1d_op2[0] != i_l_op1 / (int)ul_arr1d_op2[0]) || (i_l_op1 / (int)ul_arr1d_op2[0] != i_l_op1 / f_arr1d_op2[0]) || (i_l_op1 / f_arr1d_op2[0] != i_l_op1 / d_arr1d_op2[0]) || ((decimal)(i_l_op1 / d_arr1d_op2[0]) != i_l_op1 / m_arr1d_op2[0]) || (i_l_op1 / m_arr1d_op2[0] != i_l_op1 / i_arr1d_op2[0]) || (i_l_op1 / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != i_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((i_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_l_op2 != s_i_s_op1 / ui_l_op2) || (s_i_s_op1 / ui_l_op2 != s_i_s_op1 / l_l_op2) || (s_i_s_op1 / l_l_op2 != s_i_s_op1 / (int)ul_l_op2) || (s_i_s_op1 / (int)ul_l_op2 != s_i_s_op1 / f_l_op2) || (s_i_s_op1 / f_l_op2 != s_i_s_op1 / d_l_op2) || ((decimal)(s_i_s_op1 / d_l_op2) != s_i_s_op1 / m_l_op2) || (s_i_s_op1 / m_l_op2 != s_i_s_op1 / i_l_op2) || (s_i_s_op1 / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / s_i_s_op2 != s_i_s_op1 / s_ui_s_op2) || (s_i_s_op1 / s_ui_s_op2 != s_i_s_op1 / s_l_s_op2) || (s_i_s_op1 / s_l_s_op2 != s_i_s_op1 / (int)s_ul_s_op2) || (s_i_s_op1 / (int)s_ul_s_op2 != s_i_s_op1 / s_f_s_op2) || (s_i_s_op1 / s_f_s_op2 != s_i_s_op1 / s_d_s_op2) || ((decimal)(s_i_s_op1 / s_d_s_op2) != s_i_s_op1 / s_m_s_op2) || (s_i_s_op1 / s_m_s_op2 != s_i_s_op1 / s_i_s_op2) || (s_i_s_op1 / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_f("op2") != s_i_s_op1 / i_f("op2")) || (s_i_s_op1 / i_f("op2") != s_i_s_op1 / i_f("op2")) || (s_i_s_op1 / i_f("op2") != s_i_s_op1 / (int)i_f("op2")) || (s_i_s_op1 / (int)i_f("op2") != s_i_s_op1 / i_f("op2")) || (s_i_s_op1 / i_f("op2") != s_i_s_op1 / i_f("op2")) || ((decimal)(s_i_s_op1 / i_f("op2")) != s_i_s_op1 / i_f("op2")) || (s_i_s_op1 / i_f("op2") != s_i_s_op1 / i_f("op2")) || (s_i_s_op1 / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / cl1.i_cl_op2 != s_i_s_op1 / cl1.ui_cl_op2) || (s_i_s_op1 / cl1.ui_cl_op2 != s_i_s_op1 / cl1.l_cl_op2) || (s_i_s_op1 / cl1.l_cl_op2 != s_i_s_op1 / (int)cl1.ul_cl_op2) || (s_i_s_op1 / (int)cl1.ul_cl_op2 != s_i_s_op1 / cl1.f_cl_op2) || (s_i_s_op1 / cl1.f_cl_op2 != s_i_s_op1 / cl1.d_cl_op2) || ((decimal)(s_i_s_op1 / cl1.d_cl_op2) != s_i_s_op1 / cl1.m_cl_op2) || (s_i_s_op1 / cl1.m_cl_op2 != s_i_s_op1 / cl1.i_cl_op2) || (s_i_s_op1 / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / vt1.i_vt_op2 != s_i_s_op1 / vt1.ui_vt_op2) || (s_i_s_op1 / vt1.ui_vt_op2 != s_i_s_op1 / vt1.l_vt_op2) || (s_i_s_op1 / vt1.l_vt_op2 != s_i_s_op1 / (int)vt1.ul_vt_op2) || (s_i_s_op1 / (int)vt1.ul_vt_op2 != s_i_s_op1 / vt1.f_vt_op2) || (s_i_s_op1 / vt1.f_vt_op2 != s_i_s_op1 / vt1.d_vt_op2) || ((decimal)(s_i_s_op1 / vt1.d_vt_op2) != s_i_s_op1 / vt1.m_vt_op2) || (s_i_s_op1 / vt1.m_vt_op2 != s_i_s_op1 / vt1.i_vt_op2) || (s_i_s_op1 / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_arr1d_op2[0] != s_i_s_op1 / ui_arr1d_op2[0]) || (s_i_s_op1 / ui_arr1d_op2[0] != s_i_s_op1 / l_arr1d_op2[0]) || (s_i_s_op1 / l_arr1d_op2[0] != s_i_s_op1 / (int)ul_arr1d_op2[0]) || (s_i_s_op1 / (int)ul_arr1d_op2[0] != s_i_s_op1 / f_arr1d_op2[0]) || (s_i_s_op1 / f_arr1d_op2[0] != s_i_s_op1 / d_arr1d_op2[0]) || ((decimal)(s_i_s_op1 / d_arr1d_op2[0]) != s_i_s_op1 / m_arr1d_op2[0]) || (s_i_s_op1 / m_arr1d_op2[0] != s_i_s_op1 / i_arr1d_op2[0]) || (s_i_s_op1 / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_i_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != s_i_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_i_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_i_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / i_l_op2 != i_f("op1") / ui_l_op2) || (i_f("op1") / ui_l_op2 != i_f("op1") / l_l_op2) || (i_f("op1") / l_l_op2 != i_f("op1") / (int)ul_l_op2) || (i_f("op1") / (int)ul_l_op2 != i_f("op1") / f_l_op2) || (i_f("op1") / f_l_op2 != i_f("op1") / d_l_op2) || ((decimal)(i_f("op1") / d_l_op2) != i_f("op1") / m_l_op2) || (i_f("op1") / m_l_op2 != i_f("op1") / i_l_op2) || (i_f("op1") / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / s_i_s_op2 != i_f("op1") / s_ui_s_op2) || (i_f("op1") / s_ui_s_op2 != i_f("op1") / s_l_s_op2) || (i_f("op1") / s_l_s_op2 != i_f("op1") / (int)s_ul_s_op2) || (i_f("op1") / (int)s_ul_s_op2 != i_f("op1") / s_f_s_op2) || (i_f("op1") / s_f_s_op2 != i_f("op1") / s_d_s_op2) || ((decimal)(i_f("op1") / s_d_s_op2) != i_f("op1") / s_m_s_op2) || (i_f("op1") / s_m_s_op2 != i_f("op1") / s_i_s_op2) || (i_f("op1") / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / i_f("op2") != i_f("op1") / i_f("op2")) || (i_f("op1") / i_f("op2") != i_f("op1") / i_f("op2")) || (i_f("op1") / i_f("op2") != i_f("op1") / (int)i_f("op2")) || (i_f("op1") / (int)i_f("op2") != i_f("op1") / i_f("op2")) || (i_f("op1") / i_f("op2") != i_f("op1") / i_f("op2")) || ((decimal)(i_f("op1") / i_f("op2")) != i_f("op1") / i_f("op2")) || (i_f("op1") / i_f("op2") != i_f("op1") / i_f("op2")) || (i_f("op1") / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / cl1.i_cl_op2 != i_f("op1") / cl1.ui_cl_op2) || (i_f("op1") / cl1.ui_cl_op2 != i_f("op1") / cl1.l_cl_op2) || (i_f("op1") / cl1.l_cl_op2 != i_f("op1") / (int)cl1.ul_cl_op2) || (i_f("op1") / (int)cl1.ul_cl_op2 != i_f("op1") / cl1.f_cl_op2) || (i_f("op1") / cl1.f_cl_op2 != i_f("op1") / cl1.d_cl_op2) || ((decimal)(i_f("op1") / cl1.d_cl_op2) != i_f("op1") / cl1.m_cl_op2) || (i_f("op1") / cl1.m_cl_op2 != i_f("op1") / cl1.i_cl_op2) || (i_f("op1") / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / vt1.i_vt_op2 != i_f("op1") / vt1.ui_vt_op2) || (i_f("op1") / vt1.ui_vt_op2 != i_f("op1") / vt1.l_vt_op2) || (i_f("op1") / vt1.l_vt_op2 != i_f("op1") / (int)vt1.ul_vt_op2) || (i_f("op1") / (int)vt1.ul_vt_op2 != i_f("op1") / vt1.f_vt_op2) || (i_f("op1") / vt1.f_vt_op2 != i_f("op1") / vt1.d_vt_op2) || ((decimal)(i_f("op1") / vt1.d_vt_op2) != i_f("op1") / vt1.m_vt_op2) || (i_f("op1") / vt1.m_vt_op2 != i_f("op1") / vt1.i_vt_op2) || (i_f("op1") / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / i_arr1d_op2[0] != i_f("op1") / ui_arr1d_op2[0]) || (i_f("op1") / ui_arr1d_op2[0] != i_f("op1") / l_arr1d_op2[0]) || (i_f("op1") / l_arr1d_op2[0] != i_f("op1") / (int)ul_arr1d_op2[0]) || (i_f("op1") / (int)ul_arr1d_op2[0] != i_f("op1") / f_arr1d_op2[0]) || (i_f("op1") / f_arr1d_op2[0] != i_f("op1") / d_arr1d_op2[0]) || ((decimal)(i_f("op1") / d_arr1d_op2[0]) != i_f("op1") / m_arr1d_op2[0]) || (i_f("op1") / m_arr1d_op2[0] != i_f("op1") / i_arr1d_op2[0]) || (i_f("op1") / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) != i_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((i_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / i_l_op2 != cl1.i_cl_op1 / ui_l_op2) || (cl1.i_cl_op1 / ui_l_op2 != cl1.i_cl_op1 / l_l_op2) || (cl1.i_cl_op1 / l_l_op2 != cl1.i_cl_op1 / (int)ul_l_op2) || (cl1.i_cl_op1 / (int)ul_l_op2 != cl1.i_cl_op1 / f_l_op2) || (cl1.i_cl_op1 / f_l_op2 != cl1.i_cl_op1 / d_l_op2) || ((decimal)(cl1.i_cl_op1 / d_l_op2) != cl1.i_cl_op1 / m_l_op2) || (cl1.i_cl_op1 / m_l_op2 != cl1.i_cl_op1 / i_l_op2) || (cl1.i_cl_op1 / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / s_i_s_op2 != cl1.i_cl_op1 / s_ui_s_op2) || (cl1.i_cl_op1 / s_ui_s_op2 != cl1.i_cl_op1 / s_l_s_op2) || (cl1.i_cl_op1 / s_l_s_op2 != cl1.i_cl_op1 / (int)s_ul_s_op2) || (cl1.i_cl_op1 / (int)s_ul_s_op2 != cl1.i_cl_op1 / s_f_s_op2) || (cl1.i_cl_op1 / s_f_s_op2 != cl1.i_cl_op1 / s_d_s_op2) || ((decimal)(cl1.i_cl_op1 / s_d_s_op2) != cl1.i_cl_op1 / s_m_s_op2) || (cl1.i_cl_op1 / s_m_s_op2 != cl1.i_cl_op1 / s_i_s_op2) || (cl1.i_cl_op1 / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / i_f("op2") != cl1.i_cl_op1 / i_f("op2")) || (cl1.i_cl_op1 / i_f("op2") != cl1.i_cl_op1 / i_f("op2")) || (cl1.i_cl_op1 / i_f("op2") != cl1.i_cl_op1 / (int)i_f("op2")) || (cl1.i_cl_op1 / (int)i_f("op2") != cl1.i_cl_op1 / i_f("op2")) || (cl1.i_cl_op1 / i_f("op2") != cl1.i_cl_op1 / i_f("op2")) || ((decimal)(cl1.i_cl_op1 / i_f("op2")) != cl1.i_cl_op1 / i_f("op2")) || (cl1.i_cl_op1 / i_f("op2") != cl1.i_cl_op1 / i_f("op2")) || (cl1.i_cl_op1 / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / cl1.i_cl_op2 != cl1.i_cl_op1 / cl1.ui_cl_op2) || (cl1.i_cl_op1 / cl1.ui_cl_op2 != cl1.i_cl_op1 / cl1.l_cl_op2) || (cl1.i_cl_op1 / cl1.l_cl_op2 != cl1.i_cl_op1 / (int)cl1.ul_cl_op2) || (cl1.i_cl_op1 / (int)cl1.ul_cl_op2 != cl1.i_cl_op1 / cl1.f_cl_op2) || (cl1.i_cl_op1 / cl1.f_cl_op2 != cl1.i_cl_op1 / cl1.d_cl_op2) || ((decimal)(cl1.i_cl_op1 / cl1.d_cl_op2) != cl1.i_cl_op1 / cl1.m_cl_op2) || (cl1.i_cl_op1 / cl1.m_cl_op2 != cl1.i_cl_op1 / cl1.i_cl_op2) || (cl1.i_cl_op1 / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / vt1.i_vt_op2 != cl1.i_cl_op1 / vt1.ui_vt_op2) || (cl1.i_cl_op1 / vt1.ui_vt_op2 != cl1.i_cl_op1 / vt1.l_vt_op2) || (cl1.i_cl_op1 / vt1.l_vt_op2 != cl1.i_cl_op1 / (int)vt1.ul_vt_op2) || (cl1.i_cl_op1 / (int)vt1.ul_vt_op2 != cl1.i_cl_op1 / vt1.f_vt_op2) || (cl1.i_cl_op1 / vt1.f_vt_op2 != cl1.i_cl_op1 / vt1.d_vt_op2) || ((decimal)(cl1.i_cl_op1 / vt1.d_vt_op2) != cl1.i_cl_op1 / vt1.m_vt_op2) || (cl1.i_cl_op1 / vt1.m_vt_op2 != cl1.i_cl_op1 / vt1.i_vt_op2) || (cl1.i_cl_op1 / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / i_arr1d_op2[0] != cl1.i_cl_op1 / ui_arr1d_op2[0]) || (cl1.i_cl_op1 / ui_arr1d_op2[0] != cl1.i_cl_op1 / l_arr1d_op2[0]) || (cl1.i_cl_op1 / l_arr1d_op2[0] != cl1.i_cl_op1 / (int)ul_arr1d_op2[0]) || (cl1.i_cl_op1 / (int)ul_arr1d_op2[0] != cl1.i_cl_op1 / f_arr1d_op2[0]) || (cl1.i_cl_op1 / f_arr1d_op2[0] != cl1.i_cl_op1 / d_arr1d_op2[0]) || ((decimal)(cl1.i_cl_op1 / d_arr1d_op2[0]) != cl1.i_cl_op1 / m_arr1d_op2[0]) || (cl1.i_cl_op1 / m_arr1d_op2[0] != cl1.i_cl_op1 / i_arr1d_op2[0]) || (cl1.i_cl_op1 / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.i_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.i_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.i_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.i_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / i_l_op2 != vt1.i_vt_op1 / ui_l_op2) || (vt1.i_vt_op1 / ui_l_op2 != vt1.i_vt_op1 / l_l_op2) || (vt1.i_vt_op1 / l_l_op2 != vt1.i_vt_op1 / (int)ul_l_op2) || (vt1.i_vt_op1 / (int)ul_l_op2 != vt1.i_vt_op1 / f_l_op2) || (vt1.i_vt_op1 / f_l_op2 != vt1.i_vt_op1 / d_l_op2) || ((decimal)(vt1.i_vt_op1 / d_l_op2) != vt1.i_vt_op1 / m_l_op2) || (vt1.i_vt_op1 / m_l_op2 != vt1.i_vt_op1 / i_l_op2) || (vt1.i_vt_op1 / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / s_i_s_op2 != vt1.i_vt_op1 / s_ui_s_op2) || (vt1.i_vt_op1 / s_ui_s_op2 != vt1.i_vt_op1 / s_l_s_op2) || (vt1.i_vt_op1 / s_l_s_op2 != vt1.i_vt_op1 / (int)s_ul_s_op2) || (vt1.i_vt_op1 / (int)s_ul_s_op2 != vt1.i_vt_op1 / s_f_s_op2) || (vt1.i_vt_op1 / s_f_s_op2 != vt1.i_vt_op1 / s_d_s_op2) || ((decimal)(vt1.i_vt_op1 / s_d_s_op2) != vt1.i_vt_op1 / s_m_s_op2) || (vt1.i_vt_op1 / s_m_s_op2 != vt1.i_vt_op1 / s_i_s_op2) || (vt1.i_vt_op1 / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / i_f("op2") != vt1.i_vt_op1 / i_f("op2")) || (vt1.i_vt_op1 / i_f("op2") != vt1.i_vt_op1 / i_f("op2")) || (vt1.i_vt_op1 / i_f("op2") != vt1.i_vt_op1 / (int)i_f("op2")) || (vt1.i_vt_op1 / (int)i_f("op2") != vt1.i_vt_op1 / i_f("op2")) || (vt1.i_vt_op1 / i_f("op2") != vt1.i_vt_op1 / i_f("op2")) || ((decimal)(vt1.i_vt_op1 / i_f("op2")) != vt1.i_vt_op1 / i_f("op2")) || (vt1.i_vt_op1 / i_f("op2") != vt1.i_vt_op1 / i_f("op2")) || (vt1.i_vt_op1 / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / cl1.i_cl_op2 != vt1.i_vt_op1 / cl1.ui_cl_op2) || (vt1.i_vt_op1 / cl1.ui_cl_op2 != vt1.i_vt_op1 / cl1.l_cl_op2) || (vt1.i_vt_op1 / cl1.l_cl_op2 != vt1.i_vt_op1 / (int)cl1.ul_cl_op2) || (vt1.i_vt_op1 / (int)cl1.ul_cl_op2 != vt1.i_vt_op1 / cl1.f_cl_op2) || (vt1.i_vt_op1 / cl1.f_cl_op2 != vt1.i_vt_op1 / cl1.d_cl_op2) || ((decimal)(vt1.i_vt_op1 / cl1.d_cl_op2) != vt1.i_vt_op1 / cl1.m_cl_op2) || (vt1.i_vt_op1 / cl1.m_cl_op2 != vt1.i_vt_op1 / cl1.i_cl_op2) || (vt1.i_vt_op1 / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / vt1.i_vt_op2 != vt1.i_vt_op1 / vt1.ui_vt_op2) || (vt1.i_vt_op1 / vt1.ui_vt_op2 != vt1.i_vt_op1 / vt1.l_vt_op2) || (vt1.i_vt_op1 / vt1.l_vt_op2 != vt1.i_vt_op1 / (int)vt1.ul_vt_op2) || (vt1.i_vt_op1 / (int)vt1.ul_vt_op2 != vt1.i_vt_op1 / vt1.f_vt_op2) || (vt1.i_vt_op1 / vt1.f_vt_op2 != vt1.i_vt_op1 / vt1.d_vt_op2) || ((decimal)(vt1.i_vt_op1 / vt1.d_vt_op2) != vt1.i_vt_op1 / vt1.m_vt_op2) || (vt1.i_vt_op1 / vt1.m_vt_op2 != vt1.i_vt_op1 / vt1.i_vt_op2) || (vt1.i_vt_op1 / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / i_arr1d_op2[0] != vt1.i_vt_op1 / ui_arr1d_op2[0]) || (vt1.i_vt_op1 / ui_arr1d_op2[0] != vt1.i_vt_op1 / l_arr1d_op2[0]) || (vt1.i_vt_op1 / l_arr1d_op2[0] != vt1.i_vt_op1 / (int)ul_arr1d_op2[0]) || (vt1.i_vt_op1 / (int)ul_arr1d_op2[0] != vt1.i_vt_op1 / f_arr1d_op2[0]) || (vt1.i_vt_op1 / f_arr1d_op2[0] != vt1.i_vt_op1 / d_arr1d_op2[0]) || ((decimal)(vt1.i_vt_op1 / d_arr1d_op2[0]) != vt1.i_vt_op1 / m_arr1d_op2[0]) || (vt1.i_vt_op1 / m_arr1d_op2[0] != vt1.i_vt_op1 / i_arr1d_op2[0]) || (vt1.i_vt_op1 / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.i_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.i_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.i_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.i_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / i_l_op2 != i_arr1d_op1[1] / ui_l_op2) || (i_arr1d_op1[1] / ui_l_op2 != i_arr1d_op1[1] / l_l_op2) || (i_arr1d_op1[1] / l_l_op2 != i_arr1d_op1[1] / (int)ul_l_op2) || (i_arr1d_op1[1] / (int)ul_l_op2 != i_arr1d_op1[1] / f_l_op2) || (i_arr1d_op1[1] / f_l_op2 != i_arr1d_op1[1] / d_l_op2) || ((decimal)(i_arr1d_op1[1] / d_l_op2) != i_arr1d_op1[1] / m_l_op2) || (i_arr1d_op1[1] / m_l_op2 != i_arr1d_op1[1] / i_l_op2) || (i_arr1d_op1[1] / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / s_i_s_op2 != i_arr1d_op1[1] / s_ui_s_op2) || (i_arr1d_op1[1] / s_ui_s_op2 != i_arr1d_op1[1] / s_l_s_op2) || (i_arr1d_op1[1] / s_l_s_op2 != i_arr1d_op1[1] / (int)s_ul_s_op2) || (i_arr1d_op1[1] / (int)s_ul_s_op2 != i_arr1d_op1[1] / s_f_s_op2) || (i_arr1d_op1[1] / s_f_s_op2 != i_arr1d_op1[1] / s_d_s_op2) || ((decimal)(i_arr1d_op1[1] / s_d_s_op2) != i_arr1d_op1[1] / s_m_s_op2) || (i_arr1d_op1[1] / s_m_s_op2 != i_arr1d_op1[1] / s_i_s_op2) || (i_arr1d_op1[1] / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / i_f("op2") != i_arr1d_op1[1] / i_f("op2")) || (i_arr1d_op1[1] / i_f("op2") != i_arr1d_op1[1] / i_f("op2")) || (i_arr1d_op1[1] / i_f("op2") != i_arr1d_op1[1] / (int)i_f("op2")) || (i_arr1d_op1[1] / (int)i_f("op2") != i_arr1d_op1[1] / i_f("op2")) || (i_arr1d_op1[1] / i_f("op2") != i_arr1d_op1[1] / i_f("op2")) || ((decimal)(i_arr1d_op1[1] / i_f("op2")) != i_arr1d_op1[1] / i_f("op2")) || (i_arr1d_op1[1] / i_f("op2") != i_arr1d_op1[1] / i_f("op2")) || (i_arr1d_op1[1] / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / cl1.i_cl_op2 != i_arr1d_op1[1] / cl1.ui_cl_op2) || (i_arr1d_op1[1] / cl1.ui_cl_op2 != i_arr1d_op1[1] / cl1.l_cl_op2) || (i_arr1d_op1[1] / cl1.l_cl_op2 != i_arr1d_op1[1] / (int)cl1.ul_cl_op2) || (i_arr1d_op1[1] / (int)cl1.ul_cl_op2 != i_arr1d_op1[1] / cl1.f_cl_op2) || (i_arr1d_op1[1] / cl1.f_cl_op2 != i_arr1d_op1[1] / cl1.d_cl_op2) || ((decimal)(i_arr1d_op1[1] / cl1.d_cl_op2) != i_arr1d_op1[1] / cl1.m_cl_op2) || (i_arr1d_op1[1] / cl1.m_cl_op2 != i_arr1d_op1[1] / cl1.i_cl_op2) || (i_arr1d_op1[1] / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / vt1.i_vt_op2 != i_arr1d_op1[1] / vt1.ui_vt_op2) || (i_arr1d_op1[1] / vt1.ui_vt_op2 != i_arr1d_op1[1] / vt1.l_vt_op2) || (i_arr1d_op1[1] / vt1.l_vt_op2 != i_arr1d_op1[1] / (int)vt1.ul_vt_op2) || (i_arr1d_op1[1] / (int)vt1.ul_vt_op2 != i_arr1d_op1[1] / vt1.f_vt_op2) || (i_arr1d_op1[1] / vt1.f_vt_op2 != i_arr1d_op1[1] / vt1.d_vt_op2) || ((decimal)(i_arr1d_op1[1] / vt1.d_vt_op2) != i_arr1d_op1[1] / vt1.m_vt_op2) || (i_arr1d_op1[1] / vt1.m_vt_op2 != i_arr1d_op1[1] / vt1.i_vt_op2) || (i_arr1d_op1[1] / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / i_arr1d_op2[0] != i_arr1d_op1[1] / ui_arr1d_op2[0]) || (i_arr1d_op1[1] / ui_arr1d_op2[0] != i_arr1d_op1[1] / l_arr1d_op2[0]) || (i_arr1d_op1[1] / l_arr1d_op2[0] != i_arr1d_op1[1] / (int)ul_arr1d_op2[0]) || (i_arr1d_op1[1] / (int)ul_arr1d_op2[0] != i_arr1d_op1[1] / f_arr1d_op2[0]) || (i_arr1d_op1[1] / f_arr1d_op2[0] != i_arr1d_op1[1] / d_arr1d_op2[0]) || ((decimal)(i_arr1d_op1[1] / d_arr1d_op2[0]) != i_arr1d_op1[1] / m_arr1d_op2[0]) || (i_arr1d_op1[1] / m_arr1d_op2[0] != i_arr1d_op1[1] / i_arr1d_op2[0]) || (i_arr1d_op1[1] / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)s_ul_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)s_ul_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)cl1.ul_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)cl1.ul_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)vt1.ul_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)vt1.ul_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) != i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)s_ul_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)s_ul_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)cl1.ul_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)cl1.ul_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)vt1.ul_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)vt1.ul_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/i8div.cs b/tests/src/JIT/Methodical/divrem/div/i8div.cs
new file mode 100644 (file)
index 0000000..7f9e174
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type i8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class i8div
+{
+    private static long s_l_s_op1 = 12;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public long l_cl_op1 = 12;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public long l_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.l_vt_op1 = 12;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        long[] l_arr1d_op1 = { 0, 12 };
+        long[,] l_arr2d_op1 = { { 0, 12 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 12 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            long l_l_op1 = 12;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((l_l_op1 / i_l_op2 != l_l_op1 / ui_l_op2) || (l_l_op1 / ui_l_op2 != l_l_op1 / l_l_op2) || (l_l_op1 / l_l_op2 != l_l_op1 / (long)ul_l_op2) || (l_l_op1 / (long)ul_l_op2 != l_l_op1 / f_l_op2) || (l_l_op1 / f_l_op2 != l_l_op1 / d_l_op2) || ((decimal)(l_l_op1 / d_l_op2) != l_l_op1 / m_l_op2) || (l_l_op1 / m_l_op2 != l_l_op1 / i_l_op2) || (l_l_op1 / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / s_i_s_op2 != l_l_op1 / s_ui_s_op2) || (l_l_op1 / s_ui_s_op2 != l_l_op1 / s_l_s_op2) || (l_l_op1 / s_l_s_op2 != l_l_op1 / (long)s_ul_s_op2) || (l_l_op1 / (long)s_ul_s_op2 != l_l_op1 / s_f_s_op2) || (l_l_op1 / s_f_s_op2 != l_l_op1 / s_d_s_op2) || ((decimal)(l_l_op1 / s_d_s_op2) != l_l_op1 / s_m_s_op2) || (l_l_op1 / s_m_s_op2 != l_l_op1 / s_i_s_op2) || (l_l_op1 / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / l_f("op2") != l_l_op1 / l_f("op2")) || (l_l_op1 / l_f("op2") != l_l_op1 / l_f("op2")) || (l_l_op1 / l_f("op2") != l_l_op1 / (long)l_f("op2")) || (l_l_op1 / (long)l_f("op2") != l_l_op1 / l_f("op2")) || (l_l_op1 / l_f("op2") != l_l_op1 / l_f("op2")) || ((decimal)(l_l_op1 / l_f("op2")) != l_l_op1 / l_f("op2")) || (l_l_op1 / l_f("op2") != l_l_op1 / l_f("op2")) || (l_l_op1 / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / cl1.i_cl_op2 != l_l_op1 / cl1.ui_cl_op2) || (l_l_op1 / cl1.ui_cl_op2 != l_l_op1 / cl1.l_cl_op2) || (l_l_op1 / cl1.l_cl_op2 != l_l_op1 / (long)cl1.ul_cl_op2) || (l_l_op1 / (long)cl1.ul_cl_op2 != l_l_op1 / cl1.f_cl_op2) || (l_l_op1 / cl1.f_cl_op2 != l_l_op1 / cl1.d_cl_op2) || ((decimal)(l_l_op1 / cl1.d_cl_op2) != l_l_op1 / cl1.m_cl_op2) || (l_l_op1 / cl1.m_cl_op2 != l_l_op1 / cl1.i_cl_op2) || (l_l_op1 / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / vt1.i_vt_op2 != l_l_op1 / vt1.ui_vt_op2) || (l_l_op1 / vt1.ui_vt_op2 != l_l_op1 / vt1.l_vt_op2) || (l_l_op1 / vt1.l_vt_op2 != l_l_op1 / (long)vt1.ul_vt_op2) || (l_l_op1 / (long)vt1.ul_vt_op2 != l_l_op1 / vt1.f_vt_op2) || (l_l_op1 / vt1.f_vt_op2 != l_l_op1 / vt1.d_vt_op2) || ((decimal)(l_l_op1 / vt1.d_vt_op2) != l_l_op1 / vt1.m_vt_op2) || (l_l_op1 / vt1.m_vt_op2 != l_l_op1 / vt1.i_vt_op2) || (l_l_op1 / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / i_arr1d_op2[0] != l_l_op1 / ui_arr1d_op2[0]) || (l_l_op1 / ui_arr1d_op2[0] != l_l_op1 / l_arr1d_op2[0]) || (l_l_op1 / l_arr1d_op2[0] != l_l_op1 / (long)ul_arr1d_op2[0]) || (l_l_op1 / (long)ul_arr1d_op2[0] != l_l_op1 / f_arr1d_op2[0]) || (l_l_op1 / f_arr1d_op2[0] != l_l_op1 / d_arr1d_op2[0]) || ((decimal)(l_l_op1 / d_arr1d_op2[0]) != l_l_op1 / m_arr1d_op2[0]) || (l_l_op1 / m_arr1d_op2[0] != l_l_op1 / i_arr1d_op2[0]) || (l_l_op1 / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != l_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((l_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / i_l_op2 != s_l_s_op1 / ui_l_op2) || (s_l_s_op1 / ui_l_op2 != s_l_s_op1 / l_l_op2) || (s_l_s_op1 / l_l_op2 != s_l_s_op1 / (long)ul_l_op2) || (s_l_s_op1 / (long)ul_l_op2 != s_l_s_op1 / f_l_op2) || (s_l_s_op1 / f_l_op2 != s_l_s_op1 / d_l_op2) || ((decimal)(s_l_s_op1 / d_l_op2) != s_l_s_op1 / m_l_op2) || (s_l_s_op1 / m_l_op2 != s_l_s_op1 / i_l_op2) || (s_l_s_op1 / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / s_i_s_op2 != s_l_s_op1 / s_ui_s_op2) || (s_l_s_op1 / s_ui_s_op2 != s_l_s_op1 / s_l_s_op2) || (s_l_s_op1 / s_l_s_op2 != s_l_s_op1 / (long)s_ul_s_op2) || (s_l_s_op1 / (long)s_ul_s_op2 != s_l_s_op1 / s_f_s_op2) || (s_l_s_op1 / s_f_s_op2 != s_l_s_op1 / s_d_s_op2) || ((decimal)(s_l_s_op1 / s_d_s_op2) != s_l_s_op1 / s_m_s_op2) || (s_l_s_op1 / s_m_s_op2 != s_l_s_op1 / s_i_s_op2) || (s_l_s_op1 / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / l_f("op2") != s_l_s_op1 / l_f("op2")) || (s_l_s_op1 / l_f("op2") != s_l_s_op1 / l_f("op2")) || (s_l_s_op1 / l_f("op2") != s_l_s_op1 / (long)l_f("op2")) || (s_l_s_op1 / (long)l_f("op2") != s_l_s_op1 / l_f("op2")) || (s_l_s_op1 / l_f("op2") != s_l_s_op1 / l_f("op2")) || ((decimal)(s_l_s_op1 / l_f("op2")) != s_l_s_op1 / l_f("op2")) || (s_l_s_op1 / l_f("op2") != s_l_s_op1 / l_f("op2")) || (s_l_s_op1 / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / cl1.i_cl_op2 != s_l_s_op1 / cl1.ui_cl_op2) || (s_l_s_op1 / cl1.ui_cl_op2 != s_l_s_op1 / cl1.l_cl_op2) || (s_l_s_op1 / cl1.l_cl_op2 != s_l_s_op1 / (long)cl1.ul_cl_op2) || (s_l_s_op1 / (long)cl1.ul_cl_op2 != s_l_s_op1 / cl1.f_cl_op2) || (s_l_s_op1 / cl1.f_cl_op2 != s_l_s_op1 / cl1.d_cl_op2) || ((decimal)(s_l_s_op1 / cl1.d_cl_op2) != s_l_s_op1 / cl1.m_cl_op2) || (s_l_s_op1 / cl1.m_cl_op2 != s_l_s_op1 / cl1.i_cl_op2) || (s_l_s_op1 / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / vt1.i_vt_op2 != s_l_s_op1 / vt1.ui_vt_op2) || (s_l_s_op1 / vt1.ui_vt_op2 != s_l_s_op1 / vt1.l_vt_op2) || (s_l_s_op1 / vt1.l_vt_op2 != s_l_s_op1 / (long)vt1.ul_vt_op2) || (s_l_s_op1 / (long)vt1.ul_vt_op2 != s_l_s_op1 / vt1.f_vt_op2) || (s_l_s_op1 / vt1.f_vt_op2 != s_l_s_op1 / vt1.d_vt_op2) || ((decimal)(s_l_s_op1 / vt1.d_vt_op2) != s_l_s_op1 / vt1.m_vt_op2) || (s_l_s_op1 / vt1.m_vt_op2 != s_l_s_op1 / vt1.i_vt_op2) || (s_l_s_op1 / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / i_arr1d_op2[0] != s_l_s_op1 / ui_arr1d_op2[0]) || (s_l_s_op1 / ui_arr1d_op2[0] != s_l_s_op1 / l_arr1d_op2[0]) || (s_l_s_op1 / l_arr1d_op2[0] != s_l_s_op1 / (long)ul_arr1d_op2[0]) || (s_l_s_op1 / (long)ul_arr1d_op2[0] != s_l_s_op1 / f_arr1d_op2[0]) || (s_l_s_op1 / f_arr1d_op2[0] != s_l_s_op1 / d_arr1d_op2[0]) || ((decimal)(s_l_s_op1 / d_arr1d_op2[0]) != s_l_s_op1 / m_arr1d_op2[0]) || (s_l_s_op1 / m_arr1d_op2[0] != s_l_s_op1 / i_arr1d_op2[0]) || (s_l_s_op1 / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_l_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != s_l_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_l_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_l_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / i_l_op2 != l_f("op1") / ui_l_op2) || (l_f("op1") / ui_l_op2 != l_f("op1") / l_l_op2) || (l_f("op1") / l_l_op2 != l_f("op1") / (long)ul_l_op2) || (l_f("op1") / (long)ul_l_op2 != l_f("op1") / f_l_op2) || (l_f("op1") / f_l_op2 != l_f("op1") / d_l_op2) || ((decimal)(l_f("op1") / d_l_op2) != l_f("op1") / m_l_op2) || (l_f("op1") / m_l_op2 != l_f("op1") / i_l_op2) || (l_f("op1") / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / s_i_s_op2 != l_f("op1") / s_ui_s_op2) || (l_f("op1") / s_ui_s_op2 != l_f("op1") / s_l_s_op2) || (l_f("op1") / s_l_s_op2 != l_f("op1") / (long)s_ul_s_op2) || (l_f("op1") / (long)s_ul_s_op2 != l_f("op1") / s_f_s_op2) || (l_f("op1") / s_f_s_op2 != l_f("op1") / s_d_s_op2) || ((decimal)(l_f("op1") / s_d_s_op2) != l_f("op1") / s_m_s_op2) || (l_f("op1") / s_m_s_op2 != l_f("op1") / s_i_s_op2) || (l_f("op1") / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / l_f("op2") != l_f("op1") / l_f("op2")) || (l_f("op1") / l_f("op2") != l_f("op1") / l_f("op2")) || (l_f("op1") / l_f("op2") != l_f("op1") / (long)l_f("op2")) || (l_f("op1") / (long)l_f("op2") != l_f("op1") / l_f("op2")) || (l_f("op1") / l_f("op2") != l_f("op1") / l_f("op2")) || ((decimal)(l_f("op1") / l_f("op2")) != l_f("op1") / l_f("op2")) || (l_f("op1") / l_f("op2") != l_f("op1") / l_f("op2")) || (l_f("op1") / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / cl1.i_cl_op2 != l_f("op1") / cl1.ui_cl_op2) || (l_f("op1") / cl1.ui_cl_op2 != l_f("op1") / cl1.l_cl_op2) || (l_f("op1") / cl1.l_cl_op2 != l_f("op1") / (long)cl1.ul_cl_op2) || (l_f("op1") / (long)cl1.ul_cl_op2 != l_f("op1") / cl1.f_cl_op2) || (l_f("op1") / cl1.f_cl_op2 != l_f("op1") / cl1.d_cl_op2) || ((decimal)(l_f("op1") / cl1.d_cl_op2) != l_f("op1") / cl1.m_cl_op2) || (l_f("op1") / cl1.m_cl_op2 != l_f("op1") / cl1.i_cl_op2) || (l_f("op1") / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / vt1.i_vt_op2 != l_f("op1") / vt1.ui_vt_op2) || (l_f("op1") / vt1.ui_vt_op2 != l_f("op1") / vt1.l_vt_op2) || (l_f("op1") / vt1.l_vt_op2 != l_f("op1") / (long)vt1.ul_vt_op2) || (l_f("op1") / (long)vt1.ul_vt_op2 != l_f("op1") / vt1.f_vt_op2) || (l_f("op1") / vt1.f_vt_op2 != l_f("op1") / vt1.d_vt_op2) || ((decimal)(l_f("op1") / vt1.d_vt_op2) != l_f("op1") / vt1.m_vt_op2) || (l_f("op1") / vt1.m_vt_op2 != l_f("op1") / vt1.i_vt_op2) || (l_f("op1") / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / i_arr1d_op2[0] != l_f("op1") / ui_arr1d_op2[0]) || (l_f("op1") / ui_arr1d_op2[0] != l_f("op1") / l_arr1d_op2[0]) || (l_f("op1") / l_arr1d_op2[0] != l_f("op1") / (long)ul_arr1d_op2[0]) || (l_f("op1") / (long)ul_arr1d_op2[0] != l_f("op1") / f_arr1d_op2[0]) || (l_f("op1") / f_arr1d_op2[0] != l_f("op1") / d_arr1d_op2[0]) || ((decimal)(l_f("op1") / d_arr1d_op2[0]) != l_f("op1") / m_arr1d_op2[0]) || (l_f("op1") / m_arr1d_op2[0] != l_f("op1") / i_arr1d_op2[0]) || (l_f("op1") / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) != l_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((l_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / i_l_op2 != cl1.l_cl_op1 / ui_l_op2) || (cl1.l_cl_op1 / ui_l_op2 != cl1.l_cl_op1 / l_l_op2) || (cl1.l_cl_op1 / l_l_op2 != cl1.l_cl_op1 / (long)ul_l_op2) || (cl1.l_cl_op1 / (long)ul_l_op2 != cl1.l_cl_op1 / f_l_op2) || (cl1.l_cl_op1 / f_l_op2 != cl1.l_cl_op1 / d_l_op2) || ((decimal)(cl1.l_cl_op1 / d_l_op2) != cl1.l_cl_op1 / m_l_op2) || (cl1.l_cl_op1 / m_l_op2 != cl1.l_cl_op1 / i_l_op2) || (cl1.l_cl_op1 / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / s_i_s_op2 != cl1.l_cl_op1 / s_ui_s_op2) || (cl1.l_cl_op1 / s_ui_s_op2 != cl1.l_cl_op1 / s_l_s_op2) || (cl1.l_cl_op1 / s_l_s_op2 != cl1.l_cl_op1 / (long)s_ul_s_op2) || (cl1.l_cl_op1 / (long)s_ul_s_op2 != cl1.l_cl_op1 / s_f_s_op2) || (cl1.l_cl_op1 / s_f_s_op2 != cl1.l_cl_op1 / s_d_s_op2) || ((decimal)(cl1.l_cl_op1 / s_d_s_op2) != cl1.l_cl_op1 / s_m_s_op2) || (cl1.l_cl_op1 / s_m_s_op2 != cl1.l_cl_op1 / s_i_s_op2) || (cl1.l_cl_op1 / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / l_f("op2") != cl1.l_cl_op1 / l_f("op2")) || (cl1.l_cl_op1 / l_f("op2") != cl1.l_cl_op1 / l_f("op2")) || (cl1.l_cl_op1 / l_f("op2") != cl1.l_cl_op1 / (long)l_f("op2")) || (cl1.l_cl_op1 / (long)l_f("op2") != cl1.l_cl_op1 / l_f("op2")) || (cl1.l_cl_op1 / l_f("op2") != cl1.l_cl_op1 / l_f("op2")) || ((decimal)(cl1.l_cl_op1 / l_f("op2")) != cl1.l_cl_op1 / l_f("op2")) || (cl1.l_cl_op1 / l_f("op2") != cl1.l_cl_op1 / l_f("op2")) || (cl1.l_cl_op1 / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / cl1.i_cl_op2 != cl1.l_cl_op1 / cl1.ui_cl_op2) || (cl1.l_cl_op1 / cl1.ui_cl_op2 != cl1.l_cl_op1 / cl1.l_cl_op2) || (cl1.l_cl_op1 / cl1.l_cl_op2 != cl1.l_cl_op1 / (long)cl1.ul_cl_op2) || (cl1.l_cl_op1 / (long)cl1.ul_cl_op2 != cl1.l_cl_op1 / cl1.f_cl_op2) || (cl1.l_cl_op1 / cl1.f_cl_op2 != cl1.l_cl_op1 / cl1.d_cl_op2) || ((decimal)(cl1.l_cl_op1 / cl1.d_cl_op2) != cl1.l_cl_op1 / cl1.m_cl_op2) || (cl1.l_cl_op1 / cl1.m_cl_op2 != cl1.l_cl_op1 / cl1.i_cl_op2) || (cl1.l_cl_op1 / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / vt1.i_vt_op2 != cl1.l_cl_op1 / vt1.ui_vt_op2) || (cl1.l_cl_op1 / vt1.ui_vt_op2 != cl1.l_cl_op1 / vt1.l_vt_op2) || (cl1.l_cl_op1 / vt1.l_vt_op2 != cl1.l_cl_op1 / (long)vt1.ul_vt_op2) || (cl1.l_cl_op1 / (long)vt1.ul_vt_op2 != cl1.l_cl_op1 / vt1.f_vt_op2) || (cl1.l_cl_op1 / vt1.f_vt_op2 != cl1.l_cl_op1 / vt1.d_vt_op2) || ((decimal)(cl1.l_cl_op1 / vt1.d_vt_op2) != cl1.l_cl_op1 / vt1.m_vt_op2) || (cl1.l_cl_op1 / vt1.m_vt_op2 != cl1.l_cl_op1 / vt1.i_vt_op2) || (cl1.l_cl_op1 / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / i_arr1d_op2[0] != cl1.l_cl_op1 / ui_arr1d_op2[0]) || (cl1.l_cl_op1 / ui_arr1d_op2[0] != cl1.l_cl_op1 / l_arr1d_op2[0]) || (cl1.l_cl_op1 / l_arr1d_op2[0] != cl1.l_cl_op1 / (long)ul_arr1d_op2[0]) || (cl1.l_cl_op1 / (long)ul_arr1d_op2[0] != cl1.l_cl_op1 / f_arr1d_op2[0]) || (cl1.l_cl_op1 / f_arr1d_op2[0] != cl1.l_cl_op1 / d_arr1d_op2[0]) || ((decimal)(cl1.l_cl_op1 / d_arr1d_op2[0]) != cl1.l_cl_op1 / m_arr1d_op2[0]) || (cl1.l_cl_op1 / m_arr1d_op2[0] != cl1.l_cl_op1 / i_arr1d_op2[0]) || (cl1.l_cl_op1 / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.l_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.l_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.l_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.l_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / i_l_op2 != vt1.l_vt_op1 / ui_l_op2) || (vt1.l_vt_op1 / ui_l_op2 != vt1.l_vt_op1 / l_l_op2) || (vt1.l_vt_op1 / l_l_op2 != vt1.l_vt_op1 / (long)ul_l_op2) || (vt1.l_vt_op1 / (long)ul_l_op2 != vt1.l_vt_op1 / f_l_op2) || (vt1.l_vt_op1 / f_l_op2 != vt1.l_vt_op1 / d_l_op2) || ((decimal)(vt1.l_vt_op1 / d_l_op2) != vt1.l_vt_op1 / m_l_op2) || (vt1.l_vt_op1 / m_l_op2 != vt1.l_vt_op1 / i_l_op2) || (vt1.l_vt_op1 / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / s_i_s_op2 != vt1.l_vt_op1 / s_ui_s_op2) || (vt1.l_vt_op1 / s_ui_s_op2 != vt1.l_vt_op1 / s_l_s_op2) || (vt1.l_vt_op1 / s_l_s_op2 != vt1.l_vt_op1 / (long)s_ul_s_op2) || (vt1.l_vt_op1 / (long)s_ul_s_op2 != vt1.l_vt_op1 / s_f_s_op2) || (vt1.l_vt_op1 / s_f_s_op2 != vt1.l_vt_op1 / s_d_s_op2) || ((decimal)(vt1.l_vt_op1 / s_d_s_op2) != vt1.l_vt_op1 / s_m_s_op2) || (vt1.l_vt_op1 / s_m_s_op2 != vt1.l_vt_op1 / s_i_s_op2) || (vt1.l_vt_op1 / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / l_f("op2") != vt1.l_vt_op1 / l_f("op2")) || (vt1.l_vt_op1 / l_f("op2") != vt1.l_vt_op1 / l_f("op2")) || (vt1.l_vt_op1 / l_f("op2") != vt1.l_vt_op1 / (long)l_f("op2")) || (vt1.l_vt_op1 / (long)l_f("op2") != vt1.l_vt_op1 / l_f("op2")) || (vt1.l_vt_op1 / l_f("op2") != vt1.l_vt_op1 / l_f("op2")) || ((decimal)(vt1.l_vt_op1 / l_f("op2")) != vt1.l_vt_op1 / l_f("op2")) || (vt1.l_vt_op1 / l_f("op2") != vt1.l_vt_op1 / l_f("op2")) || (vt1.l_vt_op1 / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / cl1.i_cl_op2 != vt1.l_vt_op1 / cl1.ui_cl_op2) || (vt1.l_vt_op1 / cl1.ui_cl_op2 != vt1.l_vt_op1 / cl1.l_cl_op2) || (vt1.l_vt_op1 / cl1.l_cl_op2 != vt1.l_vt_op1 / (long)cl1.ul_cl_op2) || (vt1.l_vt_op1 / (long)cl1.ul_cl_op2 != vt1.l_vt_op1 / cl1.f_cl_op2) || (vt1.l_vt_op1 / cl1.f_cl_op2 != vt1.l_vt_op1 / cl1.d_cl_op2) || ((decimal)(vt1.l_vt_op1 / cl1.d_cl_op2) != vt1.l_vt_op1 / cl1.m_cl_op2) || (vt1.l_vt_op1 / cl1.m_cl_op2 != vt1.l_vt_op1 / cl1.i_cl_op2) || (vt1.l_vt_op1 / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / vt1.i_vt_op2 != vt1.l_vt_op1 / vt1.ui_vt_op2) || (vt1.l_vt_op1 / vt1.ui_vt_op2 != vt1.l_vt_op1 / vt1.l_vt_op2) || (vt1.l_vt_op1 / vt1.l_vt_op2 != vt1.l_vt_op1 / (long)vt1.ul_vt_op2) || (vt1.l_vt_op1 / (long)vt1.ul_vt_op2 != vt1.l_vt_op1 / vt1.f_vt_op2) || (vt1.l_vt_op1 / vt1.f_vt_op2 != vt1.l_vt_op1 / vt1.d_vt_op2) || ((decimal)(vt1.l_vt_op1 / vt1.d_vt_op2) != vt1.l_vt_op1 / vt1.m_vt_op2) || (vt1.l_vt_op1 / vt1.m_vt_op2 != vt1.l_vt_op1 / vt1.i_vt_op2) || (vt1.l_vt_op1 / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / i_arr1d_op2[0] != vt1.l_vt_op1 / ui_arr1d_op2[0]) || (vt1.l_vt_op1 / ui_arr1d_op2[0] != vt1.l_vt_op1 / l_arr1d_op2[0]) || (vt1.l_vt_op1 / l_arr1d_op2[0] != vt1.l_vt_op1 / (long)ul_arr1d_op2[0]) || (vt1.l_vt_op1 / (long)ul_arr1d_op2[0] != vt1.l_vt_op1 / f_arr1d_op2[0]) || (vt1.l_vt_op1 / f_arr1d_op2[0] != vt1.l_vt_op1 / d_arr1d_op2[0]) || ((decimal)(vt1.l_vt_op1 / d_arr1d_op2[0]) != vt1.l_vt_op1 / m_arr1d_op2[0]) || (vt1.l_vt_op1 / m_arr1d_op2[0] != vt1.l_vt_op1 / i_arr1d_op2[0]) || (vt1.l_vt_op1 / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.l_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.l_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.l_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.l_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / i_l_op2 != l_arr1d_op1[1] / ui_l_op2) || (l_arr1d_op1[1] / ui_l_op2 != l_arr1d_op1[1] / l_l_op2) || (l_arr1d_op1[1] / l_l_op2 != l_arr1d_op1[1] / (long)ul_l_op2) || (l_arr1d_op1[1] / (long)ul_l_op2 != l_arr1d_op1[1] / f_l_op2) || (l_arr1d_op1[1] / f_l_op2 != l_arr1d_op1[1] / d_l_op2) || ((decimal)(l_arr1d_op1[1] / d_l_op2) != l_arr1d_op1[1] / m_l_op2) || (l_arr1d_op1[1] / m_l_op2 != l_arr1d_op1[1] / i_l_op2) || (l_arr1d_op1[1] / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / s_i_s_op2 != l_arr1d_op1[1] / s_ui_s_op2) || (l_arr1d_op1[1] / s_ui_s_op2 != l_arr1d_op1[1] / s_l_s_op2) || (l_arr1d_op1[1] / s_l_s_op2 != l_arr1d_op1[1] / (long)s_ul_s_op2) || (l_arr1d_op1[1] / (long)s_ul_s_op2 != l_arr1d_op1[1] / s_f_s_op2) || (l_arr1d_op1[1] / s_f_s_op2 != l_arr1d_op1[1] / s_d_s_op2) || ((decimal)(l_arr1d_op1[1] / s_d_s_op2) != l_arr1d_op1[1] / s_m_s_op2) || (l_arr1d_op1[1] / s_m_s_op2 != l_arr1d_op1[1] / s_i_s_op2) || (l_arr1d_op1[1] / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / l_f("op2") != l_arr1d_op1[1] / l_f("op2")) || (l_arr1d_op1[1] / l_f("op2") != l_arr1d_op1[1] / l_f("op2")) || (l_arr1d_op1[1] / l_f("op2") != l_arr1d_op1[1] / (long)l_f("op2")) || (l_arr1d_op1[1] / (long)l_f("op2") != l_arr1d_op1[1] / l_f("op2")) || (l_arr1d_op1[1] / l_f("op2") != l_arr1d_op1[1] / l_f("op2")) || ((decimal)(l_arr1d_op1[1] / l_f("op2")) != l_arr1d_op1[1] / l_f("op2")) || (l_arr1d_op1[1] / l_f("op2") != l_arr1d_op1[1] / l_f("op2")) || (l_arr1d_op1[1] / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / cl1.i_cl_op2 != l_arr1d_op1[1] / cl1.ui_cl_op2) || (l_arr1d_op1[1] / cl1.ui_cl_op2 != l_arr1d_op1[1] / cl1.l_cl_op2) || (l_arr1d_op1[1] / cl1.l_cl_op2 != l_arr1d_op1[1] / (long)cl1.ul_cl_op2) || (l_arr1d_op1[1] / (long)cl1.ul_cl_op2 != l_arr1d_op1[1] / cl1.f_cl_op2) || (l_arr1d_op1[1] / cl1.f_cl_op2 != l_arr1d_op1[1] / cl1.d_cl_op2) || ((decimal)(l_arr1d_op1[1] / cl1.d_cl_op2) != l_arr1d_op1[1] / cl1.m_cl_op2) || (l_arr1d_op1[1] / cl1.m_cl_op2 != l_arr1d_op1[1] / cl1.i_cl_op2) || (l_arr1d_op1[1] / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / vt1.i_vt_op2 != l_arr1d_op1[1] / vt1.ui_vt_op2) || (l_arr1d_op1[1] / vt1.ui_vt_op2 != l_arr1d_op1[1] / vt1.l_vt_op2) || (l_arr1d_op1[1] / vt1.l_vt_op2 != l_arr1d_op1[1] / (long)vt1.ul_vt_op2) || (l_arr1d_op1[1] / (long)vt1.ul_vt_op2 != l_arr1d_op1[1] / vt1.f_vt_op2) || (l_arr1d_op1[1] / vt1.f_vt_op2 != l_arr1d_op1[1] / vt1.d_vt_op2) || ((decimal)(l_arr1d_op1[1] / vt1.d_vt_op2) != l_arr1d_op1[1] / vt1.m_vt_op2) || (l_arr1d_op1[1] / vt1.m_vt_op2 != l_arr1d_op1[1] / vt1.i_vt_op2) || (l_arr1d_op1[1] / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / i_arr1d_op2[0] != l_arr1d_op1[1] / ui_arr1d_op2[0]) || (l_arr1d_op1[1] / ui_arr1d_op2[0] != l_arr1d_op1[1] / l_arr1d_op2[0]) || (l_arr1d_op1[1] / l_arr1d_op2[0] != l_arr1d_op1[1] / (long)ul_arr1d_op2[0]) || (l_arr1d_op1[1] / (long)ul_arr1d_op2[0] != l_arr1d_op1[1] / f_arr1d_op2[0]) || (l_arr1d_op1[1] / f_arr1d_op2[0] != l_arr1d_op1[1] / d_arr1d_op2[0]) || ((decimal)(l_arr1d_op1[1] / d_arr1d_op2[0]) != l_arr1d_op1[1] / m_arr1d_op2[0]) || (l_arr1d_op1[1] / m_arr1d_op2[0] != l_arr1d_op1[1] / i_arr1d_op2[0]) || (l_arr1d_op1[1] / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)s_ul_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)s_ul_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)cl1.ul_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)cl1.ul_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)vt1.ul_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)vt1.ul_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) != l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 4))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)s_ul_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)s_ul_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 4))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_f("op2") != 4))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)cl1.ul_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)cl1.ul_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 4))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)vt1.ul_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)vt1.ul_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 4))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 4))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 4))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 4))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/negSignedMod.cs b/tests/src/JIT/Methodical/divrem/div/negSignedMod.cs
new file mode 100644 (file)
index 0000000..31aaea3
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+
+internal class Test
+{
+    private static int Main()
+    {
+        Console.WriteLine(TimeSpan.FromTicks(-2567240321185713219).Seconds);
+        if (TimeSpan.FromTicks(-2567240321185713219).Seconds != -38)
+            return 101;
+        return 100;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/divrem/div/overlddiv.cs b/tests/src/JIT/Methodical/divrem/div/overlddiv.cs
new file mode 100644 (file)
index 0000000..a9b49a4
--- /dev/null
@@ -0,0 +1,628 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2
+op1 is of a user-defined class numHolder that overloads operator /
+op2 can be i4, u4, i8, u8, r4, r8, decimal and user-defined class numHolder
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class overlddiv
+{
+    //user-defined class that overloads operator /
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator /(numHolder a, int b)
+        {
+            return a._i_num / b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator /(numHolder a, uint b)
+        {
+            return a._ui_num / b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator /(numHolder a, long b)
+        {
+            return a._l_num / b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator /(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num / b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator /(numHolder a, float b)
+        {
+            return a._f_num / b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator /(numHolder a, double b)
+        {
+            return a._d_num / b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator /(numHolder a, decimal b)
+        {
+            return (int)(a._m_num / b);
+        }
+
+        public static int operator /(numHolder a, numHolder b)
+        {
+            return a._i_num / b._i_num;
+        }
+    }
+
+    private static numHolder s_nHldr_s_op1 = new numHolder(128);
+
+    private static int s_i_s_op2 = 16;
+    private static uint s_ui_s_op2 = 16;
+    private static long s_l_s_op2 = 16;
+    private static ulong s_ul_s_op2 = 16;
+    private static float s_f_s_op2 = 16;
+    private static double s_d_s_op2 = 16;
+    private static decimal s_m_s_op2 = 16;
+    private static numHolder s_nHldr_s_op2 = new numHolder(16);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 128;
+        else
+            return 16;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(128);
+        else
+            return new numHolder(16);
+    }
+    private class CL
+    {
+        public numHolder nHldr_cl_op1 = new numHolder(128);
+
+        public int i_cl_op2 = 16;
+        public uint ui_cl_op2 = 16;
+        public long l_cl_op2 = 16;
+        public ulong ul_cl_op2 = 16;
+        public float f_cl_op2 = 16;
+        public double d_cl_op2 = 16;
+        public decimal m_cl_op2 = 16;
+        public numHolder nHldr_cl_op2 = new numHolder(16);
+    }
+
+    private struct VT
+    {
+        public numHolder nHldr_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.nHldr_vt_op1 = new numHolder(128);
+        vt1.i_vt_op2 = 16;
+        vt1.ui_vt_op2 = 16;
+        vt1.l_vt_op2 = 16;
+        vt1.ul_vt_op2 = 16;
+        vt1.f_vt_op2 = 16;
+        vt1.d_vt_op2 = 16;
+        vt1.m_vt_op2 = 16;
+        vt1.nHldr_vt_op2 = new numHolder(16);
+
+        numHolder[] nHldr_arr1d_op1 = { new numHolder(0), new numHolder(128) };
+        numHolder[,] nHldr_arr2d_op1 = { { new numHolder(0), new numHolder(128) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op1 = { { { new numHolder(0), new numHolder(128) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[] i_arr1d_op2 = { 16, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 16, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 16, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 16, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 16, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 16, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 16, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 16 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 16 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(16), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(16) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(16) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            numHolder nHldr_l_op1 = new numHolder(128);
+            int i_l_op2 = 16;
+            uint ui_l_op2 = 16;
+            long l_l_op2 = 16;
+            ulong ul_l_op2 = 16;
+            float f_l_op2 = 16;
+            double d_l_op2 = 16;
+            decimal m_l_op2 = 16;
+            numHolder nHldr_l_op2 = new numHolder(16);
+            if ((nHldr_l_op1 / i_l_op2 != nHldr_l_op1 / ui_l_op2) || (nHldr_l_op1 / ui_l_op2 != nHldr_l_op1 / l_l_op2) || (nHldr_l_op1 / l_l_op2 != nHldr_l_op1 / ul_l_op2) || (nHldr_l_op1 / ul_l_op2 != nHldr_l_op1 / f_l_op2) || (nHldr_l_op1 / f_l_op2 != nHldr_l_op1 / d_l_op2) || (nHldr_l_op1 / d_l_op2 != nHldr_l_op1 / m_l_op2) || (nHldr_l_op1 / m_l_op2 != nHldr_l_op1 / i_l_op2) || (nHldr_l_op1 / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / s_i_s_op2 != nHldr_l_op1 / s_ui_s_op2) || (nHldr_l_op1 / s_ui_s_op2 != nHldr_l_op1 / s_l_s_op2) || (nHldr_l_op1 / s_l_s_op2 != nHldr_l_op1 / s_ul_s_op2) || (nHldr_l_op1 / s_ul_s_op2 != nHldr_l_op1 / s_f_s_op2) || (nHldr_l_op1 / s_f_s_op2 != nHldr_l_op1 / s_d_s_op2) || (nHldr_l_op1 / s_d_s_op2 != nHldr_l_op1 / s_m_s_op2) || (nHldr_l_op1 / s_m_s_op2 != nHldr_l_op1 / s_i_s_op2) || (nHldr_l_op1 / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != nHldr_l_op1 / nHldr_f("op2")) || (nHldr_l_op1 / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / cl1.i_cl_op2 != nHldr_l_op1 / cl1.ui_cl_op2) || (nHldr_l_op1 / cl1.ui_cl_op2 != nHldr_l_op1 / cl1.l_cl_op2) || (nHldr_l_op1 / cl1.l_cl_op2 != nHldr_l_op1 / cl1.ul_cl_op2) || (nHldr_l_op1 / cl1.ul_cl_op2 != nHldr_l_op1 / cl1.f_cl_op2) || (nHldr_l_op1 / cl1.f_cl_op2 != nHldr_l_op1 / cl1.d_cl_op2) || (nHldr_l_op1 / cl1.d_cl_op2 != nHldr_l_op1 / cl1.m_cl_op2) || (nHldr_l_op1 / cl1.m_cl_op2 != nHldr_l_op1 / cl1.i_cl_op2) || (nHldr_l_op1 / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / vt1.i_vt_op2 != nHldr_l_op1 / vt1.ui_vt_op2) || (nHldr_l_op1 / vt1.ui_vt_op2 != nHldr_l_op1 / vt1.l_vt_op2) || (nHldr_l_op1 / vt1.l_vt_op2 != nHldr_l_op1 / vt1.ul_vt_op2) || (nHldr_l_op1 / vt1.ul_vt_op2 != nHldr_l_op1 / vt1.f_vt_op2) || (nHldr_l_op1 / vt1.f_vt_op2 != nHldr_l_op1 / vt1.d_vt_op2) || (nHldr_l_op1 / vt1.d_vt_op2 != nHldr_l_op1 / vt1.m_vt_op2) || (nHldr_l_op1 / vt1.m_vt_op2 != nHldr_l_op1 / vt1.i_vt_op2) || (nHldr_l_op1 / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / i_arr1d_op2[0] != nHldr_l_op1 / ui_arr1d_op2[0]) || (nHldr_l_op1 / ui_arr1d_op2[0] != nHldr_l_op1 / l_arr1d_op2[0]) || (nHldr_l_op1 / l_arr1d_op2[0] != nHldr_l_op1 / ul_arr1d_op2[0]) || (nHldr_l_op1 / ul_arr1d_op2[0] != nHldr_l_op1 / f_arr1d_op2[0]) || (nHldr_l_op1 / f_arr1d_op2[0] != nHldr_l_op1 / d_arr1d_op2[0]) || (nHldr_l_op1 / d_arr1d_op2[0] != nHldr_l_op1 / m_arr1d_op2[0]) || (nHldr_l_op1 / m_arr1d_op2[0] != nHldr_l_op1 / i_arr1d_op2[0]) || (nHldr_l_op1 / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / i_l_op2 != s_nHldr_s_op1 / ui_l_op2) || (s_nHldr_s_op1 / ui_l_op2 != s_nHldr_s_op1 / l_l_op2) || (s_nHldr_s_op1 / l_l_op2 != s_nHldr_s_op1 / ul_l_op2) || (s_nHldr_s_op1 / ul_l_op2 != s_nHldr_s_op1 / f_l_op2) || (s_nHldr_s_op1 / f_l_op2 != s_nHldr_s_op1 / d_l_op2) || (s_nHldr_s_op1 / d_l_op2 != s_nHldr_s_op1 / m_l_op2) || (s_nHldr_s_op1 / m_l_op2 != s_nHldr_s_op1 / i_l_op2) || (s_nHldr_s_op1 / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / s_i_s_op2 != s_nHldr_s_op1 / s_ui_s_op2) || (s_nHldr_s_op1 / s_ui_s_op2 != s_nHldr_s_op1 / s_l_s_op2) || (s_nHldr_s_op1 / s_l_s_op2 != s_nHldr_s_op1 / s_ul_s_op2) || (s_nHldr_s_op1 / s_ul_s_op2 != s_nHldr_s_op1 / s_f_s_op2) || (s_nHldr_s_op1 / s_f_s_op2 != s_nHldr_s_op1 / s_d_s_op2) || (s_nHldr_s_op1 / s_d_s_op2 != s_nHldr_s_op1 / s_m_s_op2) || (s_nHldr_s_op1 / s_m_s_op2 != s_nHldr_s_op1 / s_i_s_op2) || (s_nHldr_s_op1 / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != s_nHldr_s_op1 / nHldr_f("op2")) || (s_nHldr_s_op1 / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / cl1.i_cl_op2 != s_nHldr_s_op1 / cl1.ui_cl_op2) || (s_nHldr_s_op1 / cl1.ui_cl_op2 != s_nHldr_s_op1 / cl1.l_cl_op2) || (s_nHldr_s_op1 / cl1.l_cl_op2 != s_nHldr_s_op1 / cl1.ul_cl_op2) || (s_nHldr_s_op1 / cl1.ul_cl_op2 != s_nHldr_s_op1 / cl1.f_cl_op2) || (s_nHldr_s_op1 / cl1.f_cl_op2 != s_nHldr_s_op1 / cl1.d_cl_op2) || (s_nHldr_s_op1 / cl1.d_cl_op2 != s_nHldr_s_op1 / cl1.m_cl_op2) || (s_nHldr_s_op1 / cl1.m_cl_op2 != s_nHldr_s_op1 / cl1.i_cl_op2) || (s_nHldr_s_op1 / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / vt1.i_vt_op2 != s_nHldr_s_op1 / vt1.ui_vt_op2) || (s_nHldr_s_op1 / vt1.ui_vt_op2 != s_nHldr_s_op1 / vt1.l_vt_op2) || (s_nHldr_s_op1 / vt1.l_vt_op2 != s_nHldr_s_op1 / vt1.ul_vt_op2) || (s_nHldr_s_op1 / vt1.ul_vt_op2 != s_nHldr_s_op1 / vt1.f_vt_op2) || (s_nHldr_s_op1 / vt1.f_vt_op2 != s_nHldr_s_op1 / vt1.d_vt_op2) || (s_nHldr_s_op1 / vt1.d_vt_op2 != s_nHldr_s_op1 / vt1.m_vt_op2) || (s_nHldr_s_op1 / vt1.m_vt_op2 != s_nHldr_s_op1 / vt1.i_vt_op2) || (s_nHldr_s_op1 / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / i_arr1d_op2[0] != s_nHldr_s_op1 / ui_arr1d_op2[0]) || (s_nHldr_s_op1 / ui_arr1d_op2[0] != s_nHldr_s_op1 / l_arr1d_op2[0]) || (s_nHldr_s_op1 / l_arr1d_op2[0] != s_nHldr_s_op1 / ul_arr1d_op2[0]) || (s_nHldr_s_op1 / ul_arr1d_op2[0] != s_nHldr_s_op1 / f_arr1d_op2[0]) || (s_nHldr_s_op1 / f_arr1d_op2[0] != s_nHldr_s_op1 / d_arr1d_op2[0]) || (s_nHldr_s_op1 / d_arr1d_op2[0] != s_nHldr_s_op1 / m_arr1d_op2[0]) || (s_nHldr_s_op1 / m_arr1d_op2[0] != s_nHldr_s_op1 / i_arr1d_op2[0]) || (s_nHldr_s_op1 / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / i_l_op2 != nHldr_f("op1") / ui_l_op2) || (nHldr_f("op1") / ui_l_op2 != nHldr_f("op1") / l_l_op2) || (nHldr_f("op1") / l_l_op2 != nHldr_f("op1") / ul_l_op2) || (nHldr_f("op1") / ul_l_op2 != nHldr_f("op1") / f_l_op2) || (nHldr_f("op1") / f_l_op2 != nHldr_f("op1") / d_l_op2) || (nHldr_f("op1") / d_l_op2 != nHldr_f("op1") / m_l_op2) || (nHldr_f("op1") / m_l_op2 != nHldr_f("op1") / i_l_op2) || (nHldr_f("op1") / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / s_i_s_op2 != nHldr_f("op1") / s_ui_s_op2) || (nHldr_f("op1") / s_ui_s_op2 != nHldr_f("op1") / s_l_s_op2) || (nHldr_f("op1") / s_l_s_op2 != nHldr_f("op1") / s_ul_s_op2) || (nHldr_f("op1") / s_ul_s_op2 != nHldr_f("op1") / s_f_s_op2) || (nHldr_f("op1") / s_f_s_op2 != nHldr_f("op1") / s_d_s_op2) || (nHldr_f("op1") / s_d_s_op2 != nHldr_f("op1") / s_m_s_op2) || (nHldr_f("op1") / s_m_s_op2 != nHldr_f("op1") / s_i_s_op2) || (nHldr_f("op1") / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != nHldr_f("op1") / nHldr_f("op2")) || (nHldr_f("op1") / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / cl1.i_cl_op2 != nHldr_f("op1") / cl1.ui_cl_op2) || (nHldr_f("op1") / cl1.ui_cl_op2 != nHldr_f("op1") / cl1.l_cl_op2) || (nHldr_f("op1") / cl1.l_cl_op2 != nHldr_f("op1") / cl1.ul_cl_op2) || (nHldr_f("op1") / cl1.ul_cl_op2 != nHldr_f("op1") / cl1.f_cl_op2) || (nHldr_f("op1") / cl1.f_cl_op2 != nHldr_f("op1") / cl1.d_cl_op2) || (nHldr_f("op1") / cl1.d_cl_op2 != nHldr_f("op1") / cl1.m_cl_op2) || (nHldr_f("op1") / cl1.m_cl_op2 != nHldr_f("op1") / cl1.i_cl_op2) || (nHldr_f("op1") / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / vt1.i_vt_op2 != nHldr_f("op1") / vt1.ui_vt_op2) || (nHldr_f("op1") / vt1.ui_vt_op2 != nHldr_f("op1") / vt1.l_vt_op2) || (nHldr_f("op1") / vt1.l_vt_op2 != nHldr_f("op1") / vt1.ul_vt_op2) || (nHldr_f("op1") / vt1.ul_vt_op2 != nHldr_f("op1") / vt1.f_vt_op2) || (nHldr_f("op1") / vt1.f_vt_op2 != nHldr_f("op1") / vt1.d_vt_op2) || (nHldr_f("op1") / vt1.d_vt_op2 != nHldr_f("op1") / vt1.m_vt_op2) || (nHldr_f("op1") / vt1.m_vt_op2 != nHldr_f("op1") / vt1.i_vt_op2) || (nHldr_f("op1") / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / i_arr1d_op2[0] != nHldr_f("op1") / ui_arr1d_op2[0]) || (nHldr_f("op1") / ui_arr1d_op2[0] != nHldr_f("op1") / l_arr1d_op2[0]) || (nHldr_f("op1") / l_arr1d_op2[0] != nHldr_f("op1") / ul_arr1d_op2[0]) || (nHldr_f("op1") / ul_arr1d_op2[0] != nHldr_f("op1") / f_arr1d_op2[0]) || (nHldr_f("op1") / f_arr1d_op2[0] != nHldr_f("op1") / d_arr1d_op2[0]) || (nHldr_f("op1") / d_arr1d_op2[0] != nHldr_f("op1") / m_arr1d_op2[0]) || (nHldr_f("op1") / m_arr1d_op2[0] != nHldr_f("op1") / i_arr1d_op2[0]) || (nHldr_f("op1") / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / i_l_op2 != cl1.nHldr_cl_op1 / ui_l_op2) || (cl1.nHldr_cl_op1 / ui_l_op2 != cl1.nHldr_cl_op1 / l_l_op2) || (cl1.nHldr_cl_op1 / l_l_op2 != cl1.nHldr_cl_op1 / ul_l_op2) || (cl1.nHldr_cl_op1 / ul_l_op2 != cl1.nHldr_cl_op1 / f_l_op2) || (cl1.nHldr_cl_op1 / f_l_op2 != cl1.nHldr_cl_op1 / d_l_op2) || (cl1.nHldr_cl_op1 / d_l_op2 != cl1.nHldr_cl_op1 / m_l_op2) || (cl1.nHldr_cl_op1 / m_l_op2 != cl1.nHldr_cl_op1 / i_l_op2) || (cl1.nHldr_cl_op1 / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / s_i_s_op2 != cl1.nHldr_cl_op1 / s_ui_s_op2) || (cl1.nHldr_cl_op1 / s_ui_s_op2 != cl1.nHldr_cl_op1 / s_l_s_op2) || (cl1.nHldr_cl_op1 / s_l_s_op2 != cl1.nHldr_cl_op1 / s_ul_s_op2) || (cl1.nHldr_cl_op1 / s_ul_s_op2 != cl1.nHldr_cl_op1 / s_f_s_op2) || (cl1.nHldr_cl_op1 / s_f_s_op2 != cl1.nHldr_cl_op1 / s_d_s_op2) || (cl1.nHldr_cl_op1 / s_d_s_op2 != cl1.nHldr_cl_op1 / s_m_s_op2) || (cl1.nHldr_cl_op1 / s_m_s_op2 != cl1.nHldr_cl_op1 / s_i_s_op2) || (cl1.nHldr_cl_op1 / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != cl1.nHldr_cl_op1 / nHldr_f("op2")) || (cl1.nHldr_cl_op1 / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / cl1.i_cl_op2 != cl1.nHldr_cl_op1 / cl1.ui_cl_op2) || (cl1.nHldr_cl_op1 / cl1.ui_cl_op2 != cl1.nHldr_cl_op1 / cl1.l_cl_op2) || (cl1.nHldr_cl_op1 / cl1.l_cl_op2 != cl1.nHldr_cl_op1 / cl1.ul_cl_op2) || (cl1.nHldr_cl_op1 / cl1.ul_cl_op2 != cl1.nHldr_cl_op1 / cl1.f_cl_op2) || (cl1.nHldr_cl_op1 / cl1.f_cl_op2 != cl1.nHldr_cl_op1 / cl1.d_cl_op2) || (cl1.nHldr_cl_op1 / cl1.d_cl_op2 != cl1.nHldr_cl_op1 / cl1.m_cl_op2) || (cl1.nHldr_cl_op1 / cl1.m_cl_op2 != cl1.nHldr_cl_op1 / cl1.i_cl_op2) || (cl1.nHldr_cl_op1 / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / vt1.i_vt_op2 != cl1.nHldr_cl_op1 / vt1.ui_vt_op2) || (cl1.nHldr_cl_op1 / vt1.ui_vt_op2 != cl1.nHldr_cl_op1 / vt1.l_vt_op2) || (cl1.nHldr_cl_op1 / vt1.l_vt_op2 != cl1.nHldr_cl_op1 / vt1.ul_vt_op2) || (cl1.nHldr_cl_op1 / vt1.ul_vt_op2 != cl1.nHldr_cl_op1 / vt1.f_vt_op2) || (cl1.nHldr_cl_op1 / vt1.f_vt_op2 != cl1.nHldr_cl_op1 / vt1.d_vt_op2) || (cl1.nHldr_cl_op1 / vt1.d_vt_op2 != cl1.nHldr_cl_op1 / vt1.m_vt_op2) || (cl1.nHldr_cl_op1 / vt1.m_vt_op2 != cl1.nHldr_cl_op1 / vt1.i_vt_op2) || (cl1.nHldr_cl_op1 / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / i_arr1d_op2[0] != cl1.nHldr_cl_op1 / ui_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / ui_arr1d_op2[0] != cl1.nHldr_cl_op1 / l_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / l_arr1d_op2[0] != cl1.nHldr_cl_op1 / ul_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / ul_arr1d_op2[0] != cl1.nHldr_cl_op1 / f_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / f_arr1d_op2[0] != cl1.nHldr_cl_op1 / d_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / d_arr1d_op2[0] != cl1.nHldr_cl_op1 / m_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / m_arr1d_op2[0] != cl1.nHldr_cl_op1 / i_arr1d_op2[0]) || (cl1.nHldr_cl_op1 / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / i_l_op2 != vt1.nHldr_vt_op1 / ui_l_op2) || (vt1.nHldr_vt_op1 / ui_l_op2 != vt1.nHldr_vt_op1 / l_l_op2) || (vt1.nHldr_vt_op1 / l_l_op2 != vt1.nHldr_vt_op1 / ul_l_op2) || (vt1.nHldr_vt_op1 / ul_l_op2 != vt1.nHldr_vt_op1 / f_l_op2) || (vt1.nHldr_vt_op1 / f_l_op2 != vt1.nHldr_vt_op1 / d_l_op2) || (vt1.nHldr_vt_op1 / d_l_op2 != vt1.nHldr_vt_op1 / m_l_op2) || (vt1.nHldr_vt_op1 / m_l_op2 != vt1.nHldr_vt_op1 / i_l_op2) || (vt1.nHldr_vt_op1 / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / s_i_s_op2 != vt1.nHldr_vt_op1 / s_ui_s_op2) || (vt1.nHldr_vt_op1 / s_ui_s_op2 != vt1.nHldr_vt_op1 / s_l_s_op2) || (vt1.nHldr_vt_op1 / s_l_s_op2 != vt1.nHldr_vt_op1 / s_ul_s_op2) || (vt1.nHldr_vt_op1 / s_ul_s_op2 != vt1.nHldr_vt_op1 / s_f_s_op2) || (vt1.nHldr_vt_op1 / s_f_s_op2 != vt1.nHldr_vt_op1 / s_d_s_op2) || (vt1.nHldr_vt_op1 / s_d_s_op2 != vt1.nHldr_vt_op1 / s_m_s_op2) || (vt1.nHldr_vt_op1 / s_m_s_op2 != vt1.nHldr_vt_op1 / s_i_s_op2) || (vt1.nHldr_vt_op1 / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != vt1.nHldr_vt_op1 / nHldr_f("op2")) || (vt1.nHldr_vt_op1 / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / cl1.i_cl_op2 != vt1.nHldr_vt_op1 / cl1.ui_cl_op2) || (vt1.nHldr_vt_op1 / cl1.ui_cl_op2 != vt1.nHldr_vt_op1 / cl1.l_cl_op2) || (vt1.nHldr_vt_op1 / cl1.l_cl_op2 != vt1.nHldr_vt_op1 / cl1.ul_cl_op2) || (vt1.nHldr_vt_op1 / cl1.ul_cl_op2 != vt1.nHldr_vt_op1 / cl1.f_cl_op2) || (vt1.nHldr_vt_op1 / cl1.f_cl_op2 != vt1.nHldr_vt_op1 / cl1.d_cl_op2) || (vt1.nHldr_vt_op1 / cl1.d_cl_op2 != vt1.nHldr_vt_op1 / cl1.m_cl_op2) || (vt1.nHldr_vt_op1 / cl1.m_cl_op2 != vt1.nHldr_vt_op1 / cl1.i_cl_op2) || (vt1.nHldr_vt_op1 / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / vt1.i_vt_op2 != vt1.nHldr_vt_op1 / vt1.ui_vt_op2) || (vt1.nHldr_vt_op1 / vt1.ui_vt_op2 != vt1.nHldr_vt_op1 / vt1.l_vt_op2) || (vt1.nHldr_vt_op1 / vt1.l_vt_op2 != vt1.nHldr_vt_op1 / vt1.ul_vt_op2) || (vt1.nHldr_vt_op1 / vt1.ul_vt_op2 != vt1.nHldr_vt_op1 / vt1.f_vt_op2) || (vt1.nHldr_vt_op1 / vt1.f_vt_op2 != vt1.nHldr_vt_op1 / vt1.d_vt_op2) || (vt1.nHldr_vt_op1 / vt1.d_vt_op2 != vt1.nHldr_vt_op1 / vt1.m_vt_op2) || (vt1.nHldr_vt_op1 / vt1.m_vt_op2 != vt1.nHldr_vt_op1 / vt1.i_vt_op2) || (vt1.nHldr_vt_op1 / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / i_arr1d_op2[0] != vt1.nHldr_vt_op1 / ui_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / ui_arr1d_op2[0] != vt1.nHldr_vt_op1 / l_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / l_arr1d_op2[0] != vt1.nHldr_vt_op1 / ul_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / ul_arr1d_op2[0] != vt1.nHldr_vt_op1 / f_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / f_arr1d_op2[0] != vt1.nHldr_vt_op1 / d_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / d_arr1d_op2[0] != vt1.nHldr_vt_op1 / m_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / m_arr1d_op2[0] != vt1.nHldr_vt_op1 / i_arr1d_op2[0]) || (vt1.nHldr_vt_op1 / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / i_l_op2 != nHldr_arr1d_op1[1] / ui_l_op2) || (nHldr_arr1d_op1[1] / ui_l_op2 != nHldr_arr1d_op1[1] / l_l_op2) || (nHldr_arr1d_op1[1] / l_l_op2 != nHldr_arr1d_op1[1] / ul_l_op2) || (nHldr_arr1d_op1[1] / ul_l_op2 != nHldr_arr1d_op1[1] / f_l_op2) || (nHldr_arr1d_op1[1] / f_l_op2 != nHldr_arr1d_op1[1] / d_l_op2) || (nHldr_arr1d_op1[1] / d_l_op2 != nHldr_arr1d_op1[1] / m_l_op2) || (nHldr_arr1d_op1[1] / m_l_op2 != nHldr_arr1d_op1[1] / i_l_op2) || (nHldr_arr1d_op1[1] / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / s_i_s_op2 != nHldr_arr1d_op1[1] / s_ui_s_op2) || (nHldr_arr1d_op1[1] / s_ui_s_op2 != nHldr_arr1d_op1[1] / s_l_s_op2) || (nHldr_arr1d_op1[1] / s_l_s_op2 != nHldr_arr1d_op1[1] / s_ul_s_op2) || (nHldr_arr1d_op1[1] / s_ul_s_op2 != nHldr_arr1d_op1[1] / s_f_s_op2) || (nHldr_arr1d_op1[1] / s_f_s_op2 != nHldr_arr1d_op1[1] / s_d_s_op2) || (nHldr_arr1d_op1[1] / s_d_s_op2 != nHldr_arr1d_op1[1] / s_m_s_op2) || (nHldr_arr1d_op1[1] / s_m_s_op2 != nHldr_arr1d_op1[1] / s_i_s_op2) || (nHldr_arr1d_op1[1] / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != nHldr_arr1d_op1[1] / nHldr_f("op2")) || (nHldr_arr1d_op1[1] / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / cl1.i_cl_op2 != nHldr_arr1d_op1[1] / cl1.ui_cl_op2) || (nHldr_arr1d_op1[1] / cl1.ui_cl_op2 != nHldr_arr1d_op1[1] / cl1.l_cl_op2) || (nHldr_arr1d_op1[1] / cl1.l_cl_op2 != nHldr_arr1d_op1[1] / cl1.ul_cl_op2) || (nHldr_arr1d_op1[1] / cl1.ul_cl_op2 != nHldr_arr1d_op1[1] / cl1.f_cl_op2) || (nHldr_arr1d_op1[1] / cl1.f_cl_op2 != nHldr_arr1d_op1[1] / cl1.d_cl_op2) || (nHldr_arr1d_op1[1] / cl1.d_cl_op2 != nHldr_arr1d_op1[1] / cl1.m_cl_op2) || (nHldr_arr1d_op1[1] / cl1.m_cl_op2 != nHldr_arr1d_op1[1] / cl1.i_cl_op2) || (nHldr_arr1d_op1[1] / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / vt1.i_vt_op2 != nHldr_arr1d_op1[1] / vt1.ui_vt_op2) || (nHldr_arr1d_op1[1] / vt1.ui_vt_op2 != nHldr_arr1d_op1[1] / vt1.l_vt_op2) || (nHldr_arr1d_op1[1] / vt1.l_vt_op2 != nHldr_arr1d_op1[1] / vt1.ul_vt_op2) || (nHldr_arr1d_op1[1] / vt1.ul_vt_op2 != nHldr_arr1d_op1[1] / vt1.f_vt_op2) || (nHldr_arr1d_op1[1] / vt1.f_vt_op2 != nHldr_arr1d_op1[1] / vt1.d_vt_op2) || (nHldr_arr1d_op1[1] / vt1.d_vt_op2 != nHldr_arr1d_op1[1] / vt1.m_vt_op2) || (nHldr_arr1d_op1[1] / vt1.m_vt_op2 != nHldr_arr1d_op1[1] / vt1.i_vt_op2) || (nHldr_arr1d_op1[1] / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / i_arr1d_op2[0] != nHldr_arr1d_op1[1] / ui_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / ui_arr1d_op2[0] != nHldr_arr1d_op1[1] / l_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / l_arr1d_op2[0] != nHldr_arr1d_op1[1] / ul_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / ul_arr1d_op2[0] != nHldr_arr1d_op1[1] / f_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / f_arr1d_op2[0] != nHldr_arr1d_op1[1] / d_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / d_arr1d_op2[0] != nHldr_arr1d_op1[1] / m_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / m_arr1d_op2[0] != nHldr_arr1d_op1[1] / i_arr1d_op2[0]) || (nHldr_arr1d_op1[1] / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 8))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 8))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / nHldr_f("op2") != 8))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 8))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 8))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 8))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 8))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 8))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/packages.config b/tests/src/JIT/Methodical/divrem/div/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/div/r4div.cs b/tests/src/JIT/Methodical/divrem/div/r4div.cs
new file mode 100644 (file)
index 0000000..f505a84
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type r4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class r4div
+{
+    private static float s_f_s_op1 = 10;
+    private static int s_i_s_op2 = 2;
+    private static uint s_ui_s_op2 = 2;
+    private static long s_l_s_op2 = 2;
+    private static ulong s_ul_s_op2 = 2;
+    private static float s_f_s_op2 = 2;
+    private static double s_d_s_op2 = 2;
+    private static decimal s_m_s_op2 = 2;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 10;
+        else
+            return 2;
+    }
+    private class CL
+    {
+        public float f_cl_op1 = 10;
+        public int i_cl_op2 = 2;
+        public uint ui_cl_op2 = 2;
+        public long l_cl_op2 = 2;
+        public ulong ul_cl_op2 = 2;
+        public float f_cl_op2 = 2;
+        public double d_cl_op2 = 2;
+        public decimal m_cl_op2 = 2;
+    }
+
+    private struct VT
+    {
+        public float f_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.f_vt_op1 = 10;
+        vt1.i_vt_op2 = 2;
+        vt1.ui_vt_op2 = 2;
+        vt1.l_vt_op2 = 2;
+        vt1.ul_vt_op2 = 2;
+        vt1.f_vt_op2 = 2;
+        vt1.d_vt_op2 = 2;
+        vt1.m_vt_op2 = 2;
+
+        float[] f_arr1d_op1 = { 0, 10 };
+        float[,] f_arr2d_op1 = { { 0, 10 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 10 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 2, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 2, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 2, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 2, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 2, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 2, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 2, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            float f_l_op1 = 10;
+            int i_l_op2 = 2;
+            uint ui_l_op2 = 2;
+            long l_l_op2 = 2;
+            ulong ul_l_op2 = 2;
+            float f_l_op2 = 2;
+            double d_l_op2 = 2;
+            decimal m_l_op2 = 2;
+            if ((f_l_op1 / i_l_op2 != f_l_op1 / ui_l_op2) || (f_l_op1 / ui_l_op2 != f_l_op1 / l_l_op2) || (f_l_op1 / l_l_op2 != f_l_op1 / ul_l_op2) || (f_l_op1 / ul_l_op2 != f_l_op1 / f_l_op2) || (f_l_op1 / f_l_op2 != f_l_op1 / d_l_op2) || (f_l_op1 / d_l_op2 != f_l_op1 / (float)m_l_op2) || (f_l_op1 / (float)m_l_op2 != f_l_op1 / i_l_op2) || (f_l_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / s_i_s_op2 != f_l_op1 / s_ui_s_op2) || (f_l_op1 / s_ui_s_op2 != f_l_op1 / s_l_s_op2) || (f_l_op1 / s_l_s_op2 != f_l_op1 / s_ul_s_op2) || (f_l_op1 / s_ul_s_op2 != f_l_op1 / s_f_s_op2) || (f_l_op1 / s_f_s_op2 != f_l_op1 / s_d_s_op2) || (f_l_op1 / s_d_s_op2 != f_l_op1 / (float)s_m_s_op2) || (f_l_op1 / (float)s_m_s_op2 != f_l_op1 / s_i_s_op2) || (f_l_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != f_l_op1 / (float)f_f("op2")) || (f_l_op1 / (float)f_f("op2") != f_l_op1 / f_f("op2")) || (f_l_op1 / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / cl1.i_cl_op2 != f_l_op1 / cl1.ui_cl_op2) || (f_l_op1 / cl1.ui_cl_op2 != f_l_op1 / cl1.l_cl_op2) || (f_l_op1 / cl1.l_cl_op2 != f_l_op1 / cl1.ul_cl_op2) || (f_l_op1 / cl1.ul_cl_op2 != f_l_op1 / cl1.f_cl_op2) || (f_l_op1 / cl1.f_cl_op2 != f_l_op1 / cl1.d_cl_op2) || (f_l_op1 / cl1.d_cl_op2 != f_l_op1 / (float)cl1.m_cl_op2) || (f_l_op1 / (float)cl1.m_cl_op2 != f_l_op1 / cl1.i_cl_op2) || (f_l_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / vt1.i_vt_op2 != f_l_op1 / vt1.ui_vt_op2) || (f_l_op1 / vt1.ui_vt_op2 != f_l_op1 / vt1.l_vt_op2) || (f_l_op1 / vt1.l_vt_op2 != f_l_op1 / vt1.ul_vt_op2) || (f_l_op1 / vt1.ul_vt_op2 != f_l_op1 / vt1.f_vt_op2) || (f_l_op1 / vt1.f_vt_op2 != f_l_op1 / vt1.d_vt_op2) || (f_l_op1 / vt1.d_vt_op2 != f_l_op1 / (float)vt1.m_vt_op2) || (f_l_op1 / (float)vt1.m_vt_op2 != f_l_op1 / vt1.i_vt_op2) || (f_l_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / i_arr1d_op2[0] != f_l_op1 / ui_arr1d_op2[0]) || (f_l_op1 / ui_arr1d_op2[0] != f_l_op1 / l_arr1d_op2[0]) || (f_l_op1 / l_arr1d_op2[0] != f_l_op1 / ul_arr1d_op2[0]) || (f_l_op1 / ul_arr1d_op2[0] != f_l_op1 / f_arr1d_op2[0]) || (f_l_op1 / f_arr1d_op2[0] != f_l_op1 / d_arr1d_op2[0]) || (f_l_op1 / d_arr1d_op2[0] != f_l_op1 / (float)m_arr1d_op2[0]) || (f_l_op1 / (float)m_arr1d_op2[0] != f_l_op1 / i_arr1d_op2[0]) || (f_l_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((f_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / i_l_op2 != s_f_s_op1 / ui_l_op2) || (s_f_s_op1 / ui_l_op2 != s_f_s_op1 / l_l_op2) || (s_f_s_op1 / l_l_op2 != s_f_s_op1 / ul_l_op2) || (s_f_s_op1 / ul_l_op2 != s_f_s_op1 / f_l_op2) || (s_f_s_op1 / f_l_op2 != s_f_s_op1 / d_l_op2) || (s_f_s_op1 / d_l_op2 != s_f_s_op1 / (float)m_l_op2) || (s_f_s_op1 / (float)m_l_op2 != s_f_s_op1 / i_l_op2) || (s_f_s_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / s_i_s_op2 != s_f_s_op1 / s_ui_s_op2) || (s_f_s_op1 / s_ui_s_op2 != s_f_s_op1 / s_l_s_op2) || (s_f_s_op1 / s_l_s_op2 != s_f_s_op1 / s_ul_s_op2) || (s_f_s_op1 / s_ul_s_op2 != s_f_s_op1 / s_f_s_op2) || (s_f_s_op1 / s_f_s_op2 != s_f_s_op1 / s_d_s_op2) || (s_f_s_op1 / s_d_s_op2 != s_f_s_op1 / (float)s_m_s_op2) || (s_f_s_op1 / (float)s_m_s_op2 != s_f_s_op1 / s_i_s_op2) || (s_f_s_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != s_f_s_op1 / (float)f_f("op2")) || (s_f_s_op1 / (float)f_f("op2") != s_f_s_op1 / f_f("op2")) || (s_f_s_op1 / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / cl1.i_cl_op2 != s_f_s_op1 / cl1.ui_cl_op2) || (s_f_s_op1 / cl1.ui_cl_op2 != s_f_s_op1 / cl1.l_cl_op2) || (s_f_s_op1 / cl1.l_cl_op2 != s_f_s_op1 / cl1.ul_cl_op2) || (s_f_s_op1 / cl1.ul_cl_op2 != s_f_s_op1 / cl1.f_cl_op2) || (s_f_s_op1 / cl1.f_cl_op2 != s_f_s_op1 / cl1.d_cl_op2) || (s_f_s_op1 / cl1.d_cl_op2 != s_f_s_op1 / (float)cl1.m_cl_op2) || (s_f_s_op1 / (float)cl1.m_cl_op2 != s_f_s_op1 / cl1.i_cl_op2) || (s_f_s_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / vt1.i_vt_op2 != s_f_s_op1 / vt1.ui_vt_op2) || (s_f_s_op1 / vt1.ui_vt_op2 != s_f_s_op1 / vt1.l_vt_op2) || (s_f_s_op1 / vt1.l_vt_op2 != s_f_s_op1 / vt1.ul_vt_op2) || (s_f_s_op1 / vt1.ul_vt_op2 != s_f_s_op1 / vt1.f_vt_op2) || (s_f_s_op1 / vt1.f_vt_op2 != s_f_s_op1 / vt1.d_vt_op2) || (s_f_s_op1 / vt1.d_vt_op2 != s_f_s_op1 / (float)vt1.m_vt_op2) || (s_f_s_op1 / (float)vt1.m_vt_op2 != s_f_s_op1 / vt1.i_vt_op2) || (s_f_s_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / i_arr1d_op2[0] != s_f_s_op1 / ui_arr1d_op2[0]) || (s_f_s_op1 / ui_arr1d_op2[0] != s_f_s_op1 / l_arr1d_op2[0]) || (s_f_s_op1 / l_arr1d_op2[0] != s_f_s_op1 / ul_arr1d_op2[0]) || (s_f_s_op1 / ul_arr1d_op2[0] != s_f_s_op1 / f_arr1d_op2[0]) || (s_f_s_op1 / f_arr1d_op2[0] != s_f_s_op1 / d_arr1d_op2[0]) || (s_f_s_op1 / d_arr1d_op2[0] != s_f_s_op1 / (float)m_arr1d_op2[0]) || (s_f_s_op1 / (float)m_arr1d_op2[0] != s_f_s_op1 / i_arr1d_op2[0]) || (s_f_s_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / i_l_op2 != f_f("op1") / ui_l_op2) || (f_f("op1") / ui_l_op2 != f_f("op1") / l_l_op2) || (f_f("op1") / l_l_op2 != f_f("op1") / ul_l_op2) || (f_f("op1") / ul_l_op2 != f_f("op1") / f_l_op2) || (f_f("op1") / f_l_op2 != f_f("op1") / d_l_op2) || (f_f("op1") / d_l_op2 != f_f("op1") / (float)m_l_op2) || (f_f("op1") / (float)m_l_op2 != f_f("op1") / i_l_op2) || (f_f("op1") / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / s_i_s_op2 != f_f("op1") / s_ui_s_op2) || (f_f("op1") / s_ui_s_op2 != f_f("op1") / s_l_s_op2) || (f_f("op1") / s_l_s_op2 != f_f("op1") / s_ul_s_op2) || (f_f("op1") / s_ul_s_op2 != f_f("op1") / s_f_s_op2) || (f_f("op1") / s_f_s_op2 != f_f("op1") / s_d_s_op2) || (f_f("op1") / s_d_s_op2 != f_f("op1") / (float)s_m_s_op2) || (f_f("op1") / (float)s_m_s_op2 != f_f("op1") / s_i_s_op2) || (f_f("op1") / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != f_f("op1") / (float)f_f("op2")) || (f_f("op1") / (float)f_f("op2") != f_f("op1") / f_f("op2")) || (f_f("op1") / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / cl1.i_cl_op2 != f_f("op1") / cl1.ui_cl_op2) || (f_f("op1") / cl1.ui_cl_op2 != f_f("op1") / cl1.l_cl_op2) || (f_f("op1") / cl1.l_cl_op2 != f_f("op1") / cl1.ul_cl_op2) || (f_f("op1") / cl1.ul_cl_op2 != f_f("op1") / cl1.f_cl_op2) || (f_f("op1") / cl1.f_cl_op2 != f_f("op1") / cl1.d_cl_op2) || (f_f("op1") / cl1.d_cl_op2 != f_f("op1") / (float)cl1.m_cl_op2) || (f_f("op1") / (float)cl1.m_cl_op2 != f_f("op1") / cl1.i_cl_op2) || (f_f("op1") / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / vt1.i_vt_op2 != f_f("op1") / vt1.ui_vt_op2) || (f_f("op1") / vt1.ui_vt_op2 != f_f("op1") / vt1.l_vt_op2) || (f_f("op1") / vt1.l_vt_op2 != f_f("op1") / vt1.ul_vt_op2) || (f_f("op1") / vt1.ul_vt_op2 != f_f("op1") / vt1.f_vt_op2) || (f_f("op1") / vt1.f_vt_op2 != f_f("op1") / vt1.d_vt_op2) || (f_f("op1") / vt1.d_vt_op2 != f_f("op1") / (float)vt1.m_vt_op2) || (f_f("op1") / (float)vt1.m_vt_op2 != f_f("op1") / vt1.i_vt_op2) || (f_f("op1") / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / i_arr1d_op2[0] != f_f("op1") / ui_arr1d_op2[0]) || (f_f("op1") / ui_arr1d_op2[0] != f_f("op1") / l_arr1d_op2[0]) || (f_f("op1") / l_arr1d_op2[0] != f_f("op1") / ul_arr1d_op2[0]) || (f_f("op1") / ul_arr1d_op2[0] != f_f("op1") / f_arr1d_op2[0]) || (f_f("op1") / f_arr1d_op2[0] != f_f("op1") / d_arr1d_op2[0]) || (f_f("op1") / d_arr1d_op2[0] != f_f("op1") / (float)m_arr1d_op2[0]) || (f_f("op1") / (float)m_arr1d_op2[0] != f_f("op1") / i_arr1d_op2[0]) || (f_f("op1") / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((f_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / i_l_op2 != cl1.f_cl_op1 / ui_l_op2) || (cl1.f_cl_op1 / ui_l_op2 != cl1.f_cl_op1 / l_l_op2) || (cl1.f_cl_op1 / l_l_op2 != cl1.f_cl_op1 / ul_l_op2) || (cl1.f_cl_op1 / ul_l_op2 != cl1.f_cl_op1 / f_l_op2) || (cl1.f_cl_op1 / f_l_op2 != cl1.f_cl_op1 / d_l_op2) || (cl1.f_cl_op1 / d_l_op2 != cl1.f_cl_op1 / (float)m_l_op2) || (cl1.f_cl_op1 / (float)m_l_op2 != cl1.f_cl_op1 / i_l_op2) || (cl1.f_cl_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / s_i_s_op2 != cl1.f_cl_op1 / s_ui_s_op2) || (cl1.f_cl_op1 / s_ui_s_op2 != cl1.f_cl_op1 / s_l_s_op2) || (cl1.f_cl_op1 / s_l_s_op2 != cl1.f_cl_op1 / s_ul_s_op2) || (cl1.f_cl_op1 / s_ul_s_op2 != cl1.f_cl_op1 / s_f_s_op2) || (cl1.f_cl_op1 / s_f_s_op2 != cl1.f_cl_op1 / s_d_s_op2) || (cl1.f_cl_op1 / s_d_s_op2 != cl1.f_cl_op1 / (float)s_m_s_op2) || (cl1.f_cl_op1 / (float)s_m_s_op2 != cl1.f_cl_op1 / s_i_s_op2) || (cl1.f_cl_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != cl1.f_cl_op1 / (float)f_f("op2")) || (cl1.f_cl_op1 / (float)f_f("op2") != cl1.f_cl_op1 / f_f("op2")) || (cl1.f_cl_op1 / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / cl1.i_cl_op2 != cl1.f_cl_op1 / cl1.ui_cl_op2) || (cl1.f_cl_op1 / cl1.ui_cl_op2 != cl1.f_cl_op1 / cl1.l_cl_op2) || (cl1.f_cl_op1 / cl1.l_cl_op2 != cl1.f_cl_op1 / cl1.ul_cl_op2) || (cl1.f_cl_op1 / cl1.ul_cl_op2 != cl1.f_cl_op1 / cl1.f_cl_op2) || (cl1.f_cl_op1 / cl1.f_cl_op2 != cl1.f_cl_op1 / cl1.d_cl_op2) || (cl1.f_cl_op1 / cl1.d_cl_op2 != cl1.f_cl_op1 / (float)cl1.m_cl_op2) || (cl1.f_cl_op1 / (float)cl1.m_cl_op2 != cl1.f_cl_op1 / cl1.i_cl_op2) || (cl1.f_cl_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / vt1.i_vt_op2 != cl1.f_cl_op1 / vt1.ui_vt_op2) || (cl1.f_cl_op1 / vt1.ui_vt_op2 != cl1.f_cl_op1 / vt1.l_vt_op2) || (cl1.f_cl_op1 / vt1.l_vt_op2 != cl1.f_cl_op1 / vt1.ul_vt_op2) || (cl1.f_cl_op1 / vt1.ul_vt_op2 != cl1.f_cl_op1 / vt1.f_vt_op2) || (cl1.f_cl_op1 / vt1.f_vt_op2 != cl1.f_cl_op1 / vt1.d_vt_op2) || (cl1.f_cl_op1 / vt1.d_vt_op2 != cl1.f_cl_op1 / (float)vt1.m_vt_op2) || (cl1.f_cl_op1 / (float)vt1.m_vt_op2 != cl1.f_cl_op1 / vt1.i_vt_op2) || (cl1.f_cl_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / i_arr1d_op2[0] != cl1.f_cl_op1 / ui_arr1d_op2[0]) || (cl1.f_cl_op1 / ui_arr1d_op2[0] != cl1.f_cl_op1 / l_arr1d_op2[0]) || (cl1.f_cl_op1 / l_arr1d_op2[0] != cl1.f_cl_op1 / ul_arr1d_op2[0]) || (cl1.f_cl_op1 / ul_arr1d_op2[0] != cl1.f_cl_op1 / f_arr1d_op2[0]) || (cl1.f_cl_op1 / f_arr1d_op2[0] != cl1.f_cl_op1 / d_arr1d_op2[0]) || (cl1.f_cl_op1 / d_arr1d_op2[0] != cl1.f_cl_op1 / (float)m_arr1d_op2[0]) || (cl1.f_cl_op1 / (float)m_arr1d_op2[0] != cl1.f_cl_op1 / i_arr1d_op2[0]) || (cl1.f_cl_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / i_l_op2 != vt1.f_vt_op1 / ui_l_op2) || (vt1.f_vt_op1 / ui_l_op2 != vt1.f_vt_op1 / l_l_op2) || (vt1.f_vt_op1 / l_l_op2 != vt1.f_vt_op1 / ul_l_op2) || (vt1.f_vt_op1 / ul_l_op2 != vt1.f_vt_op1 / f_l_op2) || (vt1.f_vt_op1 / f_l_op2 != vt1.f_vt_op1 / d_l_op2) || (vt1.f_vt_op1 / d_l_op2 != vt1.f_vt_op1 / (float)m_l_op2) || (vt1.f_vt_op1 / (float)m_l_op2 != vt1.f_vt_op1 / i_l_op2) || (vt1.f_vt_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / s_i_s_op2 != vt1.f_vt_op1 / s_ui_s_op2) || (vt1.f_vt_op1 / s_ui_s_op2 != vt1.f_vt_op1 / s_l_s_op2) || (vt1.f_vt_op1 / s_l_s_op2 != vt1.f_vt_op1 / s_ul_s_op2) || (vt1.f_vt_op1 / s_ul_s_op2 != vt1.f_vt_op1 / s_f_s_op2) || (vt1.f_vt_op1 / s_f_s_op2 != vt1.f_vt_op1 / s_d_s_op2) || (vt1.f_vt_op1 / s_d_s_op2 != vt1.f_vt_op1 / (float)s_m_s_op2) || (vt1.f_vt_op1 / (float)s_m_s_op2 != vt1.f_vt_op1 / s_i_s_op2) || (vt1.f_vt_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != vt1.f_vt_op1 / (float)f_f("op2")) || (vt1.f_vt_op1 / (float)f_f("op2") != vt1.f_vt_op1 / f_f("op2")) || (vt1.f_vt_op1 / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / cl1.i_cl_op2 != vt1.f_vt_op1 / cl1.ui_cl_op2) || (vt1.f_vt_op1 / cl1.ui_cl_op2 != vt1.f_vt_op1 / cl1.l_cl_op2) || (vt1.f_vt_op1 / cl1.l_cl_op2 != vt1.f_vt_op1 / cl1.ul_cl_op2) || (vt1.f_vt_op1 / cl1.ul_cl_op2 != vt1.f_vt_op1 / cl1.f_cl_op2) || (vt1.f_vt_op1 / cl1.f_cl_op2 != vt1.f_vt_op1 / cl1.d_cl_op2) || (vt1.f_vt_op1 / cl1.d_cl_op2 != vt1.f_vt_op1 / (float)cl1.m_cl_op2) || (vt1.f_vt_op1 / (float)cl1.m_cl_op2 != vt1.f_vt_op1 / cl1.i_cl_op2) || (vt1.f_vt_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / vt1.i_vt_op2 != vt1.f_vt_op1 / vt1.ui_vt_op2) || (vt1.f_vt_op1 / vt1.ui_vt_op2 != vt1.f_vt_op1 / vt1.l_vt_op2) || (vt1.f_vt_op1 / vt1.l_vt_op2 != vt1.f_vt_op1 / vt1.ul_vt_op2) || (vt1.f_vt_op1 / vt1.ul_vt_op2 != vt1.f_vt_op1 / vt1.f_vt_op2) || (vt1.f_vt_op1 / vt1.f_vt_op2 != vt1.f_vt_op1 / vt1.d_vt_op2) || (vt1.f_vt_op1 / vt1.d_vt_op2 != vt1.f_vt_op1 / (float)vt1.m_vt_op2) || (vt1.f_vt_op1 / (float)vt1.m_vt_op2 != vt1.f_vt_op1 / vt1.i_vt_op2) || (vt1.f_vt_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / i_arr1d_op2[0] != vt1.f_vt_op1 / ui_arr1d_op2[0]) || (vt1.f_vt_op1 / ui_arr1d_op2[0] != vt1.f_vt_op1 / l_arr1d_op2[0]) || (vt1.f_vt_op1 / l_arr1d_op2[0] != vt1.f_vt_op1 / ul_arr1d_op2[0]) || (vt1.f_vt_op1 / ul_arr1d_op2[0] != vt1.f_vt_op1 / f_arr1d_op2[0]) || (vt1.f_vt_op1 / f_arr1d_op2[0] != vt1.f_vt_op1 / d_arr1d_op2[0]) || (vt1.f_vt_op1 / d_arr1d_op2[0] != vt1.f_vt_op1 / (float)m_arr1d_op2[0]) || (vt1.f_vt_op1 / (float)m_arr1d_op2[0] != vt1.f_vt_op1 / i_arr1d_op2[0]) || (vt1.f_vt_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / i_l_op2 != f_arr1d_op1[1] / ui_l_op2) || (f_arr1d_op1[1] / ui_l_op2 != f_arr1d_op1[1] / l_l_op2) || (f_arr1d_op1[1] / l_l_op2 != f_arr1d_op1[1] / ul_l_op2) || (f_arr1d_op1[1] / ul_l_op2 != f_arr1d_op1[1] / f_l_op2) || (f_arr1d_op1[1] / f_l_op2 != f_arr1d_op1[1] / d_l_op2) || (f_arr1d_op1[1] / d_l_op2 != f_arr1d_op1[1] / (float)m_l_op2) || (f_arr1d_op1[1] / (float)m_l_op2 != f_arr1d_op1[1] / i_l_op2) || (f_arr1d_op1[1] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / s_i_s_op2 != f_arr1d_op1[1] / s_ui_s_op2) || (f_arr1d_op1[1] / s_ui_s_op2 != f_arr1d_op1[1] / s_l_s_op2) || (f_arr1d_op1[1] / s_l_s_op2 != f_arr1d_op1[1] / s_ul_s_op2) || (f_arr1d_op1[1] / s_ul_s_op2 != f_arr1d_op1[1] / s_f_s_op2) || (f_arr1d_op1[1] / s_f_s_op2 != f_arr1d_op1[1] / s_d_s_op2) || (f_arr1d_op1[1] / s_d_s_op2 != f_arr1d_op1[1] / (float)s_m_s_op2) || (f_arr1d_op1[1] / (float)s_m_s_op2 != f_arr1d_op1[1] / s_i_s_op2) || (f_arr1d_op1[1] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != f_arr1d_op1[1] / (float)f_f("op2")) || (f_arr1d_op1[1] / (float)f_f("op2") != f_arr1d_op1[1] / f_f("op2")) || (f_arr1d_op1[1] / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / cl1.i_cl_op2 != f_arr1d_op1[1] / cl1.ui_cl_op2) || (f_arr1d_op1[1] / cl1.ui_cl_op2 != f_arr1d_op1[1] / cl1.l_cl_op2) || (f_arr1d_op1[1] / cl1.l_cl_op2 != f_arr1d_op1[1] / cl1.ul_cl_op2) || (f_arr1d_op1[1] / cl1.ul_cl_op2 != f_arr1d_op1[1] / cl1.f_cl_op2) || (f_arr1d_op1[1] / cl1.f_cl_op2 != f_arr1d_op1[1] / cl1.d_cl_op2) || (f_arr1d_op1[1] / cl1.d_cl_op2 != f_arr1d_op1[1] / (float)cl1.m_cl_op2) || (f_arr1d_op1[1] / (float)cl1.m_cl_op2 != f_arr1d_op1[1] / cl1.i_cl_op2) || (f_arr1d_op1[1] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / vt1.i_vt_op2 != f_arr1d_op1[1] / vt1.ui_vt_op2) || (f_arr1d_op1[1] / vt1.ui_vt_op2 != f_arr1d_op1[1] / vt1.l_vt_op2) || (f_arr1d_op1[1] / vt1.l_vt_op2 != f_arr1d_op1[1] / vt1.ul_vt_op2) || (f_arr1d_op1[1] / vt1.ul_vt_op2 != f_arr1d_op1[1] / vt1.f_vt_op2) || (f_arr1d_op1[1] / vt1.f_vt_op2 != f_arr1d_op1[1] / vt1.d_vt_op2) || (f_arr1d_op1[1] / vt1.d_vt_op2 != f_arr1d_op1[1] / (float)vt1.m_vt_op2) || (f_arr1d_op1[1] / (float)vt1.m_vt_op2 != f_arr1d_op1[1] / vt1.i_vt_op2) || (f_arr1d_op1[1] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / i_arr1d_op2[0] != f_arr1d_op1[1] / ui_arr1d_op2[0]) || (f_arr1d_op1[1] / ui_arr1d_op2[0] != f_arr1d_op1[1] / l_arr1d_op2[0]) || (f_arr1d_op1[1] / l_arr1d_op2[0] != f_arr1d_op1[1] / ul_arr1d_op2[0]) || (f_arr1d_op1[1] / ul_arr1d_op2[0] != f_arr1d_op1[1] / f_arr1d_op2[0]) || (f_arr1d_op1[1] / f_arr1d_op2[0] != f_arr1d_op1[1] / d_arr1d_op2[0]) || (f_arr1d_op1[1] / d_arr1d_op2[0] != f_arr1d_op1[1] / (float)m_arr1d_op2[0]) || (f_arr1d_op1[1] / (float)m_arr1d_op2[0] != f_arr1d_op1[1] / i_arr1d_op2[0]) || (f_arr1d_op1[1] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)s_m_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)s_m_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)cl1.m_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)cl1.m_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)vt1.m_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)vt1.m_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)s_m_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)s_m_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)cl1.m_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)cl1.m_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)vt1.m_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)vt1.m_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/r8div.cs b/tests/src/JIT/Methodical/divrem/div/r8div.cs
new file mode 100644 (file)
index 0000000..122a31a
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type r8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class r8div
+{
+    private static double s_d_s_op1 = 15;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 15;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public double d_cl_op1 = 15;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public double d_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.d_vt_op1 = 15;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        double[] d_arr1d_op1 = { 0, 15 };
+        double[,] d_arr2d_op1 = { { 0, 15 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 15 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            double d_l_op1 = 15;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((d_l_op1 / i_l_op2 != d_l_op1 / ui_l_op2) || (d_l_op1 / ui_l_op2 != d_l_op1 / l_l_op2) || (d_l_op1 / l_l_op2 != d_l_op1 / ul_l_op2) || (d_l_op1 / ul_l_op2 != d_l_op1 / f_l_op2) || (d_l_op1 / f_l_op2 != d_l_op1 / d_l_op2) || (d_l_op1 / d_l_op2 != d_l_op1 / (double)m_l_op2) || (d_l_op1 / (double)m_l_op2 != d_l_op1 / i_l_op2) || (d_l_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / s_i_s_op2 != d_l_op1 / s_ui_s_op2) || (d_l_op1 / s_ui_s_op2 != d_l_op1 / s_l_s_op2) || (d_l_op1 / s_l_s_op2 != d_l_op1 / s_ul_s_op2) || (d_l_op1 / s_ul_s_op2 != d_l_op1 / s_f_s_op2) || (d_l_op1 / s_f_s_op2 != d_l_op1 / s_d_s_op2) || (d_l_op1 / s_d_s_op2 != d_l_op1 / (double)s_m_s_op2) || (d_l_op1 / (double)s_m_s_op2 != d_l_op1 / s_i_s_op2) || (d_l_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != d_l_op1 / (double)d_f("op2")) || (d_l_op1 / (double)d_f("op2") != d_l_op1 / d_f("op2")) || (d_l_op1 / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / cl1.i_cl_op2 != d_l_op1 / cl1.ui_cl_op2) || (d_l_op1 / cl1.ui_cl_op2 != d_l_op1 / cl1.l_cl_op2) || (d_l_op1 / cl1.l_cl_op2 != d_l_op1 / cl1.ul_cl_op2) || (d_l_op1 / cl1.ul_cl_op2 != d_l_op1 / cl1.f_cl_op2) || (d_l_op1 / cl1.f_cl_op2 != d_l_op1 / cl1.d_cl_op2) || (d_l_op1 / cl1.d_cl_op2 != d_l_op1 / (double)cl1.m_cl_op2) || (d_l_op1 / (double)cl1.m_cl_op2 != d_l_op1 / cl1.i_cl_op2) || (d_l_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / vt1.i_vt_op2 != d_l_op1 / vt1.ui_vt_op2) || (d_l_op1 / vt1.ui_vt_op2 != d_l_op1 / vt1.l_vt_op2) || (d_l_op1 / vt1.l_vt_op2 != d_l_op1 / vt1.ul_vt_op2) || (d_l_op1 / vt1.ul_vt_op2 != d_l_op1 / vt1.f_vt_op2) || (d_l_op1 / vt1.f_vt_op2 != d_l_op1 / vt1.d_vt_op2) || (d_l_op1 / vt1.d_vt_op2 != d_l_op1 / (double)vt1.m_vt_op2) || (d_l_op1 / (double)vt1.m_vt_op2 != d_l_op1 / vt1.i_vt_op2) || (d_l_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / i_arr1d_op2[0] != d_l_op1 / ui_arr1d_op2[0]) || (d_l_op1 / ui_arr1d_op2[0] != d_l_op1 / l_arr1d_op2[0]) || (d_l_op1 / l_arr1d_op2[0] != d_l_op1 / ul_arr1d_op2[0]) || (d_l_op1 / ul_arr1d_op2[0] != d_l_op1 / f_arr1d_op2[0]) || (d_l_op1 / f_arr1d_op2[0] != d_l_op1 / d_arr1d_op2[0]) || (d_l_op1 / d_arr1d_op2[0] != d_l_op1 / (double)m_arr1d_op2[0]) || (d_l_op1 / (double)m_arr1d_op2[0] != d_l_op1 / i_arr1d_op2[0]) || (d_l_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((d_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / i_l_op2 != s_d_s_op1 / ui_l_op2) || (s_d_s_op1 / ui_l_op2 != s_d_s_op1 / l_l_op2) || (s_d_s_op1 / l_l_op2 != s_d_s_op1 / ul_l_op2) || (s_d_s_op1 / ul_l_op2 != s_d_s_op1 / f_l_op2) || (s_d_s_op1 / f_l_op2 != s_d_s_op1 / d_l_op2) || (s_d_s_op1 / d_l_op2 != s_d_s_op1 / (double)m_l_op2) || (s_d_s_op1 / (double)m_l_op2 != s_d_s_op1 / i_l_op2) || (s_d_s_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / s_i_s_op2 != s_d_s_op1 / s_ui_s_op2) || (s_d_s_op1 / s_ui_s_op2 != s_d_s_op1 / s_l_s_op2) || (s_d_s_op1 / s_l_s_op2 != s_d_s_op1 / s_ul_s_op2) || (s_d_s_op1 / s_ul_s_op2 != s_d_s_op1 / s_f_s_op2) || (s_d_s_op1 / s_f_s_op2 != s_d_s_op1 / s_d_s_op2) || (s_d_s_op1 / s_d_s_op2 != s_d_s_op1 / (double)s_m_s_op2) || (s_d_s_op1 / (double)s_m_s_op2 != s_d_s_op1 / s_i_s_op2) || (s_d_s_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != s_d_s_op1 / (double)d_f("op2")) || (s_d_s_op1 / (double)d_f("op2") != s_d_s_op1 / d_f("op2")) || (s_d_s_op1 / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / cl1.i_cl_op2 != s_d_s_op1 / cl1.ui_cl_op2) || (s_d_s_op1 / cl1.ui_cl_op2 != s_d_s_op1 / cl1.l_cl_op2) || (s_d_s_op1 / cl1.l_cl_op2 != s_d_s_op1 / cl1.ul_cl_op2) || (s_d_s_op1 / cl1.ul_cl_op2 != s_d_s_op1 / cl1.f_cl_op2) || (s_d_s_op1 / cl1.f_cl_op2 != s_d_s_op1 / cl1.d_cl_op2) || (s_d_s_op1 / cl1.d_cl_op2 != s_d_s_op1 / (double)cl1.m_cl_op2) || (s_d_s_op1 / (double)cl1.m_cl_op2 != s_d_s_op1 / cl1.i_cl_op2) || (s_d_s_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / vt1.i_vt_op2 != s_d_s_op1 / vt1.ui_vt_op2) || (s_d_s_op1 / vt1.ui_vt_op2 != s_d_s_op1 / vt1.l_vt_op2) || (s_d_s_op1 / vt1.l_vt_op2 != s_d_s_op1 / vt1.ul_vt_op2) || (s_d_s_op1 / vt1.ul_vt_op2 != s_d_s_op1 / vt1.f_vt_op2) || (s_d_s_op1 / vt1.f_vt_op2 != s_d_s_op1 / vt1.d_vt_op2) || (s_d_s_op1 / vt1.d_vt_op2 != s_d_s_op1 / (double)vt1.m_vt_op2) || (s_d_s_op1 / (double)vt1.m_vt_op2 != s_d_s_op1 / vt1.i_vt_op2) || (s_d_s_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / i_arr1d_op2[0] != s_d_s_op1 / ui_arr1d_op2[0]) || (s_d_s_op1 / ui_arr1d_op2[0] != s_d_s_op1 / l_arr1d_op2[0]) || (s_d_s_op1 / l_arr1d_op2[0] != s_d_s_op1 / ul_arr1d_op2[0]) || (s_d_s_op1 / ul_arr1d_op2[0] != s_d_s_op1 / f_arr1d_op2[0]) || (s_d_s_op1 / f_arr1d_op2[0] != s_d_s_op1 / d_arr1d_op2[0]) || (s_d_s_op1 / d_arr1d_op2[0] != s_d_s_op1 / (double)m_arr1d_op2[0]) || (s_d_s_op1 / (double)m_arr1d_op2[0] != s_d_s_op1 / i_arr1d_op2[0]) || (s_d_s_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / i_l_op2 != d_f("op1") / ui_l_op2) || (d_f("op1") / ui_l_op2 != d_f("op1") / l_l_op2) || (d_f("op1") / l_l_op2 != d_f("op1") / ul_l_op2) || (d_f("op1") / ul_l_op2 != d_f("op1") / f_l_op2) || (d_f("op1") / f_l_op2 != d_f("op1") / d_l_op2) || (d_f("op1") / d_l_op2 != d_f("op1") / (double)m_l_op2) || (d_f("op1") / (double)m_l_op2 != d_f("op1") / i_l_op2) || (d_f("op1") / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / s_i_s_op2 != d_f("op1") / s_ui_s_op2) || (d_f("op1") / s_ui_s_op2 != d_f("op1") / s_l_s_op2) || (d_f("op1") / s_l_s_op2 != d_f("op1") / s_ul_s_op2) || (d_f("op1") / s_ul_s_op2 != d_f("op1") / s_f_s_op2) || (d_f("op1") / s_f_s_op2 != d_f("op1") / s_d_s_op2) || (d_f("op1") / s_d_s_op2 != d_f("op1") / (double)s_m_s_op2) || (d_f("op1") / (double)s_m_s_op2 != d_f("op1") / s_i_s_op2) || (d_f("op1") / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != d_f("op1") / (double)d_f("op2")) || (d_f("op1") / (double)d_f("op2") != d_f("op1") / d_f("op2")) || (d_f("op1") / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / cl1.i_cl_op2 != d_f("op1") / cl1.ui_cl_op2) || (d_f("op1") / cl1.ui_cl_op2 != d_f("op1") / cl1.l_cl_op2) || (d_f("op1") / cl1.l_cl_op2 != d_f("op1") / cl1.ul_cl_op2) || (d_f("op1") / cl1.ul_cl_op2 != d_f("op1") / cl1.f_cl_op2) || (d_f("op1") / cl1.f_cl_op2 != d_f("op1") / cl1.d_cl_op2) || (d_f("op1") / cl1.d_cl_op2 != d_f("op1") / (double)cl1.m_cl_op2) || (d_f("op1") / (double)cl1.m_cl_op2 != d_f("op1") / cl1.i_cl_op2) || (d_f("op1") / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / vt1.i_vt_op2 != d_f("op1") / vt1.ui_vt_op2) || (d_f("op1") / vt1.ui_vt_op2 != d_f("op1") / vt1.l_vt_op2) || (d_f("op1") / vt1.l_vt_op2 != d_f("op1") / vt1.ul_vt_op2) || (d_f("op1") / vt1.ul_vt_op2 != d_f("op1") / vt1.f_vt_op2) || (d_f("op1") / vt1.f_vt_op2 != d_f("op1") / vt1.d_vt_op2) || (d_f("op1") / vt1.d_vt_op2 != d_f("op1") / (double)vt1.m_vt_op2) || (d_f("op1") / (double)vt1.m_vt_op2 != d_f("op1") / vt1.i_vt_op2) || (d_f("op1") / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / i_arr1d_op2[0] != d_f("op1") / ui_arr1d_op2[0]) || (d_f("op1") / ui_arr1d_op2[0] != d_f("op1") / l_arr1d_op2[0]) || (d_f("op1") / l_arr1d_op2[0] != d_f("op1") / ul_arr1d_op2[0]) || (d_f("op1") / ul_arr1d_op2[0] != d_f("op1") / f_arr1d_op2[0]) || (d_f("op1") / f_arr1d_op2[0] != d_f("op1") / d_arr1d_op2[0]) || (d_f("op1") / d_arr1d_op2[0] != d_f("op1") / (double)m_arr1d_op2[0]) || (d_f("op1") / (double)m_arr1d_op2[0] != d_f("op1") / i_arr1d_op2[0]) || (d_f("op1") / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((d_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / i_l_op2 != cl1.d_cl_op1 / ui_l_op2) || (cl1.d_cl_op1 / ui_l_op2 != cl1.d_cl_op1 / l_l_op2) || (cl1.d_cl_op1 / l_l_op2 != cl1.d_cl_op1 / ul_l_op2) || (cl1.d_cl_op1 / ul_l_op2 != cl1.d_cl_op1 / f_l_op2) || (cl1.d_cl_op1 / f_l_op2 != cl1.d_cl_op1 / d_l_op2) || (cl1.d_cl_op1 / d_l_op2 != cl1.d_cl_op1 / (double)m_l_op2) || (cl1.d_cl_op1 / (double)m_l_op2 != cl1.d_cl_op1 / i_l_op2) || (cl1.d_cl_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / s_i_s_op2 != cl1.d_cl_op1 / s_ui_s_op2) || (cl1.d_cl_op1 / s_ui_s_op2 != cl1.d_cl_op1 / s_l_s_op2) || (cl1.d_cl_op1 / s_l_s_op2 != cl1.d_cl_op1 / s_ul_s_op2) || (cl1.d_cl_op1 / s_ul_s_op2 != cl1.d_cl_op1 / s_f_s_op2) || (cl1.d_cl_op1 / s_f_s_op2 != cl1.d_cl_op1 / s_d_s_op2) || (cl1.d_cl_op1 / s_d_s_op2 != cl1.d_cl_op1 / (double)s_m_s_op2) || (cl1.d_cl_op1 / (double)s_m_s_op2 != cl1.d_cl_op1 / s_i_s_op2) || (cl1.d_cl_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != cl1.d_cl_op1 / (double)d_f("op2")) || (cl1.d_cl_op1 / (double)d_f("op2") != cl1.d_cl_op1 / d_f("op2")) || (cl1.d_cl_op1 / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / cl1.i_cl_op2 != cl1.d_cl_op1 / cl1.ui_cl_op2) || (cl1.d_cl_op1 / cl1.ui_cl_op2 != cl1.d_cl_op1 / cl1.l_cl_op2) || (cl1.d_cl_op1 / cl1.l_cl_op2 != cl1.d_cl_op1 / cl1.ul_cl_op2) || (cl1.d_cl_op1 / cl1.ul_cl_op2 != cl1.d_cl_op1 / cl1.f_cl_op2) || (cl1.d_cl_op1 / cl1.f_cl_op2 != cl1.d_cl_op1 / cl1.d_cl_op2) || (cl1.d_cl_op1 / cl1.d_cl_op2 != cl1.d_cl_op1 / (double)cl1.m_cl_op2) || (cl1.d_cl_op1 / (double)cl1.m_cl_op2 != cl1.d_cl_op1 / cl1.i_cl_op2) || (cl1.d_cl_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / vt1.i_vt_op2 != cl1.d_cl_op1 / vt1.ui_vt_op2) || (cl1.d_cl_op1 / vt1.ui_vt_op2 != cl1.d_cl_op1 / vt1.l_vt_op2) || (cl1.d_cl_op1 / vt1.l_vt_op2 != cl1.d_cl_op1 / vt1.ul_vt_op2) || (cl1.d_cl_op1 / vt1.ul_vt_op2 != cl1.d_cl_op1 / vt1.f_vt_op2) || (cl1.d_cl_op1 / vt1.f_vt_op2 != cl1.d_cl_op1 / vt1.d_vt_op2) || (cl1.d_cl_op1 / vt1.d_vt_op2 != cl1.d_cl_op1 / (double)vt1.m_vt_op2) || (cl1.d_cl_op1 / (double)vt1.m_vt_op2 != cl1.d_cl_op1 / vt1.i_vt_op2) || (cl1.d_cl_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / i_arr1d_op2[0] != cl1.d_cl_op1 / ui_arr1d_op2[0]) || (cl1.d_cl_op1 / ui_arr1d_op2[0] != cl1.d_cl_op1 / l_arr1d_op2[0]) || (cl1.d_cl_op1 / l_arr1d_op2[0] != cl1.d_cl_op1 / ul_arr1d_op2[0]) || (cl1.d_cl_op1 / ul_arr1d_op2[0] != cl1.d_cl_op1 / f_arr1d_op2[0]) || (cl1.d_cl_op1 / f_arr1d_op2[0] != cl1.d_cl_op1 / d_arr1d_op2[0]) || (cl1.d_cl_op1 / d_arr1d_op2[0] != cl1.d_cl_op1 / (double)m_arr1d_op2[0]) || (cl1.d_cl_op1 / (double)m_arr1d_op2[0] != cl1.d_cl_op1 / i_arr1d_op2[0]) || (cl1.d_cl_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / i_l_op2 != vt1.d_vt_op1 / ui_l_op2) || (vt1.d_vt_op1 / ui_l_op2 != vt1.d_vt_op1 / l_l_op2) || (vt1.d_vt_op1 / l_l_op2 != vt1.d_vt_op1 / ul_l_op2) || (vt1.d_vt_op1 / ul_l_op2 != vt1.d_vt_op1 / f_l_op2) || (vt1.d_vt_op1 / f_l_op2 != vt1.d_vt_op1 / d_l_op2) || (vt1.d_vt_op1 / d_l_op2 != vt1.d_vt_op1 / (double)m_l_op2) || (vt1.d_vt_op1 / (double)m_l_op2 != vt1.d_vt_op1 / i_l_op2) || (vt1.d_vt_op1 / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / s_i_s_op2 != vt1.d_vt_op1 / s_ui_s_op2) || (vt1.d_vt_op1 / s_ui_s_op2 != vt1.d_vt_op1 / s_l_s_op2) || (vt1.d_vt_op1 / s_l_s_op2 != vt1.d_vt_op1 / s_ul_s_op2) || (vt1.d_vt_op1 / s_ul_s_op2 != vt1.d_vt_op1 / s_f_s_op2) || (vt1.d_vt_op1 / s_f_s_op2 != vt1.d_vt_op1 / s_d_s_op2) || (vt1.d_vt_op1 / s_d_s_op2 != vt1.d_vt_op1 / (double)s_m_s_op2) || (vt1.d_vt_op1 / (double)s_m_s_op2 != vt1.d_vt_op1 / s_i_s_op2) || (vt1.d_vt_op1 / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != vt1.d_vt_op1 / (double)d_f("op2")) || (vt1.d_vt_op1 / (double)d_f("op2") != vt1.d_vt_op1 / d_f("op2")) || (vt1.d_vt_op1 / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / cl1.i_cl_op2 != vt1.d_vt_op1 / cl1.ui_cl_op2) || (vt1.d_vt_op1 / cl1.ui_cl_op2 != vt1.d_vt_op1 / cl1.l_cl_op2) || (vt1.d_vt_op1 / cl1.l_cl_op2 != vt1.d_vt_op1 / cl1.ul_cl_op2) || (vt1.d_vt_op1 / cl1.ul_cl_op2 != vt1.d_vt_op1 / cl1.f_cl_op2) || (vt1.d_vt_op1 / cl1.f_cl_op2 != vt1.d_vt_op1 / cl1.d_cl_op2) || (vt1.d_vt_op1 / cl1.d_cl_op2 != vt1.d_vt_op1 / (double)cl1.m_cl_op2) || (vt1.d_vt_op1 / (double)cl1.m_cl_op2 != vt1.d_vt_op1 / cl1.i_cl_op2) || (vt1.d_vt_op1 / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / vt1.i_vt_op2 != vt1.d_vt_op1 / vt1.ui_vt_op2) || (vt1.d_vt_op1 / vt1.ui_vt_op2 != vt1.d_vt_op1 / vt1.l_vt_op2) || (vt1.d_vt_op1 / vt1.l_vt_op2 != vt1.d_vt_op1 / vt1.ul_vt_op2) || (vt1.d_vt_op1 / vt1.ul_vt_op2 != vt1.d_vt_op1 / vt1.f_vt_op2) || (vt1.d_vt_op1 / vt1.f_vt_op2 != vt1.d_vt_op1 / vt1.d_vt_op2) || (vt1.d_vt_op1 / vt1.d_vt_op2 != vt1.d_vt_op1 / (double)vt1.m_vt_op2) || (vt1.d_vt_op1 / (double)vt1.m_vt_op2 != vt1.d_vt_op1 / vt1.i_vt_op2) || (vt1.d_vt_op1 / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / i_arr1d_op2[0] != vt1.d_vt_op1 / ui_arr1d_op2[0]) || (vt1.d_vt_op1 / ui_arr1d_op2[0] != vt1.d_vt_op1 / l_arr1d_op2[0]) || (vt1.d_vt_op1 / l_arr1d_op2[0] != vt1.d_vt_op1 / ul_arr1d_op2[0]) || (vt1.d_vt_op1 / ul_arr1d_op2[0] != vt1.d_vt_op1 / f_arr1d_op2[0]) || (vt1.d_vt_op1 / f_arr1d_op2[0] != vt1.d_vt_op1 / d_arr1d_op2[0]) || (vt1.d_vt_op1 / d_arr1d_op2[0] != vt1.d_vt_op1 / (double)m_arr1d_op2[0]) || (vt1.d_vt_op1 / (double)m_arr1d_op2[0] != vt1.d_vt_op1 / i_arr1d_op2[0]) || (vt1.d_vt_op1 / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / i_l_op2 != d_arr1d_op1[1] / ui_l_op2) || (d_arr1d_op1[1] / ui_l_op2 != d_arr1d_op1[1] / l_l_op2) || (d_arr1d_op1[1] / l_l_op2 != d_arr1d_op1[1] / ul_l_op2) || (d_arr1d_op1[1] / ul_l_op2 != d_arr1d_op1[1] / f_l_op2) || (d_arr1d_op1[1] / f_l_op2 != d_arr1d_op1[1] / d_l_op2) || (d_arr1d_op1[1] / d_l_op2 != d_arr1d_op1[1] / (double)m_l_op2) || (d_arr1d_op1[1] / (double)m_l_op2 != d_arr1d_op1[1] / i_l_op2) || (d_arr1d_op1[1] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / s_i_s_op2 != d_arr1d_op1[1] / s_ui_s_op2) || (d_arr1d_op1[1] / s_ui_s_op2 != d_arr1d_op1[1] / s_l_s_op2) || (d_arr1d_op1[1] / s_l_s_op2 != d_arr1d_op1[1] / s_ul_s_op2) || (d_arr1d_op1[1] / s_ul_s_op2 != d_arr1d_op1[1] / s_f_s_op2) || (d_arr1d_op1[1] / s_f_s_op2 != d_arr1d_op1[1] / s_d_s_op2) || (d_arr1d_op1[1] / s_d_s_op2 != d_arr1d_op1[1] / (double)s_m_s_op2) || (d_arr1d_op1[1] / (double)s_m_s_op2 != d_arr1d_op1[1] / s_i_s_op2) || (d_arr1d_op1[1] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != d_arr1d_op1[1] / (double)d_f("op2")) || (d_arr1d_op1[1] / (double)d_f("op2") != d_arr1d_op1[1] / d_f("op2")) || (d_arr1d_op1[1] / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / cl1.i_cl_op2 != d_arr1d_op1[1] / cl1.ui_cl_op2) || (d_arr1d_op1[1] / cl1.ui_cl_op2 != d_arr1d_op1[1] / cl1.l_cl_op2) || (d_arr1d_op1[1] / cl1.l_cl_op2 != d_arr1d_op1[1] / cl1.ul_cl_op2) || (d_arr1d_op1[1] / cl1.ul_cl_op2 != d_arr1d_op1[1] / cl1.f_cl_op2) || (d_arr1d_op1[1] / cl1.f_cl_op2 != d_arr1d_op1[1] / cl1.d_cl_op2) || (d_arr1d_op1[1] / cl1.d_cl_op2 != d_arr1d_op1[1] / (double)cl1.m_cl_op2) || (d_arr1d_op1[1] / (double)cl1.m_cl_op2 != d_arr1d_op1[1] / cl1.i_cl_op2) || (d_arr1d_op1[1] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / vt1.i_vt_op2 != d_arr1d_op1[1] / vt1.ui_vt_op2) || (d_arr1d_op1[1] / vt1.ui_vt_op2 != d_arr1d_op1[1] / vt1.l_vt_op2) || (d_arr1d_op1[1] / vt1.l_vt_op2 != d_arr1d_op1[1] / vt1.ul_vt_op2) || (d_arr1d_op1[1] / vt1.ul_vt_op2 != d_arr1d_op1[1] / vt1.f_vt_op2) || (d_arr1d_op1[1] / vt1.f_vt_op2 != d_arr1d_op1[1] / vt1.d_vt_op2) || (d_arr1d_op1[1] / vt1.d_vt_op2 != d_arr1d_op1[1] / (double)vt1.m_vt_op2) || (d_arr1d_op1[1] / (double)vt1.m_vt_op2 != d_arr1d_op1[1] / vt1.i_vt_op2) || (d_arr1d_op1[1] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / i_arr1d_op2[0] != d_arr1d_op1[1] / ui_arr1d_op2[0]) || (d_arr1d_op1[1] / ui_arr1d_op2[0] != d_arr1d_op1[1] / l_arr1d_op2[0]) || (d_arr1d_op1[1] / l_arr1d_op2[0] != d_arr1d_op1[1] / ul_arr1d_op2[0]) || (d_arr1d_op1[1] / ul_arr1d_op2[0] != d_arr1d_op1[1] / f_arr1d_op2[0]) || (d_arr1d_op1[1] / f_arr1d_op2[0] != d_arr1d_op1[1] / d_arr1d_op2[0]) || (d_arr1d_op1[1] / d_arr1d_op2[0] != d_arr1d_op1[1] / (double)m_arr1d_op2[0]) || (d_arr1d_op1[1] / (double)m_arr1d_op2[0] != d_arr1d_op1[1] / i_arr1d_op2[0]) || (d_arr1d_op1[1] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)s_m_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)s_m_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)cl1.m_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)cl1.m_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)vt1.m_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)vt1.m_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 5))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)s_m_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)s_m_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 5))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_f("op2") != 5))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)cl1.m_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)cl1.m_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 5))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)vt1.m_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)vt1.m_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 5))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 5))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 5))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 5))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/u4div.cs b/tests/src/JIT/Methodical/divrem/div/u4div.cs
new file mode 100644 (file)
index 0000000..e01bdae
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type u4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class u4div
+{
+    private static uint s_ui_s_op1 = 9;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public uint ui_cl_op1 = 9;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public uint ui_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.ui_vt_op1 = 9;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        uint[] ui_arr1d_op1 = { 0, 9 };
+        uint[,] ui_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            uint ui_l_op1 = 9;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((ui_l_op1 / i_l_op2 != ui_l_op1 / ui_l_op2) || (ui_l_op1 / ui_l_op2 != ui_l_op1 / l_l_op2) || ((ulong)(ui_l_op1 / l_l_op2) != ui_l_op1 / ul_l_op2) || (ui_l_op1 / ul_l_op2 != ui_l_op1 / f_l_op2) || (ui_l_op1 / f_l_op2 != ui_l_op1 / d_l_op2) || ((decimal)(ui_l_op1 / d_l_op2) != ui_l_op1 / m_l_op2) || (ui_l_op1 / m_l_op2 != ui_l_op1 / i_l_op2) || (ui_l_op1 / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / s_i_s_op2 != ui_l_op1 / s_ui_s_op2) || (ui_l_op1 / s_ui_s_op2 != ui_l_op1 / s_l_s_op2) || ((ulong)(ui_l_op1 / s_l_s_op2) != ui_l_op1 / s_ul_s_op2) || (ui_l_op1 / s_ul_s_op2 != ui_l_op1 / s_f_s_op2) || (ui_l_op1 / s_f_s_op2 != ui_l_op1 / s_d_s_op2) || ((decimal)(ui_l_op1 / s_d_s_op2) != ui_l_op1 / s_m_s_op2) || (ui_l_op1 / s_m_s_op2 != ui_l_op1 / s_i_s_op2) || (ui_l_op1 / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / ui_f("op2") != ui_l_op1 / ui_f("op2")) || (ui_l_op1 / ui_f("op2") != ui_l_op1 / ui_f("op2")) || ((ulong)(ui_l_op1 / ui_f("op2")) != ui_l_op1 / ui_f("op2")) || (ui_l_op1 / ui_f("op2") != ui_l_op1 / ui_f("op2")) || (ui_l_op1 / ui_f("op2") != ui_l_op1 / ui_f("op2")) || ((decimal)(ui_l_op1 / ui_f("op2")) != ui_l_op1 / ui_f("op2")) || (ui_l_op1 / ui_f("op2") != ui_l_op1 / ui_f("op2")) || (ui_l_op1 / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / cl1.i_cl_op2 != ui_l_op1 / cl1.ui_cl_op2) || (ui_l_op1 / cl1.ui_cl_op2 != ui_l_op1 / cl1.l_cl_op2) || ((ulong)(ui_l_op1 / cl1.l_cl_op2) != ui_l_op1 / cl1.ul_cl_op2) || (ui_l_op1 / cl1.ul_cl_op2 != ui_l_op1 / cl1.f_cl_op2) || (ui_l_op1 / cl1.f_cl_op2 != ui_l_op1 / cl1.d_cl_op2) || ((decimal)(ui_l_op1 / cl1.d_cl_op2) != ui_l_op1 / cl1.m_cl_op2) || (ui_l_op1 / cl1.m_cl_op2 != ui_l_op1 / cl1.i_cl_op2) || (ui_l_op1 / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / vt1.i_vt_op2 != ui_l_op1 / vt1.ui_vt_op2) || (ui_l_op1 / vt1.ui_vt_op2 != ui_l_op1 / vt1.l_vt_op2) || ((ulong)(ui_l_op1 / vt1.l_vt_op2) != ui_l_op1 / vt1.ul_vt_op2) || (ui_l_op1 / vt1.ul_vt_op2 != ui_l_op1 / vt1.f_vt_op2) || (ui_l_op1 / vt1.f_vt_op2 != ui_l_op1 / vt1.d_vt_op2) || ((decimal)(ui_l_op1 / vt1.d_vt_op2) != ui_l_op1 / vt1.m_vt_op2) || (ui_l_op1 / vt1.m_vt_op2 != ui_l_op1 / vt1.i_vt_op2) || (ui_l_op1 / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / i_arr1d_op2[0] != ui_l_op1 / ui_arr1d_op2[0]) || (ui_l_op1 / ui_arr1d_op2[0] != ui_l_op1 / l_arr1d_op2[0]) || ((ulong)(ui_l_op1 / l_arr1d_op2[0]) != ui_l_op1 / ul_arr1d_op2[0]) || (ui_l_op1 / ul_arr1d_op2[0] != ui_l_op1 / f_arr1d_op2[0]) || (ui_l_op1 / f_arr1d_op2[0] != ui_l_op1 / d_arr1d_op2[0]) || ((decimal)(ui_l_op1 / d_arr1d_op2[0]) != ui_l_op1 / m_arr1d_op2[0]) || (ui_l_op1 / m_arr1d_op2[0] != ui_l_op1 / i_arr1d_op2[0]) || (ui_l_op1 / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_l_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_l_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / i_l_op2 != s_ui_s_op1 / ui_l_op2) || (s_ui_s_op1 / ui_l_op2 != s_ui_s_op1 / l_l_op2) || ((ulong)(s_ui_s_op1 / l_l_op2) != s_ui_s_op1 / ul_l_op2) || (s_ui_s_op1 / ul_l_op2 != s_ui_s_op1 / f_l_op2) || (s_ui_s_op1 / f_l_op2 != s_ui_s_op1 / d_l_op2) || ((decimal)(s_ui_s_op1 / d_l_op2) != s_ui_s_op1 / m_l_op2) || (s_ui_s_op1 / m_l_op2 != s_ui_s_op1 / i_l_op2) || (s_ui_s_op1 / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / s_i_s_op2 != s_ui_s_op1 / s_ui_s_op2) || (s_ui_s_op1 / s_ui_s_op2 != s_ui_s_op1 / s_l_s_op2) || ((ulong)(s_ui_s_op1 / s_l_s_op2) != s_ui_s_op1 / s_ul_s_op2) || (s_ui_s_op1 / s_ul_s_op2 != s_ui_s_op1 / s_f_s_op2) || (s_ui_s_op1 / s_f_s_op2 != s_ui_s_op1 / s_d_s_op2) || ((decimal)(s_ui_s_op1 / s_d_s_op2) != s_ui_s_op1 / s_m_s_op2) || (s_ui_s_op1 / s_m_s_op2 != s_ui_s_op1 / s_i_s_op2) || (s_ui_s_op1 / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / ui_f("op2") != s_ui_s_op1 / ui_f("op2")) || (s_ui_s_op1 / ui_f("op2") != s_ui_s_op1 / ui_f("op2")) || ((ulong)(s_ui_s_op1 / ui_f("op2")) != s_ui_s_op1 / ui_f("op2")) || (s_ui_s_op1 / ui_f("op2") != s_ui_s_op1 / ui_f("op2")) || (s_ui_s_op1 / ui_f("op2") != s_ui_s_op1 / ui_f("op2")) || ((decimal)(s_ui_s_op1 / ui_f("op2")) != s_ui_s_op1 / ui_f("op2")) || (s_ui_s_op1 / ui_f("op2") != s_ui_s_op1 / ui_f("op2")) || (s_ui_s_op1 / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / cl1.i_cl_op2 != s_ui_s_op1 / cl1.ui_cl_op2) || (s_ui_s_op1 / cl1.ui_cl_op2 != s_ui_s_op1 / cl1.l_cl_op2) || ((ulong)(s_ui_s_op1 / cl1.l_cl_op2) != s_ui_s_op1 / cl1.ul_cl_op2) || (s_ui_s_op1 / cl1.ul_cl_op2 != s_ui_s_op1 / cl1.f_cl_op2) || (s_ui_s_op1 / cl1.f_cl_op2 != s_ui_s_op1 / cl1.d_cl_op2) || ((decimal)(s_ui_s_op1 / cl1.d_cl_op2) != s_ui_s_op1 / cl1.m_cl_op2) || (s_ui_s_op1 / cl1.m_cl_op2 != s_ui_s_op1 / cl1.i_cl_op2) || (s_ui_s_op1 / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / vt1.i_vt_op2 != s_ui_s_op1 / vt1.ui_vt_op2) || (s_ui_s_op1 / vt1.ui_vt_op2 != s_ui_s_op1 / vt1.l_vt_op2) || ((ulong)(s_ui_s_op1 / vt1.l_vt_op2) != s_ui_s_op1 / vt1.ul_vt_op2) || (s_ui_s_op1 / vt1.ul_vt_op2 != s_ui_s_op1 / vt1.f_vt_op2) || (s_ui_s_op1 / vt1.f_vt_op2 != s_ui_s_op1 / vt1.d_vt_op2) || ((decimal)(s_ui_s_op1 / vt1.d_vt_op2) != s_ui_s_op1 / vt1.m_vt_op2) || (s_ui_s_op1 / vt1.m_vt_op2 != s_ui_s_op1 / vt1.i_vt_op2) || (s_ui_s_op1 / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / i_arr1d_op2[0] != s_ui_s_op1 / ui_arr1d_op2[0]) || (s_ui_s_op1 / ui_arr1d_op2[0] != s_ui_s_op1 / l_arr1d_op2[0]) || ((ulong)(s_ui_s_op1 / l_arr1d_op2[0]) != s_ui_s_op1 / ul_arr1d_op2[0]) || (s_ui_s_op1 / ul_arr1d_op2[0] != s_ui_s_op1 / f_arr1d_op2[0]) || (s_ui_s_op1 / f_arr1d_op2[0] != s_ui_s_op1 / d_arr1d_op2[0]) || ((decimal)(s_ui_s_op1 / d_arr1d_op2[0]) != s_ui_s_op1 / m_arr1d_op2[0]) || (s_ui_s_op1 / m_arr1d_op2[0] != s_ui_s_op1 / i_arr1d_op2[0]) || (s_ui_s_op1 / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(s_ui_s_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) != s_ui_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_ui_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != s_ui_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(s_ui_s_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ui_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_ui_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ui_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / i_l_op2 != ui_f("op1") / ui_l_op2) || (ui_f("op1") / ui_l_op2 != ui_f("op1") / l_l_op2) || ((ulong)(ui_f("op1") / l_l_op2) != ui_f("op1") / ul_l_op2) || (ui_f("op1") / ul_l_op2 != ui_f("op1") / f_l_op2) || (ui_f("op1") / f_l_op2 != ui_f("op1") / d_l_op2) || ((decimal)(ui_f("op1") / d_l_op2) != ui_f("op1") / m_l_op2) || (ui_f("op1") / m_l_op2 != ui_f("op1") / i_l_op2) || (ui_f("op1") / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / s_i_s_op2 != ui_f("op1") / s_ui_s_op2) || (ui_f("op1") / s_ui_s_op2 != ui_f("op1") / s_l_s_op2) || ((ulong)(ui_f("op1") / s_l_s_op2) != ui_f("op1") / s_ul_s_op2) || (ui_f("op1") / s_ul_s_op2 != ui_f("op1") / s_f_s_op2) || (ui_f("op1") / s_f_s_op2 != ui_f("op1") / s_d_s_op2) || ((decimal)(ui_f("op1") / s_d_s_op2) != ui_f("op1") / s_m_s_op2) || (ui_f("op1") / s_m_s_op2 != ui_f("op1") / s_i_s_op2) || (ui_f("op1") / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / ui_f("op2") != ui_f("op1") / ui_f("op2")) || (ui_f("op1") / ui_f("op2") != ui_f("op1") / ui_f("op2")) || ((ulong)(ui_f("op1") / ui_f("op2")) != ui_f("op1") / ui_f("op2")) || (ui_f("op1") / ui_f("op2") != ui_f("op1") / ui_f("op2")) || (ui_f("op1") / ui_f("op2") != ui_f("op1") / ui_f("op2")) || ((decimal)(ui_f("op1") / ui_f("op2")) != ui_f("op1") / ui_f("op2")) || (ui_f("op1") / ui_f("op2") != ui_f("op1") / ui_f("op2")) || (ui_f("op1") / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / cl1.i_cl_op2 != ui_f("op1") / cl1.ui_cl_op2) || (ui_f("op1") / cl1.ui_cl_op2 != ui_f("op1") / cl1.l_cl_op2) || ((ulong)(ui_f("op1") / cl1.l_cl_op2) != ui_f("op1") / cl1.ul_cl_op2) || (ui_f("op1") / cl1.ul_cl_op2 != ui_f("op1") / cl1.f_cl_op2) || (ui_f("op1") / cl1.f_cl_op2 != ui_f("op1") / cl1.d_cl_op2) || ((decimal)(ui_f("op1") / cl1.d_cl_op2) != ui_f("op1") / cl1.m_cl_op2) || (ui_f("op1") / cl1.m_cl_op2 != ui_f("op1") / cl1.i_cl_op2) || (ui_f("op1") / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / vt1.i_vt_op2 != ui_f("op1") / vt1.ui_vt_op2) || (ui_f("op1") / vt1.ui_vt_op2 != ui_f("op1") / vt1.l_vt_op2) || ((ulong)(ui_f("op1") / vt1.l_vt_op2) != ui_f("op1") / vt1.ul_vt_op2) || (ui_f("op1") / vt1.ul_vt_op2 != ui_f("op1") / vt1.f_vt_op2) || (ui_f("op1") / vt1.f_vt_op2 != ui_f("op1") / vt1.d_vt_op2) || ((decimal)(ui_f("op1") / vt1.d_vt_op2) != ui_f("op1") / vt1.m_vt_op2) || (ui_f("op1") / vt1.m_vt_op2 != ui_f("op1") / vt1.i_vt_op2) || (ui_f("op1") / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / i_arr1d_op2[0] != ui_f("op1") / ui_arr1d_op2[0]) || (ui_f("op1") / ui_arr1d_op2[0] != ui_f("op1") / l_arr1d_op2[0]) || ((ulong)(ui_f("op1") / l_arr1d_op2[0]) != ui_f("op1") / ul_arr1d_op2[0]) || (ui_f("op1") / ul_arr1d_op2[0] != ui_f("op1") / f_arr1d_op2[0]) || (ui_f("op1") / f_arr1d_op2[0] != ui_f("op1") / d_arr1d_op2[0]) || ((decimal)(ui_f("op1") / d_arr1d_op2[0]) != ui_f("op1") / m_arr1d_op2[0]) || (ui_f("op1") / m_arr1d_op2[0] != ui_f("op1") / i_arr1d_op2[0]) || (ui_f("op1") / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_f("op1") / l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_f("op1") / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / i_l_op2 != cl1.ui_cl_op1 / ui_l_op2) || (cl1.ui_cl_op1 / ui_l_op2 != cl1.ui_cl_op1 / l_l_op2) || ((ulong)(cl1.ui_cl_op1 / l_l_op2) != cl1.ui_cl_op1 / ul_l_op2) || (cl1.ui_cl_op1 / ul_l_op2 != cl1.ui_cl_op1 / f_l_op2) || (cl1.ui_cl_op1 / f_l_op2 != cl1.ui_cl_op1 / d_l_op2) || ((decimal)(cl1.ui_cl_op1 / d_l_op2) != cl1.ui_cl_op1 / m_l_op2) || (cl1.ui_cl_op1 / m_l_op2 != cl1.ui_cl_op1 / i_l_op2) || (cl1.ui_cl_op1 / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / s_i_s_op2 != cl1.ui_cl_op1 / s_ui_s_op2) || (cl1.ui_cl_op1 / s_ui_s_op2 != cl1.ui_cl_op1 / s_l_s_op2) || ((ulong)(cl1.ui_cl_op1 / s_l_s_op2) != cl1.ui_cl_op1 / s_ul_s_op2) || (cl1.ui_cl_op1 / s_ul_s_op2 != cl1.ui_cl_op1 / s_f_s_op2) || (cl1.ui_cl_op1 / s_f_s_op2 != cl1.ui_cl_op1 / s_d_s_op2) || ((decimal)(cl1.ui_cl_op1 / s_d_s_op2) != cl1.ui_cl_op1 / s_m_s_op2) || (cl1.ui_cl_op1 / s_m_s_op2 != cl1.ui_cl_op1 / s_i_s_op2) || (cl1.ui_cl_op1 / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / ui_f("op2") != cl1.ui_cl_op1 / ui_f("op2")) || (cl1.ui_cl_op1 / ui_f("op2") != cl1.ui_cl_op1 / ui_f("op2")) || ((ulong)(cl1.ui_cl_op1 / ui_f("op2")) != cl1.ui_cl_op1 / ui_f("op2")) || (cl1.ui_cl_op1 / ui_f("op2") != cl1.ui_cl_op1 / ui_f("op2")) || (cl1.ui_cl_op1 / ui_f("op2") != cl1.ui_cl_op1 / ui_f("op2")) || ((decimal)(cl1.ui_cl_op1 / ui_f("op2")) != cl1.ui_cl_op1 / ui_f("op2")) || (cl1.ui_cl_op1 / ui_f("op2") != cl1.ui_cl_op1 / ui_f("op2")) || (cl1.ui_cl_op1 / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / cl1.i_cl_op2 != cl1.ui_cl_op1 / cl1.ui_cl_op2) || (cl1.ui_cl_op1 / cl1.ui_cl_op2 != cl1.ui_cl_op1 / cl1.l_cl_op2) || ((ulong)(cl1.ui_cl_op1 / cl1.l_cl_op2) != cl1.ui_cl_op1 / cl1.ul_cl_op2) || (cl1.ui_cl_op1 / cl1.ul_cl_op2 != cl1.ui_cl_op1 / cl1.f_cl_op2) || (cl1.ui_cl_op1 / cl1.f_cl_op2 != cl1.ui_cl_op1 / cl1.d_cl_op2) || ((decimal)(cl1.ui_cl_op1 / cl1.d_cl_op2) != cl1.ui_cl_op1 / cl1.m_cl_op2) || (cl1.ui_cl_op1 / cl1.m_cl_op2 != cl1.ui_cl_op1 / cl1.i_cl_op2) || (cl1.ui_cl_op1 / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / vt1.i_vt_op2 != cl1.ui_cl_op1 / vt1.ui_vt_op2) || (cl1.ui_cl_op1 / vt1.ui_vt_op2 != cl1.ui_cl_op1 / vt1.l_vt_op2) || ((ulong)(cl1.ui_cl_op1 / vt1.l_vt_op2) != cl1.ui_cl_op1 / vt1.ul_vt_op2) || (cl1.ui_cl_op1 / vt1.ul_vt_op2 != cl1.ui_cl_op1 / vt1.f_vt_op2) || (cl1.ui_cl_op1 / vt1.f_vt_op2 != cl1.ui_cl_op1 / vt1.d_vt_op2) || ((decimal)(cl1.ui_cl_op1 / vt1.d_vt_op2) != cl1.ui_cl_op1 / vt1.m_vt_op2) || (cl1.ui_cl_op1 / vt1.m_vt_op2 != cl1.ui_cl_op1 / vt1.i_vt_op2) || (cl1.ui_cl_op1 / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / i_arr1d_op2[0] != cl1.ui_cl_op1 / ui_arr1d_op2[0]) || (cl1.ui_cl_op1 / ui_arr1d_op2[0] != cl1.ui_cl_op1 / l_arr1d_op2[0]) || ((ulong)(cl1.ui_cl_op1 / l_arr1d_op2[0]) != cl1.ui_cl_op1 / ul_arr1d_op2[0]) || (cl1.ui_cl_op1 / ul_arr1d_op2[0] != cl1.ui_cl_op1 / f_arr1d_op2[0]) || (cl1.ui_cl_op1 / f_arr1d_op2[0] != cl1.ui_cl_op1 / d_arr1d_op2[0]) || ((decimal)(cl1.ui_cl_op1 / d_arr1d_op2[0]) != cl1.ui_cl_op1 / m_arr1d_op2[0]) || (cl1.ui_cl_op1 / m_arr1d_op2[0] != cl1.ui_cl_op1 / i_arr1d_op2[0]) || (cl1.ui_cl_op1 / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(cl1.ui_cl_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ui_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.ui_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ui_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(cl1.ui_cl_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ui_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.ui_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ui_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / i_l_op2 != vt1.ui_vt_op1 / ui_l_op2) || (vt1.ui_vt_op1 / ui_l_op2 != vt1.ui_vt_op1 / l_l_op2) || ((ulong)(vt1.ui_vt_op1 / l_l_op2) != vt1.ui_vt_op1 / ul_l_op2) || (vt1.ui_vt_op1 / ul_l_op2 != vt1.ui_vt_op1 / f_l_op2) || (vt1.ui_vt_op1 / f_l_op2 != vt1.ui_vt_op1 / d_l_op2) || ((decimal)(vt1.ui_vt_op1 / d_l_op2) != vt1.ui_vt_op1 / m_l_op2) || (vt1.ui_vt_op1 / m_l_op2 != vt1.ui_vt_op1 / i_l_op2) || (vt1.ui_vt_op1 / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / s_i_s_op2 != vt1.ui_vt_op1 / s_ui_s_op2) || (vt1.ui_vt_op1 / s_ui_s_op2 != vt1.ui_vt_op1 / s_l_s_op2) || ((ulong)(vt1.ui_vt_op1 / s_l_s_op2) != vt1.ui_vt_op1 / s_ul_s_op2) || (vt1.ui_vt_op1 / s_ul_s_op2 != vt1.ui_vt_op1 / s_f_s_op2) || (vt1.ui_vt_op1 / s_f_s_op2 != vt1.ui_vt_op1 / s_d_s_op2) || ((decimal)(vt1.ui_vt_op1 / s_d_s_op2) != vt1.ui_vt_op1 / s_m_s_op2) || (vt1.ui_vt_op1 / s_m_s_op2 != vt1.ui_vt_op1 / s_i_s_op2) || (vt1.ui_vt_op1 / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / ui_f("op2") != vt1.ui_vt_op1 / ui_f("op2")) || (vt1.ui_vt_op1 / ui_f("op2") != vt1.ui_vt_op1 / ui_f("op2")) || ((ulong)(vt1.ui_vt_op1 / ui_f("op2")) != vt1.ui_vt_op1 / ui_f("op2")) || (vt1.ui_vt_op1 / ui_f("op2") != vt1.ui_vt_op1 / ui_f("op2")) || (vt1.ui_vt_op1 / ui_f("op2") != vt1.ui_vt_op1 / ui_f("op2")) || ((decimal)(vt1.ui_vt_op1 / ui_f("op2")) != vt1.ui_vt_op1 / ui_f("op2")) || (vt1.ui_vt_op1 / ui_f("op2") != vt1.ui_vt_op1 / ui_f("op2")) || (vt1.ui_vt_op1 / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / cl1.i_cl_op2 != vt1.ui_vt_op1 / cl1.ui_cl_op2) || (vt1.ui_vt_op1 / cl1.ui_cl_op2 != vt1.ui_vt_op1 / cl1.l_cl_op2) || ((ulong)(vt1.ui_vt_op1 / cl1.l_cl_op2) != vt1.ui_vt_op1 / cl1.ul_cl_op2) || (vt1.ui_vt_op1 / cl1.ul_cl_op2 != vt1.ui_vt_op1 / cl1.f_cl_op2) || (vt1.ui_vt_op1 / cl1.f_cl_op2 != vt1.ui_vt_op1 / cl1.d_cl_op2) || ((decimal)(vt1.ui_vt_op1 / cl1.d_cl_op2) != vt1.ui_vt_op1 / cl1.m_cl_op2) || (vt1.ui_vt_op1 / cl1.m_cl_op2 != vt1.ui_vt_op1 / cl1.i_cl_op2) || (vt1.ui_vt_op1 / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / vt1.i_vt_op2 != vt1.ui_vt_op1 / vt1.ui_vt_op2) || (vt1.ui_vt_op1 / vt1.ui_vt_op2 != vt1.ui_vt_op1 / vt1.l_vt_op2) || ((ulong)(vt1.ui_vt_op1 / vt1.l_vt_op2) != vt1.ui_vt_op1 / vt1.ul_vt_op2) || (vt1.ui_vt_op1 / vt1.ul_vt_op2 != vt1.ui_vt_op1 / vt1.f_vt_op2) || (vt1.ui_vt_op1 / vt1.f_vt_op2 != vt1.ui_vt_op1 / vt1.d_vt_op2) || ((decimal)(vt1.ui_vt_op1 / vt1.d_vt_op2) != vt1.ui_vt_op1 / vt1.m_vt_op2) || (vt1.ui_vt_op1 / vt1.m_vt_op2 != vt1.ui_vt_op1 / vt1.i_vt_op2) || (vt1.ui_vt_op1 / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / i_arr1d_op2[0] != vt1.ui_vt_op1 / ui_arr1d_op2[0]) || (vt1.ui_vt_op1 / ui_arr1d_op2[0] != vt1.ui_vt_op1 / l_arr1d_op2[0]) || ((ulong)(vt1.ui_vt_op1 / l_arr1d_op2[0]) != vt1.ui_vt_op1 / ul_arr1d_op2[0]) || (vt1.ui_vt_op1 / ul_arr1d_op2[0] != vt1.ui_vt_op1 / f_arr1d_op2[0]) || (vt1.ui_vt_op1 / f_arr1d_op2[0] != vt1.ui_vt_op1 / d_arr1d_op2[0]) || ((decimal)(vt1.ui_vt_op1 / d_arr1d_op2[0]) != vt1.ui_vt_op1 / m_arr1d_op2[0]) || (vt1.ui_vt_op1 / m_arr1d_op2[0] != vt1.ui_vt_op1 / i_arr1d_op2[0]) || (vt1.ui_vt_op1 / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(vt1.ui_vt_op1 / l_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ui_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.ui_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ui_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(vt1.ui_vt_op1 / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ui_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.ui_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ui_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / i_l_op2 != ui_arr1d_op1[1] / ui_l_op2) || (ui_arr1d_op1[1] / ui_l_op2 != ui_arr1d_op1[1] / l_l_op2) || ((ulong)(ui_arr1d_op1[1] / l_l_op2) != ui_arr1d_op1[1] / ul_l_op2) || (ui_arr1d_op1[1] / ul_l_op2 != ui_arr1d_op1[1] / f_l_op2) || (ui_arr1d_op1[1] / f_l_op2 != ui_arr1d_op1[1] / d_l_op2) || ((decimal)(ui_arr1d_op1[1] / d_l_op2) != ui_arr1d_op1[1] / m_l_op2) || (ui_arr1d_op1[1] / m_l_op2 != ui_arr1d_op1[1] / i_l_op2) || (ui_arr1d_op1[1] / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / s_i_s_op2 != ui_arr1d_op1[1] / s_ui_s_op2) || (ui_arr1d_op1[1] / s_ui_s_op2 != ui_arr1d_op1[1] / s_l_s_op2) || ((ulong)(ui_arr1d_op1[1] / s_l_s_op2) != ui_arr1d_op1[1] / s_ul_s_op2) || (ui_arr1d_op1[1] / s_ul_s_op2 != ui_arr1d_op1[1] / s_f_s_op2) || (ui_arr1d_op1[1] / s_f_s_op2 != ui_arr1d_op1[1] / s_d_s_op2) || ((decimal)(ui_arr1d_op1[1] / s_d_s_op2) != ui_arr1d_op1[1] / s_m_s_op2) || (ui_arr1d_op1[1] / s_m_s_op2 != ui_arr1d_op1[1] / s_i_s_op2) || (ui_arr1d_op1[1] / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / ui_f("op2") != ui_arr1d_op1[1] / ui_f("op2")) || (ui_arr1d_op1[1] / ui_f("op2") != ui_arr1d_op1[1] / ui_f("op2")) || ((ulong)(ui_arr1d_op1[1] / ui_f("op2")) != ui_arr1d_op1[1] / ui_f("op2")) || (ui_arr1d_op1[1] / ui_f("op2") != ui_arr1d_op1[1] / ui_f("op2")) || (ui_arr1d_op1[1] / ui_f("op2") != ui_arr1d_op1[1] / ui_f("op2")) || ((decimal)(ui_arr1d_op1[1] / ui_f("op2")) != ui_arr1d_op1[1] / ui_f("op2")) || (ui_arr1d_op1[1] / ui_f("op2") != ui_arr1d_op1[1] / ui_f("op2")) || (ui_arr1d_op1[1] / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / cl1.i_cl_op2 != ui_arr1d_op1[1] / cl1.ui_cl_op2) || (ui_arr1d_op1[1] / cl1.ui_cl_op2 != ui_arr1d_op1[1] / cl1.l_cl_op2) || ((ulong)(ui_arr1d_op1[1] / cl1.l_cl_op2) != ui_arr1d_op1[1] / cl1.ul_cl_op2) || (ui_arr1d_op1[1] / cl1.ul_cl_op2 != ui_arr1d_op1[1] / cl1.f_cl_op2) || (ui_arr1d_op1[1] / cl1.f_cl_op2 != ui_arr1d_op1[1] / cl1.d_cl_op2) || ((decimal)(ui_arr1d_op1[1] / cl1.d_cl_op2) != ui_arr1d_op1[1] / cl1.m_cl_op2) || (ui_arr1d_op1[1] / cl1.m_cl_op2 != ui_arr1d_op1[1] / cl1.i_cl_op2) || (ui_arr1d_op1[1] / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / vt1.i_vt_op2 != ui_arr1d_op1[1] / vt1.ui_vt_op2) || (ui_arr1d_op1[1] / vt1.ui_vt_op2 != ui_arr1d_op1[1] / vt1.l_vt_op2) || ((ulong)(ui_arr1d_op1[1] / vt1.l_vt_op2) != ui_arr1d_op1[1] / vt1.ul_vt_op2) || (ui_arr1d_op1[1] / vt1.ul_vt_op2 != ui_arr1d_op1[1] / vt1.f_vt_op2) || (ui_arr1d_op1[1] / vt1.f_vt_op2 != ui_arr1d_op1[1] / vt1.d_vt_op2) || ((decimal)(ui_arr1d_op1[1] / vt1.d_vt_op2) != ui_arr1d_op1[1] / vt1.m_vt_op2) || (ui_arr1d_op1[1] / vt1.m_vt_op2 != ui_arr1d_op1[1] / vt1.i_vt_op2) || (ui_arr1d_op1[1] / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / i_arr1d_op2[0] != ui_arr1d_op1[1] / ui_arr1d_op2[0]) || (ui_arr1d_op1[1] / ui_arr1d_op2[0] != ui_arr1d_op1[1] / l_arr1d_op2[0]) || ((ulong)(ui_arr1d_op1[1] / l_arr1d_op2[0]) != ui_arr1d_op1[1] / ul_arr1d_op2[0]) || (ui_arr1d_op1[1] / ul_arr1d_op2[0] != ui_arr1d_op1[1] / f_arr1d_op2[0]) || (ui_arr1d_op1[1] / f_arr1d_op2[0] != ui_arr1d_op1[1] / d_arr1d_op2[0]) || ((decimal)(ui_arr1d_op1[1] / d_arr1d_op2[0]) != ui_arr1d_op1[1] / m_arr1d_op2[0]) || (ui_arr1d_op1[1] / m_arr1d_op2[0] != ui_arr1d_op1[1] / i_arr1d_op2[0]) || (ui_arr1d_op1[1] / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr1d_op1[1] / l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr1d_op1[1] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / l_l_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / s_l_s_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.l_cl_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.l_vt_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr1d_op2[0]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_l_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_l_s_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.l_cl_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.l_vt_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr1d_op2[0]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] / i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/div/u8div.cs b/tests/src/JIT/Methodical/divrem/div/u8div.cs
new file mode 100644 (file)
index 0000000..9a87159
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1/op2, op1 is of type u8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class u8div
+{
+    private static ulong s_ul_s_op1 = 12;
+    private static int s_i_s_op2 = 2;
+    private static uint s_ui_s_op2 = 2;
+    private static long s_l_s_op2 = 2;
+    private static ulong s_ul_s_op2 = 2;
+    private static float s_f_s_op2 = 2;
+    private static double s_d_s_op2 = 2;
+    private static decimal s_m_s_op2 = 2;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 12;
+        else
+            return 2;
+    }
+    private class CL
+    {
+        public ulong ul_cl_op1 = 12;
+        public int i_cl_op2 = 2;
+        public uint ui_cl_op2 = 2;
+        public long l_cl_op2 = 2;
+        public ulong ul_cl_op2 = 2;
+        public float f_cl_op2 = 2;
+        public double d_cl_op2 = 2;
+        public decimal m_cl_op2 = 2;
+    }
+
+    private struct VT
+    {
+        public ulong ul_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.ul_vt_op1 = 12;
+        vt1.i_vt_op2 = 2;
+        vt1.ui_vt_op2 = 2;
+        vt1.l_vt_op2 = 2;
+        vt1.ul_vt_op2 = 2;
+        vt1.f_vt_op2 = 2;
+        vt1.d_vt_op2 = 2;
+        vt1.m_vt_op2 = 2;
+
+        ulong[] ul_arr1d_op1 = { 0, 12 };
+        ulong[,] ul_arr2d_op1 = { { 0, 12 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 12 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 2, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 2, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 2, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 2, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 2, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 2, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 2, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 2 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 2 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            ulong ul_l_op1 = 12;
+            int i_l_op2 = 2;
+            uint ui_l_op2 = 2;
+            long l_l_op2 = 2;
+            ulong ul_l_op2 = 2;
+            float f_l_op2 = 2;
+            double d_l_op2 = 2;
+            decimal m_l_op2 = 2;
+            if ((ul_l_op1 / (ulong)i_l_op2 != ul_l_op1 / ui_l_op2) || (ul_l_op1 / ui_l_op2 != ul_l_op1 / (ulong)l_l_op2) || (ul_l_op1 / (ulong)l_l_op2 != ul_l_op1 / ul_l_op2) || (ul_l_op1 / ul_l_op2 != ul_l_op1 / f_l_op2) || (ul_l_op1 / f_l_op2 != ul_l_op1 / d_l_op2) || ((decimal)(ul_l_op1 / d_l_op2) != ul_l_op1 / m_l_op2) || (ul_l_op1 / m_l_op2 != ul_l_op1 / (ulong)i_l_op2) || (ul_l_op1 / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)s_i_s_op2 != ul_l_op1 / s_ui_s_op2) || (ul_l_op1 / s_ui_s_op2 != ul_l_op1 / (ulong)s_l_s_op2) || (ul_l_op1 / (ulong)s_l_s_op2 != ul_l_op1 / s_ul_s_op2) || (ul_l_op1 / s_ul_s_op2 != ul_l_op1 / s_f_s_op2) || (ul_l_op1 / s_f_s_op2 != ul_l_op1 / s_d_s_op2) || ((decimal)(ul_l_op1 / s_d_s_op2) != ul_l_op1 / s_m_s_op2) || (ul_l_op1 / s_m_s_op2 != ul_l_op1 / (ulong)s_i_s_op2) || (ul_l_op1 / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)ul_f("op2") != ul_l_op1 / ul_f("op2")) || (ul_l_op1 / ul_f("op2") != ul_l_op1 / (ulong)ul_f("op2")) || (ul_l_op1 / (ulong)ul_f("op2") != ul_l_op1 / ul_f("op2")) || (ul_l_op1 / ul_f("op2") != ul_l_op1 / ul_f("op2")) || (ul_l_op1 / ul_f("op2") != ul_l_op1 / ul_f("op2")) || ((decimal)(ul_l_op1 / ul_f("op2")) != ul_l_op1 / ul_f("op2")) || (ul_l_op1 / ul_f("op2") != ul_l_op1 / (ulong)ul_f("op2")) || (ul_l_op1 / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)cl1.i_cl_op2 != ul_l_op1 / cl1.ui_cl_op2) || (ul_l_op1 / cl1.ui_cl_op2 != ul_l_op1 / (ulong)cl1.l_cl_op2) || (ul_l_op1 / (ulong)cl1.l_cl_op2 != ul_l_op1 / cl1.ul_cl_op2) || (ul_l_op1 / cl1.ul_cl_op2 != ul_l_op1 / cl1.f_cl_op2) || (ul_l_op1 / cl1.f_cl_op2 != ul_l_op1 / cl1.d_cl_op2) || ((decimal)(ul_l_op1 / cl1.d_cl_op2) != ul_l_op1 / cl1.m_cl_op2) || (ul_l_op1 / cl1.m_cl_op2 != ul_l_op1 / (ulong)cl1.i_cl_op2) || (ul_l_op1 / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)vt1.i_vt_op2 != ul_l_op1 / vt1.ui_vt_op2) || (ul_l_op1 / vt1.ui_vt_op2 != ul_l_op1 / (ulong)vt1.l_vt_op2) || (ul_l_op1 / (ulong)vt1.l_vt_op2 != ul_l_op1 / vt1.ul_vt_op2) || (ul_l_op1 / vt1.ul_vt_op2 != ul_l_op1 / vt1.f_vt_op2) || (ul_l_op1 / vt1.f_vt_op2 != ul_l_op1 / vt1.d_vt_op2) || ((decimal)(ul_l_op1 / vt1.d_vt_op2) != ul_l_op1 / vt1.m_vt_op2) || (ul_l_op1 / vt1.m_vt_op2 != ul_l_op1 / (ulong)vt1.i_vt_op2) || (ul_l_op1 / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)i_arr1d_op2[0] != ul_l_op1 / ui_arr1d_op2[0]) || (ul_l_op1 / ui_arr1d_op2[0] != ul_l_op1 / (ulong)l_arr1d_op2[0]) || (ul_l_op1 / (ulong)l_arr1d_op2[0] != ul_l_op1 / ul_arr1d_op2[0]) || (ul_l_op1 / ul_arr1d_op2[0] != ul_l_op1 / f_arr1d_op2[0]) || (ul_l_op1 / f_arr1d_op2[0] != ul_l_op1 / d_arr1d_op2[0]) || ((decimal)(ul_l_op1 / d_arr1d_op2[0]) != ul_l_op1 / m_arr1d_op2[0]) || (ul_l_op1 / m_arr1d_op2[0] != ul_l_op1 / (ulong)i_arr1d_op2[0]) || (ul_l_op1 / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_l_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_l_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)i_l_op2 != s_ul_s_op1 / ui_l_op2) || (s_ul_s_op1 / ui_l_op2 != s_ul_s_op1 / (ulong)l_l_op2) || (s_ul_s_op1 / (ulong)l_l_op2 != s_ul_s_op1 / ul_l_op2) || (s_ul_s_op1 / ul_l_op2 != s_ul_s_op1 / f_l_op2) || (s_ul_s_op1 / f_l_op2 != s_ul_s_op1 / d_l_op2) || ((decimal)(s_ul_s_op1 / d_l_op2) != s_ul_s_op1 / m_l_op2) || (s_ul_s_op1 / m_l_op2 != s_ul_s_op1 / (ulong)i_l_op2) || (s_ul_s_op1 / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)s_i_s_op2 != s_ul_s_op1 / s_ui_s_op2) || (s_ul_s_op1 / s_ui_s_op2 != s_ul_s_op1 / (ulong)s_l_s_op2) || (s_ul_s_op1 / (ulong)s_l_s_op2 != s_ul_s_op1 / s_ul_s_op2) || (s_ul_s_op1 / s_ul_s_op2 != s_ul_s_op1 / s_f_s_op2) || (s_ul_s_op1 / s_f_s_op2 != s_ul_s_op1 / s_d_s_op2) || ((decimal)(s_ul_s_op1 / s_d_s_op2) != s_ul_s_op1 / s_m_s_op2) || (s_ul_s_op1 / s_m_s_op2 != s_ul_s_op1 / (ulong)s_i_s_op2) || (s_ul_s_op1 / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)ul_f("op2") != s_ul_s_op1 / ul_f("op2")) || (s_ul_s_op1 / ul_f("op2") != s_ul_s_op1 / (ulong)ul_f("op2")) || (s_ul_s_op1 / (ulong)ul_f("op2") != s_ul_s_op1 / ul_f("op2")) || (s_ul_s_op1 / ul_f("op2") != s_ul_s_op1 / ul_f("op2")) || (s_ul_s_op1 / ul_f("op2") != s_ul_s_op1 / ul_f("op2")) || ((decimal)(s_ul_s_op1 / ul_f("op2")) != s_ul_s_op1 / ul_f("op2")) || (s_ul_s_op1 / ul_f("op2") != s_ul_s_op1 / (ulong)ul_f("op2")) || (s_ul_s_op1 / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)cl1.i_cl_op2 != s_ul_s_op1 / cl1.ui_cl_op2) || (s_ul_s_op1 / cl1.ui_cl_op2 != s_ul_s_op1 / (ulong)cl1.l_cl_op2) || (s_ul_s_op1 / (ulong)cl1.l_cl_op2 != s_ul_s_op1 / cl1.ul_cl_op2) || (s_ul_s_op1 / cl1.ul_cl_op2 != s_ul_s_op1 / cl1.f_cl_op2) || (s_ul_s_op1 / cl1.f_cl_op2 != s_ul_s_op1 / cl1.d_cl_op2) || ((decimal)(s_ul_s_op1 / cl1.d_cl_op2) != s_ul_s_op1 / cl1.m_cl_op2) || (s_ul_s_op1 / cl1.m_cl_op2 != s_ul_s_op1 / (ulong)cl1.i_cl_op2) || (s_ul_s_op1 / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)vt1.i_vt_op2 != s_ul_s_op1 / vt1.ui_vt_op2) || (s_ul_s_op1 / vt1.ui_vt_op2 != s_ul_s_op1 / (ulong)vt1.l_vt_op2) || (s_ul_s_op1 / (ulong)vt1.l_vt_op2 != s_ul_s_op1 / vt1.ul_vt_op2) || (s_ul_s_op1 / vt1.ul_vt_op2 != s_ul_s_op1 / vt1.f_vt_op2) || (s_ul_s_op1 / vt1.f_vt_op2 != s_ul_s_op1 / vt1.d_vt_op2) || ((decimal)(s_ul_s_op1 / vt1.d_vt_op2) != s_ul_s_op1 / vt1.m_vt_op2) || (s_ul_s_op1 / vt1.m_vt_op2 != s_ul_s_op1 / (ulong)vt1.i_vt_op2) || (s_ul_s_op1 / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)i_arr1d_op2[0] != s_ul_s_op1 / ui_arr1d_op2[0]) || (s_ul_s_op1 / ui_arr1d_op2[0] != s_ul_s_op1 / (ulong)l_arr1d_op2[0]) || (s_ul_s_op1 / (ulong)l_arr1d_op2[0] != s_ul_s_op1 / ul_arr1d_op2[0]) || (s_ul_s_op1 / ul_arr1d_op2[0] != s_ul_s_op1 / f_arr1d_op2[0]) || (s_ul_s_op1 / f_arr1d_op2[0] != s_ul_s_op1 / d_arr1d_op2[0]) || ((decimal)(s_ul_s_op1 / d_arr1d_op2[0]) != s_ul_s_op1 / m_arr1d_op2[0]) || (s_ul_s_op1 / m_arr1d_op2[0] != s_ul_s_op1 / (ulong)i_arr1d_op2[0]) || (s_ul_s_op1 / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_ul_s_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != s_ul_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_ul_s_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ul_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)i_l_op2 != ul_f("op1") / ui_l_op2) || (ul_f("op1") / ui_l_op2 != ul_f("op1") / (ulong)l_l_op2) || (ul_f("op1") / (ulong)l_l_op2 != ul_f("op1") / ul_l_op2) || (ul_f("op1") / ul_l_op2 != ul_f("op1") / f_l_op2) || (ul_f("op1") / f_l_op2 != ul_f("op1") / d_l_op2) || ((decimal)(ul_f("op1") / d_l_op2) != ul_f("op1") / m_l_op2) || (ul_f("op1") / m_l_op2 != ul_f("op1") / (ulong)i_l_op2) || (ul_f("op1") / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)s_i_s_op2 != ul_f("op1") / s_ui_s_op2) || (ul_f("op1") / s_ui_s_op2 != ul_f("op1") / (ulong)s_l_s_op2) || (ul_f("op1") / (ulong)s_l_s_op2 != ul_f("op1") / s_ul_s_op2) || (ul_f("op1") / s_ul_s_op2 != ul_f("op1") / s_f_s_op2) || (ul_f("op1") / s_f_s_op2 != ul_f("op1") / s_d_s_op2) || ((decimal)(ul_f("op1") / s_d_s_op2) != ul_f("op1") / s_m_s_op2) || (ul_f("op1") / s_m_s_op2 != ul_f("op1") / (ulong)s_i_s_op2) || (ul_f("op1") / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)ul_f("op2") != ul_f("op1") / ul_f("op2")) || (ul_f("op1") / ul_f("op2") != ul_f("op1") / (ulong)ul_f("op2")) || (ul_f("op1") / (ulong)ul_f("op2") != ul_f("op1") / ul_f("op2")) || (ul_f("op1") / ul_f("op2") != ul_f("op1") / ul_f("op2")) || (ul_f("op1") / ul_f("op2") != ul_f("op1") / ul_f("op2")) || ((decimal)(ul_f("op1") / ul_f("op2")) != ul_f("op1") / ul_f("op2")) || (ul_f("op1") / ul_f("op2") != ul_f("op1") / (ulong)ul_f("op2")) || (ul_f("op1") / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)cl1.i_cl_op2 != ul_f("op1") / cl1.ui_cl_op2) || (ul_f("op1") / cl1.ui_cl_op2 != ul_f("op1") / (ulong)cl1.l_cl_op2) || (ul_f("op1") / (ulong)cl1.l_cl_op2 != ul_f("op1") / cl1.ul_cl_op2) || (ul_f("op1") / cl1.ul_cl_op2 != ul_f("op1") / cl1.f_cl_op2) || (ul_f("op1") / cl1.f_cl_op2 != ul_f("op1") / cl1.d_cl_op2) || ((decimal)(ul_f("op1") / cl1.d_cl_op2) != ul_f("op1") / cl1.m_cl_op2) || (ul_f("op1") / cl1.m_cl_op2 != ul_f("op1") / (ulong)cl1.i_cl_op2) || (ul_f("op1") / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)vt1.i_vt_op2 != ul_f("op1") / vt1.ui_vt_op2) || (ul_f("op1") / vt1.ui_vt_op2 != ul_f("op1") / (ulong)vt1.l_vt_op2) || (ul_f("op1") / (ulong)vt1.l_vt_op2 != ul_f("op1") / vt1.ul_vt_op2) || (ul_f("op1") / vt1.ul_vt_op2 != ul_f("op1") / vt1.f_vt_op2) || (ul_f("op1") / vt1.f_vt_op2 != ul_f("op1") / vt1.d_vt_op2) || ((decimal)(ul_f("op1") / vt1.d_vt_op2) != ul_f("op1") / vt1.m_vt_op2) || (ul_f("op1") / vt1.m_vt_op2 != ul_f("op1") / (ulong)vt1.i_vt_op2) || (ul_f("op1") / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)i_arr1d_op2[0] != ul_f("op1") / ui_arr1d_op2[0]) || (ul_f("op1") / ui_arr1d_op2[0] != ul_f("op1") / (ulong)l_arr1d_op2[0]) || (ul_f("op1") / (ulong)l_arr1d_op2[0] != ul_f("op1") / ul_arr1d_op2[0]) || (ul_f("op1") / ul_arr1d_op2[0] != ul_f("op1") / f_arr1d_op2[0]) || (ul_f("op1") / f_arr1d_op2[0] != ul_f("op1") / d_arr1d_op2[0]) || ((decimal)(ul_f("op1") / d_arr1d_op2[0]) != ul_f("op1") / m_arr1d_op2[0]) || (ul_f("op1") / m_arr1d_op2[0] != ul_f("op1") / (ulong)i_arr1d_op2[0]) || (ul_f("op1") / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / f_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_f("op1") / d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / m_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_f("op1") / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)i_l_op2 != cl1.ul_cl_op1 / ui_l_op2) || (cl1.ul_cl_op1 / ui_l_op2 != cl1.ul_cl_op1 / (ulong)l_l_op2) || (cl1.ul_cl_op1 / (ulong)l_l_op2 != cl1.ul_cl_op1 / ul_l_op2) || (cl1.ul_cl_op1 / ul_l_op2 != cl1.ul_cl_op1 / f_l_op2) || (cl1.ul_cl_op1 / f_l_op2 != cl1.ul_cl_op1 / d_l_op2) || ((decimal)(cl1.ul_cl_op1 / d_l_op2) != cl1.ul_cl_op1 / m_l_op2) || (cl1.ul_cl_op1 / m_l_op2 != cl1.ul_cl_op1 / (ulong)i_l_op2) || (cl1.ul_cl_op1 / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)s_i_s_op2 != cl1.ul_cl_op1 / s_ui_s_op2) || (cl1.ul_cl_op1 / s_ui_s_op2 != cl1.ul_cl_op1 / (ulong)s_l_s_op2) || (cl1.ul_cl_op1 / (ulong)s_l_s_op2 != cl1.ul_cl_op1 / s_ul_s_op2) || (cl1.ul_cl_op1 / s_ul_s_op2 != cl1.ul_cl_op1 / s_f_s_op2) || (cl1.ul_cl_op1 / s_f_s_op2 != cl1.ul_cl_op1 / s_d_s_op2) || ((decimal)(cl1.ul_cl_op1 / s_d_s_op2) != cl1.ul_cl_op1 / s_m_s_op2) || (cl1.ul_cl_op1 / s_m_s_op2 != cl1.ul_cl_op1 / (ulong)s_i_s_op2) || (cl1.ul_cl_op1 / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)ul_f("op2") != cl1.ul_cl_op1 / ul_f("op2")) || (cl1.ul_cl_op1 / ul_f("op2") != cl1.ul_cl_op1 / (ulong)ul_f("op2")) || (cl1.ul_cl_op1 / (ulong)ul_f("op2") != cl1.ul_cl_op1 / ul_f("op2")) || (cl1.ul_cl_op1 / ul_f("op2") != cl1.ul_cl_op1 / ul_f("op2")) || (cl1.ul_cl_op1 / ul_f("op2") != cl1.ul_cl_op1 / ul_f("op2")) || ((decimal)(cl1.ul_cl_op1 / ul_f("op2")) != cl1.ul_cl_op1 / ul_f("op2")) || (cl1.ul_cl_op1 / ul_f("op2") != cl1.ul_cl_op1 / (ulong)ul_f("op2")) || (cl1.ul_cl_op1 / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)cl1.i_cl_op2 != cl1.ul_cl_op1 / cl1.ui_cl_op2) || (cl1.ul_cl_op1 / cl1.ui_cl_op2 != cl1.ul_cl_op1 / (ulong)cl1.l_cl_op2) || (cl1.ul_cl_op1 / (ulong)cl1.l_cl_op2 != cl1.ul_cl_op1 / cl1.ul_cl_op2) || (cl1.ul_cl_op1 / cl1.ul_cl_op2 != cl1.ul_cl_op1 / cl1.f_cl_op2) || (cl1.ul_cl_op1 / cl1.f_cl_op2 != cl1.ul_cl_op1 / cl1.d_cl_op2) || ((decimal)(cl1.ul_cl_op1 / cl1.d_cl_op2) != cl1.ul_cl_op1 / cl1.m_cl_op2) || (cl1.ul_cl_op1 / cl1.m_cl_op2 != cl1.ul_cl_op1 / (ulong)cl1.i_cl_op2) || (cl1.ul_cl_op1 / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)vt1.i_vt_op2 != cl1.ul_cl_op1 / vt1.ui_vt_op2) || (cl1.ul_cl_op1 / vt1.ui_vt_op2 != cl1.ul_cl_op1 / (ulong)vt1.l_vt_op2) || (cl1.ul_cl_op1 / (ulong)vt1.l_vt_op2 != cl1.ul_cl_op1 / vt1.ul_vt_op2) || (cl1.ul_cl_op1 / vt1.ul_vt_op2 != cl1.ul_cl_op1 / vt1.f_vt_op2) || (cl1.ul_cl_op1 / vt1.f_vt_op2 != cl1.ul_cl_op1 / vt1.d_vt_op2) || ((decimal)(cl1.ul_cl_op1 / vt1.d_vt_op2) != cl1.ul_cl_op1 / vt1.m_vt_op2) || (cl1.ul_cl_op1 / vt1.m_vt_op2 != cl1.ul_cl_op1 / (ulong)vt1.i_vt_op2) || (cl1.ul_cl_op1 / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)i_arr1d_op2[0] != cl1.ul_cl_op1 / ui_arr1d_op2[0]) || (cl1.ul_cl_op1 / ui_arr1d_op2[0] != cl1.ul_cl_op1 / (ulong)l_arr1d_op2[0]) || (cl1.ul_cl_op1 / (ulong)l_arr1d_op2[0] != cl1.ul_cl_op1 / ul_arr1d_op2[0]) || (cl1.ul_cl_op1 / ul_arr1d_op2[0] != cl1.ul_cl_op1 / f_arr1d_op2[0]) || (cl1.ul_cl_op1 / f_arr1d_op2[0] != cl1.ul_cl_op1 / d_arr1d_op2[0]) || ((decimal)(cl1.ul_cl_op1 / d_arr1d_op2[0]) != cl1.ul_cl_op1 / m_arr1d_op2[0]) || (cl1.ul_cl_op1 / m_arr1d_op2[0] != cl1.ul_cl_op1 / (ulong)i_arr1d_op2[0]) || (cl1.ul_cl_op1 / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.ul_cl_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ul_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.ul_cl_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ul_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)i_l_op2 != vt1.ul_vt_op1 / ui_l_op2) || (vt1.ul_vt_op1 / ui_l_op2 != vt1.ul_vt_op1 / (ulong)l_l_op2) || (vt1.ul_vt_op1 / (ulong)l_l_op2 != vt1.ul_vt_op1 / ul_l_op2) || (vt1.ul_vt_op1 / ul_l_op2 != vt1.ul_vt_op1 / f_l_op2) || (vt1.ul_vt_op1 / f_l_op2 != vt1.ul_vt_op1 / d_l_op2) || ((decimal)(vt1.ul_vt_op1 / d_l_op2) != vt1.ul_vt_op1 / m_l_op2) || (vt1.ul_vt_op1 / m_l_op2 != vt1.ul_vt_op1 / (ulong)i_l_op2) || (vt1.ul_vt_op1 / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)s_i_s_op2 != vt1.ul_vt_op1 / s_ui_s_op2) || (vt1.ul_vt_op1 / s_ui_s_op2 != vt1.ul_vt_op1 / (ulong)s_l_s_op2) || (vt1.ul_vt_op1 / (ulong)s_l_s_op2 != vt1.ul_vt_op1 / s_ul_s_op2) || (vt1.ul_vt_op1 / s_ul_s_op2 != vt1.ul_vt_op1 / s_f_s_op2) || (vt1.ul_vt_op1 / s_f_s_op2 != vt1.ul_vt_op1 / s_d_s_op2) || ((decimal)(vt1.ul_vt_op1 / s_d_s_op2) != vt1.ul_vt_op1 / s_m_s_op2) || (vt1.ul_vt_op1 / s_m_s_op2 != vt1.ul_vt_op1 / (ulong)s_i_s_op2) || (vt1.ul_vt_op1 / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)ul_f("op2") != vt1.ul_vt_op1 / ul_f("op2")) || (vt1.ul_vt_op1 / ul_f("op2") != vt1.ul_vt_op1 / (ulong)ul_f("op2")) || (vt1.ul_vt_op1 / (ulong)ul_f("op2") != vt1.ul_vt_op1 / ul_f("op2")) || (vt1.ul_vt_op1 / ul_f("op2") != vt1.ul_vt_op1 / ul_f("op2")) || (vt1.ul_vt_op1 / ul_f("op2") != vt1.ul_vt_op1 / ul_f("op2")) || ((decimal)(vt1.ul_vt_op1 / ul_f("op2")) != vt1.ul_vt_op1 / ul_f("op2")) || (vt1.ul_vt_op1 / ul_f("op2") != vt1.ul_vt_op1 / (ulong)ul_f("op2")) || (vt1.ul_vt_op1 / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)cl1.i_cl_op2 != vt1.ul_vt_op1 / cl1.ui_cl_op2) || (vt1.ul_vt_op1 / cl1.ui_cl_op2 != vt1.ul_vt_op1 / (ulong)cl1.l_cl_op2) || (vt1.ul_vt_op1 / (ulong)cl1.l_cl_op2 != vt1.ul_vt_op1 / cl1.ul_cl_op2) || (vt1.ul_vt_op1 / cl1.ul_cl_op2 != vt1.ul_vt_op1 / cl1.f_cl_op2) || (vt1.ul_vt_op1 / cl1.f_cl_op2 != vt1.ul_vt_op1 / cl1.d_cl_op2) || ((decimal)(vt1.ul_vt_op1 / cl1.d_cl_op2) != vt1.ul_vt_op1 / cl1.m_cl_op2) || (vt1.ul_vt_op1 / cl1.m_cl_op2 != vt1.ul_vt_op1 / (ulong)cl1.i_cl_op2) || (vt1.ul_vt_op1 / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)vt1.i_vt_op2 != vt1.ul_vt_op1 / vt1.ui_vt_op2) || (vt1.ul_vt_op1 / vt1.ui_vt_op2 != vt1.ul_vt_op1 / (ulong)vt1.l_vt_op2) || (vt1.ul_vt_op1 / (ulong)vt1.l_vt_op2 != vt1.ul_vt_op1 / vt1.ul_vt_op2) || (vt1.ul_vt_op1 / vt1.ul_vt_op2 != vt1.ul_vt_op1 / vt1.f_vt_op2) || (vt1.ul_vt_op1 / vt1.f_vt_op2 != vt1.ul_vt_op1 / vt1.d_vt_op2) || ((decimal)(vt1.ul_vt_op1 / vt1.d_vt_op2) != vt1.ul_vt_op1 / vt1.m_vt_op2) || (vt1.ul_vt_op1 / vt1.m_vt_op2 != vt1.ul_vt_op1 / (ulong)vt1.i_vt_op2) || (vt1.ul_vt_op1 / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)i_arr1d_op2[0] != vt1.ul_vt_op1 / ui_arr1d_op2[0]) || (vt1.ul_vt_op1 / ui_arr1d_op2[0] != vt1.ul_vt_op1 / (ulong)l_arr1d_op2[0]) || (vt1.ul_vt_op1 / (ulong)l_arr1d_op2[0] != vt1.ul_vt_op1 / ul_arr1d_op2[0]) || (vt1.ul_vt_op1 / ul_arr1d_op2[0] != vt1.ul_vt_op1 / f_arr1d_op2[0]) || (vt1.ul_vt_op1 / f_arr1d_op2[0] != vt1.ul_vt_op1 / d_arr1d_op2[0]) || ((decimal)(vt1.ul_vt_op1 / d_arr1d_op2[0]) != vt1.ul_vt_op1 / m_arr1d_op2[0]) || (vt1.ul_vt_op1 / m_arr1d_op2[0] != vt1.ul_vt_op1 / (ulong)i_arr1d_op2[0]) || (vt1.ul_vt_op1 / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.ul_vt_op1 / d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ul_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.ul_vt_op1 / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ul_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)i_l_op2 != ul_arr1d_op1[1] / ui_l_op2) || (ul_arr1d_op1[1] / ui_l_op2 != ul_arr1d_op1[1] / (ulong)l_l_op2) || (ul_arr1d_op1[1] / (ulong)l_l_op2 != ul_arr1d_op1[1] / ul_l_op2) || (ul_arr1d_op1[1] / ul_l_op2 != ul_arr1d_op1[1] / f_l_op2) || (ul_arr1d_op1[1] / f_l_op2 != ul_arr1d_op1[1] / d_l_op2) || ((decimal)(ul_arr1d_op1[1] / d_l_op2) != ul_arr1d_op1[1] / m_l_op2) || (ul_arr1d_op1[1] / m_l_op2 != ul_arr1d_op1[1] / (ulong)i_l_op2) || (ul_arr1d_op1[1] / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)s_i_s_op2 != ul_arr1d_op1[1] / s_ui_s_op2) || (ul_arr1d_op1[1] / s_ui_s_op2 != ul_arr1d_op1[1] / (ulong)s_l_s_op2) || (ul_arr1d_op1[1] / (ulong)s_l_s_op2 != ul_arr1d_op1[1] / s_ul_s_op2) || (ul_arr1d_op1[1] / s_ul_s_op2 != ul_arr1d_op1[1] / s_f_s_op2) || (ul_arr1d_op1[1] / s_f_s_op2 != ul_arr1d_op1[1] / s_d_s_op2) || ((decimal)(ul_arr1d_op1[1] / s_d_s_op2) != ul_arr1d_op1[1] / s_m_s_op2) || (ul_arr1d_op1[1] / s_m_s_op2 != ul_arr1d_op1[1] / (ulong)s_i_s_op2) || (ul_arr1d_op1[1] / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)ul_f("op2") != ul_arr1d_op1[1] / ul_f("op2")) || (ul_arr1d_op1[1] / ul_f("op2") != ul_arr1d_op1[1] / (ulong)ul_f("op2")) || (ul_arr1d_op1[1] / (ulong)ul_f("op2") != ul_arr1d_op1[1] / ul_f("op2")) || (ul_arr1d_op1[1] / ul_f("op2") != ul_arr1d_op1[1] / ul_f("op2")) || (ul_arr1d_op1[1] / ul_f("op2") != ul_arr1d_op1[1] / ul_f("op2")) || ((decimal)(ul_arr1d_op1[1] / ul_f("op2")) != ul_arr1d_op1[1] / ul_f("op2")) || (ul_arr1d_op1[1] / ul_f("op2") != ul_arr1d_op1[1] / (ulong)ul_f("op2")) || (ul_arr1d_op1[1] / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)cl1.i_cl_op2 != ul_arr1d_op1[1] / cl1.ui_cl_op2) || (ul_arr1d_op1[1] / cl1.ui_cl_op2 != ul_arr1d_op1[1] / (ulong)cl1.l_cl_op2) || (ul_arr1d_op1[1] / (ulong)cl1.l_cl_op2 != ul_arr1d_op1[1] / cl1.ul_cl_op2) || (ul_arr1d_op1[1] / cl1.ul_cl_op2 != ul_arr1d_op1[1] / cl1.f_cl_op2) || (ul_arr1d_op1[1] / cl1.f_cl_op2 != ul_arr1d_op1[1] / cl1.d_cl_op2) || ((decimal)(ul_arr1d_op1[1] / cl1.d_cl_op2) != ul_arr1d_op1[1] / cl1.m_cl_op2) || (ul_arr1d_op1[1] / cl1.m_cl_op2 != ul_arr1d_op1[1] / (ulong)cl1.i_cl_op2) || (ul_arr1d_op1[1] / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)vt1.i_vt_op2 != ul_arr1d_op1[1] / vt1.ui_vt_op2) || (ul_arr1d_op1[1] / vt1.ui_vt_op2 != ul_arr1d_op1[1] / (ulong)vt1.l_vt_op2) || (ul_arr1d_op1[1] / (ulong)vt1.l_vt_op2 != ul_arr1d_op1[1] / vt1.ul_vt_op2) || (ul_arr1d_op1[1] / vt1.ul_vt_op2 != ul_arr1d_op1[1] / vt1.f_vt_op2) || (ul_arr1d_op1[1] / vt1.f_vt_op2 != ul_arr1d_op1[1] / vt1.d_vt_op2) || ((decimal)(ul_arr1d_op1[1] / vt1.d_vt_op2) != ul_arr1d_op1[1] / vt1.m_vt_op2) || (ul_arr1d_op1[1] / vt1.m_vt_op2 != ul_arr1d_op1[1] / (ulong)vt1.i_vt_op2) || (ul_arr1d_op1[1] / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)i_arr1d_op2[0] != ul_arr1d_op1[1] / ui_arr1d_op2[0]) || (ul_arr1d_op1[1] / ui_arr1d_op2[0] != ul_arr1d_op1[1] / (ulong)l_arr1d_op2[0]) || (ul_arr1d_op1[1] / (ulong)l_arr1d_op2[0] != ul_arr1d_op1[1] / ul_arr1d_op2[0]) || (ul_arr1d_op1[1] / ul_arr1d_op2[0] != ul_arr1d_op1[1] / f_arr1d_op2[0]) || (ul_arr1d_op1[1] / f_arr1d_op2[0] != ul_arr1d_op1[1] / d_arr1d_op2[0]) || ((decimal)(ul_arr1d_op1[1] / d_arr1d_op2[0]) != ul_arr1d_op1[1] / m_arr1d_op2[0]) || (ul_arr1d_op1[1] / m_arr1d_op2[0] != ul_arr1d_op1[1] / (ulong)i_arr1d_op2[0]) || (ul_arr1d_op1[1] / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr1d_op1[1] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr1d_op1[1] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / f_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / d_l_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / m_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)s_i_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / s_ui_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)s_l_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)s_l_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / s_ul_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / s_f_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / s_d_s_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / s_m_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)s_i_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)cl1.i_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ui_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)cl1.l_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)cl1.l_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.ul_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.f_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.d_cl_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / cl1.m_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)cl1.i_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)vt1.i_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ui_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)vt1.l_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)vt1.l_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.ul_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.f_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.d_vt_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / vt1.m_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)vt1.i_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr1d_op2[0]) != ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_l_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_l_op2 != 6))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)s_i_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ui_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)s_l_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)s_l_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_ul_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_f_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_d_s_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / s_m_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)s_i_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)s_i_s_op2 != 6))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)ul_f("op2") != 6))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)cl1.i_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ui_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)cl1.l_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)cl1.l_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.ul_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.f_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.d_cl_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / cl1.m_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)cl1.i_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)cl1.i_cl_op2 != 6))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)vt1.i_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ui_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)vt1.l_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)vt1.l_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.ul_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.f_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.d_vt_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / vt1.m_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)vt1.i_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)vt1.i_vt_op2 != 6))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr1d_op2[0]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr1d_op2[0] != 6))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 6))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] / (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 6))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/app.config b/tests/src/JIT/Methodical/divrem/rem/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/rem/cs_template.proj b/tests/src/JIT/Methodical/divrem/rem/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/rem/decimalrem.cs b/tests/src/JIT/Methodical/divrem/rem/decimalrem.cs
new file mode 100644 (file)
index 0000000..1a511c1
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type decimal, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class decimalrem
+{
+    private static decimal s_m_s_op1 = 50;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 50;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public decimal m_cl_op1 = 50;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public decimal m_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.m_vt_op1 = 50;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        decimal[] m_arr1d_op1 = { 0, 50 };
+        decimal[,] m_arr2d_op1 = { { 0, 50 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op1 = { { { 0, 50 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            decimal m_l_op1 = 50;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((m_l_op1 % i_l_op2 != m_l_op1 % ui_l_op2) || (m_l_op1 % ui_l_op2 != m_l_op1 % l_l_op2) || (m_l_op1 % l_l_op2 != m_l_op1 % ul_l_op2) || (m_l_op1 % ul_l_op2 != m_l_op1 % (decimal)f_l_op2) || (m_l_op1 % (decimal)f_l_op2 != m_l_op1 % (decimal)d_l_op2) || (m_l_op1 % (decimal)d_l_op2 != m_l_op1 % m_l_op2) || (m_l_op1 % m_l_op2 != m_l_op1 % i_l_op2) || (m_l_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % s_i_s_op2 != m_l_op1 % s_ui_s_op2) || (m_l_op1 % s_ui_s_op2 != m_l_op1 % s_l_s_op2) || (m_l_op1 % s_l_s_op2 != m_l_op1 % s_ul_s_op2) || (m_l_op1 % s_ul_s_op2 != m_l_op1 % (decimal)s_f_s_op2) || (m_l_op1 % (decimal)s_f_s_op2 != m_l_op1 % (decimal)s_d_s_op2) || (m_l_op1 % (decimal)s_d_s_op2 != m_l_op1 % s_m_s_op2) || (m_l_op1 % s_m_s_op2 != m_l_op1 % s_i_s_op2) || (m_l_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % m_f("op2") != m_l_op1 % m_f("op2")) || (m_l_op1 % m_f("op2") != m_l_op1 % m_f("op2")) || (m_l_op1 % m_f("op2") != m_l_op1 % m_f("op2")) || (m_l_op1 % m_f("op2") != m_l_op1 % (decimal)m_f("op2")) || (m_l_op1 % (decimal)m_f("op2") != m_l_op1 % (decimal)m_f("op2")) || (m_l_op1 % (decimal)m_f("op2") != m_l_op1 % m_f("op2")) || (m_l_op1 % m_f("op2") != m_l_op1 % m_f("op2")) || (m_l_op1 % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % cl1.i_cl_op2 != m_l_op1 % cl1.ui_cl_op2) || (m_l_op1 % cl1.ui_cl_op2 != m_l_op1 % cl1.l_cl_op2) || (m_l_op1 % cl1.l_cl_op2 != m_l_op1 % cl1.ul_cl_op2) || (m_l_op1 % cl1.ul_cl_op2 != m_l_op1 % (decimal)cl1.f_cl_op2) || (m_l_op1 % (decimal)cl1.f_cl_op2 != m_l_op1 % (decimal)cl1.d_cl_op2) || (m_l_op1 % (decimal)cl1.d_cl_op2 != m_l_op1 % cl1.m_cl_op2) || (m_l_op1 % cl1.m_cl_op2 != m_l_op1 % cl1.i_cl_op2) || (m_l_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % vt1.i_vt_op2 != m_l_op1 % vt1.ui_vt_op2) || (m_l_op1 % vt1.ui_vt_op2 != m_l_op1 % vt1.l_vt_op2) || (m_l_op1 % vt1.l_vt_op2 != m_l_op1 % vt1.ul_vt_op2) || (m_l_op1 % vt1.ul_vt_op2 != m_l_op1 % (decimal)vt1.f_vt_op2) || (m_l_op1 % (decimal)vt1.f_vt_op2 != m_l_op1 % (decimal)vt1.d_vt_op2) || (m_l_op1 % (decimal)vt1.d_vt_op2 != m_l_op1 % vt1.m_vt_op2) || (m_l_op1 % vt1.m_vt_op2 != m_l_op1 % vt1.i_vt_op2) || (m_l_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % i_arr1d_op2[0] != m_l_op1 % ui_arr1d_op2[0]) || (m_l_op1 % ui_arr1d_op2[0] != m_l_op1 % l_arr1d_op2[0]) || (m_l_op1 % l_arr1d_op2[0] != m_l_op1 % ul_arr1d_op2[0]) || (m_l_op1 % ul_arr1d_op2[0] != m_l_op1 % (decimal)f_arr1d_op2[0]) || (m_l_op1 % (decimal)f_arr1d_op2[0] != m_l_op1 % (decimal)d_arr1d_op2[0]) || (m_l_op1 % (decimal)d_arr1d_op2[0] != m_l_op1 % m_arr1d_op2[0]) || (m_l_op1 % m_arr1d_op2[0] != m_l_op1 % i_arr1d_op2[0]) || (m_l_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != m_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((m_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % i_l_op2 != s_m_s_op1 % ui_l_op2) || (s_m_s_op1 % ui_l_op2 != s_m_s_op1 % l_l_op2) || (s_m_s_op1 % l_l_op2 != s_m_s_op1 % ul_l_op2) || (s_m_s_op1 % ul_l_op2 != s_m_s_op1 % (decimal)f_l_op2) || (s_m_s_op1 % (decimal)f_l_op2 != s_m_s_op1 % (decimal)d_l_op2) || (s_m_s_op1 % (decimal)d_l_op2 != s_m_s_op1 % m_l_op2) || (s_m_s_op1 % m_l_op2 != s_m_s_op1 % i_l_op2) || (s_m_s_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % s_i_s_op2 != s_m_s_op1 % s_ui_s_op2) || (s_m_s_op1 % s_ui_s_op2 != s_m_s_op1 % s_l_s_op2) || (s_m_s_op1 % s_l_s_op2 != s_m_s_op1 % s_ul_s_op2) || (s_m_s_op1 % s_ul_s_op2 != s_m_s_op1 % (decimal)s_f_s_op2) || (s_m_s_op1 % (decimal)s_f_s_op2 != s_m_s_op1 % (decimal)s_d_s_op2) || (s_m_s_op1 % (decimal)s_d_s_op2 != s_m_s_op1 % s_m_s_op2) || (s_m_s_op1 % s_m_s_op2 != s_m_s_op1 % s_i_s_op2) || (s_m_s_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % m_f("op2") != s_m_s_op1 % m_f("op2")) || (s_m_s_op1 % m_f("op2") != s_m_s_op1 % m_f("op2")) || (s_m_s_op1 % m_f("op2") != s_m_s_op1 % m_f("op2")) || (s_m_s_op1 % m_f("op2") != s_m_s_op1 % (decimal)m_f("op2")) || (s_m_s_op1 % (decimal)m_f("op2") != s_m_s_op1 % (decimal)m_f("op2")) || (s_m_s_op1 % (decimal)m_f("op2") != s_m_s_op1 % m_f("op2")) || (s_m_s_op1 % m_f("op2") != s_m_s_op1 % m_f("op2")) || (s_m_s_op1 % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % cl1.i_cl_op2 != s_m_s_op1 % cl1.ui_cl_op2) || (s_m_s_op1 % cl1.ui_cl_op2 != s_m_s_op1 % cl1.l_cl_op2) || (s_m_s_op1 % cl1.l_cl_op2 != s_m_s_op1 % cl1.ul_cl_op2) || (s_m_s_op1 % cl1.ul_cl_op2 != s_m_s_op1 % (decimal)cl1.f_cl_op2) || (s_m_s_op1 % (decimal)cl1.f_cl_op2 != s_m_s_op1 % (decimal)cl1.d_cl_op2) || (s_m_s_op1 % (decimal)cl1.d_cl_op2 != s_m_s_op1 % cl1.m_cl_op2) || (s_m_s_op1 % cl1.m_cl_op2 != s_m_s_op1 % cl1.i_cl_op2) || (s_m_s_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % vt1.i_vt_op2 != s_m_s_op1 % vt1.ui_vt_op2) || (s_m_s_op1 % vt1.ui_vt_op2 != s_m_s_op1 % vt1.l_vt_op2) || (s_m_s_op1 % vt1.l_vt_op2 != s_m_s_op1 % vt1.ul_vt_op2) || (s_m_s_op1 % vt1.ul_vt_op2 != s_m_s_op1 % (decimal)vt1.f_vt_op2) || (s_m_s_op1 % (decimal)vt1.f_vt_op2 != s_m_s_op1 % (decimal)vt1.d_vt_op2) || (s_m_s_op1 % (decimal)vt1.d_vt_op2 != s_m_s_op1 % vt1.m_vt_op2) || (s_m_s_op1 % vt1.m_vt_op2 != s_m_s_op1 % vt1.i_vt_op2) || (s_m_s_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % i_arr1d_op2[0] != s_m_s_op1 % ui_arr1d_op2[0]) || (s_m_s_op1 % ui_arr1d_op2[0] != s_m_s_op1 % l_arr1d_op2[0]) || (s_m_s_op1 % l_arr1d_op2[0] != s_m_s_op1 % ul_arr1d_op2[0]) || (s_m_s_op1 % ul_arr1d_op2[0] != s_m_s_op1 % (decimal)f_arr1d_op2[0]) || (s_m_s_op1 % (decimal)f_arr1d_op2[0] != s_m_s_op1 % (decimal)d_arr1d_op2[0]) || (s_m_s_op1 % (decimal)d_arr1d_op2[0] != s_m_s_op1 % m_arr1d_op2[0]) || (s_m_s_op1 % m_arr1d_op2[0] != s_m_s_op1 % i_arr1d_op2[0]) || (s_m_s_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_m_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_m_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_m_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_m_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_m_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % i_l_op2 != m_f("op1") % ui_l_op2) || (m_f("op1") % ui_l_op2 != m_f("op1") % l_l_op2) || (m_f("op1") % l_l_op2 != m_f("op1") % ul_l_op2) || (m_f("op1") % ul_l_op2 != m_f("op1") % (decimal)f_l_op2) || (m_f("op1") % (decimal)f_l_op2 != m_f("op1") % (decimal)d_l_op2) || (m_f("op1") % (decimal)d_l_op2 != m_f("op1") % m_l_op2) || (m_f("op1") % m_l_op2 != m_f("op1") % i_l_op2) || (m_f("op1") % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % s_i_s_op2 != m_f("op1") % s_ui_s_op2) || (m_f("op1") % s_ui_s_op2 != m_f("op1") % s_l_s_op2) || (m_f("op1") % s_l_s_op2 != m_f("op1") % s_ul_s_op2) || (m_f("op1") % s_ul_s_op2 != m_f("op1") % (decimal)s_f_s_op2) || (m_f("op1") % (decimal)s_f_s_op2 != m_f("op1") % (decimal)s_d_s_op2) || (m_f("op1") % (decimal)s_d_s_op2 != m_f("op1") % s_m_s_op2) || (m_f("op1") % s_m_s_op2 != m_f("op1") % s_i_s_op2) || (m_f("op1") % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % m_f("op2") != m_f("op1") % m_f("op2")) || (m_f("op1") % m_f("op2") != m_f("op1") % m_f("op2")) || (m_f("op1") % m_f("op2") != m_f("op1") % m_f("op2")) || (m_f("op1") % m_f("op2") != m_f("op1") % (decimal)m_f("op2")) || (m_f("op1") % (decimal)m_f("op2") != m_f("op1") % (decimal)m_f("op2")) || (m_f("op1") % (decimal)m_f("op2") != m_f("op1") % m_f("op2")) || (m_f("op1") % m_f("op2") != m_f("op1") % m_f("op2")) || (m_f("op1") % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % cl1.i_cl_op2 != m_f("op1") % cl1.ui_cl_op2) || (m_f("op1") % cl1.ui_cl_op2 != m_f("op1") % cl1.l_cl_op2) || (m_f("op1") % cl1.l_cl_op2 != m_f("op1") % cl1.ul_cl_op2) || (m_f("op1") % cl1.ul_cl_op2 != m_f("op1") % (decimal)cl1.f_cl_op2) || (m_f("op1") % (decimal)cl1.f_cl_op2 != m_f("op1") % (decimal)cl1.d_cl_op2) || (m_f("op1") % (decimal)cl1.d_cl_op2 != m_f("op1") % cl1.m_cl_op2) || (m_f("op1") % cl1.m_cl_op2 != m_f("op1") % cl1.i_cl_op2) || (m_f("op1") % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % vt1.i_vt_op2 != m_f("op1") % vt1.ui_vt_op2) || (m_f("op1") % vt1.ui_vt_op2 != m_f("op1") % vt1.l_vt_op2) || (m_f("op1") % vt1.l_vt_op2 != m_f("op1") % vt1.ul_vt_op2) || (m_f("op1") % vt1.ul_vt_op2 != m_f("op1") % (decimal)vt1.f_vt_op2) || (m_f("op1") % (decimal)vt1.f_vt_op2 != m_f("op1") % (decimal)vt1.d_vt_op2) || (m_f("op1") % (decimal)vt1.d_vt_op2 != m_f("op1") % vt1.m_vt_op2) || (m_f("op1") % vt1.m_vt_op2 != m_f("op1") % vt1.i_vt_op2) || (m_f("op1") % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % i_arr1d_op2[0] != m_f("op1") % ui_arr1d_op2[0]) || (m_f("op1") % ui_arr1d_op2[0] != m_f("op1") % l_arr1d_op2[0]) || (m_f("op1") % l_arr1d_op2[0] != m_f("op1") % ul_arr1d_op2[0]) || (m_f("op1") % ul_arr1d_op2[0] != m_f("op1") % (decimal)f_arr1d_op2[0]) || (m_f("op1") % (decimal)f_arr1d_op2[0] != m_f("op1") % (decimal)d_arr1d_op2[0]) || (m_f("op1") % (decimal)d_arr1d_op2[0] != m_f("op1") % m_arr1d_op2[0]) || (m_f("op1") % m_arr1d_op2[0] != m_f("op1") % i_arr1d_op2[0]) || (m_f("op1") % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != m_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((m_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % i_l_op2 != cl1.m_cl_op1 % ui_l_op2) || (cl1.m_cl_op1 % ui_l_op2 != cl1.m_cl_op1 % l_l_op2) || (cl1.m_cl_op1 % l_l_op2 != cl1.m_cl_op1 % ul_l_op2) || (cl1.m_cl_op1 % ul_l_op2 != cl1.m_cl_op1 % (decimal)f_l_op2) || (cl1.m_cl_op1 % (decimal)f_l_op2 != cl1.m_cl_op1 % (decimal)d_l_op2) || (cl1.m_cl_op1 % (decimal)d_l_op2 != cl1.m_cl_op1 % m_l_op2) || (cl1.m_cl_op1 % m_l_op2 != cl1.m_cl_op1 % i_l_op2) || (cl1.m_cl_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % s_i_s_op2 != cl1.m_cl_op1 % s_ui_s_op2) || (cl1.m_cl_op1 % s_ui_s_op2 != cl1.m_cl_op1 % s_l_s_op2) || (cl1.m_cl_op1 % s_l_s_op2 != cl1.m_cl_op1 % s_ul_s_op2) || (cl1.m_cl_op1 % s_ul_s_op2 != cl1.m_cl_op1 % (decimal)s_f_s_op2) || (cl1.m_cl_op1 % (decimal)s_f_s_op2 != cl1.m_cl_op1 % (decimal)s_d_s_op2) || (cl1.m_cl_op1 % (decimal)s_d_s_op2 != cl1.m_cl_op1 % s_m_s_op2) || (cl1.m_cl_op1 % s_m_s_op2 != cl1.m_cl_op1 % s_i_s_op2) || (cl1.m_cl_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % m_f("op2") != cl1.m_cl_op1 % m_f("op2")) || (cl1.m_cl_op1 % m_f("op2") != cl1.m_cl_op1 % m_f("op2")) || (cl1.m_cl_op1 % m_f("op2") != cl1.m_cl_op1 % m_f("op2")) || (cl1.m_cl_op1 % m_f("op2") != cl1.m_cl_op1 % (decimal)m_f("op2")) || (cl1.m_cl_op1 % (decimal)m_f("op2") != cl1.m_cl_op1 % (decimal)m_f("op2")) || (cl1.m_cl_op1 % (decimal)m_f("op2") != cl1.m_cl_op1 % m_f("op2")) || (cl1.m_cl_op1 % m_f("op2") != cl1.m_cl_op1 % m_f("op2")) || (cl1.m_cl_op1 % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % cl1.i_cl_op2 != cl1.m_cl_op1 % cl1.ui_cl_op2) || (cl1.m_cl_op1 % cl1.ui_cl_op2 != cl1.m_cl_op1 % cl1.l_cl_op2) || (cl1.m_cl_op1 % cl1.l_cl_op2 != cl1.m_cl_op1 % cl1.ul_cl_op2) || (cl1.m_cl_op1 % cl1.ul_cl_op2 != cl1.m_cl_op1 % (decimal)cl1.f_cl_op2) || (cl1.m_cl_op1 % (decimal)cl1.f_cl_op2 != cl1.m_cl_op1 % (decimal)cl1.d_cl_op2) || (cl1.m_cl_op1 % (decimal)cl1.d_cl_op2 != cl1.m_cl_op1 % cl1.m_cl_op2) || (cl1.m_cl_op1 % cl1.m_cl_op2 != cl1.m_cl_op1 % cl1.i_cl_op2) || (cl1.m_cl_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % vt1.i_vt_op2 != cl1.m_cl_op1 % vt1.ui_vt_op2) || (cl1.m_cl_op1 % vt1.ui_vt_op2 != cl1.m_cl_op1 % vt1.l_vt_op2) || (cl1.m_cl_op1 % vt1.l_vt_op2 != cl1.m_cl_op1 % vt1.ul_vt_op2) || (cl1.m_cl_op1 % vt1.ul_vt_op2 != cl1.m_cl_op1 % (decimal)vt1.f_vt_op2) || (cl1.m_cl_op1 % (decimal)vt1.f_vt_op2 != cl1.m_cl_op1 % (decimal)vt1.d_vt_op2) || (cl1.m_cl_op1 % (decimal)vt1.d_vt_op2 != cl1.m_cl_op1 % vt1.m_vt_op2) || (cl1.m_cl_op1 % vt1.m_vt_op2 != cl1.m_cl_op1 % vt1.i_vt_op2) || (cl1.m_cl_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % i_arr1d_op2[0] != cl1.m_cl_op1 % ui_arr1d_op2[0]) || (cl1.m_cl_op1 % ui_arr1d_op2[0] != cl1.m_cl_op1 % l_arr1d_op2[0]) || (cl1.m_cl_op1 % l_arr1d_op2[0] != cl1.m_cl_op1 % ul_arr1d_op2[0]) || (cl1.m_cl_op1 % ul_arr1d_op2[0] != cl1.m_cl_op1 % (decimal)f_arr1d_op2[0]) || (cl1.m_cl_op1 % (decimal)f_arr1d_op2[0] != cl1.m_cl_op1 % (decimal)d_arr1d_op2[0]) || (cl1.m_cl_op1 % (decimal)d_arr1d_op2[0] != cl1.m_cl_op1 % m_arr1d_op2[0]) || (cl1.m_cl_op1 % m_arr1d_op2[0] != cl1.m_cl_op1 % i_arr1d_op2[0]) || (cl1.m_cl_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.m_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.m_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.m_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.m_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.m_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % i_l_op2 != vt1.m_vt_op1 % ui_l_op2) || (vt1.m_vt_op1 % ui_l_op2 != vt1.m_vt_op1 % l_l_op2) || (vt1.m_vt_op1 % l_l_op2 != vt1.m_vt_op1 % ul_l_op2) || (vt1.m_vt_op1 % ul_l_op2 != vt1.m_vt_op1 % (decimal)f_l_op2) || (vt1.m_vt_op1 % (decimal)f_l_op2 != vt1.m_vt_op1 % (decimal)d_l_op2) || (vt1.m_vt_op1 % (decimal)d_l_op2 != vt1.m_vt_op1 % m_l_op2) || (vt1.m_vt_op1 % m_l_op2 != vt1.m_vt_op1 % i_l_op2) || (vt1.m_vt_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % s_i_s_op2 != vt1.m_vt_op1 % s_ui_s_op2) || (vt1.m_vt_op1 % s_ui_s_op2 != vt1.m_vt_op1 % s_l_s_op2) || (vt1.m_vt_op1 % s_l_s_op2 != vt1.m_vt_op1 % s_ul_s_op2) || (vt1.m_vt_op1 % s_ul_s_op2 != vt1.m_vt_op1 % (decimal)s_f_s_op2) || (vt1.m_vt_op1 % (decimal)s_f_s_op2 != vt1.m_vt_op1 % (decimal)s_d_s_op2) || (vt1.m_vt_op1 % (decimal)s_d_s_op2 != vt1.m_vt_op1 % s_m_s_op2) || (vt1.m_vt_op1 % s_m_s_op2 != vt1.m_vt_op1 % s_i_s_op2) || (vt1.m_vt_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % m_f("op2") != vt1.m_vt_op1 % m_f("op2")) || (vt1.m_vt_op1 % m_f("op2") != vt1.m_vt_op1 % m_f("op2")) || (vt1.m_vt_op1 % m_f("op2") != vt1.m_vt_op1 % m_f("op2")) || (vt1.m_vt_op1 % m_f("op2") != vt1.m_vt_op1 % (decimal)m_f("op2")) || (vt1.m_vt_op1 % (decimal)m_f("op2") != vt1.m_vt_op1 % (decimal)m_f("op2")) || (vt1.m_vt_op1 % (decimal)m_f("op2") != vt1.m_vt_op1 % m_f("op2")) || (vt1.m_vt_op1 % m_f("op2") != vt1.m_vt_op1 % m_f("op2")) || (vt1.m_vt_op1 % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % cl1.i_cl_op2 != vt1.m_vt_op1 % cl1.ui_cl_op2) || (vt1.m_vt_op1 % cl1.ui_cl_op2 != vt1.m_vt_op1 % cl1.l_cl_op2) || (vt1.m_vt_op1 % cl1.l_cl_op2 != vt1.m_vt_op1 % cl1.ul_cl_op2) || (vt1.m_vt_op1 % cl1.ul_cl_op2 != vt1.m_vt_op1 % (decimal)cl1.f_cl_op2) || (vt1.m_vt_op1 % (decimal)cl1.f_cl_op2 != vt1.m_vt_op1 % (decimal)cl1.d_cl_op2) || (vt1.m_vt_op1 % (decimal)cl1.d_cl_op2 != vt1.m_vt_op1 % cl1.m_cl_op2) || (vt1.m_vt_op1 % cl1.m_cl_op2 != vt1.m_vt_op1 % cl1.i_cl_op2) || (vt1.m_vt_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % vt1.i_vt_op2 != vt1.m_vt_op1 % vt1.ui_vt_op2) || (vt1.m_vt_op1 % vt1.ui_vt_op2 != vt1.m_vt_op1 % vt1.l_vt_op2) || (vt1.m_vt_op1 % vt1.l_vt_op2 != vt1.m_vt_op1 % vt1.ul_vt_op2) || (vt1.m_vt_op1 % vt1.ul_vt_op2 != vt1.m_vt_op1 % (decimal)vt1.f_vt_op2) || (vt1.m_vt_op1 % (decimal)vt1.f_vt_op2 != vt1.m_vt_op1 % (decimal)vt1.d_vt_op2) || (vt1.m_vt_op1 % (decimal)vt1.d_vt_op2 != vt1.m_vt_op1 % vt1.m_vt_op2) || (vt1.m_vt_op1 % vt1.m_vt_op2 != vt1.m_vt_op1 % vt1.i_vt_op2) || (vt1.m_vt_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % i_arr1d_op2[0] != vt1.m_vt_op1 % ui_arr1d_op2[0]) || (vt1.m_vt_op1 % ui_arr1d_op2[0] != vt1.m_vt_op1 % l_arr1d_op2[0]) || (vt1.m_vt_op1 % l_arr1d_op2[0] != vt1.m_vt_op1 % ul_arr1d_op2[0]) || (vt1.m_vt_op1 % ul_arr1d_op2[0] != vt1.m_vt_op1 % (decimal)f_arr1d_op2[0]) || (vt1.m_vt_op1 % (decimal)f_arr1d_op2[0] != vt1.m_vt_op1 % (decimal)d_arr1d_op2[0]) || (vt1.m_vt_op1 % (decimal)d_arr1d_op2[0] != vt1.m_vt_op1 % m_arr1d_op2[0]) || (vt1.m_vt_op1 % m_arr1d_op2[0] != vt1.m_vt_op1 % i_arr1d_op2[0]) || (vt1.m_vt_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.m_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.m_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.m_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.m_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.m_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % i_l_op2 != m_arr1d_op1[1] % ui_l_op2) || (m_arr1d_op1[1] % ui_l_op2 != m_arr1d_op1[1] % l_l_op2) || (m_arr1d_op1[1] % l_l_op2 != m_arr1d_op1[1] % ul_l_op2) || (m_arr1d_op1[1] % ul_l_op2 != m_arr1d_op1[1] % (decimal)f_l_op2) || (m_arr1d_op1[1] % (decimal)f_l_op2 != m_arr1d_op1[1] % (decimal)d_l_op2) || (m_arr1d_op1[1] % (decimal)d_l_op2 != m_arr1d_op1[1] % m_l_op2) || (m_arr1d_op1[1] % m_l_op2 != m_arr1d_op1[1] % i_l_op2) || (m_arr1d_op1[1] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % s_i_s_op2 != m_arr1d_op1[1] % s_ui_s_op2) || (m_arr1d_op1[1] % s_ui_s_op2 != m_arr1d_op1[1] % s_l_s_op2) || (m_arr1d_op1[1] % s_l_s_op2 != m_arr1d_op1[1] % s_ul_s_op2) || (m_arr1d_op1[1] % s_ul_s_op2 != m_arr1d_op1[1] % (decimal)s_f_s_op2) || (m_arr1d_op1[1] % (decimal)s_f_s_op2 != m_arr1d_op1[1] % (decimal)s_d_s_op2) || (m_arr1d_op1[1] % (decimal)s_d_s_op2 != m_arr1d_op1[1] % s_m_s_op2) || (m_arr1d_op1[1] % s_m_s_op2 != m_arr1d_op1[1] % s_i_s_op2) || (m_arr1d_op1[1] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % m_f("op2") != m_arr1d_op1[1] % m_f("op2")) || (m_arr1d_op1[1] % m_f("op2") != m_arr1d_op1[1] % m_f("op2")) || (m_arr1d_op1[1] % m_f("op2") != m_arr1d_op1[1] % m_f("op2")) || (m_arr1d_op1[1] % m_f("op2") != m_arr1d_op1[1] % (decimal)m_f("op2")) || (m_arr1d_op1[1] % (decimal)m_f("op2") != m_arr1d_op1[1] % (decimal)m_f("op2")) || (m_arr1d_op1[1] % (decimal)m_f("op2") != m_arr1d_op1[1] % m_f("op2")) || (m_arr1d_op1[1] % m_f("op2") != m_arr1d_op1[1] % m_f("op2")) || (m_arr1d_op1[1] % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % cl1.i_cl_op2 != m_arr1d_op1[1] % cl1.ui_cl_op2) || (m_arr1d_op1[1] % cl1.ui_cl_op2 != m_arr1d_op1[1] % cl1.l_cl_op2) || (m_arr1d_op1[1] % cl1.l_cl_op2 != m_arr1d_op1[1] % cl1.ul_cl_op2) || (m_arr1d_op1[1] % cl1.ul_cl_op2 != m_arr1d_op1[1] % (decimal)cl1.f_cl_op2) || (m_arr1d_op1[1] % (decimal)cl1.f_cl_op2 != m_arr1d_op1[1] % (decimal)cl1.d_cl_op2) || (m_arr1d_op1[1] % (decimal)cl1.d_cl_op2 != m_arr1d_op1[1] % cl1.m_cl_op2) || (m_arr1d_op1[1] % cl1.m_cl_op2 != m_arr1d_op1[1] % cl1.i_cl_op2) || (m_arr1d_op1[1] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % vt1.i_vt_op2 != m_arr1d_op1[1] % vt1.ui_vt_op2) || (m_arr1d_op1[1] % vt1.ui_vt_op2 != m_arr1d_op1[1] % vt1.l_vt_op2) || (m_arr1d_op1[1] % vt1.l_vt_op2 != m_arr1d_op1[1] % vt1.ul_vt_op2) || (m_arr1d_op1[1] % vt1.ul_vt_op2 != m_arr1d_op1[1] % (decimal)vt1.f_vt_op2) || (m_arr1d_op1[1] % (decimal)vt1.f_vt_op2 != m_arr1d_op1[1] % (decimal)vt1.d_vt_op2) || (m_arr1d_op1[1] % (decimal)vt1.d_vt_op2 != m_arr1d_op1[1] % vt1.m_vt_op2) || (m_arr1d_op1[1] % vt1.m_vt_op2 != m_arr1d_op1[1] % vt1.i_vt_op2) || (m_arr1d_op1[1] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % i_arr1d_op2[0] != m_arr1d_op1[1] % ui_arr1d_op2[0]) || (m_arr1d_op1[1] % ui_arr1d_op2[0] != m_arr1d_op1[1] % l_arr1d_op2[0]) || (m_arr1d_op1[1] % l_arr1d_op2[0] != m_arr1d_op1[1] % ul_arr1d_op2[0]) || (m_arr1d_op1[1] % ul_arr1d_op2[0] != m_arr1d_op1[1] % (decimal)f_arr1d_op2[0]) || (m_arr1d_op1[1] % (decimal)f_arr1d_op2[0] != m_arr1d_op1[1] % (decimal)d_arr1d_op2[0]) || (m_arr1d_op1[1] % (decimal)d_arr1d_op2[0] != m_arr1d_op1[1] % m_arr1d_op2[0]) || (m_arr1d_op1[1] % m_arr1d_op2[0] != m_arr1d_op1[1] % i_arr1d_op2[0]) || (m_arr1d_op1[1] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((m_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)s_f_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)s_f_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)s_d_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)s_d_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2")) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)cl1.f_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)cl1.f_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)cl1.d_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)cl1.d_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)vt1.f_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)vt1.f_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)vt1.d_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)vt1.d_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (m_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)s_f_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)s_f_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)s_d_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)s_d_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2")) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)cl1.f_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)cl1.f_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)cl1.d_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)cl1.d_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)vt1.f_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)vt1.f_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)vt1.d_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)vt1.d_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)f_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % (decimal)d_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (m_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/i4rem.cs b/tests/src/JIT/Methodical/divrem/rem/i4rem.cs
new file mode 100644 (file)
index 0000000..aaf6a63
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type i4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class i4rem
+{
+    private static int s_i_s_op1 = 7;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public int i_cl_op1 = 7;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public int i_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.i_vt_op1 = 7;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        int[] i_arr1d_op1 = { 0, 7 };
+        int[,] i_arr2d_op1 = { { 0, 7 }, { 1, 1 } };
+        int[,,] i_arr3d_op1 = { { { 0, 7 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            int i_l_op1 = 7;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((i_l_op1 % i_l_op2 != i_l_op1 % ui_l_op2) || (i_l_op1 % ui_l_op2 != i_l_op1 % l_l_op2) || (i_l_op1 % l_l_op2 != i_l_op1 % (int)ul_l_op2) || (i_l_op1 % (int)ul_l_op2 != i_l_op1 % f_l_op2) || (i_l_op1 % f_l_op2 != i_l_op1 % d_l_op2) || ((decimal)(i_l_op1 % d_l_op2) != i_l_op1 % m_l_op2) || (i_l_op1 % m_l_op2 != i_l_op1 % i_l_op2) || (i_l_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % s_i_s_op2 != i_l_op1 % s_ui_s_op2) || (i_l_op1 % s_ui_s_op2 != i_l_op1 % s_l_s_op2) || (i_l_op1 % s_l_s_op2 != i_l_op1 % (int)s_ul_s_op2) || (i_l_op1 % (int)s_ul_s_op2 != i_l_op1 % s_f_s_op2) || (i_l_op1 % s_f_s_op2 != i_l_op1 % s_d_s_op2) || ((decimal)(i_l_op1 % s_d_s_op2) != i_l_op1 % s_m_s_op2) || (i_l_op1 % s_m_s_op2 != i_l_op1 % s_i_s_op2) || (i_l_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % i_f("op2") != i_l_op1 % i_f("op2")) || (i_l_op1 % i_f("op2") != i_l_op1 % i_f("op2")) || (i_l_op1 % i_f("op2") != i_l_op1 % (int)i_f("op2")) || (i_l_op1 % (int)i_f("op2") != i_l_op1 % i_f("op2")) || (i_l_op1 % i_f("op2") != i_l_op1 % i_f("op2")) || ((decimal)(i_l_op1 % i_f("op2")) != i_l_op1 % i_f("op2")) || (i_l_op1 % i_f("op2") != i_l_op1 % i_f("op2")) || (i_l_op1 % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % cl1.i_cl_op2 != i_l_op1 % cl1.ui_cl_op2) || (i_l_op1 % cl1.ui_cl_op2 != i_l_op1 % cl1.l_cl_op2) || (i_l_op1 % cl1.l_cl_op2 != i_l_op1 % (int)cl1.ul_cl_op2) || (i_l_op1 % (int)cl1.ul_cl_op2 != i_l_op1 % cl1.f_cl_op2) || (i_l_op1 % cl1.f_cl_op2 != i_l_op1 % cl1.d_cl_op2) || ((decimal)(i_l_op1 % cl1.d_cl_op2) != i_l_op1 % cl1.m_cl_op2) || (i_l_op1 % cl1.m_cl_op2 != i_l_op1 % cl1.i_cl_op2) || (i_l_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % vt1.i_vt_op2 != i_l_op1 % vt1.ui_vt_op2) || (i_l_op1 % vt1.ui_vt_op2 != i_l_op1 % vt1.l_vt_op2) || (i_l_op1 % vt1.l_vt_op2 != i_l_op1 % (int)vt1.ul_vt_op2) || (i_l_op1 % (int)vt1.ul_vt_op2 != i_l_op1 % vt1.f_vt_op2) || (i_l_op1 % vt1.f_vt_op2 != i_l_op1 % vt1.d_vt_op2) || ((decimal)(i_l_op1 % vt1.d_vt_op2) != i_l_op1 % vt1.m_vt_op2) || (i_l_op1 % vt1.m_vt_op2 != i_l_op1 % vt1.i_vt_op2) || (i_l_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % i_arr1d_op2[0] != i_l_op1 % ui_arr1d_op2[0]) || (i_l_op1 % ui_arr1d_op2[0] != i_l_op1 % l_arr1d_op2[0]) || (i_l_op1 % l_arr1d_op2[0] != i_l_op1 % (int)ul_arr1d_op2[0]) || (i_l_op1 % (int)ul_arr1d_op2[0] != i_l_op1 % f_arr1d_op2[0]) || (i_l_op1 % f_arr1d_op2[0] != i_l_op1 % d_arr1d_op2[0]) || ((decimal)(i_l_op1 % d_arr1d_op2[0]) != i_l_op1 % m_arr1d_op2[0]) || (i_l_op1 % m_arr1d_op2[0] != i_l_op1 % i_arr1d_op2[0]) || (i_l_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != i_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != i_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((i_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_l_op2 != s_i_s_op1 % ui_l_op2) || (s_i_s_op1 % ui_l_op2 != s_i_s_op1 % l_l_op2) || (s_i_s_op1 % l_l_op2 != s_i_s_op1 % (int)ul_l_op2) || (s_i_s_op1 % (int)ul_l_op2 != s_i_s_op1 % f_l_op2) || (s_i_s_op1 % f_l_op2 != s_i_s_op1 % d_l_op2) || ((decimal)(s_i_s_op1 % d_l_op2) != s_i_s_op1 % m_l_op2) || (s_i_s_op1 % m_l_op2 != s_i_s_op1 % i_l_op2) || (s_i_s_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % s_i_s_op2 != s_i_s_op1 % s_ui_s_op2) || (s_i_s_op1 % s_ui_s_op2 != s_i_s_op1 % s_l_s_op2) || (s_i_s_op1 % s_l_s_op2 != s_i_s_op1 % (int)s_ul_s_op2) || (s_i_s_op1 % (int)s_ul_s_op2 != s_i_s_op1 % s_f_s_op2) || (s_i_s_op1 % s_f_s_op2 != s_i_s_op1 % s_d_s_op2) || ((decimal)(s_i_s_op1 % s_d_s_op2) != s_i_s_op1 % s_m_s_op2) || (s_i_s_op1 % s_m_s_op2 != s_i_s_op1 % s_i_s_op2) || (s_i_s_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_f("op2") != s_i_s_op1 % i_f("op2")) || (s_i_s_op1 % i_f("op2") != s_i_s_op1 % i_f("op2")) || (s_i_s_op1 % i_f("op2") != s_i_s_op1 % (int)i_f("op2")) || (s_i_s_op1 % (int)i_f("op2") != s_i_s_op1 % i_f("op2")) || (s_i_s_op1 % i_f("op2") != s_i_s_op1 % i_f("op2")) || ((decimal)(s_i_s_op1 % i_f("op2")) != s_i_s_op1 % i_f("op2")) || (s_i_s_op1 % i_f("op2") != s_i_s_op1 % i_f("op2")) || (s_i_s_op1 % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % cl1.i_cl_op2 != s_i_s_op1 % cl1.ui_cl_op2) || (s_i_s_op1 % cl1.ui_cl_op2 != s_i_s_op1 % cl1.l_cl_op2) || (s_i_s_op1 % cl1.l_cl_op2 != s_i_s_op1 % (int)cl1.ul_cl_op2) || (s_i_s_op1 % (int)cl1.ul_cl_op2 != s_i_s_op1 % cl1.f_cl_op2) || (s_i_s_op1 % cl1.f_cl_op2 != s_i_s_op1 % cl1.d_cl_op2) || ((decimal)(s_i_s_op1 % cl1.d_cl_op2) != s_i_s_op1 % cl1.m_cl_op2) || (s_i_s_op1 % cl1.m_cl_op2 != s_i_s_op1 % cl1.i_cl_op2) || (s_i_s_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % vt1.i_vt_op2 != s_i_s_op1 % vt1.ui_vt_op2) || (s_i_s_op1 % vt1.ui_vt_op2 != s_i_s_op1 % vt1.l_vt_op2) || (s_i_s_op1 % vt1.l_vt_op2 != s_i_s_op1 % (int)vt1.ul_vt_op2) || (s_i_s_op1 % (int)vt1.ul_vt_op2 != s_i_s_op1 % vt1.f_vt_op2) || (s_i_s_op1 % vt1.f_vt_op2 != s_i_s_op1 % vt1.d_vt_op2) || ((decimal)(s_i_s_op1 % vt1.d_vt_op2) != s_i_s_op1 % vt1.m_vt_op2) || (s_i_s_op1 % vt1.m_vt_op2 != s_i_s_op1 % vt1.i_vt_op2) || (s_i_s_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_arr1d_op2[0] != s_i_s_op1 % ui_arr1d_op2[0]) || (s_i_s_op1 % ui_arr1d_op2[0] != s_i_s_op1 % l_arr1d_op2[0]) || (s_i_s_op1 % l_arr1d_op2[0] != s_i_s_op1 % (int)ul_arr1d_op2[0]) || (s_i_s_op1 % (int)ul_arr1d_op2[0] != s_i_s_op1 % f_arr1d_op2[0]) || (s_i_s_op1 % f_arr1d_op2[0] != s_i_s_op1 % d_arr1d_op2[0]) || ((decimal)(s_i_s_op1 % d_arr1d_op2[0]) != s_i_s_op1 % m_arr1d_op2[0]) || (s_i_s_op1 % m_arr1d_op2[0] != s_i_s_op1 % i_arr1d_op2[0]) || (s_i_s_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_i_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != s_i_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_i_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_i_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_i_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_i_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_i_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_i_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_i_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % i_l_op2 != i_f("op1") % ui_l_op2) || (i_f("op1") % ui_l_op2 != i_f("op1") % l_l_op2) || (i_f("op1") % l_l_op2 != i_f("op1") % (int)ul_l_op2) || (i_f("op1") % (int)ul_l_op2 != i_f("op1") % f_l_op2) || (i_f("op1") % f_l_op2 != i_f("op1") % d_l_op2) || ((decimal)(i_f("op1") % d_l_op2) != i_f("op1") % m_l_op2) || (i_f("op1") % m_l_op2 != i_f("op1") % i_l_op2) || (i_f("op1") % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % s_i_s_op2 != i_f("op1") % s_ui_s_op2) || (i_f("op1") % s_ui_s_op2 != i_f("op1") % s_l_s_op2) || (i_f("op1") % s_l_s_op2 != i_f("op1") % (int)s_ul_s_op2) || (i_f("op1") % (int)s_ul_s_op2 != i_f("op1") % s_f_s_op2) || (i_f("op1") % s_f_s_op2 != i_f("op1") % s_d_s_op2) || ((decimal)(i_f("op1") % s_d_s_op2) != i_f("op1") % s_m_s_op2) || (i_f("op1") % s_m_s_op2 != i_f("op1") % s_i_s_op2) || (i_f("op1") % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % i_f("op2") != i_f("op1") % i_f("op2")) || (i_f("op1") % i_f("op2") != i_f("op1") % i_f("op2")) || (i_f("op1") % i_f("op2") != i_f("op1") % (int)i_f("op2")) || (i_f("op1") % (int)i_f("op2") != i_f("op1") % i_f("op2")) || (i_f("op1") % i_f("op2") != i_f("op1") % i_f("op2")) || ((decimal)(i_f("op1") % i_f("op2")) != i_f("op1") % i_f("op2")) || (i_f("op1") % i_f("op2") != i_f("op1") % i_f("op2")) || (i_f("op1") % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % cl1.i_cl_op2 != i_f("op1") % cl1.ui_cl_op2) || (i_f("op1") % cl1.ui_cl_op2 != i_f("op1") % cl1.l_cl_op2) || (i_f("op1") % cl1.l_cl_op2 != i_f("op1") % (int)cl1.ul_cl_op2) || (i_f("op1") % (int)cl1.ul_cl_op2 != i_f("op1") % cl1.f_cl_op2) || (i_f("op1") % cl1.f_cl_op2 != i_f("op1") % cl1.d_cl_op2) || ((decimal)(i_f("op1") % cl1.d_cl_op2) != i_f("op1") % cl1.m_cl_op2) || (i_f("op1") % cl1.m_cl_op2 != i_f("op1") % cl1.i_cl_op2) || (i_f("op1") % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % vt1.i_vt_op2 != i_f("op1") % vt1.ui_vt_op2) || (i_f("op1") % vt1.ui_vt_op2 != i_f("op1") % vt1.l_vt_op2) || (i_f("op1") % vt1.l_vt_op2 != i_f("op1") % (int)vt1.ul_vt_op2) || (i_f("op1") % (int)vt1.ul_vt_op2 != i_f("op1") % vt1.f_vt_op2) || (i_f("op1") % vt1.f_vt_op2 != i_f("op1") % vt1.d_vt_op2) || ((decimal)(i_f("op1") % vt1.d_vt_op2) != i_f("op1") % vt1.m_vt_op2) || (i_f("op1") % vt1.m_vt_op2 != i_f("op1") % vt1.i_vt_op2) || (i_f("op1") % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % i_arr1d_op2[0] != i_f("op1") % ui_arr1d_op2[0]) || (i_f("op1") % ui_arr1d_op2[0] != i_f("op1") % l_arr1d_op2[0]) || (i_f("op1") % l_arr1d_op2[0] != i_f("op1") % (int)ul_arr1d_op2[0]) || (i_f("op1") % (int)ul_arr1d_op2[0] != i_f("op1") % f_arr1d_op2[0]) || (i_f("op1") % f_arr1d_op2[0] != i_f("op1") % d_arr1d_op2[0]) || ((decimal)(i_f("op1") % d_arr1d_op2[0]) != i_f("op1") % m_arr1d_op2[0]) || (i_f("op1") % m_arr1d_op2[0] != i_f("op1") % i_arr1d_op2[0]) || (i_f("op1") % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) != i_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != i_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((i_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % i_l_op2 != cl1.i_cl_op1 % ui_l_op2) || (cl1.i_cl_op1 % ui_l_op2 != cl1.i_cl_op1 % l_l_op2) || (cl1.i_cl_op1 % l_l_op2 != cl1.i_cl_op1 % (int)ul_l_op2) || (cl1.i_cl_op1 % (int)ul_l_op2 != cl1.i_cl_op1 % f_l_op2) || (cl1.i_cl_op1 % f_l_op2 != cl1.i_cl_op1 % d_l_op2) || ((decimal)(cl1.i_cl_op1 % d_l_op2) != cl1.i_cl_op1 % m_l_op2) || (cl1.i_cl_op1 % m_l_op2 != cl1.i_cl_op1 % i_l_op2) || (cl1.i_cl_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % s_i_s_op2 != cl1.i_cl_op1 % s_ui_s_op2) || (cl1.i_cl_op1 % s_ui_s_op2 != cl1.i_cl_op1 % s_l_s_op2) || (cl1.i_cl_op1 % s_l_s_op2 != cl1.i_cl_op1 % (int)s_ul_s_op2) || (cl1.i_cl_op1 % (int)s_ul_s_op2 != cl1.i_cl_op1 % s_f_s_op2) || (cl1.i_cl_op1 % s_f_s_op2 != cl1.i_cl_op1 % s_d_s_op2) || ((decimal)(cl1.i_cl_op1 % s_d_s_op2) != cl1.i_cl_op1 % s_m_s_op2) || (cl1.i_cl_op1 % s_m_s_op2 != cl1.i_cl_op1 % s_i_s_op2) || (cl1.i_cl_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % i_f("op2") != cl1.i_cl_op1 % i_f("op2")) || (cl1.i_cl_op1 % i_f("op2") != cl1.i_cl_op1 % i_f("op2")) || (cl1.i_cl_op1 % i_f("op2") != cl1.i_cl_op1 % (int)i_f("op2")) || (cl1.i_cl_op1 % (int)i_f("op2") != cl1.i_cl_op1 % i_f("op2")) || (cl1.i_cl_op1 % i_f("op2") != cl1.i_cl_op1 % i_f("op2")) || ((decimal)(cl1.i_cl_op1 % i_f("op2")) != cl1.i_cl_op1 % i_f("op2")) || (cl1.i_cl_op1 % i_f("op2") != cl1.i_cl_op1 % i_f("op2")) || (cl1.i_cl_op1 % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % cl1.i_cl_op2 != cl1.i_cl_op1 % cl1.ui_cl_op2) || (cl1.i_cl_op1 % cl1.ui_cl_op2 != cl1.i_cl_op1 % cl1.l_cl_op2) || (cl1.i_cl_op1 % cl1.l_cl_op2 != cl1.i_cl_op1 % (int)cl1.ul_cl_op2) || (cl1.i_cl_op1 % (int)cl1.ul_cl_op2 != cl1.i_cl_op1 % cl1.f_cl_op2) || (cl1.i_cl_op1 % cl1.f_cl_op2 != cl1.i_cl_op1 % cl1.d_cl_op2) || ((decimal)(cl1.i_cl_op1 % cl1.d_cl_op2) != cl1.i_cl_op1 % cl1.m_cl_op2) || (cl1.i_cl_op1 % cl1.m_cl_op2 != cl1.i_cl_op1 % cl1.i_cl_op2) || (cl1.i_cl_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % vt1.i_vt_op2 != cl1.i_cl_op1 % vt1.ui_vt_op2) || (cl1.i_cl_op1 % vt1.ui_vt_op2 != cl1.i_cl_op1 % vt1.l_vt_op2) || (cl1.i_cl_op1 % vt1.l_vt_op2 != cl1.i_cl_op1 % (int)vt1.ul_vt_op2) || (cl1.i_cl_op1 % (int)vt1.ul_vt_op2 != cl1.i_cl_op1 % vt1.f_vt_op2) || (cl1.i_cl_op1 % vt1.f_vt_op2 != cl1.i_cl_op1 % vt1.d_vt_op2) || ((decimal)(cl1.i_cl_op1 % vt1.d_vt_op2) != cl1.i_cl_op1 % vt1.m_vt_op2) || (cl1.i_cl_op1 % vt1.m_vt_op2 != cl1.i_cl_op1 % vt1.i_vt_op2) || (cl1.i_cl_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % i_arr1d_op2[0] != cl1.i_cl_op1 % ui_arr1d_op2[0]) || (cl1.i_cl_op1 % ui_arr1d_op2[0] != cl1.i_cl_op1 % l_arr1d_op2[0]) || (cl1.i_cl_op1 % l_arr1d_op2[0] != cl1.i_cl_op1 % (int)ul_arr1d_op2[0]) || (cl1.i_cl_op1 % (int)ul_arr1d_op2[0] != cl1.i_cl_op1 % f_arr1d_op2[0]) || (cl1.i_cl_op1 % f_arr1d_op2[0] != cl1.i_cl_op1 % d_arr1d_op2[0]) || ((decimal)(cl1.i_cl_op1 % d_arr1d_op2[0]) != cl1.i_cl_op1 % m_arr1d_op2[0]) || (cl1.i_cl_op1 % m_arr1d_op2[0] != cl1.i_cl_op1 % i_arr1d_op2[0]) || (cl1.i_cl_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.i_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.i_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.i_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.i_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.i_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.i_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.i_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.i_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.i_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % i_l_op2 != vt1.i_vt_op1 % ui_l_op2) || (vt1.i_vt_op1 % ui_l_op2 != vt1.i_vt_op1 % l_l_op2) || (vt1.i_vt_op1 % l_l_op2 != vt1.i_vt_op1 % (int)ul_l_op2) || (vt1.i_vt_op1 % (int)ul_l_op2 != vt1.i_vt_op1 % f_l_op2) || (vt1.i_vt_op1 % f_l_op2 != vt1.i_vt_op1 % d_l_op2) || ((decimal)(vt1.i_vt_op1 % d_l_op2) != vt1.i_vt_op1 % m_l_op2) || (vt1.i_vt_op1 % m_l_op2 != vt1.i_vt_op1 % i_l_op2) || (vt1.i_vt_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % s_i_s_op2 != vt1.i_vt_op1 % s_ui_s_op2) || (vt1.i_vt_op1 % s_ui_s_op2 != vt1.i_vt_op1 % s_l_s_op2) || (vt1.i_vt_op1 % s_l_s_op2 != vt1.i_vt_op1 % (int)s_ul_s_op2) || (vt1.i_vt_op1 % (int)s_ul_s_op2 != vt1.i_vt_op1 % s_f_s_op2) || (vt1.i_vt_op1 % s_f_s_op2 != vt1.i_vt_op1 % s_d_s_op2) || ((decimal)(vt1.i_vt_op1 % s_d_s_op2) != vt1.i_vt_op1 % s_m_s_op2) || (vt1.i_vt_op1 % s_m_s_op2 != vt1.i_vt_op1 % s_i_s_op2) || (vt1.i_vt_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % i_f("op2") != vt1.i_vt_op1 % i_f("op2")) || (vt1.i_vt_op1 % i_f("op2") != vt1.i_vt_op1 % i_f("op2")) || (vt1.i_vt_op1 % i_f("op2") != vt1.i_vt_op1 % (int)i_f("op2")) || (vt1.i_vt_op1 % (int)i_f("op2") != vt1.i_vt_op1 % i_f("op2")) || (vt1.i_vt_op1 % i_f("op2") != vt1.i_vt_op1 % i_f("op2")) || ((decimal)(vt1.i_vt_op1 % i_f("op2")) != vt1.i_vt_op1 % i_f("op2")) || (vt1.i_vt_op1 % i_f("op2") != vt1.i_vt_op1 % i_f("op2")) || (vt1.i_vt_op1 % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % cl1.i_cl_op2 != vt1.i_vt_op1 % cl1.ui_cl_op2) || (vt1.i_vt_op1 % cl1.ui_cl_op2 != vt1.i_vt_op1 % cl1.l_cl_op2) || (vt1.i_vt_op1 % cl1.l_cl_op2 != vt1.i_vt_op1 % (int)cl1.ul_cl_op2) || (vt1.i_vt_op1 % (int)cl1.ul_cl_op2 != vt1.i_vt_op1 % cl1.f_cl_op2) || (vt1.i_vt_op1 % cl1.f_cl_op2 != vt1.i_vt_op1 % cl1.d_cl_op2) || ((decimal)(vt1.i_vt_op1 % cl1.d_cl_op2) != vt1.i_vt_op1 % cl1.m_cl_op2) || (vt1.i_vt_op1 % cl1.m_cl_op2 != vt1.i_vt_op1 % cl1.i_cl_op2) || (vt1.i_vt_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % vt1.i_vt_op2 != vt1.i_vt_op1 % vt1.ui_vt_op2) || (vt1.i_vt_op1 % vt1.ui_vt_op2 != vt1.i_vt_op1 % vt1.l_vt_op2) || (vt1.i_vt_op1 % vt1.l_vt_op2 != vt1.i_vt_op1 % (int)vt1.ul_vt_op2) || (vt1.i_vt_op1 % (int)vt1.ul_vt_op2 != vt1.i_vt_op1 % vt1.f_vt_op2) || (vt1.i_vt_op1 % vt1.f_vt_op2 != vt1.i_vt_op1 % vt1.d_vt_op2) || ((decimal)(vt1.i_vt_op1 % vt1.d_vt_op2) != vt1.i_vt_op1 % vt1.m_vt_op2) || (vt1.i_vt_op1 % vt1.m_vt_op2 != vt1.i_vt_op1 % vt1.i_vt_op2) || (vt1.i_vt_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % i_arr1d_op2[0] != vt1.i_vt_op1 % ui_arr1d_op2[0]) || (vt1.i_vt_op1 % ui_arr1d_op2[0] != vt1.i_vt_op1 % l_arr1d_op2[0]) || (vt1.i_vt_op1 % l_arr1d_op2[0] != vt1.i_vt_op1 % (int)ul_arr1d_op2[0]) || (vt1.i_vt_op1 % (int)ul_arr1d_op2[0] != vt1.i_vt_op1 % f_arr1d_op2[0]) || (vt1.i_vt_op1 % f_arr1d_op2[0] != vt1.i_vt_op1 % d_arr1d_op2[0]) || ((decimal)(vt1.i_vt_op1 % d_arr1d_op2[0]) != vt1.i_vt_op1 % m_arr1d_op2[0]) || (vt1.i_vt_op1 % m_arr1d_op2[0] != vt1.i_vt_op1 % i_arr1d_op2[0]) || (vt1.i_vt_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.i_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.i_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.i_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.i_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.i_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.i_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.i_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.i_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.i_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % i_l_op2 != i_arr1d_op1[1] % ui_l_op2) || (i_arr1d_op1[1] % ui_l_op2 != i_arr1d_op1[1] % l_l_op2) || (i_arr1d_op1[1] % l_l_op2 != i_arr1d_op1[1] % (int)ul_l_op2) || (i_arr1d_op1[1] % (int)ul_l_op2 != i_arr1d_op1[1] % f_l_op2) || (i_arr1d_op1[1] % f_l_op2 != i_arr1d_op1[1] % d_l_op2) || ((decimal)(i_arr1d_op1[1] % d_l_op2) != i_arr1d_op1[1] % m_l_op2) || (i_arr1d_op1[1] % m_l_op2 != i_arr1d_op1[1] % i_l_op2) || (i_arr1d_op1[1] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % s_i_s_op2 != i_arr1d_op1[1] % s_ui_s_op2) || (i_arr1d_op1[1] % s_ui_s_op2 != i_arr1d_op1[1] % s_l_s_op2) || (i_arr1d_op1[1] % s_l_s_op2 != i_arr1d_op1[1] % (int)s_ul_s_op2) || (i_arr1d_op1[1] % (int)s_ul_s_op2 != i_arr1d_op1[1] % s_f_s_op2) || (i_arr1d_op1[1] % s_f_s_op2 != i_arr1d_op1[1] % s_d_s_op2) || ((decimal)(i_arr1d_op1[1] % s_d_s_op2) != i_arr1d_op1[1] % s_m_s_op2) || (i_arr1d_op1[1] % s_m_s_op2 != i_arr1d_op1[1] % s_i_s_op2) || (i_arr1d_op1[1] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % i_f("op2") != i_arr1d_op1[1] % i_f("op2")) || (i_arr1d_op1[1] % i_f("op2") != i_arr1d_op1[1] % i_f("op2")) || (i_arr1d_op1[1] % i_f("op2") != i_arr1d_op1[1] % (int)i_f("op2")) || (i_arr1d_op1[1] % (int)i_f("op2") != i_arr1d_op1[1] % i_f("op2")) || (i_arr1d_op1[1] % i_f("op2") != i_arr1d_op1[1] % i_f("op2")) || ((decimal)(i_arr1d_op1[1] % i_f("op2")) != i_arr1d_op1[1] % i_f("op2")) || (i_arr1d_op1[1] % i_f("op2") != i_arr1d_op1[1] % i_f("op2")) || (i_arr1d_op1[1] % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % cl1.i_cl_op2 != i_arr1d_op1[1] % cl1.ui_cl_op2) || (i_arr1d_op1[1] % cl1.ui_cl_op2 != i_arr1d_op1[1] % cl1.l_cl_op2) || (i_arr1d_op1[1] % cl1.l_cl_op2 != i_arr1d_op1[1] % (int)cl1.ul_cl_op2) || (i_arr1d_op1[1] % (int)cl1.ul_cl_op2 != i_arr1d_op1[1] % cl1.f_cl_op2) || (i_arr1d_op1[1] % cl1.f_cl_op2 != i_arr1d_op1[1] % cl1.d_cl_op2) || ((decimal)(i_arr1d_op1[1] % cl1.d_cl_op2) != i_arr1d_op1[1] % cl1.m_cl_op2) || (i_arr1d_op1[1] % cl1.m_cl_op2 != i_arr1d_op1[1] % cl1.i_cl_op2) || (i_arr1d_op1[1] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % vt1.i_vt_op2 != i_arr1d_op1[1] % vt1.ui_vt_op2) || (i_arr1d_op1[1] % vt1.ui_vt_op2 != i_arr1d_op1[1] % vt1.l_vt_op2) || (i_arr1d_op1[1] % vt1.l_vt_op2 != i_arr1d_op1[1] % (int)vt1.ul_vt_op2) || (i_arr1d_op1[1] % (int)vt1.ul_vt_op2 != i_arr1d_op1[1] % vt1.f_vt_op2) || (i_arr1d_op1[1] % vt1.f_vt_op2 != i_arr1d_op1[1] % vt1.d_vt_op2) || ((decimal)(i_arr1d_op1[1] % vt1.d_vt_op2) != i_arr1d_op1[1] % vt1.m_vt_op2) || (i_arr1d_op1[1] % vt1.m_vt_op2 != i_arr1d_op1[1] % vt1.i_vt_op2) || (i_arr1d_op1[1] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % i_arr1d_op2[0] != i_arr1d_op1[1] % ui_arr1d_op2[0]) || (i_arr1d_op1[1] % ui_arr1d_op2[0] != i_arr1d_op1[1] % l_arr1d_op2[0]) || (i_arr1d_op1[1] % l_arr1d_op2[0] != i_arr1d_op1[1] % (int)ul_arr1d_op2[0]) || (i_arr1d_op1[1] % (int)ul_arr1d_op2[0] != i_arr1d_op1[1] % f_arr1d_op2[0]) || (i_arr1d_op1[1] % f_arr1d_op2[0] != i_arr1d_op1[1] % d_arr1d_op2[0]) || ((decimal)(i_arr1d_op1[1] % d_arr1d_op2[0]) != i_arr1d_op1[1] % m_arr1d_op2[0]) || (i_arr1d_op1[1] % m_arr1d_op2[0] != i_arr1d_op1[1] % i_arr1d_op2[0]) || (i_arr1d_op1[1] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((i_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)s_ul_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)s_ul_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2")) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)cl1.ul_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)cl1.ul_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)vt1.ul_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)vt1.ul_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (i_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) != i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)s_ul_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)s_ul_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2")) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)cl1.ul_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)cl1.ul_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)vt1.ul_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)vt1.ul_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % (int)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(i_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (i_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/i8rem.cs b/tests/src/JIT/Methodical/divrem/rem/i8rem.cs
new file mode 100644 (file)
index 0000000..a05c423
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type i8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class i8rem
+{
+    private static long s_l_s_op1 = 7;
+    private static int s_i_s_op2 = 4;
+    private static uint s_ui_s_op2 = 4;
+    private static long s_l_s_op2 = 4;
+    private static ulong s_ul_s_op2 = 4;
+    private static float s_f_s_op2 = 4;
+    private static double s_d_s_op2 = 4;
+    private static decimal s_m_s_op2 = 4;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 7;
+        else
+            return 4;
+    }
+    private class CL
+    {
+        public long l_cl_op1 = 7;
+        public int i_cl_op2 = 4;
+        public uint ui_cl_op2 = 4;
+        public long l_cl_op2 = 4;
+        public ulong ul_cl_op2 = 4;
+        public float f_cl_op2 = 4;
+        public double d_cl_op2 = 4;
+        public decimal m_cl_op2 = 4;
+    }
+
+    private struct VT
+    {
+        public long l_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.l_vt_op1 = 7;
+        vt1.i_vt_op2 = 4;
+        vt1.ui_vt_op2 = 4;
+        vt1.l_vt_op2 = 4;
+        vt1.ul_vt_op2 = 4;
+        vt1.f_vt_op2 = 4;
+        vt1.d_vt_op2 = 4;
+        vt1.m_vt_op2 = 4;
+
+        long[] l_arr1d_op1 = { 0, 7 };
+        long[,] l_arr2d_op1 = { { 0, 7 }, { 1, 1 } };
+        long[,,] l_arr3d_op1 = { { { 0, 7 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 4, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 4, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 4, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 4, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 4, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 4, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 4, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 4 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 4 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            long l_l_op1 = 7;
+            int i_l_op2 = 4;
+            uint ui_l_op2 = 4;
+            long l_l_op2 = 4;
+            ulong ul_l_op2 = 4;
+            float f_l_op2 = 4;
+            double d_l_op2 = 4;
+            decimal m_l_op2 = 4;
+            if ((l_l_op1 % i_l_op2 != l_l_op1 % ui_l_op2) || (l_l_op1 % ui_l_op2 != l_l_op1 % l_l_op2) || (l_l_op1 % l_l_op2 != l_l_op1 % (long)ul_l_op2) || (l_l_op1 % (long)ul_l_op2 != l_l_op1 % f_l_op2) || (l_l_op1 % f_l_op2 != l_l_op1 % d_l_op2) || ((decimal)(l_l_op1 % d_l_op2) != l_l_op1 % m_l_op2) || (l_l_op1 % m_l_op2 != l_l_op1 % i_l_op2) || (l_l_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % s_i_s_op2 != l_l_op1 % s_ui_s_op2) || (l_l_op1 % s_ui_s_op2 != l_l_op1 % s_l_s_op2) || (l_l_op1 % s_l_s_op2 != l_l_op1 % (long)s_ul_s_op2) || (l_l_op1 % (long)s_ul_s_op2 != l_l_op1 % s_f_s_op2) || (l_l_op1 % s_f_s_op2 != l_l_op1 % s_d_s_op2) || ((decimal)(l_l_op1 % s_d_s_op2) != l_l_op1 % s_m_s_op2) || (l_l_op1 % s_m_s_op2 != l_l_op1 % s_i_s_op2) || (l_l_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % l_f("op2") != l_l_op1 % l_f("op2")) || (l_l_op1 % l_f("op2") != l_l_op1 % l_f("op2")) || (l_l_op1 % l_f("op2") != l_l_op1 % (long)l_f("op2")) || (l_l_op1 % (long)l_f("op2") != l_l_op1 % l_f("op2")) || (l_l_op1 % l_f("op2") != l_l_op1 % l_f("op2")) || ((decimal)(l_l_op1 % l_f("op2")) != l_l_op1 % l_f("op2")) || (l_l_op1 % l_f("op2") != l_l_op1 % l_f("op2")) || (l_l_op1 % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % cl1.i_cl_op2 != l_l_op1 % cl1.ui_cl_op2) || (l_l_op1 % cl1.ui_cl_op2 != l_l_op1 % cl1.l_cl_op2) || (l_l_op1 % cl1.l_cl_op2 != l_l_op1 % (long)cl1.ul_cl_op2) || (l_l_op1 % (long)cl1.ul_cl_op2 != l_l_op1 % cl1.f_cl_op2) || (l_l_op1 % cl1.f_cl_op2 != l_l_op1 % cl1.d_cl_op2) || ((decimal)(l_l_op1 % cl1.d_cl_op2) != l_l_op1 % cl1.m_cl_op2) || (l_l_op1 % cl1.m_cl_op2 != l_l_op1 % cl1.i_cl_op2) || (l_l_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % vt1.i_vt_op2 != l_l_op1 % vt1.ui_vt_op2) || (l_l_op1 % vt1.ui_vt_op2 != l_l_op1 % vt1.l_vt_op2) || (l_l_op1 % vt1.l_vt_op2 != l_l_op1 % (long)vt1.ul_vt_op2) || (l_l_op1 % (long)vt1.ul_vt_op2 != l_l_op1 % vt1.f_vt_op2) || (l_l_op1 % vt1.f_vt_op2 != l_l_op1 % vt1.d_vt_op2) || ((decimal)(l_l_op1 % vt1.d_vt_op2) != l_l_op1 % vt1.m_vt_op2) || (l_l_op1 % vt1.m_vt_op2 != l_l_op1 % vt1.i_vt_op2) || (l_l_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % i_arr1d_op2[0] != l_l_op1 % ui_arr1d_op2[0]) || (l_l_op1 % ui_arr1d_op2[0] != l_l_op1 % l_arr1d_op2[0]) || (l_l_op1 % l_arr1d_op2[0] != l_l_op1 % (long)ul_arr1d_op2[0]) || (l_l_op1 % (long)ul_arr1d_op2[0] != l_l_op1 % f_arr1d_op2[0]) || (l_l_op1 % f_arr1d_op2[0] != l_l_op1 % d_arr1d_op2[0]) || ((decimal)(l_l_op1 % d_arr1d_op2[0]) != l_l_op1 % m_arr1d_op2[0]) || (l_l_op1 % m_arr1d_op2[0] != l_l_op1 % i_arr1d_op2[0]) || (l_l_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != l_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != l_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((l_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % i_l_op2 != s_l_s_op1 % ui_l_op2) || (s_l_s_op1 % ui_l_op2 != s_l_s_op1 % l_l_op2) || (s_l_s_op1 % l_l_op2 != s_l_s_op1 % (long)ul_l_op2) || (s_l_s_op1 % (long)ul_l_op2 != s_l_s_op1 % f_l_op2) || (s_l_s_op1 % f_l_op2 != s_l_s_op1 % d_l_op2) || ((decimal)(s_l_s_op1 % d_l_op2) != s_l_s_op1 % m_l_op2) || (s_l_s_op1 % m_l_op2 != s_l_s_op1 % i_l_op2) || (s_l_s_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % s_i_s_op2 != s_l_s_op1 % s_ui_s_op2) || (s_l_s_op1 % s_ui_s_op2 != s_l_s_op1 % s_l_s_op2) || (s_l_s_op1 % s_l_s_op2 != s_l_s_op1 % (long)s_ul_s_op2) || (s_l_s_op1 % (long)s_ul_s_op2 != s_l_s_op1 % s_f_s_op2) || (s_l_s_op1 % s_f_s_op2 != s_l_s_op1 % s_d_s_op2) || ((decimal)(s_l_s_op1 % s_d_s_op2) != s_l_s_op1 % s_m_s_op2) || (s_l_s_op1 % s_m_s_op2 != s_l_s_op1 % s_i_s_op2) || (s_l_s_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % l_f("op2") != s_l_s_op1 % l_f("op2")) || (s_l_s_op1 % l_f("op2") != s_l_s_op1 % l_f("op2")) || (s_l_s_op1 % l_f("op2") != s_l_s_op1 % (long)l_f("op2")) || (s_l_s_op1 % (long)l_f("op2") != s_l_s_op1 % l_f("op2")) || (s_l_s_op1 % l_f("op2") != s_l_s_op1 % l_f("op2")) || ((decimal)(s_l_s_op1 % l_f("op2")) != s_l_s_op1 % l_f("op2")) || (s_l_s_op1 % l_f("op2") != s_l_s_op1 % l_f("op2")) || (s_l_s_op1 % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % cl1.i_cl_op2 != s_l_s_op1 % cl1.ui_cl_op2) || (s_l_s_op1 % cl1.ui_cl_op2 != s_l_s_op1 % cl1.l_cl_op2) || (s_l_s_op1 % cl1.l_cl_op2 != s_l_s_op1 % (long)cl1.ul_cl_op2) || (s_l_s_op1 % (long)cl1.ul_cl_op2 != s_l_s_op1 % cl1.f_cl_op2) || (s_l_s_op1 % cl1.f_cl_op2 != s_l_s_op1 % cl1.d_cl_op2) || ((decimal)(s_l_s_op1 % cl1.d_cl_op2) != s_l_s_op1 % cl1.m_cl_op2) || (s_l_s_op1 % cl1.m_cl_op2 != s_l_s_op1 % cl1.i_cl_op2) || (s_l_s_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % vt1.i_vt_op2 != s_l_s_op1 % vt1.ui_vt_op2) || (s_l_s_op1 % vt1.ui_vt_op2 != s_l_s_op1 % vt1.l_vt_op2) || (s_l_s_op1 % vt1.l_vt_op2 != s_l_s_op1 % (long)vt1.ul_vt_op2) || (s_l_s_op1 % (long)vt1.ul_vt_op2 != s_l_s_op1 % vt1.f_vt_op2) || (s_l_s_op1 % vt1.f_vt_op2 != s_l_s_op1 % vt1.d_vt_op2) || ((decimal)(s_l_s_op1 % vt1.d_vt_op2) != s_l_s_op1 % vt1.m_vt_op2) || (s_l_s_op1 % vt1.m_vt_op2 != s_l_s_op1 % vt1.i_vt_op2) || (s_l_s_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % i_arr1d_op2[0] != s_l_s_op1 % ui_arr1d_op2[0]) || (s_l_s_op1 % ui_arr1d_op2[0] != s_l_s_op1 % l_arr1d_op2[0]) || (s_l_s_op1 % l_arr1d_op2[0] != s_l_s_op1 % (long)ul_arr1d_op2[0]) || (s_l_s_op1 % (long)ul_arr1d_op2[0] != s_l_s_op1 % f_arr1d_op2[0]) || (s_l_s_op1 % f_arr1d_op2[0] != s_l_s_op1 % d_arr1d_op2[0]) || ((decimal)(s_l_s_op1 % d_arr1d_op2[0]) != s_l_s_op1 % m_arr1d_op2[0]) || (s_l_s_op1 % m_arr1d_op2[0] != s_l_s_op1 % i_arr1d_op2[0]) || (s_l_s_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_l_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != s_l_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_l_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_l_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_l_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_l_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_l_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_l_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_l_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % i_l_op2 != l_f("op1") % ui_l_op2) || (l_f("op1") % ui_l_op2 != l_f("op1") % l_l_op2) || (l_f("op1") % l_l_op2 != l_f("op1") % (long)ul_l_op2) || (l_f("op1") % (long)ul_l_op2 != l_f("op1") % f_l_op2) || (l_f("op1") % f_l_op2 != l_f("op1") % d_l_op2) || ((decimal)(l_f("op1") % d_l_op2) != l_f("op1") % m_l_op2) || (l_f("op1") % m_l_op2 != l_f("op1") % i_l_op2) || (l_f("op1") % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % s_i_s_op2 != l_f("op1") % s_ui_s_op2) || (l_f("op1") % s_ui_s_op2 != l_f("op1") % s_l_s_op2) || (l_f("op1") % s_l_s_op2 != l_f("op1") % (long)s_ul_s_op2) || (l_f("op1") % (long)s_ul_s_op2 != l_f("op1") % s_f_s_op2) || (l_f("op1") % s_f_s_op2 != l_f("op1") % s_d_s_op2) || ((decimal)(l_f("op1") % s_d_s_op2) != l_f("op1") % s_m_s_op2) || (l_f("op1") % s_m_s_op2 != l_f("op1") % s_i_s_op2) || (l_f("op1") % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % l_f("op2") != l_f("op1") % l_f("op2")) || (l_f("op1") % l_f("op2") != l_f("op1") % l_f("op2")) || (l_f("op1") % l_f("op2") != l_f("op1") % (long)l_f("op2")) || (l_f("op1") % (long)l_f("op2") != l_f("op1") % l_f("op2")) || (l_f("op1") % l_f("op2") != l_f("op1") % l_f("op2")) || ((decimal)(l_f("op1") % l_f("op2")) != l_f("op1") % l_f("op2")) || (l_f("op1") % l_f("op2") != l_f("op1") % l_f("op2")) || (l_f("op1") % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % cl1.i_cl_op2 != l_f("op1") % cl1.ui_cl_op2) || (l_f("op1") % cl1.ui_cl_op2 != l_f("op1") % cl1.l_cl_op2) || (l_f("op1") % cl1.l_cl_op2 != l_f("op1") % (long)cl1.ul_cl_op2) || (l_f("op1") % (long)cl1.ul_cl_op2 != l_f("op1") % cl1.f_cl_op2) || (l_f("op1") % cl1.f_cl_op2 != l_f("op1") % cl1.d_cl_op2) || ((decimal)(l_f("op1") % cl1.d_cl_op2) != l_f("op1") % cl1.m_cl_op2) || (l_f("op1") % cl1.m_cl_op2 != l_f("op1") % cl1.i_cl_op2) || (l_f("op1") % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % vt1.i_vt_op2 != l_f("op1") % vt1.ui_vt_op2) || (l_f("op1") % vt1.ui_vt_op2 != l_f("op1") % vt1.l_vt_op2) || (l_f("op1") % vt1.l_vt_op2 != l_f("op1") % (long)vt1.ul_vt_op2) || (l_f("op1") % (long)vt1.ul_vt_op2 != l_f("op1") % vt1.f_vt_op2) || (l_f("op1") % vt1.f_vt_op2 != l_f("op1") % vt1.d_vt_op2) || ((decimal)(l_f("op1") % vt1.d_vt_op2) != l_f("op1") % vt1.m_vt_op2) || (l_f("op1") % vt1.m_vt_op2 != l_f("op1") % vt1.i_vt_op2) || (l_f("op1") % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % i_arr1d_op2[0] != l_f("op1") % ui_arr1d_op2[0]) || (l_f("op1") % ui_arr1d_op2[0] != l_f("op1") % l_arr1d_op2[0]) || (l_f("op1") % l_arr1d_op2[0] != l_f("op1") % (long)ul_arr1d_op2[0]) || (l_f("op1") % (long)ul_arr1d_op2[0] != l_f("op1") % f_arr1d_op2[0]) || (l_f("op1") % f_arr1d_op2[0] != l_f("op1") % d_arr1d_op2[0]) || ((decimal)(l_f("op1") % d_arr1d_op2[0]) != l_f("op1") % m_arr1d_op2[0]) || (l_f("op1") % m_arr1d_op2[0] != l_f("op1") % i_arr1d_op2[0]) || (l_f("op1") % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) != l_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != l_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((l_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % i_l_op2 != cl1.l_cl_op1 % ui_l_op2) || (cl1.l_cl_op1 % ui_l_op2 != cl1.l_cl_op1 % l_l_op2) || (cl1.l_cl_op1 % l_l_op2 != cl1.l_cl_op1 % (long)ul_l_op2) || (cl1.l_cl_op1 % (long)ul_l_op2 != cl1.l_cl_op1 % f_l_op2) || (cl1.l_cl_op1 % f_l_op2 != cl1.l_cl_op1 % d_l_op2) || ((decimal)(cl1.l_cl_op1 % d_l_op2) != cl1.l_cl_op1 % m_l_op2) || (cl1.l_cl_op1 % m_l_op2 != cl1.l_cl_op1 % i_l_op2) || (cl1.l_cl_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % s_i_s_op2 != cl1.l_cl_op1 % s_ui_s_op2) || (cl1.l_cl_op1 % s_ui_s_op2 != cl1.l_cl_op1 % s_l_s_op2) || (cl1.l_cl_op1 % s_l_s_op2 != cl1.l_cl_op1 % (long)s_ul_s_op2) || (cl1.l_cl_op1 % (long)s_ul_s_op2 != cl1.l_cl_op1 % s_f_s_op2) || (cl1.l_cl_op1 % s_f_s_op2 != cl1.l_cl_op1 % s_d_s_op2) || ((decimal)(cl1.l_cl_op1 % s_d_s_op2) != cl1.l_cl_op1 % s_m_s_op2) || (cl1.l_cl_op1 % s_m_s_op2 != cl1.l_cl_op1 % s_i_s_op2) || (cl1.l_cl_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % l_f("op2") != cl1.l_cl_op1 % l_f("op2")) || (cl1.l_cl_op1 % l_f("op2") != cl1.l_cl_op1 % l_f("op2")) || (cl1.l_cl_op1 % l_f("op2") != cl1.l_cl_op1 % (long)l_f("op2")) || (cl1.l_cl_op1 % (long)l_f("op2") != cl1.l_cl_op1 % l_f("op2")) || (cl1.l_cl_op1 % l_f("op2") != cl1.l_cl_op1 % l_f("op2")) || ((decimal)(cl1.l_cl_op1 % l_f("op2")) != cl1.l_cl_op1 % l_f("op2")) || (cl1.l_cl_op1 % l_f("op2") != cl1.l_cl_op1 % l_f("op2")) || (cl1.l_cl_op1 % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % cl1.i_cl_op2 != cl1.l_cl_op1 % cl1.ui_cl_op2) || (cl1.l_cl_op1 % cl1.ui_cl_op2 != cl1.l_cl_op1 % cl1.l_cl_op2) || (cl1.l_cl_op1 % cl1.l_cl_op2 != cl1.l_cl_op1 % (long)cl1.ul_cl_op2) || (cl1.l_cl_op1 % (long)cl1.ul_cl_op2 != cl1.l_cl_op1 % cl1.f_cl_op2) || (cl1.l_cl_op1 % cl1.f_cl_op2 != cl1.l_cl_op1 % cl1.d_cl_op2) || ((decimal)(cl1.l_cl_op1 % cl1.d_cl_op2) != cl1.l_cl_op1 % cl1.m_cl_op2) || (cl1.l_cl_op1 % cl1.m_cl_op2 != cl1.l_cl_op1 % cl1.i_cl_op2) || (cl1.l_cl_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % vt1.i_vt_op2 != cl1.l_cl_op1 % vt1.ui_vt_op2) || (cl1.l_cl_op1 % vt1.ui_vt_op2 != cl1.l_cl_op1 % vt1.l_vt_op2) || (cl1.l_cl_op1 % vt1.l_vt_op2 != cl1.l_cl_op1 % (long)vt1.ul_vt_op2) || (cl1.l_cl_op1 % (long)vt1.ul_vt_op2 != cl1.l_cl_op1 % vt1.f_vt_op2) || (cl1.l_cl_op1 % vt1.f_vt_op2 != cl1.l_cl_op1 % vt1.d_vt_op2) || ((decimal)(cl1.l_cl_op1 % vt1.d_vt_op2) != cl1.l_cl_op1 % vt1.m_vt_op2) || (cl1.l_cl_op1 % vt1.m_vt_op2 != cl1.l_cl_op1 % vt1.i_vt_op2) || (cl1.l_cl_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % i_arr1d_op2[0] != cl1.l_cl_op1 % ui_arr1d_op2[0]) || (cl1.l_cl_op1 % ui_arr1d_op2[0] != cl1.l_cl_op1 % l_arr1d_op2[0]) || (cl1.l_cl_op1 % l_arr1d_op2[0] != cl1.l_cl_op1 % (long)ul_arr1d_op2[0]) || (cl1.l_cl_op1 % (long)ul_arr1d_op2[0] != cl1.l_cl_op1 % f_arr1d_op2[0]) || (cl1.l_cl_op1 % f_arr1d_op2[0] != cl1.l_cl_op1 % d_arr1d_op2[0]) || ((decimal)(cl1.l_cl_op1 % d_arr1d_op2[0]) != cl1.l_cl_op1 % m_arr1d_op2[0]) || (cl1.l_cl_op1 % m_arr1d_op2[0] != cl1.l_cl_op1 % i_arr1d_op2[0]) || (cl1.l_cl_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.l_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.l_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.l_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.l_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.l_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.l_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.l_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.l_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.l_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % i_l_op2 != vt1.l_vt_op1 % ui_l_op2) || (vt1.l_vt_op1 % ui_l_op2 != vt1.l_vt_op1 % l_l_op2) || (vt1.l_vt_op1 % l_l_op2 != vt1.l_vt_op1 % (long)ul_l_op2) || (vt1.l_vt_op1 % (long)ul_l_op2 != vt1.l_vt_op1 % f_l_op2) || (vt1.l_vt_op1 % f_l_op2 != vt1.l_vt_op1 % d_l_op2) || ((decimal)(vt1.l_vt_op1 % d_l_op2) != vt1.l_vt_op1 % m_l_op2) || (vt1.l_vt_op1 % m_l_op2 != vt1.l_vt_op1 % i_l_op2) || (vt1.l_vt_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % s_i_s_op2 != vt1.l_vt_op1 % s_ui_s_op2) || (vt1.l_vt_op1 % s_ui_s_op2 != vt1.l_vt_op1 % s_l_s_op2) || (vt1.l_vt_op1 % s_l_s_op2 != vt1.l_vt_op1 % (long)s_ul_s_op2) || (vt1.l_vt_op1 % (long)s_ul_s_op2 != vt1.l_vt_op1 % s_f_s_op2) || (vt1.l_vt_op1 % s_f_s_op2 != vt1.l_vt_op1 % s_d_s_op2) || ((decimal)(vt1.l_vt_op1 % s_d_s_op2) != vt1.l_vt_op1 % s_m_s_op2) || (vt1.l_vt_op1 % s_m_s_op2 != vt1.l_vt_op1 % s_i_s_op2) || (vt1.l_vt_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % l_f("op2") != vt1.l_vt_op1 % l_f("op2")) || (vt1.l_vt_op1 % l_f("op2") != vt1.l_vt_op1 % l_f("op2")) || (vt1.l_vt_op1 % l_f("op2") != vt1.l_vt_op1 % (long)l_f("op2")) || (vt1.l_vt_op1 % (long)l_f("op2") != vt1.l_vt_op1 % l_f("op2")) || (vt1.l_vt_op1 % l_f("op2") != vt1.l_vt_op1 % l_f("op2")) || ((decimal)(vt1.l_vt_op1 % l_f("op2")) != vt1.l_vt_op1 % l_f("op2")) || (vt1.l_vt_op1 % l_f("op2") != vt1.l_vt_op1 % l_f("op2")) || (vt1.l_vt_op1 % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % cl1.i_cl_op2 != vt1.l_vt_op1 % cl1.ui_cl_op2) || (vt1.l_vt_op1 % cl1.ui_cl_op2 != vt1.l_vt_op1 % cl1.l_cl_op2) || (vt1.l_vt_op1 % cl1.l_cl_op2 != vt1.l_vt_op1 % (long)cl1.ul_cl_op2) || (vt1.l_vt_op1 % (long)cl1.ul_cl_op2 != vt1.l_vt_op1 % cl1.f_cl_op2) || (vt1.l_vt_op1 % cl1.f_cl_op2 != vt1.l_vt_op1 % cl1.d_cl_op2) || ((decimal)(vt1.l_vt_op1 % cl1.d_cl_op2) != vt1.l_vt_op1 % cl1.m_cl_op2) || (vt1.l_vt_op1 % cl1.m_cl_op2 != vt1.l_vt_op1 % cl1.i_cl_op2) || (vt1.l_vt_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % vt1.i_vt_op2 != vt1.l_vt_op1 % vt1.ui_vt_op2) || (vt1.l_vt_op1 % vt1.ui_vt_op2 != vt1.l_vt_op1 % vt1.l_vt_op2) || (vt1.l_vt_op1 % vt1.l_vt_op2 != vt1.l_vt_op1 % (long)vt1.ul_vt_op2) || (vt1.l_vt_op1 % (long)vt1.ul_vt_op2 != vt1.l_vt_op1 % vt1.f_vt_op2) || (vt1.l_vt_op1 % vt1.f_vt_op2 != vt1.l_vt_op1 % vt1.d_vt_op2) || ((decimal)(vt1.l_vt_op1 % vt1.d_vt_op2) != vt1.l_vt_op1 % vt1.m_vt_op2) || (vt1.l_vt_op1 % vt1.m_vt_op2 != vt1.l_vt_op1 % vt1.i_vt_op2) || (vt1.l_vt_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % i_arr1d_op2[0] != vt1.l_vt_op1 % ui_arr1d_op2[0]) || (vt1.l_vt_op1 % ui_arr1d_op2[0] != vt1.l_vt_op1 % l_arr1d_op2[0]) || (vt1.l_vt_op1 % l_arr1d_op2[0] != vt1.l_vt_op1 % (long)ul_arr1d_op2[0]) || (vt1.l_vt_op1 % (long)ul_arr1d_op2[0] != vt1.l_vt_op1 % f_arr1d_op2[0]) || (vt1.l_vt_op1 % f_arr1d_op2[0] != vt1.l_vt_op1 % d_arr1d_op2[0]) || ((decimal)(vt1.l_vt_op1 % d_arr1d_op2[0]) != vt1.l_vt_op1 % m_arr1d_op2[0]) || (vt1.l_vt_op1 % m_arr1d_op2[0] != vt1.l_vt_op1 % i_arr1d_op2[0]) || (vt1.l_vt_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.l_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.l_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.l_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.l_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.l_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.l_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.l_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.l_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.l_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % i_l_op2 != l_arr1d_op1[1] % ui_l_op2) || (l_arr1d_op1[1] % ui_l_op2 != l_arr1d_op1[1] % l_l_op2) || (l_arr1d_op1[1] % l_l_op2 != l_arr1d_op1[1] % (long)ul_l_op2) || (l_arr1d_op1[1] % (long)ul_l_op2 != l_arr1d_op1[1] % f_l_op2) || (l_arr1d_op1[1] % f_l_op2 != l_arr1d_op1[1] % d_l_op2) || ((decimal)(l_arr1d_op1[1] % d_l_op2) != l_arr1d_op1[1] % m_l_op2) || (l_arr1d_op1[1] % m_l_op2 != l_arr1d_op1[1] % i_l_op2) || (l_arr1d_op1[1] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % s_i_s_op2 != l_arr1d_op1[1] % s_ui_s_op2) || (l_arr1d_op1[1] % s_ui_s_op2 != l_arr1d_op1[1] % s_l_s_op2) || (l_arr1d_op1[1] % s_l_s_op2 != l_arr1d_op1[1] % (long)s_ul_s_op2) || (l_arr1d_op1[1] % (long)s_ul_s_op2 != l_arr1d_op1[1] % s_f_s_op2) || (l_arr1d_op1[1] % s_f_s_op2 != l_arr1d_op1[1] % s_d_s_op2) || ((decimal)(l_arr1d_op1[1] % s_d_s_op2) != l_arr1d_op1[1] % s_m_s_op2) || (l_arr1d_op1[1] % s_m_s_op2 != l_arr1d_op1[1] % s_i_s_op2) || (l_arr1d_op1[1] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % l_f("op2") != l_arr1d_op1[1] % l_f("op2")) || (l_arr1d_op1[1] % l_f("op2") != l_arr1d_op1[1] % l_f("op2")) || (l_arr1d_op1[1] % l_f("op2") != l_arr1d_op1[1] % (long)l_f("op2")) || (l_arr1d_op1[1] % (long)l_f("op2") != l_arr1d_op1[1] % l_f("op2")) || (l_arr1d_op1[1] % l_f("op2") != l_arr1d_op1[1] % l_f("op2")) || ((decimal)(l_arr1d_op1[1] % l_f("op2")) != l_arr1d_op1[1] % l_f("op2")) || (l_arr1d_op1[1] % l_f("op2") != l_arr1d_op1[1] % l_f("op2")) || (l_arr1d_op1[1] % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % cl1.i_cl_op2 != l_arr1d_op1[1] % cl1.ui_cl_op2) || (l_arr1d_op1[1] % cl1.ui_cl_op2 != l_arr1d_op1[1] % cl1.l_cl_op2) || (l_arr1d_op1[1] % cl1.l_cl_op2 != l_arr1d_op1[1] % (long)cl1.ul_cl_op2) || (l_arr1d_op1[1] % (long)cl1.ul_cl_op2 != l_arr1d_op1[1] % cl1.f_cl_op2) || (l_arr1d_op1[1] % cl1.f_cl_op2 != l_arr1d_op1[1] % cl1.d_cl_op2) || ((decimal)(l_arr1d_op1[1] % cl1.d_cl_op2) != l_arr1d_op1[1] % cl1.m_cl_op2) || (l_arr1d_op1[1] % cl1.m_cl_op2 != l_arr1d_op1[1] % cl1.i_cl_op2) || (l_arr1d_op1[1] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % vt1.i_vt_op2 != l_arr1d_op1[1] % vt1.ui_vt_op2) || (l_arr1d_op1[1] % vt1.ui_vt_op2 != l_arr1d_op1[1] % vt1.l_vt_op2) || (l_arr1d_op1[1] % vt1.l_vt_op2 != l_arr1d_op1[1] % (long)vt1.ul_vt_op2) || (l_arr1d_op1[1] % (long)vt1.ul_vt_op2 != l_arr1d_op1[1] % vt1.f_vt_op2) || (l_arr1d_op1[1] % vt1.f_vt_op2 != l_arr1d_op1[1] % vt1.d_vt_op2) || ((decimal)(l_arr1d_op1[1] % vt1.d_vt_op2) != l_arr1d_op1[1] % vt1.m_vt_op2) || (l_arr1d_op1[1] % vt1.m_vt_op2 != l_arr1d_op1[1] % vt1.i_vt_op2) || (l_arr1d_op1[1] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % i_arr1d_op2[0] != l_arr1d_op1[1] % ui_arr1d_op2[0]) || (l_arr1d_op1[1] % ui_arr1d_op2[0] != l_arr1d_op1[1] % l_arr1d_op2[0]) || (l_arr1d_op1[1] % l_arr1d_op2[0] != l_arr1d_op1[1] % (long)ul_arr1d_op2[0]) || (l_arr1d_op1[1] % (long)ul_arr1d_op2[0] != l_arr1d_op1[1] % f_arr1d_op2[0]) || (l_arr1d_op1[1] % f_arr1d_op2[0] != l_arr1d_op1[1] % d_arr1d_op2[0]) || ((decimal)(l_arr1d_op1[1] % d_arr1d_op2[0]) != l_arr1d_op1[1] % m_arr1d_op2[0]) || (l_arr1d_op1[1] % m_arr1d_op2[0] != l_arr1d_op1[1] % i_arr1d_op2[0]) || (l_arr1d_op1[1] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((l_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)s_ul_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)s_ul_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2")) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)cl1.ul_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)cl1.ul_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)vt1.ul_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)vt1.ul_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (l_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) != l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)s_ul_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)s_ul_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2")) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)cl1.ul_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)cl1.ul_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)vt1.ul_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)vt1.ul_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % (long)ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(l_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (l_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/overldrem.cs b/tests/src/JIT/Methodical/divrem/rem/overldrem.cs
new file mode 100644 (file)
index 0000000..c6cb7fd
--- /dev/null
@@ -0,0 +1,628 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2
+op1 is of a user-defined class numHolder that overloads operator %
+op2 can be i4, u4, i8, u8, r4, r8, decimal and user-defined class numHolder
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class overldrem
+{
+    //user-defined class that overloads operator %
+    public class numHolder
+    {
+        private int _i_num;
+        private uint _ui_num;
+        private long _l_num;
+        private ulong _ul_num;
+        private float _f_num;
+        private double _d_num;
+        private decimal _m_num;
+        public numHolder(int i_num)
+        {
+            _i_num = Convert.ToInt32(i_num);
+            _ui_num = Convert.ToUInt32(i_num);
+            _l_num = Convert.ToInt64(i_num);
+            _ul_num = Convert.ToUInt64(i_num);
+            _f_num = Convert.ToSingle(i_num);
+            _d_num = Convert.ToDouble(i_num);
+            _m_num = Convert.ToDecimal(i_num);
+        }
+
+        public static int operator %(numHolder a, int b)
+        {
+            return a._i_num % b;
+        }
+
+        public numHolder(uint ui_num)
+        {
+            _i_num = Convert.ToInt32(ui_num);
+            _ui_num = Convert.ToUInt32(ui_num);
+            _l_num = Convert.ToInt64(ui_num);
+            _ul_num = Convert.ToUInt64(ui_num);
+            _f_num = Convert.ToSingle(ui_num);
+            _d_num = Convert.ToDouble(ui_num);
+            _m_num = Convert.ToDecimal(ui_num);
+        }
+
+        public static uint operator %(numHolder a, uint b)
+        {
+            return a._ui_num % b;
+        }
+
+        public numHolder(long l_num)
+        {
+            _i_num = Convert.ToInt32(l_num);
+            _ui_num = Convert.ToUInt32(l_num);
+            _l_num = Convert.ToInt64(l_num);
+            _ul_num = Convert.ToUInt64(l_num);
+            _f_num = Convert.ToSingle(l_num);
+            _d_num = Convert.ToDouble(l_num);
+            _m_num = Convert.ToDecimal(l_num);
+        }
+
+        public static long operator %(numHolder a, long b)
+        {
+            return a._l_num % b;
+        }
+
+        public numHolder(ulong ul_num)
+        {
+            _i_num = Convert.ToInt32(ul_num);
+            _ui_num = Convert.ToUInt32(ul_num);
+            _l_num = Convert.ToInt64(ul_num);
+            _ul_num = Convert.ToUInt64(ul_num);
+            _f_num = Convert.ToSingle(ul_num);
+            _d_num = Convert.ToDouble(ul_num);
+            _m_num = Convert.ToDecimal(ul_num);
+        }
+
+        public static long operator %(numHolder a, ulong b)
+        {
+            return (long)(a._ul_num % b);
+        }
+
+        public numHolder(float f_num)
+        {
+            _i_num = Convert.ToInt32(f_num);
+            _ui_num = Convert.ToUInt32(f_num);
+            _l_num = Convert.ToInt64(f_num);
+            _ul_num = Convert.ToUInt64(f_num);
+            _f_num = Convert.ToSingle(f_num);
+            _d_num = Convert.ToDouble(f_num);
+            _m_num = Convert.ToDecimal(f_num);
+        }
+
+        public static float operator %(numHolder a, float b)
+        {
+            return a._f_num % b;
+        }
+
+        public numHolder(double d_num)
+        {
+            _i_num = Convert.ToInt32(d_num);
+            _ui_num = Convert.ToUInt32(d_num);
+            _l_num = Convert.ToInt64(d_num);
+            _ul_num = Convert.ToUInt64(d_num);
+            _f_num = Convert.ToSingle(d_num);
+            _d_num = Convert.ToDouble(d_num);
+            _m_num = Convert.ToDecimal(d_num);
+        }
+
+        public static double operator %(numHolder a, double b)
+        {
+            return a._d_num % b;
+        }
+
+        public numHolder(decimal m_num)
+        {
+            _i_num = Convert.ToInt32(m_num);
+            _ui_num = Convert.ToUInt32(m_num);
+            _l_num = Convert.ToInt64(m_num);
+            _ul_num = Convert.ToUInt64(m_num);
+            _f_num = Convert.ToSingle(m_num);
+            _d_num = Convert.ToDouble(m_num);
+            _m_num = Convert.ToDecimal(m_num);
+        }
+
+        public static int operator %(numHolder a, decimal b)
+        {
+            return (int)(a._m_num % b);
+        }
+
+        public static int operator %(numHolder a, numHolder b)
+        {
+            return a._i_num % b._i_num;
+        }
+    }
+
+    private static numHolder s_nHldr_s_op1 = new numHolder(65);
+
+    private static int s_i_s_op2 = 8;
+    private static uint s_ui_s_op2 = 8;
+    private static long s_l_s_op2 = 8;
+    private static ulong s_ul_s_op2 = 8;
+    private static float s_f_s_op2 = 8;
+    private static double s_d_s_op2 = 8;
+    private static decimal s_m_s_op2 = 8;
+    private static numHolder s_nHldr_s_op2 = new numHolder(8);
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 65;
+        else
+            return 8;
+    }
+    public static numHolder nHldr_f(String s)
+    {
+        if (s == "op1")
+            return new numHolder(65);
+        else
+            return new numHolder(8);
+    }
+    private class CL
+    {
+        public numHolder nHldr_cl_op1 = new numHolder(65);
+
+        public int i_cl_op2 = 8;
+        public uint ui_cl_op2 = 8;
+        public long l_cl_op2 = 8;
+        public ulong ul_cl_op2 = 8;
+        public float f_cl_op2 = 8;
+        public double d_cl_op2 = 8;
+        public decimal m_cl_op2 = 8;
+        public numHolder nHldr_cl_op2 = new numHolder(8);
+    }
+
+    private struct VT
+    {
+        public numHolder nHldr_vt_op1;
+
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+        public numHolder nHldr_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.nHldr_vt_op1 = new numHolder(65);
+        vt1.i_vt_op2 = 8;
+        vt1.ui_vt_op2 = 8;
+        vt1.l_vt_op2 = 8;
+        vt1.ul_vt_op2 = 8;
+        vt1.f_vt_op2 = 8;
+        vt1.d_vt_op2 = 8;
+        vt1.m_vt_op2 = 8;
+        vt1.nHldr_vt_op2 = new numHolder(8);
+
+        numHolder[] nHldr_arr1d_op1 = { new numHolder(0), new numHolder(65) };
+        numHolder[,] nHldr_arr2d_op1 = { { new numHolder(0), new numHolder(65) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op1 = { { { new numHolder(0), new numHolder(65) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[] i_arr1d_op2 = { 8, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 8, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 8, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 8, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 8, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 8, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 8, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 8 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 8 }, { 1, 1 } } };
+        numHolder[] nHldr_arr1d_op2 = { new numHolder(8), new numHolder(0), new numHolder(1) };
+        numHolder[,] nHldr_arr2d_op2 = { { new numHolder(0), new numHolder(8) }, { new numHolder(1), new numHolder(1) } };
+        numHolder[,,] nHldr_arr3d_op2 = { { { new numHolder(0), new numHolder(8) }, { new numHolder(1), new numHolder(1) } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            numHolder nHldr_l_op1 = new numHolder(65);
+            int i_l_op2 = 8;
+            uint ui_l_op2 = 8;
+            long l_l_op2 = 8;
+            ulong ul_l_op2 = 8;
+            float f_l_op2 = 8;
+            double d_l_op2 = 8;
+            decimal m_l_op2 = 8;
+            numHolder nHldr_l_op2 = new numHolder(8);
+            if ((nHldr_l_op1 % i_l_op2 != nHldr_l_op1 % ui_l_op2) || (nHldr_l_op1 % ui_l_op2 != nHldr_l_op1 % l_l_op2) || (nHldr_l_op1 % l_l_op2 != nHldr_l_op1 % ul_l_op2) || (nHldr_l_op1 % ul_l_op2 != nHldr_l_op1 % f_l_op2) || (nHldr_l_op1 % f_l_op2 != nHldr_l_op1 % d_l_op2) || (nHldr_l_op1 % d_l_op2 != nHldr_l_op1 % m_l_op2) || (nHldr_l_op1 % m_l_op2 != nHldr_l_op1 % i_l_op2) || (nHldr_l_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % s_i_s_op2 != nHldr_l_op1 % s_ui_s_op2) || (nHldr_l_op1 % s_ui_s_op2 != nHldr_l_op1 % s_l_s_op2) || (nHldr_l_op1 % s_l_s_op2 != nHldr_l_op1 % s_ul_s_op2) || (nHldr_l_op1 % s_ul_s_op2 != nHldr_l_op1 % s_f_s_op2) || (nHldr_l_op1 % s_f_s_op2 != nHldr_l_op1 % s_d_s_op2) || (nHldr_l_op1 % s_d_s_op2 != nHldr_l_op1 % s_m_s_op2) || (nHldr_l_op1 % s_m_s_op2 != nHldr_l_op1 % s_i_s_op2) || (nHldr_l_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != nHldr_l_op1 % nHldr_f("op2")) || (nHldr_l_op1 % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % cl1.i_cl_op2 != nHldr_l_op1 % cl1.ui_cl_op2) || (nHldr_l_op1 % cl1.ui_cl_op2 != nHldr_l_op1 % cl1.l_cl_op2) || (nHldr_l_op1 % cl1.l_cl_op2 != nHldr_l_op1 % cl1.ul_cl_op2) || (nHldr_l_op1 % cl1.ul_cl_op2 != nHldr_l_op1 % cl1.f_cl_op2) || (nHldr_l_op1 % cl1.f_cl_op2 != nHldr_l_op1 % cl1.d_cl_op2) || (nHldr_l_op1 % cl1.d_cl_op2 != nHldr_l_op1 % cl1.m_cl_op2) || (nHldr_l_op1 % cl1.m_cl_op2 != nHldr_l_op1 % cl1.i_cl_op2) || (nHldr_l_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % vt1.i_vt_op2 != nHldr_l_op1 % vt1.ui_vt_op2) || (nHldr_l_op1 % vt1.ui_vt_op2 != nHldr_l_op1 % vt1.l_vt_op2) || (nHldr_l_op1 % vt1.l_vt_op2 != nHldr_l_op1 % vt1.ul_vt_op2) || (nHldr_l_op1 % vt1.ul_vt_op2 != nHldr_l_op1 % vt1.f_vt_op2) || (nHldr_l_op1 % vt1.f_vt_op2 != nHldr_l_op1 % vt1.d_vt_op2) || (nHldr_l_op1 % vt1.d_vt_op2 != nHldr_l_op1 % vt1.m_vt_op2) || (nHldr_l_op1 % vt1.m_vt_op2 != nHldr_l_op1 % vt1.i_vt_op2) || (nHldr_l_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % i_arr1d_op2[0] != nHldr_l_op1 % ui_arr1d_op2[0]) || (nHldr_l_op1 % ui_arr1d_op2[0] != nHldr_l_op1 % l_arr1d_op2[0]) || (nHldr_l_op1 % l_arr1d_op2[0] != nHldr_l_op1 % ul_arr1d_op2[0]) || (nHldr_l_op1 % ul_arr1d_op2[0] != nHldr_l_op1 % f_arr1d_op2[0]) || (nHldr_l_op1 % f_arr1d_op2[0] != nHldr_l_op1 % d_arr1d_op2[0]) || (nHldr_l_op1 % d_arr1d_op2[0] != nHldr_l_op1 % m_arr1d_op2[0]) || (nHldr_l_op1 % m_arr1d_op2[0] != nHldr_l_op1 % i_arr1d_op2[0]) || (nHldr_l_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((nHldr_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % i_l_op2 != s_nHldr_s_op1 % ui_l_op2) || (s_nHldr_s_op1 % ui_l_op2 != s_nHldr_s_op1 % l_l_op2) || (s_nHldr_s_op1 % l_l_op2 != s_nHldr_s_op1 % ul_l_op2) || (s_nHldr_s_op1 % ul_l_op2 != s_nHldr_s_op1 % f_l_op2) || (s_nHldr_s_op1 % f_l_op2 != s_nHldr_s_op1 % d_l_op2) || (s_nHldr_s_op1 % d_l_op2 != s_nHldr_s_op1 % m_l_op2) || (s_nHldr_s_op1 % m_l_op2 != s_nHldr_s_op1 % i_l_op2) || (s_nHldr_s_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % s_i_s_op2 != s_nHldr_s_op1 % s_ui_s_op2) || (s_nHldr_s_op1 % s_ui_s_op2 != s_nHldr_s_op1 % s_l_s_op2) || (s_nHldr_s_op1 % s_l_s_op2 != s_nHldr_s_op1 % s_ul_s_op2) || (s_nHldr_s_op1 % s_ul_s_op2 != s_nHldr_s_op1 % s_f_s_op2) || (s_nHldr_s_op1 % s_f_s_op2 != s_nHldr_s_op1 % s_d_s_op2) || (s_nHldr_s_op1 % s_d_s_op2 != s_nHldr_s_op1 % s_m_s_op2) || (s_nHldr_s_op1 % s_m_s_op2 != s_nHldr_s_op1 % s_i_s_op2) || (s_nHldr_s_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != s_nHldr_s_op1 % nHldr_f("op2")) || (s_nHldr_s_op1 % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % cl1.i_cl_op2 != s_nHldr_s_op1 % cl1.ui_cl_op2) || (s_nHldr_s_op1 % cl1.ui_cl_op2 != s_nHldr_s_op1 % cl1.l_cl_op2) || (s_nHldr_s_op1 % cl1.l_cl_op2 != s_nHldr_s_op1 % cl1.ul_cl_op2) || (s_nHldr_s_op1 % cl1.ul_cl_op2 != s_nHldr_s_op1 % cl1.f_cl_op2) || (s_nHldr_s_op1 % cl1.f_cl_op2 != s_nHldr_s_op1 % cl1.d_cl_op2) || (s_nHldr_s_op1 % cl1.d_cl_op2 != s_nHldr_s_op1 % cl1.m_cl_op2) || (s_nHldr_s_op1 % cl1.m_cl_op2 != s_nHldr_s_op1 % cl1.i_cl_op2) || (s_nHldr_s_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % vt1.i_vt_op2 != s_nHldr_s_op1 % vt1.ui_vt_op2) || (s_nHldr_s_op1 % vt1.ui_vt_op2 != s_nHldr_s_op1 % vt1.l_vt_op2) || (s_nHldr_s_op1 % vt1.l_vt_op2 != s_nHldr_s_op1 % vt1.ul_vt_op2) || (s_nHldr_s_op1 % vt1.ul_vt_op2 != s_nHldr_s_op1 % vt1.f_vt_op2) || (s_nHldr_s_op1 % vt1.f_vt_op2 != s_nHldr_s_op1 % vt1.d_vt_op2) || (s_nHldr_s_op1 % vt1.d_vt_op2 != s_nHldr_s_op1 % vt1.m_vt_op2) || (s_nHldr_s_op1 % vt1.m_vt_op2 != s_nHldr_s_op1 % vt1.i_vt_op2) || (s_nHldr_s_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % i_arr1d_op2[0] != s_nHldr_s_op1 % ui_arr1d_op2[0]) || (s_nHldr_s_op1 % ui_arr1d_op2[0] != s_nHldr_s_op1 % l_arr1d_op2[0]) || (s_nHldr_s_op1 % l_arr1d_op2[0] != s_nHldr_s_op1 % ul_arr1d_op2[0]) || (s_nHldr_s_op1 % ul_arr1d_op2[0] != s_nHldr_s_op1 % f_arr1d_op2[0]) || (s_nHldr_s_op1 % f_arr1d_op2[0] != s_nHldr_s_op1 % d_arr1d_op2[0]) || (s_nHldr_s_op1 % d_arr1d_op2[0] != s_nHldr_s_op1 % m_arr1d_op2[0]) || (s_nHldr_s_op1 % m_arr1d_op2[0] != s_nHldr_s_op1 % i_arr1d_op2[0]) || (s_nHldr_s_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_nHldr_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_nHldr_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_nHldr_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_nHldr_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_nHldr_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % i_l_op2 != nHldr_f("op1") % ui_l_op2) || (nHldr_f("op1") % ui_l_op2 != nHldr_f("op1") % l_l_op2) || (nHldr_f("op1") % l_l_op2 != nHldr_f("op1") % ul_l_op2) || (nHldr_f("op1") % ul_l_op2 != nHldr_f("op1") % f_l_op2) || (nHldr_f("op1") % f_l_op2 != nHldr_f("op1") % d_l_op2) || (nHldr_f("op1") % d_l_op2 != nHldr_f("op1") % m_l_op2) || (nHldr_f("op1") % m_l_op2 != nHldr_f("op1") % i_l_op2) || (nHldr_f("op1") % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % s_i_s_op2 != nHldr_f("op1") % s_ui_s_op2) || (nHldr_f("op1") % s_ui_s_op2 != nHldr_f("op1") % s_l_s_op2) || (nHldr_f("op1") % s_l_s_op2 != nHldr_f("op1") % s_ul_s_op2) || (nHldr_f("op1") % s_ul_s_op2 != nHldr_f("op1") % s_f_s_op2) || (nHldr_f("op1") % s_f_s_op2 != nHldr_f("op1") % s_d_s_op2) || (nHldr_f("op1") % s_d_s_op2 != nHldr_f("op1") % s_m_s_op2) || (nHldr_f("op1") % s_m_s_op2 != nHldr_f("op1") % s_i_s_op2) || (nHldr_f("op1") % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != nHldr_f("op1") % nHldr_f("op2")) || (nHldr_f("op1") % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % cl1.i_cl_op2 != nHldr_f("op1") % cl1.ui_cl_op2) || (nHldr_f("op1") % cl1.ui_cl_op2 != nHldr_f("op1") % cl1.l_cl_op2) || (nHldr_f("op1") % cl1.l_cl_op2 != nHldr_f("op1") % cl1.ul_cl_op2) || (nHldr_f("op1") % cl1.ul_cl_op2 != nHldr_f("op1") % cl1.f_cl_op2) || (nHldr_f("op1") % cl1.f_cl_op2 != nHldr_f("op1") % cl1.d_cl_op2) || (nHldr_f("op1") % cl1.d_cl_op2 != nHldr_f("op1") % cl1.m_cl_op2) || (nHldr_f("op1") % cl1.m_cl_op2 != nHldr_f("op1") % cl1.i_cl_op2) || (nHldr_f("op1") % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % vt1.i_vt_op2 != nHldr_f("op1") % vt1.ui_vt_op2) || (nHldr_f("op1") % vt1.ui_vt_op2 != nHldr_f("op1") % vt1.l_vt_op2) || (nHldr_f("op1") % vt1.l_vt_op2 != nHldr_f("op1") % vt1.ul_vt_op2) || (nHldr_f("op1") % vt1.ul_vt_op2 != nHldr_f("op1") % vt1.f_vt_op2) || (nHldr_f("op1") % vt1.f_vt_op2 != nHldr_f("op1") % vt1.d_vt_op2) || (nHldr_f("op1") % vt1.d_vt_op2 != nHldr_f("op1") % vt1.m_vt_op2) || (nHldr_f("op1") % vt1.m_vt_op2 != nHldr_f("op1") % vt1.i_vt_op2) || (nHldr_f("op1") % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % i_arr1d_op2[0] != nHldr_f("op1") % ui_arr1d_op2[0]) || (nHldr_f("op1") % ui_arr1d_op2[0] != nHldr_f("op1") % l_arr1d_op2[0]) || (nHldr_f("op1") % l_arr1d_op2[0] != nHldr_f("op1") % ul_arr1d_op2[0]) || (nHldr_f("op1") % ul_arr1d_op2[0] != nHldr_f("op1") % f_arr1d_op2[0]) || (nHldr_f("op1") % f_arr1d_op2[0] != nHldr_f("op1") % d_arr1d_op2[0]) || (nHldr_f("op1") % d_arr1d_op2[0] != nHldr_f("op1") % m_arr1d_op2[0]) || (nHldr_f("op1") % m_arr1d_op2[0] != nHldr_f("op1") % i_arr1d_op2[0]) || (nHldr_f("op1") % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((nHldr_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % i_l_op2 != cl1.nHldr_cl_op1 % ui_l_op2) || (cl1.nHldr_cl_op1 % ui_l_op2 != cl1.nHldr_cl_op1 % l_l_op2) || (cl1.nHldr_cl_op1 % l_l_op2 != cl1.nHldr_cl_op1 % ul_l_op2) || (cl1.nHldr_cl_op1 % ul_l_op2 != cl1.nHldr_cl_op1 % f_l_op2) || (cl1.nHldr_cl_op1 % f_l_op2 != cl1.nHldr_cl_op1 % d_l_op2) || (cl1.nHldr_cl_op1 % d_l_op2 != cl1.nHldr_cl_op1 % m_l_op2) || (cl1.nHldr_cl_op1 % m_l_op2 != cl1.nHldr_cl_op1 % i_l_op2) || (cl1.nHldr_cl_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % s_i_s_op2 != cl1.nHldr_cl_op1 % s_ui_s_op2) || (cl1.nHldr_cl_op1 % s_ui_s_op2 != cl1.nHldr_cl_op1 % s_l_s_op2) || (cl1.nHldr_cl_op1 % s_l_s_op2 != cl1.nHldr_cl_op1 % s_ul_s_op2) || (cl1.nHldr_cl_op1 % s_ul_s_op2 != cl1.nHldr_cl_op1 % s_f_s_op2) || (cl1.nHldr_cl_op1 % s_f_s_op2 != cl1.nHldr_cl_op1 % s_d_s_op2) || (cl1.nHldr_cl_op1 % s_d_s_op2 != cl1.nHldr_cl_op1 % s_m_s_op2) || (cl1.nHldr_cl_op1 % s_m_s_op2 != cl1.nHldr_cl_op1 % s_i_s_op2) || (cl1.nHldr_cl_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != cl1.nHldr_cl_op1 % nHldr_f("op2")) || (cl1.nHldr_cl_op1 % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % cl1.i_cl_op2 != cl1.nHldr_cl_op1 % cl1.ui_cl_op2) || (cl1.nHldr_cl_op1 % cl1.ui_cl_op2 != cl1.nHldr_cl_op1 % cl1.l_cl_op2) || (cl1.nHldr_cl_op1 % cl1.l_cl_op2 != cl1.nHldr_cl_op1 % cl1.ul_cl_op2) || (cl1.nHldr_cl_op1 % cl1.ul_cl_op2 != cl1.nHldr_cl_op1 % cl1.f_cl_op2) || (cl1.nHldr_cl_op1 % cl1.f_cl_op2 != cl1.nHldr_cl_op1 % cl1.d_cl_op2) || (cl1.nHldr_cl_op1 % cl1.d_cl_op2 != cl1.nHldr_cl_op1 % cl1.m_cl_op2) || (cl1.nHldr_cl_op1 % cl1.m_cl_op2 != cl1.nHldr_cl_op1 % cl1.i_cl_op2) || (cl1.nHldr_cl_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % vt1.i_vt_op2 != cl1.nHldr_cl_op1 % vt1.ui_vt_op2) || (cl1.nHldr_cl_op1 % vt1.ui_vt_op2 != cl1.nHldr_cl_op1 % vt1.l_vt_op2) || (cl1.nHldr_cl_op1 % vt1.l_vt_op2 != cl1.nHldr_cl_op1 % vt1.ul_vt_op2) || (cl1.nHldr_cl_op1 % vt1.ul_vt_op2 != cl1.nHldr_cl_op1 % vt1.f_vt_op2) || (cl1.nHldr_cl_op1 % vt1.f_vt_op2 != cl1.nHldr_cl_op1 % vt1.d_vt_op2) || (cl1.nHldr_cl_op1 % vt1.d_vt_op2 != cl1.nHldr_cl_op1 % vt1.m_vt_op2) || (cl1.nHldr_cl_op1 % vt1.m_vt_op2 != cl1.nHldr_cl_op1 % vt1.i_vt_op2) || (cl1.nHldr_cl_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % i_arr1d_op2[0] != cl1.nHldr_cl_op1 % ui_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % ui_arr1d_op2[0] != cl1.nHldr_cl_op1 % l_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % l_arr1d_op2[0] != cl1.nHldr_cl_op1 % ul_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % ul_arr1d_op2[0] != cl1.nHldr_cl_op1 % f_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % f_arr1d_op2[0] != cl1.nHldr_cl_op1 % d_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % d_arr1d_op2[0] != cl1.nHldr_cl_op1 % m_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % m_arr1d_op2[0] != cl1.nHldr_cl_op1 % i_arr1d_op2[0]) || (cl1.nHldr_cl_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.nHldr_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.nHldr_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.nHldr_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.nHldr_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.nHldr_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % i_l_op2 != vt1.nHldr_vt_op1 % ui_l_op2) || (vt1.nHldr_vt_op1 % ui_l_op2 != vt1.nHldr_vt_op1 % l_l_op2) || (vt1.nHldr_vt_op1 % l_l_op2 != vt1.nHldr_vt_op1 % ul_l_op2) || (vt1.nHldr_vt_op1 % ul_l_op2 != vt1.nHldr_vt_op1 % f_l_op2) || (vt1.nHldr_vt_op1 % f_l_op2 != vt1.nHldr_vt_op1 % d_l_op2) || (vt1.nHldr_vt_op1 % d_l_op2 != vt1.nHldr_vt_op1 % m_l_op2) || (vt1.nHldr_vt_op1 % m_l_op2 != vt1.nHldr_vt_op1 % i_l_op2) || (vt1.nHldr_vt_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % s_i_s_op2 != vt1.nHldr_vt_op1 % s_ui_s_op2) || (vt1.nHldr_vt_op1 % s_ui_s_op2 != vt1.nHldr_vt_op1 % s_l_s_op2) || (vt1.nHldr_vt_op1 % s_l_s_op2 != vt1.nHldr_vt_op1 % s_ul_s_op2) || (vt1.nHldr_vt_op1 % s_ul_s_op2 != vt1.nHldr_vt_op1 % s_f_s_op2) || (vt1.nHldr_vt_op1 % s_f_s_op2 != vt1.nHldr_vt_op1 % s_d_s_op2) || (vt1.nHldr_vt_op1 % s_d_s_op2 != vt1.nHldr_vt_op1 % s_m_s_op2) || (vt1.nHldr_vt_op1 % s_m_s_op2 != vt1.nHldr_vt_op1 % s_i_s_op2) || (vt1.nHldr_vt_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != vt1.nHldr_vt_op1 % nHldr_f("op2")) || (vt1.nHldr_vt_op1 % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % cl1.i_cl_op2 != vt1.nHldr_vt_op1 % cl1.ui_cl_op2) || (vt1.nHldr_vt_op1 % cl1.ui_cl_op2 != vt1.nHldr_vt_op1 % cl1.l_cl_op2) || (vt1.nHldr_vt_op1 % cl1.l_cl_op2 != vt1.nHldr_vt_op1 % cl1.ul_cl_op2) || (vt1.nHldr_vt_op1 % cl1.ul_cl_op2 != vt1.nHldr_vt_op1 % cl1.f_cl_op2) || (vt1.nHldr_vt_op1 % cl1.f_cl_op2 != vt1.nHldr_vt_op1 % cl1.d_cl_op2) || (vt1.nHldr_vt_op1 % cl1.d_cl_op2 != vt1.nHldr_vt_op1 % cl1.m_cl_op2) || (vt1.nHldr_vt_op1 % cl1.m_cl_op2 != vt1.nHldr_vt_op1 % cl1.i_cl_op2) || (vt1.nHldr_vt_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % vt1.i_vt_op2 != vt1.nHldr_vt_op1 % vt1.ui_vt_op2) || (vt1.nHldr_vt_op1 % vt1.ui_vt_op2 != vt1.nHldr_vt_op1 % vt1.l_vt_op2) || (vt1.nHldr_vt_op1 % vt1.l_vt_op2 != vt1.nHldr_vt_op1 % vt1.ul_vt_op2) || (vt1.nHldr_vt_op1 % vt1.ul_vt_op2 != vt1.nHldr_vt_op1 % vt1.f_vt_op2) || (vt1.nHldr_vt_op1 % vt1.f_vt_op2 != vt1.nHldr_vt_op1 % vt1.d_vt_op2) || (vt1.nHldr_vt_op1 % vt1.d_vt_op2 != vt1.nHldr_vt_op1 % vt1.m_vt_op2) || (vt1.nHldr_vt_op1 % vt1.m_vt_op2 != vt1.nHldr_vt_op1 % vt1.i_vt_op2) || (vt1.nHldr_vt_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % i_arr1d_op2[0] != vt1.nHldr_vt_op1 % ui_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % ui_arr1d_op2[0] != vt1.nHldr_vt_op1 % l_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % l_arr1d_op2[0] != vt1.nHldr_vt_op1 % ul_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % ul_arr1d_op2[0] != vt1.nHldr_vt_op1 % f_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % f_arr1d_op2[0] != vt1.nHldr_vt_op1 % d_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % d_arr1d_op2[0] != vt1.nHldr_vt_op1 % m_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % m_arr1d_op2[0] != vt1.nHldr_vt_op1 % i_arr1d_op2[0]) || (vt1.nHldr_vt_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.nHldr_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.nHldr_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.nHldr_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.nHldr_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.nHldr_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % i_l_op2 != nHldr_arr1d_op1[1] % ui_l_op2) || (nHldr_arr1d_op1[1] % ui_l_op2 != nHldr_arr1d_op1[1] % l_l_op2) || (nHldr_arr1d_op1[1] % l_l_op2 != nHldr_arr1d_op1[1] % ul_l_op2) || (nHldr_arr1d_op1[1] % ul_l_op2 != nHldr_arr1d_op1[1] % f_l_op2) || (nHldr_arr1d_op1[1] % f_l_op2 != nHldr_arr1d_op1[1] % d_l_op2) || (nHldr_arr1d_op1[1] % d_l_op2 != nHldr_arr1d_op1[1] % m_l_op2) || (nHldr_arr1d_op1[1] % m_l_op2 != nHldr_arr1d_op1[1] % i_l_op2) || (nHldr_arr1d_op1[1] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % s_i_s_op2 != nHldr_arr1d_op1[1] % s_ui_s_op2) || (nHldr_arr1d_op1[1] % s_ui_s_op2 != nHldr_arr1d_op1[1] % s_l_s_op2) || (nHldr_arr1d_op1[1] % s_l_s_op2 != nHldr_arr1d_op1[1] % s_ul_s_op2) || (nHldr_arr1d_op1[1] % s_ul_s_op2 != nHldr_arr1d_op1[1] % s_f_s_op2) || (nHldr_arr1d_op1[1] % s_f_s_op2 != nHldr_arr1d_op1[1] % s_d_s_op2) || (nHldr_arr1d_op1[1] % s_d_s_op2 != nHldr_arr1d_op1[1] % s_m_s_op2) || (nHldr_arr1d_op1[1] % s_m_s_op2 != nHldr_arr1d_op1[1] % s_i_s_op2) || (nHldr_arr1d_op1[1] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != nHldr_arr1d_op1[1] % nHldr_f("op2")) || (nHldr_arr1d_op1[1] % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % cl1.i_cl_op2 != nHldr_arr1d_op1[1] % cl1.ui_cl_op2) || (nHldr_arr1d_op1[1] % cl1.ui_cl_op2 != nHldr_arr1d_op1[1] % cl1.l_cl_op2) || (nHldr_arr1d_op1[1] % cl1.l_cl_op2 != nHldr_arr1d_op1[1] % cl1.ul_cl_op2) || (nHldr_arr1d_op1[1] % cl1.ul_cl_op2 != nHldr_arr1d_op1[1] % cl1.f_cl_op2) || (nHldr_arr1d_op1[1] % cl1.f_cl_op2 != nHldr_arr1d_op1[1] % cl1.d_cl_op2) || (nHldr_arr1d_op1[1] % cl1.d_cl_op2 != nHldr_arr1d_op1[1] % cl1.m_cl_op2) || (nHldr_arr1d_op1[1] % cl1.m_cl_op2 != nHldr_arr1d_op1[1] % cl1.i_cl_op2) || (nHldr_arr1d_op1[1] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % vt1.i_vt_op2 != nHldr_arr1d_op1[1] % vt1.ui_vt_op2) || (nHldr_arr1d_op1[1] % vt1.ui_vt_op2 != nHldr_arr1d_op1[1] % vt1.l_vt_op2) || (nHldr_arr1d_op1[1] % vt1.l_vt_op2 != nHldr_arr1d_op1[1] % vt1.ul_vt_op2) || (nHldr_arr1d_op1[1] % vt1.ul_vt_op2 != nHldr_arr1d_op1[1] % vt1.f_vt_op2) || (nHldr_arr1d_op1[1] % vt1.f_vt_op2 != nHldr_arr1d_op1[1] % vt1.d_vt_op2) || (nHldr_arr1d_op1[1] % vt1.d_vt_op2 != nHldr_arr1d_op1[1] % vt1.m_vt_op2) || (nHldr_arr1d_op1[1] % vt1.m_vt_op2 != nHldr_arr1d_op1[1] % vt1.i_vt_op2) || (nHldr_arr1d_op1[1] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % i_arr1d_op2[0] != nHldr_arr1d_op1[1] % ui_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % ui_arr1d_op2[0] != nHldr_arr1d_op1[1] % l_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % l_arr1d_op2[0] != nHldr_arr1d_op1[1] % ul_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % ul_arr1d_op2[0] != nHldr_arr1d_op1[1] % f_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % f_arr1d_op2[0] != nHldr_arr1d_op1[1] % d_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % d_arr1d_op2[0] != nHldr_arr1d_op1[1] % m_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % m_arr1d_op2[0] != nHldr_arr1d_op1[1] % i_arr1d_op2[0]) || (nHldr_arr1d_op1[1] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((nHldr_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2")) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2")) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % nHldr_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (nHldr_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/packages.config b/tests/src/JIT/Methodical/divrem/rem/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/rem/r4rem.cs b/tests/src/JIT/Methodical/divrem/rem/r4rem.cs
new file mode 100644 (file)
index 0000000..3305b8f
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type r4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class r4rem
+{
+    private static float s_f_s_op1 = 9;
+    private static int s_i_s_op2 = 6;
+    private static uint s_ui_s_op2 = 6;
+    private static long s_l_s_op2 = 6;
+    private static ulong s_ul_s_op2 = 6;
+    private static float s_f_s_op2 = 6;
+    private static double s_d_s_op2 = 6;
+    private static decimal s_m_s_op2 = 6;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 9;
+        else
+            return 6;
+    }
+    private class CL
+    {
+        public float f_cl_op1 = 9;
+        public int i_cl_op2 = 6;
+        public uint ui_cl_op2 = 6;
+        public long l_cl_op2 = 6;
+        public ulong ul_cl_op2 = 6;
+        public float f_cl_op2 = 6;
+        public double d_cl_op2 = 6;
+        public decimal m_cl_op2 = 6;
+    }
+
+    private struct VT
+    {
+        public float f_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.f_vt_op1 = 9;
+        vt1.i_vt_op2 = 6;
+        vt1.ui_vt_op2 = 6;
+        vt1.l_vt_op2 = 6;
+        vt1.ul_vt_op2 = 6;
+        vt1.f_vt_op2 = 6;
+        vt1.d_vt_op2 = 6;
+        vt1.m_vt_op2 = 6;
+
+        float[] f_arr1d_op1 = { 0, 9 };
+        float[,] f_arr2d_op1 = { { 0, 9 }, { 1, 1 } };
+        float[,,] f_arr3d_op1 = { { { 0, 9 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 6, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 6, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 6, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 6, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 6, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 6, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 6, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 6 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 6 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            float f_l_op1 = 9;
+            int i_l_op2 = 6;
+            uint ui_l_op2 = 6;
+            long l_l_op2 = 6;
+            ulong ul_l_op2 = 6;
+            float f_l_op2 = 6;
+            double d_l_op2 = 6;
+            decimal m_l_op2 = 6;
+            if ((f_l_op1 % i_l_op2 != f_l_op1 % ui_l_op2) || (f_l_op1 % ui_l_op2 != f_l_op1 % l_l_op2) || (f_l_op1 % l_l_op2 != f_l_op1 % ul_l_op2) || (f_l_op1 % ul_l_op2 != f_l_op1 % f_l_op2) || (f_l_op1 % f_l_op2 != f_l_op1 % d_l_op2) || (f_l_op1 % d_l_op2 != f_l_op1 % (float)m_l_op2) || (f_l_op1 % (float)m_l_op2 != f_l_op1 % i_l_op2) || (f_l_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % s_i_s_op2 != f_l_op1 % s_ui_s_op2) || (f_l_op1 % s_ui_s_op2 != f_l_op1 % s_l_s_op2) || (f_l_op1 % s_l_s_op2 != f_l_op1 % s_ul_s_op2) || (f_l_op1 % s_ul_s_op2 != f_l_op1 % s_f_s_op2) || (f_l_op1 % s_f_s_op2 != f_l_op1 % s_d_s_op2) || (f_l_op1 % s_d_s_op2 != f_l_op1 % (float)s_m_s_op2) || (f_l_op1 % (float)s_m_s_op2 != f_l_op1 % s_i_s_op2) || (f_l_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != f_l_op1 % (float)f_f("op2")) || (f_l_op1 % (float)f_f("op2") != f_l_op1 % f_f("op2")) || (f_l_op1 % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % cl1.i_cl_op2 != f_l_op1 % cl1.ui_cl_op2) || (f_l_op1 % cl1.ui_cl_op2 != f_l_op1 % cl1.l_cl_op2) || (f_l_op1 % cl1.l_cl_op2 != f_l_op1 % cl1.ul_cl_op2) || (f_l_op1 % cl1.ul_cl_op2 != f_l_op1 % cl1.f_cl_op2) || (f_l_op1 % cl1.f_cl_op2 != f_l_op1 % cl1.d_cl_op2) || (f_l_op1 % cl1.d_cl_op2 != f_l_op1 % (float)cl1.m_cl_op2) || (f_l_op1 % (float)cl1.m_cl_op2 != f_l_op1 % cl1.i_cl_op2) || (f_l_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % vt1.i_vt_op2 != f_l_op1 % vt1.ui_vt_op2) || (f_l_op1 % vt1.ui_vt_op2 != f_l_op1 % vt1.l_vt_op2) || (f_l_op1 % vt1.l_vt_op2 != f_l_op1 % vt1.ul_vt_op2) || (f_l_op1 % vt1.ul_vt_op2 != f_l_op1 % vt1.f_vt_op2) || (f_l_op1 % vt1.f_vt_op2 != f_l_op1 % vt1.d_vt_op2) || (f_l_op1 % vt1.d_vt_op2 != f_l_op1 % (float)vt1.m_vt_op2) || (f_l_op1 % (float)vt1.m_vt_op2 != f_l_op1 % vt1.i_vt_op2) || (f_l_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % i_arr1d_op2[0] != f_l_op1 % ui_arr1d_op2[0]) || (f_l_op1 % ui_arr1d_op2[0] != f_l_op1 % l_arr1d_op2[0]) || (f_l_op1 % l_arr1d_op2[0] != f_l_op1 % ul_arr1d_op2[0]) || (f_l_op1 % ul_arr1d_op2[0] != f_l_op1 % f_arr1d_op2[0]) || (f_l_op1 % f_arr1d_op2[0] != f_l_op1 % d_arr1d_op2[0]) || (f_l_op1 % d_arr1d_op2[0] != f_l_op1 % (float)m_arr1d_op2[0]) || (f_l_op1 % (float)m_arr1d_op2[0] != f_l_op1 % i_arr1d_op2[0]) || (f_l_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((f_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % i_l_op2 != s_f_s_op1 % ui_l_op2) || (s_f_s_op1 % ui_l_op2 != s_f_s_op1 % l_l_op2) || (s_f_s_op1 % l_l_op2 != s_f_s_op1 % ul_l_op2) || (s_f_s_op1 % ul_l_op2 != s_f_s_op1 % f_l_op2) || (s_f_s_op1 % f_l_op2 != s_f_s_op1 % d_l_op2) || (s_f_s_op1 % d_l_op2 != s_f_s_op1 % (float)m_l_op2) || (s_f_s_op1 % (float)m_l_op2 != s_f_s_op1 % i_l_op2) || (s_f_s_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % s_i_s_op2 != s_f_s_op1 % s_ui_s_op2) || (s_f_s_op1 % s_ui_s_op2 != s_f_s_op1 % s_l_s_op2) || (s_f_s_op1 % s_l_s_op2 != s_f_s_op1 % s_ul_s_op2) || (s_f_s_op1 % s_ul_s_op2 != s_f_s_op1 % s_f_s_op2) || (s_f_s_op1 % s_f_s_op2 != s_f_s_op1 % s_d_s_op2) || (s_f_s_op1 % s_d_s_op2 != s_f_s_op1 % (float)s_m_s_op2) || (s_f_s_op1 % (float)s_m_s_op2 != s_f_s_op1 % s_i_s_op2) || (s_f_s_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != s_f_s_op1 % (float)f_f("op2")) || (s_f_s_op1 % (float)f_f("op2") != s_f_s_op1 % f_f("op2")) || (s_f_s_op1 % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % cl1.i_cl_op2 != s_f_s_op1 % cl1.ui_cl_op2) || (s_f_s_op1 % cl1.ui_cl_op2 != s_f_s_op1 % cl1.l_cl_op2) || (s_f_s_op1 % cl1.l_cl_op2 != s_f_s_op1 % cl1.ul_cl_op2) || (s_f_s_op1 % cl1.ul_cl_op2 != s_f_s_op1 % cl1.f_cl_op2) || (s_f_s_op1 % cl1.f_cl_op2 != s_f_s_op1 % cl1.d_cl_op2) || (s_f_s_op1 % cl1.d_cl_op2 != s_f_s_op1 % (float)cl1.m_cl_op2) || (s_f_s_op1 % (float)cl1.m_cl_op2 != s_f_s_op1 % cl1.i_cl_op2) || (s_f_s_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % vt1.i_vt_op2 != s_f_s_op1 % vt1.ui_vt_op2) || (s_f_s_op1 % vt1.ui_vt_op2 != s_f_s_op1 % vt1.l_vt_op2) || (s_f_s_op1 % vt1.l_vt_op2 != s_f_s_op1 % vt1.ul_vt_op2) || (s_f_s_op1 % vt1.ul_vt_op2 != s_f_s_op1 % vt1.f_vt_op2) || (s_f_s_op1 % vt1.f_vt_op2 != s_f_s_op1 % vt1.d_vt_op2) || (s_f_s_op1 % vt1.d_vt_op2 != s_f_s_op1 % (float)vt1.m_vt_op2) || (s_f_s_op1 % (float)vt1.m_vt_op2 != s_f_s_op1 % vt1.i_vt_op2) || (s_f_s_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % i_arr1d_op2[0] != s_f_s_op1 % ui_arr1d_op2[0]) || (s_f_s_op1 % ui_arr1d_op2[0] != s_f_s_op1 % l_arr1d_op2[0]) || (s_f_s_op1 % l_arr1d_op2[0] != s_f_s_op1 % ul_arr1d_op2[0]) || (s_f_s_op1 % ul_arr1d_op2[0] != s_f_s_op1 % f_arr1d_op2[0]) || (s_f_s_op1 % f_arr1d_op2[0] != s_f_s_op1 % d_arr1d_op2[0]) || (s_f_s_op1 % d_arr1d_op2[0] != s_f_s_op1 % (float)m_arr1d_op2[0]) || (s_f_s_op1 % (float)m_arr1d_op2[0] != s_f_s_op1 % i_arr1d_op2[0]) || (s_f_s_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != s_f_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_f_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_f_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_f_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_f_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % i_l_op2 != f_f("op1") % ui_l_op2) || (f_f("op1") % ui_l_op2 != f_f("op1") % l_l_op2) || (f_f("op1") % l_l_op2 != f_f("op1") % ul_l_op2) || (f_f("op1") % ul_l_op2 != f_f("op1") % f_l_op2) || (f_f("op1") % f_l_op2 != f_f("op1") % d_l_op2) || (f_f("op1") % d_l_op2 != f_f("op1") % (float)m_l_op2) || (f_f("op1") % (float)m_l_op2 != f_f("op1") % i_l_op2) || (f_f("op1") % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % s_i_s_op2 != f_f("op1") % s_ui_s_op2) || (f_f("op1") % s_ui_s_op2 != f_f("op1") % s_l_s_op2) || (f_f("op1") % s_l_s_op2 != f_f("op1") % s_ul_s_op2) || (f_f("op1") % s_ul_s_op2 != f_f("op1") % s_f_s_op2) || (f_f("op1") % s_f_s_op2 != f_f("op1") % s_d_s_op2) || (f_f("op1") % s_d_s_op2 != f_f("op1") % (float)s_m_s_op2) || (f_f("op1") % (float)s_m_s_op2 != f_f("op1") % s_i_s_op2) || (f_f("op1") % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != f_f("op1") % (float)f_f("op2")) || (f_f("op1") % (float)f_f("op2") != f_f("op1") % f_f("op2")) || (f_f("op1") % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % cl1.i_cl_op2 != f_f("op1") % cl1.ui_cl_op2) || (f_f("op1") % cl1.ui_cl_op2 != f_f("op1") % cl1.l_cl_op2) || (f_f("op1") % cl1.l_cl_op2 != f_f("op1") % cl1.ul_cl_op2) || (f_f("op1") % cl1.ul_cl_op2 != f_f("op1") % cl1.f_cl_op2) || (f_f("op1") % cl1.f_cl_op2 != f_f("op1") % cl1.d_cl_op2) || (f_f("op1") % cl1.d_cl_op2 != f_f("op1") % (float)cl1.m_cl_op2) || (f_f("op1") % (float)cl1.m_cl_op2 != f_f("op1") % cl1.i_cl_op2) || (f_f("op1") % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % vt1.i_vt_op2 != f_f("op1") % vt1.ui_vt_op2) || (f_f("op1") % vt1.ui_vt_op2 != f_f("op1") % vt1.l_vt_op2) || (f_f("op1") % vt1.l_vt_op2 != f_f("op1") % vt1.ul_vt_op2) || (f_f("op1") % vt1.ul_vt_op2 != f_f("op1") % vt1.f_vt_op2) || (f_f("op1") % vt1.f_vt_op2 != f_f("op1") % vt1.d_vt_op2) || (f_f("op1") % vt1.d_vt_op2 != f_f("op1") % (float)vt1.m_vt_op2) || (f_f("op1") % (float)vt1.m_vt_op2 != f_f("op1") % vt1.i_vt_op2) || (f_f("op1") % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % i_arr1d_op2[0] != f_f("op1") % ui_arr1d_op2[0]) || (f_f("op1") % ui_arr1d_op2[0] != f_f("op1") % l_arr1d_op2[0]) || (f_f("op1") % l_arr1d_op2[0] != f_f("op1") % ul_arr1d_op2[0]) || (f_f("op1") % ul_arr1d_op2[0] != f_f("op1") % f_arr1d_op2[0]) || (f_f("op1") % f_arr1d_op2[0] != f_f("op1") % d_arr1d_op2[0]) || (f_f("op1") % d_arr1d_op2[0] != f_f("op1") % (float)m_arr1d_op2[0]) || (f_f("op1") % (float)m_arr1d_op2[0] != f_f("op1") % i_arr1d_op2[0]) || (f_f("op1") % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((f_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % i_l_op2 != cl1.f_cl_op1 % ui_l_op2) || (cl1.f_cl_op1 % ui_l_op2 != cl1.f_cl_op1 % l_l_op2) || (cl1.f_cl_op1 % l_l_op2 != cl1.f_cl_op1 % ul_l_op2) || (cl1.f_cl_op1 % ul_l_op2 != cl1.f_cl_op1 % f_l_op2) || (cl1.f_cl_op1 % f_l_op2 != cl1.f_cl_op1 % d_l_op2) || (cl1.f_cl_op1 % d_l_op2 != cl1.f_cl_op1 % (float)m_l_op2) || (cl1.f_cl_op1 % (float)m_l_op2 != cl1.f_cl_op1 % i_l_op2) || (cl1.f_cl_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % s_i_s_op2 != cl1.f_cl_op1 % s_ui_s_op2) || (cl1.f_cl_op1 % s_ui_s_op2 != cl1.f_cl_op1 % s_l_s_op2) || (cl1.f_cl_op1 % s_l_s_op2 != cl1.f_cl_op1 % s_ul_s_op2) || (cl1.f_cl_op1 % s_ul_s_op2 != cl1.f_cl_op1 % s_f_s_op2) || (cl1.f_cl_op1 % s_f_s_op2 != cl1.f_cl_op1 % s_d_s_op2) || (cl1.f_cl_op1 % s_d_s_op2 != cl1.f_cl_op1 % (float)s_m_s_op2) || (cl1.f_cl_op1 % (float)s_m_s_op2 != cl1.f_cl_op1 % s_i_s_op2) || (cl1.f_cl_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != cl1.f_cl_op1 % (float)f_f("op2")) || (cl1.f_cl_op1 % (float)f_f("op2") != cl1.f_cl_op1 % f_f("op2")) || (cl1.f_cl_op1 % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % cl1.i_cl_op2 != cl1.f_cl_op1 % cl1.ui_cl_op2) || (cl1.f_cl_op1 % cl1.ui_cl_op2 != cl1.f_cl_op1 % cl1.l_cl_op2) || (cl1.f_cl_op1 % cl1.l_cl_op2 != cl1.f_cl_op1 % cl1.ul_cl_op2) || (cl1.f_cl_op1 % cl1.ul_cl_op2 != cl1.f_cl_op1 % cl1.f_cl_op2) || (cl1.f_cl_op1 % cl1.f_cl_op2 != cl1.f_cl_op1 % cl1.d_cl_op2) || (cl1.f_cl_op1 % cl1.d_cl_op2 != cl1.f_cl_op1 % (float)cl1.m_cl_op2) || (cl1.f_cl_op1 % (float)cl1.m_cl_op2 != cl1.f_cl_op1 % cl1.i_cl_op2) || (cl1.f_cl_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % vt1.i_vt_op2 != cl1.f_cl_op1 % vt1.ui_vt_op2) || (cl1.f_cl_op1 % vt1.ui_vt_op2 != cl1.f_cl_op1 % vt1.l_vt_op2) || (cl1.f_cl_op1 % vt1.l_vt_op2 != cl1.f_cl_op1 % vt1.ul_vt_op2) || (cl1.f_cl_op1 % vt1.ul_vt_op2 != cl1.f_cl_op1 % vt1.f_vt_op2) || (cl1.f_cl_op1 % vt1.f_vt_op2 != cl1.f_cl_op1 % vt1.d_vt_op2) || (cl1.f_cl_op1 % vt1.d_vt_op2 != cl1.f_cl_op1 % (float)vt1.m_vt_op2) || (cl1.f_cl_op1 % (float)vt1.m_vt_op2 != cl1.f_cl_op1 % vt1.i_vt_op2) || (cl1.f_cl_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % i_arr1d_op2[0] != cl1.f_cl_op1 % ui_arr1d_op2[0]) || (cl1.f_cl_op1 % ui_arr1d_op2[0] != cl1.f_cl_op1 % l_arr1d_op2[0]) || (cl1.f_cl_op1 % l_arr1d_op2[0] != cl1.f_cl_op1 % ul_arr1d_op2[0]) || (cl1.f_cl_op1 % ul_arr1d_op2[0] != cl1.f_cl_op1 % f_arr1d_op2[0]) || (cl1.f_cl_op1 % f_arr1d_op2[0] != cl1.f_cl_op1 % d_arr1d_op2[0]) || (cl1.f_cl_op1 % d_arr1d_op2[0] != cl1.f_cl_op1 % (float)m_arr1d_op2[0]) || (cl1.f_cl_op1 % (float)m_arr1d_op2[0] != cl1.f_cl_op1 % i_arr1d_op2[0]) || (cl1.f_cl_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.f_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.f_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.f_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.f_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.f_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % i_l_op2 != vt1.f_vt_op1 % ui_l_op2) || (vt1.f_vt_op1 % ui_l_op2 != vt1.f_vt_op1 % l_l_op2) || (vt1.f_vt_op1 % l_l_op2 != vt1.f_vt_op1 % ul_l_op2) || (vt1.f_vt_op1 % ul_l_op2 != vt1.f_vt_op1 % f_l_op2) || (vt1.f_vt_op1 % f_l_op2 != vt1.f_vt_op1 % d_l_op2) || (vt1.f_vt_op1 % d_l_op2 != vt1.f_vt_op1 % (float)m_l_op2) || (vt1.f_vt_op1 % (float)m_l_op2 != vt1.f_vt_op1 % i_l_op2) || (vt1.f_vt_op1 % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % s_i_s_op2 != vt1.f_vt_op1 % s_ui_s_op2) || (vt1.f_vt_op1 % s_ui_s_op2 != vt1.f_vt_op1 % s_l_s_op2) || (vt1.f_vt_op1 % s_l_s_op2 != vt1.f_vt_op1 % s_ul_s_op2) || (vt1.f_vt_op1 % s_ul_s_op2 != vt1.f_vt_op1 % s_f_s_op2) || (vt1.f_vt_op1 % s_f_s_op2 != vt1.f_vt_op1 % s_d_s_op2) || (vt1.f_vt_op1 % s_d_s_op2 != vt1.f_vt_op1 % (float)s_m_s_op2) || (vt1.f_vt_op1 % (float)s_m_s_op2 != vt1.f_vt_op1 % s_i_s_op2) || (vt1.f_vt_op1 % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != vt1.f_vt_op1 % (float)f_f("op2")) || (vt1.f_vt_op1 % (float)f_f("op2") != vt1.f_vt_op1 % f_f("op2")) || (vt1.f_vt_op1 % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % cl1.i_cl_op2 != vt1.f_vt_op1 % cl1.ui_cl_op2) || (vt1.f_vt_op1 % cl1.ui_cl_op2 != vt1.f_vt_op1 % cl1.l_cl_op2) || (vt1.f_vt_op1 % cl1.l_cl_op2 != vt1.f_vt_op1 % cl1.ul_cl_op2) || (vt1.f_vt_op1 % cl1.ul_cl_op2 != vt1.f_vt_op1 % cl1.f_cl_op2) || (vt1.f_vt_op1 % cl1.f_cl_op2 != vt1.f_vt_op1 % cl1.d_cl_op2) || (vt1.f_vt_op1 % cl1.d_cl_op2 != vt1.f_vt_op1 % (float)cl1.m_cl_op2) || (vt1.f_vt_op1 % (float)cl1.m_cl_op2 != vt1.f_vt_op1 % cl1.i_cl_op2) || (vt1.f_vt_op1 % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % vt1.i_vt_op2 != vt1.f_vt_op1 % vt1.ui_vt_op2) || (vt1.f_vt_op1 % vt1.ui_vt_op2 != vt1.f_vt_op1 % vt1.l_vt_op2) || (vt1.f_vt_op1 % vt1.l_vt_op2 != vt1.f_vt_op1 % vt1.ul_vt_op2) || (vt1.f_vt_op1 % vt1.ul_vt_op2 != vt1.f_vt_op1 % vt1.f_vt_op2) || (vt1.f_vt_op1 % vt1.f_vt_op2 != vt1.f_vt_op1 % vt1.d_vt_op2) || (vt1.f_vt_op1 % vt1.d_vt_op2 != vt1.f_vt_op1 % (float)vt1.m_vt_op2) || (vt1.f_vt_op1 % (float)vt1.m_vt_op2 != vt1.f_vt_op1 % vt1.i_vt_op2) || (vt1.f_vt_op1 % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % i_arr1d_op2[0] != vt1.f_vt_op1 % ui_arr1d_op2[0]) || (vt1.f_vt_op1 % ui_arr1d_op2[0] != vt1.f_vt_op1 % l_arr1d_op2[0]) || (vt1.f_vt_op1 % l_arr1d_op2[0] != vt1.f_vt_op1 % ul_arr1d_op2[0]) || (vt1.f_vt_op1 % ul_arr1d_op2[0] != vt1.f_vt_op1 % f_arr1d_op2[0]) || (vt1.f_vt_op1 % f_arr1d_op2[0] != vt1.f_vt_op1 % d_arr1d_op2[0]) || (vt1.f_vt_op1 % d_arr1d_op2[0] != vt1.f_vt_op1 % (float)m_arr1d_op2[0]) || (vt1.f_vt_op1 % (float)m_arr1d_op2[0] != vt1.f_vt_op1 % i_arr1d_op2[0]) || (vt1.f_vt_op1 % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.f_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.f_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.f_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.f_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.f_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % i_l_op2 != f_arr1d_op1[1] % ui_l_op2) || (f_arr1d_op1[1] % ui_l_op2 != f_arr1d_op1[1] % l_l_op2) || (f_arr1d_op1[1] % l_l_op2 != f_arr1d_op1[1] % ul_l_op2) || (f_arr1d_op1[1] % ul_l_op2 != f_arr1d_op1[1] % f_l_op2) || (f_arr1d_op1[1] % f_l_op2 != f_arr1d_op1[1] % d_l_op2) || (f_arr1d_op1[1] % d_l_op2 != f_arr1d_op1[1] % (float)m_l_op2) || (f_arr1d_op1[1] % (float)m_l_op2 != f_arr1d_op1[1] % i_l_op2) || (f_arr1d_op1[1] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % s_i_s_op2 != f_arr1d_op1[1] % s_ui_s_op2) || (f_arr1d_op1[1] % s_ui_s_op2 != f_arr1d_op1[1] % s_l_s_op2) || (f_arr1d_op1[1] % s_l_s_op2 != f_arr1d_op1[1] % s_ul_s_op2) || (f_arr1d_op1[1] % s_ul_s_op2 != f_arr1d_op1[1] % s_f_s_op2) || (f_arr1d_op1[1] % s_f_s_op2 != f_arr1d_op1[1] % s_d_s_op2) || (f_arr1d_op1[1] % s_d_s_op2 != f_arr1d_op1[1] % (float)s_m_s_op2) || (f_arr1d_op1[1] % (float)s_m_s_op2 != f_arr1d_op1[1] % s_i_s_op2) || (f_arr1d_op1[1] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != f_arr1d_op1[1] % (float)f_f("op2")) || (f_arr1d_op1[1] % (float)f_f("op2") != f_arr1d_op1[1] % f_f("op2")) || (f_arr1d_op1[1] % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % cl1.i_cl_op2 != f_arr1d_op1[1] % cl1.ui_cl_op2) || (f_arr1d_op1[1] % cl1.ui_cl_op2 != f_arr1d_op1[1] % cl1.l_cl_op2) || (f_arr1d_op1[1] % cl1.l_cl_op2 != f_arr1d_op1[1] % cl1.ul_cl_op2) || (f_arr1d_op1[1] % cl1.ul_cl_op2 != f_arr1d_op1[1] % cl1.f_cl_op2) || (f_arr1d_op1[1] % cl1.f_cl_op2 != f_arr1d_op1[1] % cl1.d_cl_op2) || (f_arr1d_op1[1] % cl1.d_cl_op2 != f_arr1d_op1[1] % (float)cl1.m_cl_op2) || (f_arr1d_op1[1] % (float)cl1.m_cl_op2 != f_arr1d_op1[1] % cl1.i_cl_op2) || (f_arr1d_op1[1] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % vt1.i_vt_op2 != f_arr1d_op1[1] % vt1.ui_vt_op2) || (f_arr1d_op1[1] % vt1.ui_vt_op2 != f_arr1d_op1[1] % vt1.l_vt_op2) || (f_arr1d_op1[1] % vt1.l_vt_op2 != f_arr1d_op1[1] % vt1.ul_vt_op2) || (f_arr1d_op1[1] % vt1.ul_vt_op2 != f_arr1d_op1[1] % vt1.f_vt_op2) || (f_arr1d_op1[1] % vt1.f_vt_op2 != f_arr1d_op1[1] % vt1.d_vt_op2) || (f_arr1d_op1[1] % vt1.d_vt_op2 != f_arr1d_op1[1] % (float)vt1.m_vt_op2) || (f_arr1d_op1[1] % (float)vt1.m_vt_op2 != f_arr1d_op1[1] % vt1.i_vt_op2) || (f_arr1d_op1[1] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % i_arr1d_op2[0] != f_arr1d_op1[1] % ui_arr1d_op2[0]) || (f_arr1d_op1[1] % ui_arr1d_op2[0] != f_arr1d_op1[1] % l_arr1d_op2[0]) || (f_arr1d_op1[1] % l_arr1d_op2[0] != f_arr1d_op1[1] % ul_arr1d_op2[0]) || (f_arr1d_op1[1] % ul_arr1d_op2[0] != f_arr1d_op1[1] % f_arr1d_op2[0]) || (f_arr1d_op1[1] % f_arr1d_op2[0] != f_arr1d_op1[1] % d_arr1d_op2[0]) || (f_arr1d_op1[1] % d_arr1d_op2[0] != f_arr1d_op1[1] % (float)m_arr1d_op2[0]) || (f_arr1d_op1[1] % (float)m_arr1d_op2[0] != f_arr1d_op1[1] % i_arr1d_op2[0]) || (f_arr1d_op1[1] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((f_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_l_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)s_m_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)s_m_s_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)f_f("op2") != f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2")) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)cl1.m_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)cl1.m_cl_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)vt1.m_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)vt1.m_vt_op2 != f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (f_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr1d_op2[0] != f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_l_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 3))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)s_m_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)s_m_s_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 3))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)f_f("op2") != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2")) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_f("op2") != 3))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)cl1.m_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)cl1.m_cl_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 3))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)vt1.m_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)vt1.m_vt_op2 != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 3))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr1d_op2[0] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 3))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr2d_op2[index[0, 1], index[1, 0]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 3))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % (float)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (f_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 3))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/r8rem.cs b/tests/src/JIT/Methodical/divrem/rem/r8rem.cs
new file mode 100644 (file)
index 0000000..ca46d08
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type r8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class r8rem
+{
+    private static double s_d_s_op1 = 8;
+    private static int s_i_s_op2 = 7;
+    private static uint s_ui_s_op2 = 7;
+    private static long s_l_s_op2 = 7;
+    private static ulong s_ul_s_op2 = 7;
+    private static float s_f_s_op2 = 7;
+    private static double s_d_s_op2 = 7;
+    private static decimal s_m_s_op2 = 7;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 8;
+        else
+            return 7;
+    }
+    private class CL
+    {
+        public double d_cl_op1 = 8;
+        public int i_cl_op2 = 7;
+        public uint ui_cl_op2 = 7;
+        public long l_cl_op2 = 7;
+        public ulong ul_cl_op2 = 7;
+        public float f_cl_op2 = 7;
+        public double d_cl_op2 = 7;
+        public decimal m_cl_op2 = 7;
+    }
+
+    private struct VT
+    {
+        public double d_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.d_vt_op1 = 8;
+        vt1.i_vt_op2 = 7;
+        vt1.ui_vt_op2 = 7;
+        vt1.l_vt_op2 = 7;
+        vt1.ul_vt_op2 = 7;
+        vt1.f_vt_op2 = 7;
+        vt1.d_vt_op2 = 7;
+        vt1.m_vt_op2 = 7;
+
+        double[] d_arr1d_op1 = { 0, 8 };
+        double[,] d_arr2d_op1 = { { 0, 8 }, { 1, 1 } };
+        double[,,] d_arr3d_op1 = { { { 0, 8 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 7, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 7, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 7, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 7, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 7, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 7, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 7, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 7 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 7 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            double d_l_op1 = 8;
+            int i_l_op2 = 7;
+            uint ui_l_op2 = 7;
+            long l_l_op2 = 7;
+            ulong ul_l_op2 = 7;
+            float f_l_op2 = 7;
+            double d_l_op2 = 7;
+            decimal m_l_op2 = 7;
+            if ((d_l_op1 % i_l_op2 != d_l_op1 % ui_l_op2) || (d_l_op1 % ui_l_op2 != d_l_op1 % l_l_op2) || (d_l_op1 % l_l_op2 != d_l_op1 % ul_l_op2) || (d_l_op1 % ul_l_op2 != d_l_op1 % f_l_op2) || (d_l_op1 % f_l_op2 != d_l_op1 % d_l_op2) || (d_l_op1 % d_l_op2 != d_l_op1 % (double)m_l_op2) || (d_l_op1 % (double)m_l_op2 != d_l_op1 % i_l_op2) || (d_l_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % s_i_s_op2 != d_l_op1 % s_ui_s_op2) || (d_l_op1 % s_ui_s_op2 != d_l_op1 % s_l_s_op2) || (d_l_op1 % s_l_s_op2 != d_l_op1 % s_ul_s_op2) || (d_l_op1 % s_ul_s_op2 != d_l_op1 % s_f_s_op2) || (d_l_op1 % s_f_s_op2 != d_l_op1 % s_d_s_op2) || (d_l_op1 % s_d_s_op2 != d_l_op1 % (double)s_m_s_op2) || (d_l_op1 % (double)s_m_s_op2 != d_l_op1 % s_i_s_op2) || (d_l_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != d_l_op1 % (double)d_f("op2")) || (d_l_op1 % (double)d_f("op2") != d_l_op1 % d_f("op2")) || (d_l_op1 % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % cl1.i_cl_op2 != d_l_op1 % cl1.ui_cl_op2) || (d_l_op1 % cl1.ui_cl_op2 != d_l_op1 % cl1.l_cl_op2) || (d_l_op1 % cl1.l_cl_op2 != d_l_op1 % cl1.ul_cl_op2) || (d_l_op1 % cl1.ul_cl_op2 != d_l_op1 % cl1.f_cl_op2) || (d_l_op1 % cl1.f_cl_op2 != d_l_op1 % cl1.d_cl_op2) || (d_l_op1 % cl1.d_cl_op2 != d_l_op1 % (double)cl1.m_cl_op2) || (d_l_op1 % (double)cl1.m_cl_op2 != d_l_op1 % cl1.i_cl_op2) || (d_l_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % vt1.i_vt_op2 != d_l_op1 % vt1.ui_vt_op2) || (d_l_op1 % vt1.ui_vt_op2 != d_l_op1 % vt1.l_vt_op2) || (d_l_op1 % vt1.l_vt_op2 != d_l_op1 % vt1.ul_vt_op2) || (d_l_op1 % vt1.ul_vt_op2 != d_l_op1 % vt1.f_vt_op2) || (d_l_op1 % vt1.f_vt_op2 != d_l_op1 % vt1.d_vt_op2) || (d_l_op1 % vt1.d_vt_op2 != d_l_op1 % (double)vt1.m_vt_op2) || (d_l_op1 % (double)vt1.m_vt_op2 != d_l_op1 % vt1.i_vt_op2) || (d_l_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % i_arr1d_op2[0] != d_l_op1 % ui_arr1d_op2[0]) || (d_l_op1 % ui_arr1d_op2[0] != d_l_op1 % l_arr1d_op2[0]) || (d_l_op1 % l_arr1d_op2[0] != d_l_op1 % ul_arr1d_op2[0]) || (d_l_op1 % ul_arr1d_op2[0] != d_l_op1 % f_arr1d_op2[0]) || (d_l_op1 % f_arr1d_op2[0] != d_l_op1 % d_arr1d_op2[0]) || (d_l_op1 % d_arr1d_op2[0] != d_l_op1 % (double)m_arr1d_op2[0]) || (d_l_op1 % (double)m_arr1d_op2[0] != d_l_op1 % i_arr1d_op2[0]) || (d_l_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((d_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % i_l_op2 != s_d_s_op1 % ui_l_op2) || (s_d_s_op1 % ui_l_op2 != s_d_s_op1 % l_l_op2) || (s_d_s_op1 % l_l_op2 != s_d_s_op1 % ul_l_op2) || (s_d_s_op1 % ul_l_op2 != s_d_s_op1 % f_l_op2) || (s_d_s_op1 % f_l_op2 != s_d_s_op1 % d_l_op2) || (s_d_s_op1 % d_l_op2 != s_d_s_op1 % (double)m_l_op2) || (s_d_s_op1 % (double)m_l_op2 != s_d_s_op1 % i_l_op2) || (s_d_s_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % s_i_s_op2 != s_d_s_op1 % s_ui_s_op2) || (s_d_s_op1 % s_ui_s_op2 != s_d_s_op1 % s_l_s_op2) || (s_d_s_op1 % s_l_s_op2 != s_d_s_op1 % s_ul_s_op2) || (s_d_s_op1 % s_ul_s_op2 != s_d_s_op1 % s_f_s_op2) || (s_d_s_op1 % s_f_s_op2 != s_d_s_op1 % s_d_s_op2) || (s_d_s_op1 % s_d_s_op2 != s_d_s_op1 % (double)s_m_s_op2) || (s_d_s_op1 % (double)s_m_s_op2 != s_d_s_op1 % s_i_s_op2) || (s_d_s_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != s_d_s_op1 % (double)d_f("op2")) || (s_d_s_op1 % (double)d_f("op2") != s_d_s_op1 % d_f("op2")) || (s_d_s_op1 % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % cl1.i_cl_op2 != s_d_s_op1 % cl1.ui_cl_op2) || (s_d_s_op1 % cl1.ui_cl_op2 != s_d_s_op1 % cl1.l_cl_op2) || (s_d_s_op1 % cl1.l_cl_op2 != s_d_s_op1 % cl1.ul_cl_op2) || (s_d_s_op1 % cl1.ul_cl_op2 != s_d_s_op1 % cl1.f_cl_op2) || (s_d_s_op1 % cl1.f_cl_op2 != s_d_s_op1 % cl1.d_cl_op2) || (s_d_s_op1 % cl1.d_cl_op2 != s_d_s_op1 % (double)cl1.m_cl_op2) || (s_d_s_op1 % (double)cl1.m_cl_op2 != s_d_s_op1 % cl1.i_cl_op2) || (s_d_s_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % vt1.i_vt_op2 != s_d_s_op1 % vt1.ui_vt_op2) || (s_d_s_op1 % vt1.ui_vt_op2 != s_d_s_op1 % vt1.l_vt_op2) || (s_d_s_op1 % vt1.l_vt_op2 != s_d_s_op1 % vt1.ul_vt_op2) || (s_d_s_op1 % vt1.ul_vt_op2 != s_d_s_op1 % vt1.f_vt_op2) || (s_d_s_op1 % vt1.f_vt_op2 != s_d_s_op1 % vt1.d_vt_op2) || (s_d_s_op1 % vt1.d_vt_op2 != s_d_s_op1 % (double)vt1.m_vt_op2) || (s_d_s_op1 % (double)vt1.m_vt_op2 != s_d_s_op1 % vt1.i_vt_op2) || (s_d_s_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % i_arr1d_op2[0] != s_d_s_op1 % ui_arr1d_op2[0]) || (s_d_s_op1 % ui_arr1d_op2[0] != s_d_s_op1 % l_arr1d_op2[0]) || (s_d_s_op1 % l_arr1d_op2[0] != s_d_s_op1 % ul_arr1d_op2[0]) || (s_d_s_op1 % ul_arr1d_op2[0] != s_d_s_op1 % f_arr1d_op2[0]) || (s_d_s_op1 % f_arr1d_op2[0] != s_d_s_op1 % d_arr1d_op2[0]) || (s_d_s_op1 % d_arr1d_op2[0] != s_d_s_op1 % (double)m_arr1d_op2[0]) || (s_d_s_op1 % (double)m_arr1d_op2[0] != s_d_s_op1 % i_arr1d_op2[0]) || (s_d_s_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != s_d_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_d_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_d_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_d_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_d_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % i_l_op2 != d_f("op1") % ui_l_op2) || (d_f("op1") % ui_l_op2 != d_f("op1") % l_l_op2) || (d_f("op1") % l_l_op2 != d_f("op1") % ul_l_op2) || (d_f("op1") % ul_l_op2 != d_f("op1") % f_l_op2) || (d_f("op1") % f_l_op2 != d_f("op1") % d_l_op2) || (d_f("op1") % d_l_op2 != d_f("op1") % (double)m_l_op2) || (d_f("op1") % (double)m_l_op2 != d_f("op1") % i_l_op2) || (d_f("op1") % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % s_i_s_op2 != d_f("op1") % s_ui_s_op2) || (d_f("op1") % s_ui_s_op2 != d_f("op1") % s_l_s_op2) || (d_f("op1") % s_l_s_op2 != d_f("op1") % s_ul_s_op2) || (d_f("op1") % s_ul_s_op2 != d_f("op1") % s_f_s_op2) || (d_f("op1") % s_f_s_op2 != d_f("op1") % s_d_s_op2) || (d_f("op1") % s_d_s_op2 != d_f("op1") % (double)s_m_s_op2) || (d_f("op1") % (double)s_m_s_op2 != d_f("op1") % s_i_s_op2) || (d_f("op1") % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != d_f("op1") % (double)d_f("op2")) || (d_f("op1") % (double)d_f("op2") != d_f("op1") % d_f("op2")) || (d_f("op1") % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % cl1.i_cl_op2 != d_f("op1") % cl1.ui_cl_op2) || (d_f("op1") % cl1.ui_cl_op2 != d_f("op1") % cl1.l_cl_op2) || (d_f("op1") % cl1.l_cl_op2 != d_f("op1") % cl1.ul_cl_op2) || (d_f("op1") % cl1.ul_cl_op2 != d_f("op1") % cl1.f_cl_op2) || (d_f("op1") % cl1.f_cl_op2 != d_f("op1") % cl1.d_cl_op2) || (d_f("op1") % cl1.d_cl_op2 != d_f("op1") % (double)cl1.m_cl_op2) || (d_f("op1") % (double)cl1.m_cl_op2 != d_f("op1") % cl1.i_cl_op2) || (d_f("op1") % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % vt1.i_vt_op2 != d_f("op1") % vt1.ui_vt_op2) || (d_f("op1") % vt1.ui_vt_op2 != d_f("op1") % vt1.l_vt_op2) || (d_f("op1") % vt1.l_vt_op2 != d_f("op1") % vt1.ul_vt_op2) || (d_f("op1") % vt1.ul_vt_op2 != d_f("op1") % vt1.f_vt_op2) || (d_f("op1") % vt1.f_vt_op2 != d_f("op1") % vt1.d_vt_op2) || (d_f("op1") % vt1.d_vt_op2 != d_f("op1") % (double)vt1.m_vt_op2) || (d_f("op1") % (double)vt1.m_vt_op2 != d_f("op1") % vt1.i_vt_op2) || (d_f("op1") % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % i_arr1d_op2[0] != d_f("op1") % ui_arr1d_op2[0]) || (d_f("op1") % ui_arr1d_op2[0] != d_f("op1") % l_arr1d_op2[0]) || (d_f("op1") % l_arr1d_op2[0] != d_f("op1") % ul_arr1d_op2[0]) || (d_f("op1") % ul_arr1d_op2[0] != d_f("op1") % f_arr1d_op2[0]) || (d_f("op1") % f_arr1d_op2[0] != d_f("op1") % d_arr1d_op2[0]) || (d_f("op1") % d_arr1d_op2[0] != d_f("op1") % (double)m_arr1d_op2[0]) || (d_f("op1") % (double)m_arr1d_op2[0] != d_f("op1") % i_arr1d_op2[0]) || (d_f("op1") % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((d_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % i_l_op2 != cl1.d_cl_op1 % ui_l_op2) || (cl1.d_cl_op1 % ui_l_op2 != cl1.d_cl_op1 % l_l_op2) || (cl1.d_cl_op1 % l_l_op2 != cl1.d_cl_op1 % ul_l_op2) || (cl1.d_cl_op1 % ul_l_op2 != cl1.d_cl_op1 % f_l_op2) || (cl1.d_cl_op1 % f_l_op2 != cl1.d_cl_op1 % d_l_op2) || (cl1.d_cl_op1 % d_l_op2 != cl1.d_cl_op1 % (double)m_l_op2) || (cl1.d_cl_op1 % (double)m_l_op2 != cl1.d_cl_op1 % i_l_op2) || (cl1.d_cl_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % s_i_s_op2 != cl1.d_cl_op1 % s_ui_s_op2) || (cl1.d_cl_op1 % s_ui_s_op2 != cl1.d_cl_op1 % s_l_s_op2) || (cl1.d_cl_op1 % s_l_s_op2 != cl1.d_cl_op1 % s_ul_s_op2) || (cl1.d_cl_op1 % s_ul_s_op2 != cl1.d_cl_op1 % s_f_s_op2) || (cl1.d_cl_op1 % s_f_s_op2 != cl1.d_cl_op1 % s_d_s_op2) || (cl1.d_cl_op1 % s_d_s_op2 != cl1.d_cl_op1 % (double)s_m_s_op2) || (cl1.d_cl_op1 % (double)s_m_s_op2 != cl1.d_cl_op1 % s_i_s_op2) || (cl1.d_cl_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != cl1.d_cl_op1 % (double)d_f("op2")) || (cl1.d_cl_op1 % (double)d_f("op2") != cl1.d_cl_op1 % d_f("op2")) || (cl1.d_cl_op1 % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % cl1.i_cl_op2 != cl1.d_cl_op1 % cl1.ui_cl_op2) || (cl1.d_cl_op1 % cl1.ui_cl_op2 != cl1.d_cl_op1 % cl1.l_cl_op2) || (cl1.d_cl_op1 % cl1.l_cl_op2 != cl1.d_cl_op1 % cl1.ul_cl_op2) || (cl1.d_cl_op1 % cl1.ul_cl_op2 != cl1.d_cl_op1 % cl1.f_cl_op2) || (cl1.d_cl_op1 % cl1.f_cl_op2 != cl1.d_cl_op1 % cl1.d_cl_op2) || (cl1.d_cl_op1 % cl1.d_cl_op2 != cl1.d_cl_op1 % (double)cl1.m_cl_op2) || (cl1.d_cl_op1 % (double)cl1.m_cl_op2 != cl1.d_cl_op1 % cl1.i_cl_op2) || (cl1.d_cl_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % vt1.i_vt_op2 != cl1.d_cl_op1 % vt1.ui_vt_op2) || (cl1.d_cl_op1 % vt1.ui_vt_op2 != cl1.d_cl_op1 % vt1.l_vt_op2) || (cl1.d_cl_op1 % vt1.l_vt_op2 != cl1.d_cl_op1 % vt1.ul_vt_op2) || (cl1.d_cl_op1 % vt1.ul_vt_op2 != cl1.d_cl_op1 % vt1.f_vt_op2) || (cl1.d_cl_op1 % vt1.f_vt_op2 != cl1.d_cl_op1 % vt1.d_vt_op2) || (cl1.d_cl_op1 % vt1.d_vt_op2 != cl1.d_cl_op1 % (double)vt1.m_vt_op2) || (cl1.d_cl_op1 % (double)vt1.m_vt_op2 != cl1.d_cl_op1 % vt1.i_vt_op2) || (cl1.d_cl_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % i_arr1d_op2[0] != cl1.d_cl_op1 % ui_arr1d_op2[0]) || (cl1.d_cl_op1 % ui_arr1d_op2[0] != cl1.d_cl_op1 % l_arr1d_op2[0]) || (cl1.d_cl_op1 % l_arr1d_op2[0] != cl1.d_cl_op1 % ul_arr1d_op2[0]) || (cl1.d_cl_op1 % ul_arr1d_op2[0] != cl1.d_cl_op1 % f_arr1d_op2[0]) || (cl1.d_cl_op1 % f_arr1d_op2[0] != cl1.d_cl_op1 % d_arr1d_op2[0]) || (cl1.d_cl_op1 % d_arr1d_op2[0] != cl1.d_cl_op1 % (double)m_arr1d_op2[0]) || (cl1.d_cl_op1 % (double)m_arr1d_op2[0] != cl1.d_cl_op1 % i_arr1d_op2[0]) || (cl1.d_cl_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.d_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.d_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.d_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.d_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.d_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % i_l_op2 != vt1.d_vt_op1 % ui_l_op2) || (vt1.d_vt_op1 % ui_l_op2 != vt1.d_vt_op1 % l_l_op2) || (vt1.d_vt_op1 % l_l_op2 != vt1.d_vt_op1 % ul_l_op2) || (vt1.d_vt_op1 % ul_l_op2 != vt1.d_vt_op1 % f_l_op2) || (vt1.d_vt_op1 % f_l_op2 != vt1.d_vt_op1 % d_l_op2) || (vt1.d_vt_op1 % d_l_op2 != vt1.d_vt_op1 % (double)m_l_op2) || (vt1.d_vt_op1 % (double)m_l_op2 != vt1.d_vt_op1 % i_l_op2) || (vt1.d_vt_op1 % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % s_i_s_op2 != vt1.d_vt_op1 % s_ui_s_op2) || (vt1.d_vt_op1 % s_ui_s_op2 != vt1.d_vt_op1 % s_l_s_op2) || (vt1.d_vt_op1 % s_l_s_op2 != vt1.d_vt_op1 % s_ul_s_op2) || (vt1.d_vt_op1 % s_ul_s_op2 != vt1.d_vt_op1 % s_f_s_op2) || (vt1.d_vt_op1 % s_f_s_op2 != vt1.d_vt_op1 % s_d_s_op2) || (vt1.d_vt_op1 % s_d_s_op2 != vt1.d_vt_op1 % (double)s_m_s_op2) || (vt1.d_vt_op1 % (double)s_m_s_op2 != vt1.d_vt_op1 % s_i_s_op2) || (vt1.d_vt_op1 % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != vt1.d_vt_op1 % (double)d_f("op2")) || (vt1.d_vt_op1 % (double)d_f("op2") != vt1.d_vt_op1 % d_f("op2")) || (vt1.d_vt_op1 % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % cl1.i_cl_op2 != vt1.d_vt_op1 % cl1.ui_cl_op2) || (vt1.d_vt_op1 % cl1.ui_cl_op2 != vt1.d_vt_op1 % cl1.l_cl_op2) || (vt1.d_vt_op1 % cl1.l_cl_op2 != vt1.d_vt_op1 % cl1.ul_cl_op2) || (vt1.d_vt_op1 % cl1.ul_cl_op2 != vt1.d_vt_op1 % cl1.f_cl_op2) || (vt1.d_vt_op1 % cl1.f_cl_op2 != vt1.d_vt_op1 % cl1.d_cl_op2) || (vt1.d_vt_op1 % cl1.d_cl_op2 != vt1.d_vt_op1 % (double)cl1.m_cl_op2) || (vt1.d_vt_op1 % (double)cl1.m_cl_op2 != vt1.d_vt_op1 % cl1.i_cl_op2) || (vt1.d_vt_op1 % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % vt1.i_vt_op2 != vt1.d_vt_op1 % vt1.ui_vt_op2) || (vt1.d_vt_op1 % vt1.ui_vt_op2 != vt1.d_vt_op1 % vt1.l_vt_op2) || (vt1.d_vt_op1 % vt1.l_vt_op2 != vt1.d_vt_op1 % vt1.ul_vt_op2) || (vt1.d_vt_op1 % vt1.ul_vt_op2 != vt1.d_vt_op1 % vt1.f_vt_op2) || (vt1.d_vt_op1 % vt1.f_vt_op2 != vt1.d_vt_op1 % vt1.d_vt_op2) || (vt1.d_vt_op1 % vt1.d_vt_op2 != vt1.d_vt_op1 % (double)vt1.m_vt_op2) || (vt1.d_vt_op1 % (double)vt1.m_vt_op2 != vt1.d_vt_op1 % vt1.i_vt_op2) || (vt1.d_vt_op1 % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % i_arr1d_op2[0] != vt1.d_vt_op1 % ui_arr1d_op2[0]) || (vt1.d_vt_op1 % ui_arr1d_op2[0] != vt1.d_vt_op1 % l_arr1d_op2[0]) || (vt1.d_vt_op1 % l_arr1d_op2[0] != vt1.d_vt_op1 % ul_arr1d_op2[0]) || (vt1.d_vt_op1 % ul_arr1d_op2[0] != vt1.d_vt_op1 % f_arr1d_op2[0]) || (vt1.d_vt_op1 % f_arr1d_op2[0] != vt1.d_vt_op1 % d_arr1d_op2[0]) || (vt1.d_vt_op1 % d_arr1d_op2[0] != vt1.d_vt_op1 % (double)m_arr1d_op2[0]) || (vt1.d_vt_op1 % (double)m_arr1d_op2[0] != vt1.d_vt_op1 % i_arr1d_op2[0]) || (vt1.d_vt_op1 % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.d_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.d_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.d_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.d_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.d_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % i_l_op2 != d_arr1d_op1[1] % ui_l_op2) || (d_arr1d_op1[1] % ui_l_op2 != d_arr1d_op1[1] % l_l_op2) || (d_arr1d_op1[1] % l_l_op2 != d_arr1d_op1[1] % ul_l_op2) || (d_arr1d_op1[1] % ul_l_op2 != d_arr1d_op1[1] % f_l_op2) || (d_arr1d_op1[1] % f_l_op2 != d_arr1d_op1[1] % d_l_op2) || (d_arr1d_op1[1] % d_l_op2 != d_arr1d_op1[1] % (double)m_l_op2) || (d_arr1d_op1[1] % (double)m_l_op2 != d_arr1d_op1[1] % i_l_op2) || (d_arr1d_op1[1] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % s_i_s_op2 != d_arr1d_op1[1] % s_ui_s_op2) || (d_arr1d_op1[1] % s_ui_s_op2 != d_arr1d_op1[1] % s_l_s_op2) || (d_arr1d_op1[1] % s_l_s_op2 != d_arr1d_op1[1] % s_ul_s_op2) || (d_arr1d_op1[1] % s_ul_s_op2 != d_arr1d_op1[1] % s_f_s_op2) || (d_arr1d_op1[1] % s_f_s_op2 != d_arr1d_op1[1] % s_d_s_op2) || (d_arr1d_op1[1] % s_d_s_op2 != d_arr1d_op1[1] % (double)s_m_s_op2) || (d_arr1d_op1[1] % (double)s_m_s_op2 != d_arr1d_op1[1] % s_i_s_op2) || (d_arr1d_op1[1] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != d_arr1d_op1[1] % (double)d_f("op2")) || (d_arr1d_op1[1] % (double)d_f("op2") != d_arr1d_op1[1] % d_f("op2")) || (d_arr1d_op1[1] % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % cl1.i_cl_op2 != d_arr1d_op1[1] % cl1.ui_cl_op2) || (d_arr1d_op1[1] % cl1.ui_cl_op2 != d_arr1d_op1[1] % cl1.l_cl_op2) || (d_arr1d_op1[1] % cl1.l_cl_op2 != d_arr1d_op1[1] % cl1.ul_cl_op2) || (d_arr1d_op1[1] % cl1.ul_cl_op2 != d_arr1d_op1[1] % cl1.f_cl_op2) || (d_arr1d_op1[1] % cl1.f_cl_op2 != d_arr1d_op1[1] % cl1.d_cl_op2) || (d_arr1d_op1[1] % cl1.d_cl_op2 != d_arr1d_op1[1] % (double)cl1.m_cl_op2) || (d_arr1d_op1[1] % (double)cl1.m_cl_op2 != d_arr1d_op1[1] % cl1.i_cl_op2) || (d_arr1d_op1[1] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % vt1.i_vt_op2 != d_arr1d_op1[1] % vt1.ui_vt_op2) || (d_arr1d_op1[1] % vt1.ui_vt_op2 != d_arr1d_op1[1] % vt1.l_vt_op2) || (d_arr1d_op1[1] % vt1.l_vt_op2 != d_arr1d_op1[1] % vt1.ul_vt_op2) || (d_arr1d_op1[1] % vt1.ul_vt_op2 != d_arr1d_op1[1] % vt1.f_vt_op2) || (d_arr1d_op1[1] % vt1.f_vt_op2 != d_arr1d_op1[1] % vt1.d_vt_op2) || (d_arr1d_op1[1] % vt1.d_vt_op2 != d_arr1d_op1[1] % (double)vt1.m_vt_op2) || (d_arr1d_op1[1] % (double)vt1.m_vt_op2 != d_arr1d_op1[1] % vt1.i_vt_op2) || (d_arr1d_op1[1] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % i_arr1d_op2[0] != d_arr1d_op1[1] % ui_arr1d_op2[0]) || (d_arr1d_op1[1] % ui_arr1d_op2[0] != d_arr1d_op1[1] % l_arr1d_op2[0]) || (d_arr1d_op1[1] % l_arr1d_op2[0] != d_arr1d_op1[1] % ul_arr1d_op2[0]) || (d_arr1d_op1[1] % ul_arr1d_op2[0] != d_arr1d_op1[1] % f_arr1d_op2[0]) || (d_arr1d_op1[1] % f_arr1d_op2[0] != d_arr1d_op1[1] % d_arr1d_op2[0]) || (d_arr1d_op1[1] % d_arr1d_op2[0] != d_arr1d_op1[1] % (double)m_arr1d_op2[0]) || (d_arr1d_op1[1] % (double)m_arr1d_op2[0] != d_arr1d_op1[1] % i_arr1d_op2[0]) || (d_arr1d_op1[1] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((d_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_l_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)s_m_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)s_m_s_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)d_f("op2") != d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2")) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)cl1.m_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)cl1.m_cl_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)vt1.m_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)vt1.m_vt_op2 != d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (d_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr1d_op2[0] != d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_l_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 1))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)s_m_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)s_m_s_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 1))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)d_f("op2") != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2")) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_f("op2") != 1))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)cl1.m_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)cl1.m_cl_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 1))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)vt1.m_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)vt1.m_vt_op2 != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 1))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr1d_op2[0] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 1))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr2d_op2[index[0, 1], index[1, 0]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 1))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % (double)m_arr3d_op2[index[0, 0], 0, index[1, 1]] != d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (d_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 1))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/rem.csproj b/tests/src/JIT/Methodical/divrem/rem/rem.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/divrem/rem/u4rem.cs b/tests/src/JIT/Methodical/divrem/rem/u4rem.cs
new file mode 100644 (file)
index 0000000..f2fb30e
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type u4, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class u4rem
+{
+    private static uint s_ui_s_op1 = 11;
+    private static int s_i_s_op2 = 3;
+    private static uint s_ui_s_op2 = 3;
+    private static long s_l_s_op2 = 3;
+    private static ulong s_ul_s_op2 = 3;
+    private static float s_f_s_op2 = 3;
+    private static double s_d_s_op2 = 3;
+    private static decimal s_m_s_op2 = 3;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 11;
+        else
+            return 3;
+    }
+    private class CL
+    {
+        public uint ui_cl_op1 = 11;
+        public int i_cl_op2 = 3;
+        public uint ui_cl_op2 = 3;
+        public long l_cl_op2 = 3;
+        public ulong ul_cl_op2 = 3;
+        public float f_cl_op2 = 3;
+        public double d_cl_op2 = 3;
+        public decimal m_cl_op2 = 3;
+    }
+
+    private struct VT
+    {
+        public uint ui_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.ui_vt_op1 = 11;
+        vt1.i_vt_op2 = 3;
+        vt1.ui_vt_op2 = 3;
+        vt1.l_vt_op2 = 3;
+        vt1.ul_vt_op2 = 3;
+        vt1.f_vt_op2 = 3;
+        vt1.d_vt_op2 = 3;
+        vt1.m_vt_op2 = 3;
+
+        uint[] ui_arr1d_op1 = { 0, 11 };
+        uint[,] ui_arr2d_op1 = { { 0, 11 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op1 = { { { 0, 11 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 3, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 3, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 3, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 3, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 3, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 3, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 3, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 3 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 3 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            uint ui_l_op1 = 11;
+            int i_l_op2 = 3;
+            uint ui_l_op2 = 3;
+            long l_l_op2 = 3;
+            ulong ul_l_op2 = 3;
+            float f_l_op2 = 3;
+            double d_l_op2 = 3;
+            decimal m_l_op2 = 3;
+            if ((ui_l_op1 % i_l_op2 != ui_l_op1 % ui_l_op2) || (ui_l_op1 % ui_l_op2 != ui_l_op1 % l_l_op2) || ((ulong)(ui_l_op1 % l_l_op2) != ui_l_op1 % ul_l_op2) || (ui_l_op1 % ul_l_op2 != ui_l_op1 % f_l_op2) || (ui_l_op1 % f_l_op2 != ui_l_op1 % d_l_op2) || ((decimal)(ui_l_op1 % d_l_op2) != ui_l_op1 % m_l_op2) || (ui_l_op1 % m_l_op2 != ui_l_op1 % i_l_op2) || (ui_l_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % s_i_s_op2 != ui_l_op1 % s_ui_s_op2) || (ui_l_op1 % s_ui_s_op2 != ui_l_op1 % s_l_s_op2) || ((ulong)(ui_l_op1 % s_l_s_op2) != ui_l_op1 % s_ul_s_op2) || (ui_l_op1 % s_ul_s_op2 != ui_l_op1 % s_f_s_op2) || (ui_l_op1 % s_f_s_op2 != ui_l_op1 % s_d_s_op2) || ((decimal)(ui_l_op1 % s_d_s_op2) != ui_l_op1 % s_m_s_op2) || (ui_l_op1 % s_m_s_op2 != ui_l_op1 % s_i_s_op2) || (ui_l_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % ui_f("op2") != ui_l_op1 % ui_f("op2")) || (ui_l_op1 % ui_f("op2") != ui_l_op1 % ui_f("op2")) || ((ulong)(ui_l_op1 % ui_f("op2")) != ui_l_op1 % ui_f("op2")) || (ui_l_op1 % ui_f("op2") != ui_l_op1 % ui_f("op2")) || (ui_l_op1 % ui_f("op2") != ui_l_op1 % ui_f("op2")) || ((decimal)(ui_l_op1 % ui_f("op2")) != ui_l_op1 % ui_f("op2")) || (ui_l_op1 % ui_f("op2") != ui_l_op1 % ui_f("op2")) || (ui_l_op1 % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % cl1.i_cl_op2 != ui_l_op1 % cl1.ui_cl_op2) || (ui_l_op1 % cl1.ui_cl_op2 != ui_l_op1 % cl1.l_cl_op2) || ((ulong)(ui_l_op1 % cl1.l_cl_op2) != ui_l_op1 % cl1.ul_cl_op2) || (ui_l_op1 % cl1.ul_cl_op2 != ui_l_op1 % cl1.f_cl_op2) || (ui_l_op1 % cl1.f_cl_op2 != ui_l_op1 % cl1.d_cl_op2) || ((decimal)(ui_l_op1 % cl1.d_cl_op2) != ui_l_op1 % cl1.m_cl_op2) || (ui_l_op1 % cl1.m_cl_op2 != ui_l_op1 % cl1.i_cl_op2) || (ui_l_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % vt1.i_vt_op2 != ui_l_op1 % vt1.ui_vt_op2) || (ui_l_op1 % vt1.ui_vt_op2 != ui_l_op1 % vt1.l_vt_op2) || ((ulong)(ui_l_op1 % vt1.l_vt_op2) != ui_l_op1 % vt1.ul_vt_op2) || (ui_l_op1 % vt1.ul_vt_op2 != ui_l_op1 % vt1.f_vt_op2) || (ui_l_op1 % vt1.f_vt_op2 != ui_l_op1 % vt1.d_vt_op2) || ((decimal)(ui_l_op1 % vt1.d_vt_op2) != ui_l_op1 % vt1.m_vt_op2) || (ui_l_op1 % vt1.m_vt_op2 != ui_l_op1 % vt1.i_vt_op2) || (ui_l_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % i_arr1d_op2[0] != ui_l_op1 % ui_arr1d_op2[0]) || (ui_l_op1 % ui_arr1d_op2[0] != ui_l_op1 % l_arr1d_op2[0]) || ((ulong)(ui_l_op1 % l_arr1d_op2[0]) != ui_l_op1 % ul_arr1d_op2[0]) || (ui_l_op1 % ul_arr1d_op2[0] != ui_l_op1 % f_arr1d_op2[0]) || (ui_l_op1 % f_arr1d_op2[0] != ui_l_op1 % d_arr1d_op2[0]) || ((decimal)(ui_l_op1 % d_arr1d_op2[0]) != ui_l_op1 % m_arr1d_op2[0]) || (ui_l_op1 % m_arr1d_op2[0] != ui_l_op1 % i_arr1d_op2[0]) || (ui_l_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_l_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != ui_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_l_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((ui_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_l_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_l_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % i_l_op2 != s_ui_s_op1 % ui_l_op2) || (s_ui_s_op1 % ui_l_op2 != s_ui_s_op1 % l_l_op2) || ((ulong)(s_ui_s_op1 % l_l_op2) != s_ui_s_op1 % ul_l_op2) || (s_ui_s_op1 % ul_l_op2 != s_ui_s_op1 % f_l_op2) || (s_ui_s_op1 % f_l_op2 != s_ui_s_op1 % d_l_op2) || ((decimal)(s_ui_s_op1 % d_l_op2) != s_ui_s_op1 % m_l_op2) || (s_ui_s_op1 % m_l_op2 != s_ui_s_op1 % i_l_op2) || (s_ui_s_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % s_i_s_op2 != s_ui_s_op1 % s_ui_s_op2) || (s_ui_s_op1 % s_ui_s_op2 != s_ui_s_op1 % s_l_s_op2) || ((ulong)(s_ui_s_op1 % s_l_s_op2) != s_ui_s_op1 % s_ul_s_op2) || (s_ui_s_op1 % s_ul_s_op2 != s_ui_s_op1 % s_f_s_op2) || (s_ui_s_op1 % s_f_s_op2 != s_ui_s_op1 % s_d_s_op2) || ((decimal)(s_ui_s_op1 % s_d_s_op2) != s_ui_s_op1 % s_m_s_op2) || (s_ui_s_op1 % s_m_s_op2 != s_ui_s_op1 % s_i_s_op2) || (s_ui_s_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % ui_f("op2") != s_ui_s_op1 % ui_f("op2")) || (s_ui_s_op1 % ui_f("op2") != s_ui_s_op1 % ui_f("op2")) || ((ulong)(s_ui_s_op1 % ui_f("op2")) != s_ui_s_op1 % ui_f("op2")) || (s_ui_s_op1 % ui_f("op2") != s_ui_s_op1 % ui_f("op2")) || (s_ui_s_op1 % ui_f("op2") != s_ui_s_op1 % ui_f("op2")) || ((decimal)(s_ui_s_op1 % ui_f("op2")) != s_ui_s_op1 % ui_f("op2")) || (s_ui_s_op1 % ui_f("op2") != s_ui_s_op1 % ui_f("op2")) || (s_ui_s_op1 % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % cl1.i_cl_op2 != s_ui_s_op1 % cl1.ui_cl_op2) || (s_ui_s_op1 % cl1.ui_cl_op2 != s_ui_s_op1 % cl1.l_cl_op2) || ((ulong)(s_ui_s_op1 % cl1.l_cl_op2) != s_ui_s_op1 % cl1.ul_cl_op2) || (s_ui_s_op1 % cl1.ul_cl_op2 != s_ui_s_op1 % cl1.f_cl_op2) || (s_ui_s_op1 % cl1.f_cl_op2 != s_ui_s_op1 % cl1.d_cl_op2) || ((decimal)(s_ui_s_op1 % cl1.d_cl_op2) != s_ui_s_op1 % cl1.m_cl_op2) || (s_ui_s_op1 % cl1.m_cl_op2 != s_ui_s_op1 % cl1.i_cl_op2) || (s_ui_s_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % vt1.i_vt_op2 != s_ui_s_op1 % vt1.ui_vt_op2) || (s_ui_s_op1 % vt1.ui_vt_op2 != s_ui_s_op1 % vt1.l_vt_op2) || ((ulong)(s_ui_s_op1 % vt1.l_vt_op2) != s_ui_s_op1 % vt1.ul_vt_op2) || (s_ui_s_op1 % vt1.ul_vt_op2 != s_ui_s_op1 % vt1.f_vt_op2) || (s_ui_s_op1 % vt1.f_vt_op2 != s_ui_s_op1 % vt1.d_vt_op2) || ((decimal)(s_ui_s_op1 % vt1.d_vt_op2) != s_ui_s_op1 % vt1.m_vt_op2) || (s_ui_s_op1 % vt1.m_vt_op2 != s_ui_s_op1 % vt1.i_vt_op2) || (s_ui_s_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % i_arr1d_op2[0] != s_ui_s_op1 % ui_arr1d_op2[0]) || (s_ui_s_op1 % ui_arr1d_op2[0] != s_ui_s_op1 % l_arr1d_op2[0]) || ((ulong)(s_ui_s_op1 % l_arr1d_op2[0]) != s_ui_s_op1 % ul_arr1d_op2[0]) || (s_ui_s_op1 % ul_arr1d_op2[0] != s_ui_s_op1 % f_arr1d_op2[0]) || (s_ui_s_op1 % f_arr1d_op2[0] != s_ui_s_op1 % d_arr1d_op2[0]) || ((decimal)(s_ui_s_op1 % d_arr1d_op2[0]) != s_ui_s_op1 % m_arr1d_op2[0]) || (s_ui_s_op1 % m_arr1d_op2[0] != s_ui_s_op1 % i_arr1d_op2[0]) || (s_ui_s_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(s_ui_s_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) != s_ui_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_ui_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != s_ui_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_ui_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ui_s_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ui_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(s_ui_s_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ui_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_ui_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ui_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ui_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ui_s_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % i_l_op2 != ui_f("op1") % ui_l_op2) || (ui_f("op1") % ui_l_op2 != ui_f("op1") % l_l_op2) || ((ulong)(ui_f("op1") % l_l_op2) != ui_f("op1") % ul_l_op2) || (ui_f("op1") % ul_l_op2 != ui_f("op1") % f_l_op2) || (ui_f("op1") % f_l_op2 != ui_f("op1") % d_l_op2) || ((decimal)(ui_f("op1") % d_l_op2) != ui_f("op1") % m_l_op2) || (ui_f("op1") % m_l_op2 != ui_f("op1") % i_l_op2) || (ui_f("op1") % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % s_i_s_op2 != ui_f("op1") % s_ui_s_op2) || (ui_f("op1") % s_ui_s_op2 != ui_f("op1") % s_l_s_op2) || ((ulong)(ui_f("op1") % s_l_s_op2) != ui_f("op1") % s_ul_s_op2) || (ui_f("op1") % s_ul_s_op2 != ui_f("op1") % s_f_s_op2) || (ui_f("op1") % s_f_s_op2 != ui_f("op1") % s_d_s_op2) || ((decimal)(ui_f("op1") % s_d_s_op2) != ui_f("op1") % s_m_s_op2) || (ui_f("op1") % s_m_s_op2 != ui_f("op1") % s_i_s_op2) || (ui_f("op1") % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % ui_f("op2") != ui_f("op1") % ui_f("op2")) || (ui_f("op1") % ui_f("op2") != ui_f("op1") % ui_f("op2")) || ((ulong)(ui_f("op1") % ui_f("op2")) != ui_f("op1") % ui_f("op2")) || (ui_f("op1") % ui_f("op2") != ui_f("op1") % ui_f("op2")) || (ui_f("op1") % ui_f("op2") != ui_f("op1") % ui_f("op2")) || ((decimal)(ui_f("op1") % ui_f("op2")) != ui_f("op1") % ui_f("op2")) || (ui_f("op1") % ui_f("op2") != ui_f("op1") % ui_f("op2")) || (ui_f("op1") % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % cl1.i_cl_op2 != ui_f("op1") % cl1.ui_cl_op2) || (ui_f("op1") % cl1.ui_cl_op2 != ui_f("op1") % cl1.l_cl_op2) || ((ulong)(ui_f("op1") % cl1.l_cl_op2) != ui_f("op1") % cl1.ul_cl_op2) || (ui_f("op1") % cl1.ul_cl_op2 != ui_f("op1") % cl1.f_cl_op2) || (ui_f("op1") % cl1.f_cl_op2 != ui_f("op1") % cl1.d_cl_op2) || ((decimal)(ui_f("op1") % cl1.d_cl_op2) != ui_f("op1") % cl1.m_cl_op2) || (ui_f("op1") % cl1.m_cl_op2 != ui_f("op1") % cl1.i_cl_op2) || (ui_f("op1") % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % vt1.i_vt_op2 != ui_f("op1") % vt1.ui_vt_op2) || (ui_f("op1") % vt1.ui_vt_op2 != ui_f("op1") % vt1.l_vt_op2) || ((ulong)(ui_f("op1") % vt1.l_vt_op2) != ui_f("op1") % vt1.ul_vt_op2) || (ui_f("op1") % vt1.ul_vt_op2 != ui_f("op1") % vt1.f_vt_op2) || (ui_f("op1") % vt1.f_vt_op2 != ui_f("op1") % vt1.d_vt_op2) || ((decimal)(ui_f("op1") % vt1.d_vt_op2) != ui_f("op1") % vt1.m_vt_op2) || (ui_f("op1") % vt1.m_vt_op2 != ui_f("op1") % vt1.i_vt_op2) || (ui_f("op1") % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % i_arr1d_op2[0] != ui_f("op1") % ui_arr1d_op2[0]) || (ui_f("op1") % ui_arr1d_op2[0] != ui_f("op1") % l_arr1d_op2[0]) || ((ulong)(ui_f("op1") % l_arr1d_op2[0]) != ui_f("op1") % ul_arr1d_op2[0]) || (ui_f("op1") % ul_arr1d_op2[0] != ui_f("op1") % f_arr1d_op2[0]) || (ui_f("op1") % f_arr1d_op2[0] != ui_f("op1") % d_arr1d_op2[0]) || ((decimal)(ui_f("op1") % d_arr1d_op2[0]) != ui_f("op1") % m_arr1d_op2[0]) || (ui_f("op1") % m_arr1d_op2[0] != ui_f("op1") % i_arr1d_op2[0]) || (ui_f("op1") % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_f("op1") % l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != ui_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_f("op1") % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((ui_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_f("op1") % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_f("op1") % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % i_l_op2 != cl1.ui_cl_op1 % ui_l_op2) || (cl1.ui_cl_op1 % ui_l_op2 != cl1.ui_cl_op1 % l_l_op2) || ((ulong)(cl1.ui_cl_op1 % l_l_op2) != cl1.ui_cl_op1 % ul_l_op2) || (cl1.ui_cl_op1 % ul_l_op2 != cl1.ui_cl_op1 % f_l_op2) || (cl1.ui_cl_op1 % f_l_op2 != cl1.ui_cl_op1 % d_l_op2) || ((decimal)(cl1.ui_cl_op1 % d_l_op2) != cl1.ui_cl_op1 % m_l_op2) || (cl1.ui_cl_op1 % m_l_op2 != cl1.ui_cl_op1 % i_l_op2) || (cl1.ui_cl_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % s_i_s_op2 != cl1.ui_cl_op1 % s_ui_s_op2) || (cl1.ui_cl_op1 % s_ui_s_op2 != cl1.ui_cl_op1 % s_l_s_op2) || ((ulong)(cl1.ui_cl_op1 % s_l_s_op2) != cl1.ui_cl_op1 % s_ul_s_op2) || (cl1.ui_cl_op1 % s_ul_s_op2 != cl1.ui_cl_op1 % s_f_s_op2) || (cl1.ui_cl_op1 % s_f_s_op2 != cl1.ui_cl_op1 % s_d_s_op2) || ((decimal)(cl1.ui_cl_op1 % s_d_s_op2) != cl1.ui_cl_op1 % s_m_s_op2) || (cl1.ui_cl_op1 % s_m_s_op2 != cl1.ui_cl_op1 % s_i_s_op2) || (cl1.ui_cl_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % ui_f("op2") != cl1.ui_cl_op1 % ui_f("op2")) || (cl1.ui_cl_op1 % ui_f("op2") != cl1.ui_cl_op1 % ui_f("op2")) || ((ulong)(cl1.ui_cl_op1 % ui_f("op2")) != cl1.ui_cl_op1 % ui_f("op2")) || (cl1.ui_cl_op1 % ui_f("op2") != cl1.ui_cl_op1 % ui_f("op2")) || (cl1.ui_cl_op1 % ui_f("op2") != cl1.ui_cl_op1 % ui_f("op2")) || ((decimal)(cl1.ui_cl_op1 % ui_f("op2")) != cl1.ui_cl_op1 % ui_f("op2")) || (cl1.ui_cl_op1 % ui_f("op2") != cl1.ui_cl_op1 % ui_f("op2")) || (cl1.ui_cl_op1 % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % cl1.i_cl_op2 != cl1.ui_cl_op1 % cl1.ui_cl_op2) || (cl1.ui_cl_op1 % cl1.ui_cl_op2 != cl1.ui_cl_op1 % cl1.l_cl_op2) || ((ulong)(cl1.ui_cl_op1 % cl1.l_cl_op2) != cl1.ui_cl_op1 % cl1.ul_cl_op2) || (cl1.ui_cl_op1 % cl1.ul_cl_op2 != cl1.ui_cl_op1 % cl1.f_cl_op2) || (cl1.ui_cl_op1 % cl1.f_cl_op2 != cl1.ui_cl_op1 % cl1.d_cl_op2) || ((decimal)(cl1.ui_cl_op1 % cl1.d_cl_op2) != cl1.ui_cl_op1 % cl1.m_cl_op2) || (cl1.ui_cl_op1 % cl1.m_cl_op2 != cl1.ui_cl_op1 % cl1.i_cl_op2) || (cl1.ui_cl_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % vt1.i_vt_op2 != cl1.ui_cl_op1 % vt1.ui_vt_op2) || (cl1.ui_cl_op1 % vt1.ui_vt_op2 != cl1.ui_cl_op1 % vt1.l_vt_op2) || ((ulong)(cl1.ui_cl_op1 % vt1.l_vt_op2) != cl1.ui_cl_op1 % vt1.ul_vt_op2) || (cl1.ui_cl_op1 % vt1.ul_vt_op2 != cl1.ui_cl_op1 % vt1.f_vt_op2) || (cl1.ui_cl_op1 % vt1.f_vt_op2 != cl1.ui_cl_op1 % vt1.d_vt_op2) || ((decimal)(cl1.ui_cl_op1 % vt1.d_vt_op2) != cl1.ui_cl_op1 % vt1.m_vt_op2) || (cl1.ui_cl_op1 % vt1.m_vt_op2 != cl1.ui_cl_op1 % vt1.i_vt_op2) || (cl1.ui_cl_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % i_arr1d_op2[0] != cl1.ui_cl_op1 % ui_arr1d_op2[0]) || (cl1.ui_cl_op1 % ui_arr1d_op2[0] != cl1.ui_cl_op1 % l_arr1d_op2[0]) || ((ulong)(cl1.ui_cl_op1 % l_arr1d_op2[0]) != cl1.ui_cl_op1 % ul_arr1d_op2[0]) || (cl1.ui_cl_op1 % ul_arr1d_op2[0] != cl1.ui_cl_op1 % f_arr1d_op2[0]) || (cl1.ui_cl_op1 % f_arr1d_op2[0] != cl1.ui_cl_op1 % d_arr1d_op2[0]) || ((decimal)(cl1.ui_cl_op1 % d_arr1d_op2[0]) != cl1.ui_cl_op1 % m_arr1d_op2[0]) || (cl1.ui_cl_op1 % m_arr1d_op2[0] != cl1.ui_cl_op1 % i_arr1d_op2[0]) || (cl1.ui_cl_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(cl1.ui_cl_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ui_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.ui_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ui_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ui_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ui_cl_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.ui_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(cl1.ui_cl_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ui_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.ui_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ui_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ui_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ui_cl_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % i_l_op2 != vt1.ui_vt_op1 % ui_l_op2) || (vt1.ui_vt_op1 % ui_l_op2 != vt1.ui_vt_op1 % l_l_op2) || ((ulong)(vt1.ui_vt_op1 % l_l_op2) != vt1.ui_vt_op1 % ul_l_op2) || (vt1.ui_vt_op1 % ul_l_op2 != vt1.ui_vt_op1 % f_l_op2) || (vt1.ui_vt_op1 % f_l_op2 != vt1.ui_vt_op1 % d_l_op2) || ((decimal)(vt1.ui_vt_op1 % d_l_op2) != vt1.ui_vt_op1 % m_l_op2) || (vt1.ui_vt_op1 % m_l_op2 != vt1.ui_vt_op1 % i_l_op2) || (vt1.ui_vt_op1 % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % s_i_s_op2 != vt1.ui_vt_op1 % s_ui_s_op2) || (vt1.ui_vt_op1 % s_ui_s_op2 != vt1.ui_vt_op1 % s_l_s_op2) || ((ulong)(vt1.ui_vt_op1 % s_l_s_op2) != vt1.ui_vt_op1 % s_ul_s_op2) || (vt1.ui_vt_op1 % s_ul_s_op2 != vt1.ui_vt_op1 % s_f_s_op2) || (vt1.ui_vt_op1 % s_f_s_op2 != vt1.ui_vt_op1 % s_d_s_op2) || ((decimal)(vt1.ui_vt_op1 % s_d_s_op2) != vt1.ui_vt_op1 % s_m_s_op2) || (vt1.ui_vt_op1 % s_m_s_op2 != vt1.ui_vt_op1 % s_i_s_op2) || (vt1.ui_vt_op1 % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % ui_f("op2") != vt1.ui_vt_op1 % ui_f("op2")) || (vt1.ui_vt_op1 % ui_f("op2") != vt1.ui_vt_op1 % ui_f("op2")) || ((ulong)(vt1.ui_vt_op1 % ui_f("op2")) != vt1.ui_vt_op1 % ui_f("op2")) || (vt1.ui_vt_op1 % ui_f("op2") != vt1.ui_vt_op1 % ui_f("op2")) || (vt1.ui_vt_op1 % ui_f("op2") != vt1.ui_vt_op1 % ui_f("op2")) || ((decimal)(vt1.ui_vt_op1 % ui_f("op2")) != vt1.ui_vt_op1 % ui_f("op2")) || (vt1.ui_vt_op1 % ui_f("op2") != vt1.ui_vt_op1 % ui_f("op2")) || (vt1.ui_vt_op1 % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % cl1.i_cl_op2 != vt1.ui_vt_op1 % cl1.ui_cl_op2) || (vt1.ui_vt_op1 % cl1.ui_cl_op2 != vt1.ui_vt_op1 % cl1.l_cl_op2) || ((ulong)(vt1.ui_vt_op1 % cl1.l_cl_op2) != vt1.ui_vt_op1 % cl1.ul_cl_op2) || (vt1.ui_vt_op1 % cl1.ul_cl_op2 != vt1.ui_vt_op1 % cl1.f_cl_op2) || (vt1.ui_vt_op1 % cl1.f_cl_op2 != vt1.ui_vt_op1 % cl1.d_cl_op2) || ((decimal)(vt1.ui_vt_op1 % cl1.d_cl_op2) != vt1.ui_vt_op1 % cl1.m_cl_op2) || (vt1.ui_vt_op1 % cl1.m_cl_op2 != vt1.ui_vt_op1 % cl1.i_cl_op2) || (vt1.ui_vt_op1 % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % vt1.i_vt_op2 != vt1.ui_vt_op1 % vt1.ui_vt_op2) || (vt1.ui_vt_op1 % vt1.ui_vt_op2 != vt1.ui_vt_op1 % vt1.l_vt_op2) || ((ulong)(vt1.ui_vt_op1 % vt1.l_vt_op2) != vt1.ui_vt_op1 % vt1.ul_vt_op2) || (vt1.ui_vt_op1 % vt1.ul_vt_op2 != vt1.ui_vt_op1 % vt1.f_vt_op2) || (vt1.ui_vt_op1 % vt1.f_vt_op2 != vt1.ui_vt_op1 % vt1.d_vt_op2) || ((decimal)(vt1.ui_vt_op1 % vt1.d_vt_op2) != vt1.ui_vt_op1 % vt1.m_vt_op2) || (vt1.ui_vt_op1 % vt1.m_vt_op2 != vt1.ui_vt_op1 % vt1.i_vt_op2) || (vt1.ui_vt_op1 % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % i_arr1d_op2[0] != vt1.ui_vt_op1 % ui_arr1d_op2[0]) || (vt1.ui_vt_op1 % ui_arr1d_op2[0] != vt1.ui_vt_op1 % l_arr1d_op2[0]) || ((ulong)(vt1.ui_vt_op1 % l_arr1d_op2[0]) != vt1.ui_vt_op1 % ul_arr1d_op2[0]) || (vt1.ui_vt_op1 % ul_arr1d_op2[0] != vt1.ui_vt_op1 % f_arr1d_op2[0]) || (vt1.ui_vt_op1 % f_arr1d_op2[0] != vt1.ui_vt_op1 % d_arr1d_op2[0]) || ((decimal)(vt1.ui_vt_op1 % d_arr1d_op2[0]) != vt1.ui_vt_op1 % m_arr1d_op2[0]) || (vt1.ui_vt_op1 % m_arr1d_op2[0] != vt1.ui_vt_op1 % i_arr1d_op2[0]) || (vt1.ui_vt_op1 % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(vt1.ui_vt_op1 % l_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ui_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.ui_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ui_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ui_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ui_vt_op1 % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.ui_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(vt1.ui_vt_op1 % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ui_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.ui_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ui_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ui_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ui_vt_op1 % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % i_l_op2 != ui_arr1d_op1[1] % ui_l_op2) || (ui_arr1d_op1[1] % ui_l_op2 != ui_arr1d_op1[1] % l_l_op2) || ((ulong)(ui_arr1d_op1[1] % l_l_op2) != ui_arr1d_op1[1] % ul_l_op2) || (ui_arr1d_op1[1] % ul_l_op2 != ui_arr1d_op1[1] % f_l_op2) || (ui_arr1d_op1[1] % f_l_op2 != ui_arr1d_op1[1] % d_l_op2) || ((decimal)(ui_arr1d_op1[1] % d_l_op2) != ui_arr1d_op1[1] % m_l_op2) || (ui_arr1d_op1[1] % m_l_op2 != ui_arr1d_op1[1] % i_l_op2) || (ui_arr1d_op1[1] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % s_i_s_op2 != ui_arr1d_op1[1] % s_ui_s_op2) || (ui_arr1d_op1[1] % s_ui_s_op2 != ui_arr1d_op1[1] % s_l_s_op2) || ((ulong)(ui_arr1d_op1[1] % s_l_s_op2) != ui_arr1d_op1[1] % s_ul_s_op2) || (ui_arr1d_op1[1] % s_ul_s_op2 != ui_arr1d_op1[1] % s_f_s_op2) || (ui_arr1d_op1[1] % s_f_s_op2 != ui_arr1d_op1[1] % s_d_s_op2) || ((decimal)(ui_arr1d_op1[1] % s_d_s_op2) != ui_arr1d_op1[1] % s_m_s_op2) || (ui_arr1d_op1[1] % s_m_s_op2 != ui_arr1d_op1[1] % s_i_s_op2) || (ui_arr1d_op1[1] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % ui_f("op2") != ui_arr1d_op1[1] % ui_f("op2")) || (ui_arr1d_op1[1] % ui_f("op2") != ui_arr1d_op1[1] % ui_f("op2")) || ((ulong)(ui_arr1d_op1[1] % ui_f("op2")) != ui_arr1d_op1[1] % ui_f("op2")) || (ui_arr1d_op1[1] % ui_f("op2") != ui_arr1d_op1[1] % ui_f("op2")) || (ui_arr1d_op1[1] % ui_f("op2") != ui_arr1d_op1[1] % ui_f("op2")) || ((decimal)(ui_arr1d_op1[1] % ui_f("op2")) != ui_arr1d_op1[1] % ui_f("op2")) || (ui_arr1d_op1[1] % ui_f("op2") != ui_arr1d_op1[1] % ui_f("op2")) || (ui_arr1d_op1[1] % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % cl1.i_cl_op2 != ui_arr1d_op1[1] % cl1.ui_cl_op2) || (ui_arr1d_op1[1] % cl1.ui_cl_op2 != ui_arr1d_op1[1] % cl1.l_cl_op2) || ((ulong)(ui_arr1d_op1[1] % cl1.l_cl_op2) != ui_arr1d_op1[1] % cl1.ul_cl_op2) || (ui_arr1d_op1[1] % cl1.ul_cl_op2 != ui_arr1d_op1[1] % cl1.f_cl_op2) || (ui_arr1d_op1[1] % cl1.f_cl_op2 != ui_arr1d_op1[1] % cl1.d_cl_op2) || ((decimal)(ui_arr1d_op1[1] % cl1.d_cl_op2) != ui_arr1d_op1[1] % cl1.m_cl_op2) || (ui_arr1d_op1[1] % cl1.m_cl_op2 != ui_arr1d_op1[1] % cl1.i_cl_op2) || (ui_arr1d_op1[1] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % vt1.i_vt_op2 != ui_arr1d_op1[1] % vt1.ui_vt_op2) || (ui_arr1d_op1[1] % vt1.ui_vt_op2 != ui_arr1d_op1[1] % vt1.l_vt_op2) || ((ulong)(ui_arr1d_op1[1] % vt1.l_vt_op2) != ui_arr1d_op1[1] % vt1.ul_vt_op2) || (ui_arr1d_op1[1] % vt1.ul_vt_op2 != ui_arr1d_op1[1] % vt1.f_vt_op2) || (ui_arr1d_op1[1] % vt1.f_vt_op2 != ui_arr1d_op1[1] % vt1.d_vt_op2) || ((decimal)(ui_arr1d_op1[1] % vt1.d_vt_op2) != ui_arr1d_op1[1] % vt1.m_vt_op2) || (ui_arr1d_op1[1] % vt1.m_vt_op2 != ui_arr1d_op1[1] % vt1.i_vt_op2) || (ui_arr1d_op1[1] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % i_arr1d_op2[0] != ui_arr1d_op1[1] % ui_arr1d_op2[0]) || (ui_arr1d_op1[1] % ui_arr1d_op2[0] != ui_arr1d_op1[1] % l_arr1d_op2[0]) || ((ulong)(ui_arr1d_op1[1] % l_arr1d_op2[0]) != ui_arr1d_op1[1] % ul_arr1d_op2[0]) || (ui_arr1d_op1[1] % ul_arr1d_op2[0] != ui_arr1d_op1[1] % f_arr1d_op2[0]) || (ui_arr1d_op1[1] % f_arr1d_op2[0] != ui_arr1d_op1[1] % d_arr1d_op2[0]) || ((decimal)(ui_arr1d_op1[1] % d_arr1d_op2[0]) != ui_arr1d_op1[1] % m_arr1d_op2[0]) || (ui_arr1d_op1[1] % m_arr1d_op2[0] != ui_arr1d_op1[1] % i_arr1d_op2[0]) || (ui_arr1d_op1[1] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr1d_op1[1] % l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr1d_op1[1] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((ui_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr1d_op1[1] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr1d_op1[1] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % l_l_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % s_l_s_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2")) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.l_cl_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.l_vt_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr1d_op2[0]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr2d_op1[index[0, 1], index[1, 0]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr2d_op1[index[0, 1], index[1, 0]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_l_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_l_s_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2")) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.l_cl_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.l_vt_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr1d_op2[0]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((ulong)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % l_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ui_arr3d_op1[index[0, 0], 0, index[1, 1]] % i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/divrem/rem/u8rem.cs b/tests/src/JIT/Methodical/divrem/rem/u8rem.cs
new file mode 100644 (file)
index 0000000..535849e
--- /dev/null
@@ -0,0 +1,480 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/****************************************************************************
+op1%op2, op1 is of type u8, op2 can be i4, u4, i8, u8, r4, r8, decimal
+op1 and op2 can be static, local, class/struct member, function retval, 1D/2D/3D array
+*****************************************************************************/
+
+using System;
+internal class u8rem
+{
+    private static ulong s_ul_s_op1 = 27;
+    private static int s_i_s_op2 = 5;
+    private static uint s_ui_s_op2 = 5;
+    private static long s_l_s_op2 = 5;
+    private static ulong s_ul_s_op2 = 5;
+    private static float s_f_s_op2 = 5;
+    private static double s_d_s_op2 = 5;
+    private static decimal s_m_s_op2 = 5;
+
+    public static int i_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static uint ui_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static long l_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static ulong ul_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static float f_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static double d_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    public static decimal m_f(String s)
+    {
+        if (s == "op1")
+            return 27;
+        else
+            return 5;
+    }
+    private class CL
+    {
+        public ulong ul_cl_op1 = 27;
+        public int i_cl_op2 = 5;
+        public uint ui_cl_op2 = 5;
+        public long l_cl_op2 = 5;
+        public ulong ul_cl_op2 = 5;
+        public float f_cl_op2 = 5;
+        public double d_cl_op2 = 5;
+        public decimal m_cl_op2 = 5;
+    }
+
+    private struct VT
+    {
+        public ulong ul_vt_op1;
+        public int i_vt_op2;
+        public uint ui_vt_op2;
+        public long l_vt_op2;
+        public ulong ul_vt_op2;
+        public float f_vt_op2;
+        public double d_vt_op2;
+        public decimal m_vt_op2;
+    }
+
+    public static int Main()
+    {
+        bool passed = true;
+        //initialize class
+        CL cl1 = new CL();
+        //initialize struct
+        VT vt1;
+        vt1.ul_vt_op1 = 27;
+        vt1.i_vt_op2 = 5;
+        vt1.ui_vt_op2 = 5;
+        vt1.l_vt_op2 = 5;
+        vt1.ul_vt_op2 = 5;
+        vt1.f_vt_op2 = 5;
+        vt1.d_vt_op2 = 5;
+        vt1.m_vt_op2 = 5;
+
+        ulong[] ul_arr1d_op1 = { 0, 27 };
+        ulong[,] ul_arr2d_op1 = { { 0, 27 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op1 = { { { 0, 27 }, { 1, 1 } } };
+
+        int[] i_arr1d_op2 = { 5, 0, 1 };
+        int[,] i_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        int[,,] i_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        uint[] ui_arr1d_op2 = { 5, 0, 1 };
+        uint[,] ui_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        uint[,,] ui_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        long[] l_arr1d_op2 = { 5, 0, 1 };
+        long[,] l_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        long[,,] l_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        ulong[] ul_arr1d_op2 = { 5, 0, 1 };
+        ulong[,] ul_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        ulong[,,] ul_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        float[] f_arr1d_op2 = { 5, 0, 1 };
+        float[,] f_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        float[,,] f_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        double[] d_arr1d_op2 = { 5, 0, 1 };
+        double[,] d_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        double[,,] d_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+        decimal[] m_arr1d_op2 = { 5, 0, 1 };
+        decimal[,] m_arr2d_op2 = { { 0, 5 }, { 1, 1 } };
+        decimal[,,] m_arr3d_op2 = { { { 0, 5 }, { 1, 1 } } };
+
+        int[,] index = { { 0, 0 }, { 1, 1 } };
+
+        {
+            ulong ul_l_op1 = 27;
+            int i_l_op2 = 5;
+            uint ui_l_op2 = 5;
+            long l_l_op2 = 5;
+            ulong ul_l_op2 = 5;
+            float f_l_op2 = 5;
+            double d_l_op2 = 5;
+            decimal m_l_op2 = 5;
+            if ((ul_l_op1 % (ulong)i_l_op2 != ul_l_op1 % ui_l_op2) || (ul_l_op1 % ui_l_op2 != ul_l_op1 % (ulong)l_l_op2) || (ul_l_op1 % (ulong)l_l_op2 != ul_l_op1 % ul_l_op2) || (ul_l_op1 % ul_l_op2 != ul_l_op1 % f_l_op2) || (ul_l_op1 % f_l_op2 != ul_l_op1 % d_l_op2) || ((decimal)(ul_l_op1 % d_l_op2) != ul_l_op1 % m_l_op2) || (ul_l_op1 % m_l_op2 != ul_l_op1 % (ulong)i_l_op2) || (ul_l_op1 % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 1 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)s_i_s_op2 != ul_l_op1 % s_ui_s_op2) || (ul_l_op1 % s_ui_s_op2 != ul_l_op1 % (ulong)s_l_s_op2) || (ul_l_op1 % (ulong)s_l_s_op2 != ul_l_op1 % s_ul_s_op2) || (ul_l_op1 % s_ul_s_op2 != ul_l_op1 % s_f_s_op2) || (ul_l_op1 % s_f_s_op2 != ul_l_op1 % s_d_s_op2) || ((decimal)(ul_l_op1 % s_d_s_op2) != ul_l_op1 % s_m_s_op2) || (ul_l_op1 % s_m_s_op2 != ul_l_op1 % (ulong)s_i_s_op2) || (ul_l_op1 % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 2 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)ul_f("op2") != ul_l_op1 % ul_f("op2")) || (ul_l_op1 % ul_f("op2") != ul_l_op1 % (ulong)ul_f("op2")) || (ul_l_op1 % (ulong)ul_f("op2") != ul_l_op1 % ul_f("op2")) || (ul_l_op1 % ul_f("op2") != ul_l_op1 % ul_f("op2")) || (ul_l_op1 % ul_f("op2") != ul_l_op1 % ul_f("op2")) || ((decimal)(ul_l_op1 % ul_f("op2")) != ul_l_op1 % ul_f("op2")) || (ul_l_op1 % ul_f("op2") != ul_l_op1 % (ulong)ul_f("op2")) || (ul_l_op1 % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 3 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)cl1.i_cl_op2 != ul_l_op1 % cl1.ui_cl_op2) || (ul_l_op1 % cl1.ui_cl_op2 != ul_l_op1 % (ulong)cl1.l_cl_op2) || (ul_l_op1 % (ulong)cl1.l_cl_op2 != ul_l_op1 % cl1.ul_cl_op2) || (ul_l_op1 % cl1.ul_cl_op2 != ul_l_op1 % cl1.f_cl_op2) || (ul_l_op1 % cl1.f_cl_op2 != ul_l_op1 % cl1.d_cl_op2) || ((decimal)(ul_l_op1 % cl1.d_cl_op2) != ul_l_op1 % cl1.m_cl_op2) || (ul_l_op1 % cl1.m_cl_op2 != ul_l_op1 % (ulong)cl1.i_cl_op2) || (ul_l_op1 % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 4 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)vt1.i_vt_op2 != ul_l_op1 % vt1.ui_vt_op2) || (ul_l_op1 % vt1.ui_vt_op2 != ul_l_op1 % (ulong)vt1.l_vt_op2) || (ul_l_op1 % (ulong)vt1.l_vt_op2 != ul_l_op1 % vt1.ul_vt_op2) || (ul_l_op1 % vt1.ul_vt_op2 != ul_l_op1 % vt1.f_vt_op2) || (ul_l_op1 % vt1.f_vt_op2 != ul_l_op1 % vt1.d_vt_op2) || ((decimal)(ul_l_op1 % vt1.d_vt_op2) != ul_l_op1 % vt1.m_vt_op2) || (ul_l_op1 % vt1.m_vt_op2 != ul_l_op1 % (ulong)vt1.i_vt_op2) || (ul_l_op1 % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 5 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)i_arr1d_op2[0] != ul_l_op1 % ui_arr1d_op2[0]) || (ul_l_op1 % ui_arr1d_op2[0] != ul_l_op1 % (ulong)l_arr1d_op2[0]) || (ul_l_op1 % (ulong)l_arr1d_op2[0] != ul_l_op1 % ul_arr1d_op2[0]) || (ul_l_op1 % ul_arr1d_op2[0] != ul_l_op1 % f_arr1d_op2[0]) || (ul_l_op1 % f_arr1d_op2[0] != ul_l_op1 % d_arr1d_op2[0]) || ((decimal)(ul_l_op1 % d_arr1d_op2[0]) != ul_l_op1 % m_arr1d_op2[0]) || (ul_l_op1 % m_arr1d_op2[0] != ul_l_op1 % (ulong)i_arr1d_op2[0]) || (ul_l_op1 % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 6 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_l_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != ul_l_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_l_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 7 failed");
+                passed = false;
+            }
+            if ((ul_l_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_l_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_l_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_l_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 8 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)i_l_op2 != s_ul_s_op1 % ui_l_op2) || (s_ul_s_op1 % ui_l_op2 != s_ul_s_op1 % (ulong)l_l_op2) || (s_ul_s_op1 % (ulong)l_l_op2 != s_ul_s_op1 % ul_l_op2) || (s_ul_s_op1 % ul_l_op2 != s_ul_s_op1 % f_l_op2) || (s_ul_s_op1 % f_l_op2 != s_ul_s_op1 % d_l_op2) || ((decimal)(s_ul_s_op1 % d_l_op2) != s_ul_s_op1 % m_l_op2) || (s_ul_s_op1 % m_l_op2 != s_ul_s_op1 % (ulong)i_l_op2) || (s_ul_s_op1 % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 9 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)s_i_s_op2 != s_ul_s_op1 % s_ui_s_op2) || (s_ul_s_op1 % s_ui_s_op2 != s_ul_s_op1 % (ulong)s_l_s_op2) || (s_ul_s_op1 % (ulong)s_l_s_op2 != s_ul_s_op1 % s_ul_s_op2) || (s_ul_s_op1 % s_ul_s_op2 != s_ul_s_op1 % s_f_s_op2) || (s_ul_s_op1 % s_f_s_op2 != s_ul_s_op1 % s_d_s_op2) || ((decimal)(s_ul_s_op1 % s_d_s_op2) != s_ul_s_op1 % s_m_s_op2) || (s_ul_s_op1 % s_m_s_op2 != s_ul_s_op1 % (ulong)s_i_s_op2) || (s_ul_s_op1 % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 10 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)ul_f("op2") != s_ul_s_op1 % ul_f("op2")) || (s_ul_s_op1 % ul_f("op2") != s_ul_s_op1 % (ulong)ul_f("op2")) || (s_ul_s_op1 % (ulong)ul_f("op2") != s_ul_s_op1 % ul_f("op2")) || (s_ul_s_op1 % ul_f("op2") != s_ul_s_op1 % ul_f("op2")) || (s_ul_s_op1 % ul_f("op2") != s_ul_s_op1 % ul_f("op2")) || ((decimal)(s_ul_s_op1 % ul_f("op2")) != s_ul_s_op1 % ul_f("op2")) || (s_ul_s_op1 % ul_f("op2") != s_ul_s_op1 % (ulong)ul_f("op2")) || (s_ul_s_op1 % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 11 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)cl1.i_cl_op2 != s_ul_s_op1 % cl1.ui_cl_op2) || (s_ul_s_op1 % cl1.ui_cl_op2 != s_ul_s_op1 % (ulong)cl1.l_cl_op2) || (s_ul_s_op1 % (ulong)cl1.l_cl_op2 != s_ul_s_op1 % cl1.ul_cl_op2) || (s_ul_s_op1 % cl1.ul_cl_op2 != s_ul_s_op1 % cl1.f_cl_op2) || (s_ul_s_op1 % cl1.f_cl_op2 != s_ul_s_op1 % cl1.d_cl_op2) || ((decimal)(s_ul_s_op1 % cl1.d_cl_op2) != s_ul_s_op1 % cl1.m_cl_op2) || (s_ul_s_op1 % cl1.m_cl_op2 != s_ul_s_op1 % (ulong)cl1.i_cl_op2) || (s_ul_s_op1 % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 12 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)vt1.i_vt_op2 != s_ul_s_op1 % vt1.ui_vt_op2) || (s_ul_s_op1 % vt1.ui_vt_op2 != s_ul_s_op1 % (ulong)vt1.l_vt_op2) || (s_ul_s_op1 % (ulong)vt1.l_vt_op2 != s_ul_s_op1 % vt1.ul_vt_op2) || (s_ul_s_op1 % vt1.ul_vt_op2 != s_ul_s_op1 % vt1.f_vt_op2) || (s_ul_s_op1 % vt1.f_vt_op2 != s_ul_s_op1 % vt1.d_vt_op2) || ((decimal)(s_ul_s_op1 % vt1.d_vt_op2) != s_ul_s_op1 % vt1.m_vt_op2) || (s_ul_s_op1 % vt1.m_vt_op2 != s_ul_s_op1 % (ulong)vt1.i_vt_op2) || (s_ul_s_op1 % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 13 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)i_arr1d_op2[0] != s_ul_s_op1 % ui_arr1d_op2[0]) || (s_ul_s_op1 % ui_arr1d_op2[0] != s_ul_s_op1 % (ulong)l_arr1d_op2[0]) || (s_ul_s_op1 % (ulong)l_arr1d_op2[0] != s_ul_s_op1 % ul_arr1d_op2[0]) || (s_ul_s_op1 % ul_arr1d_op2[0] != s_ul_s_op1 % f_arr1d_op2[0]) || (s_ul_s_op1 % f_arr1d_op2[0] != s_ul_s_op1 % d_arr1d_op2[0]) || ((decimal)(s_ul_s_op1 % d_arr1d_op2[0]) != s_ul_s_op1 % m_arr1d_op2[0]) || (s_ul_s_op1 % m_arr1d_op2[0] != s_ul_s_op1 % (ulong)i_arr1d_op2[0]) || (s_ul_s_op1 % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 14 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(s_ul_s_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != s_ul_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != s_ul_s_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (s_ul_s_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 15 failed");
+                passed = false;
+            }
+            if ((s_ul_s_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(s_ul_s_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != s_ul_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != s_ul_s_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (s_ul_s_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 16 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)i_l_op2 != ul_f("op1") % ui_l_op2) || (ul_f("op1") % ui_l_op2 != ul_f("op1") % (ulong)l_l_op2) || (ul_f("op1") % (ulong)l_l_op2 != ul_f("op1") % ul_l_op2) || (ul_f("op1") % ul_l_op2 != ul_f("op1") % f_l_op2) || (ul_f("op1") % f_l_op2 != ul_f("op1") % d_l_op2) || ((decimal)(ul_f("op1") % d_l_op2) != ul_f("op1") % m_l_op2) || (ul_f("op1") % m_l_op2 != ul_f("op1") % (ulong)i_l_op2) || (ul_f("op1") % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 17 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)s_i_s_op2 != ul_f("op1") % s_ui_s_op2) || (ul_f("op1") % s_ui_s_op2 != ul_f("op1") % (ulong)s_l_s_op2) || (ul_f("op1") % (ulong)s_l_s_op2 != ul_f("op1") % s_ul_s_op2) || (ul_f("op1") % s_ul_s_op2 != ul_f("op1") % s_f_s_op2) || (ul_f("op1") % s_f_s_op2 != ul_f("op1") % s_d_s_op2) || ((decimal)(ul_f("op1") % s_d_s_op2) != ul_f("op1") % s_m_s_op2) || (ul_f("op1") % s_m_s_op2 != ul_f("op1") % (ulong)s_i_s_op2) || (ul_f("op1") % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 18 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)ul_f("op2") != ul_f("op1") % ul_f("op2")) || (ul_f("op1") % ul_f("op2") != ul_f("op1") % (ulong)ul_f("op2")) || (ul_f("op1") % (ulong)ul_f("op2") != ul_f("op1") % ul_f("op2")) || (ul_f("op1") % ul_f("op2") != ul_f("op1") % ul_f("op2")) || (ul_f("op1") % ul_f("op2") != ul_f("op1") % ul_f("op2")) || ((decimal)(ul_f("op1") % ul_f("op2")) != ul_f("op1") % ul_f("op2")) || (ul_f("op1") % ul_f("op2") != ul_f("op1") % (ulong)ul_f("op2")) || (ul_f("op1") % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 19 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)cl1.i_cl_op2 != ul_f("op1") % cl1.ui_cl_op2) || (ul_f("op1") % cl1.ui_cl_op2 != ul_f("op1") % (ulong)cl1.l_cl_op2) || (ul_f("op1") % (ulong)cl1.l_cl_op2 != ul_f("op1") % cl1.ul_cl_op2) || (ul_f("op1") % cl1.ul_cl_op2 != ul_f("op1") % cl1.f_cl_op2) || (ul_f("op1") % cl1.f_cl_op2 != ul_f("op1") % cl1.d_cl_op2) || ((decimal)(ul_f("op1") % cl1.d_cl_op2) != ul_f("op1") % cl1.m_cl_op2) || (ul_f("op1") % cl1.m_cl_op2 != ul_f("op1") % (ulong)cl1.i_cl_op2) || (ul_f("op1") % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 20 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)vt1.i_vt_op2 != ul_f("op1") % vt1.ui_vt_op2) || (ul_f("op1") % vt1.ui_vt_op2 != ul_f("op1") % (ulong)vt1.l_vt_op2) || (ul_f("op1") % (ulong)vt1.l_vt_op2 != ul_f("op1") % vt1.ul_vt_op2) || (ul_f("op1") % vt1.ul_vt_op2 != ul_f("op1") % vt1.f_vt_op2) || (ul_f("op1") % vt1.f_vt_op2 != ul_f("op1") % vt1.d_vt_op2) || ((decimal)(ul_f("op1") % vt1.d_vt_op2) != ul_f("op1") % vt1.m_vt_op2) || (ul_f("op1") % vt1.m_vt_op2 != ul_f("op1") % (ulong)vt1.i_vt_op2) || (ul_f("op1") % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 21 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)i_arr1d_op2[0] != ul_f("op1") % ui_arr1d_op2[0]) || (ul_f("op1") % ui_arr1d_op2[0] != ul_f("op1") % (ulong)l_arr1d_op2[0]) || (ul_f("op1") % (ulong)l_arr1d_op2[0] != ul_f("op1") % ul_arr1d_op2[0]) || (ul_f("op1") % ul_arr1d_op2[0] != ul_f("op1") % f_arr1d_op2[0]) || (ul_f("op1") % f_arr1d_op2[0] != ul_f("op1") % d_arr1d_op2[0]) || ((decimal)(ul_f("op1") % d_arr1d_op2[0]) != ul_f("op1") % m_arr1d_op2[0]) || (ul_f("op1") % m_arr1d_op2[0] != ul_f("op1") % (ulong)i_arr1d_op2[0]) || (ul_f("op1") % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 22 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % f_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_f("op1") % d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % m_arr2d_op2[index[0, 1], index[1, 0]] != ul_f("op1") % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_f("op1") % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 23 failed");
+                passed = false;
+            }
+            if ((ul_f("op1") % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_f("op1") % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_f("op1") % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_f("op1") % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 24 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)i_l_op2 != cl1.ul_cl_op1 % ui_l_op2) || (cl1.ul_cl_op1 % ui_l_op2 != cl1.ul_cl_op1 % (ulong)l_l_op2) || (cl1.ul_cl_op1 % (ulong)l_l_op2 != cl1.ul_cl_op1 % ul_l_op2) || (cl1.ul_cl_op1 % ul_l_op2 != cl1.ul_cl_op1 % f_l_op2) || (cl1.ul_cl_op1 % f_l_op2 != cl1.ul_cl_op1 % d_l_op2) || ((decimal)(cl1.ul_cl_op1 % d_l_op2) != cl1.ul_cl_op1 % m_l_op2) || (cl1.ul_cl_op1 % m_l_op2 != cl1.ul_cl_op1 % (ulong)i_l_op2) || (cl1.ul_cl_op1 % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 25 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)s_i_s_op2 != cl1.ul_cl_op1 % s_ui_s_op2) || (cl1.ul_cl_op1 % s_ui_s_op2 != cl1.ul_cl_op1 % (ulong)s_l_s_op2) || (cl1.ul_cl_op1 % (ulong)s_l_s_op2 != cl1.ul_cl_op1 % s_ul_s_op2) || (cl1.ul_cl_op1 % s_ul_s_op2 != cl1.ul_cl_op1 % s_f_s_op2) || (cl1.ul_cl_op1 % s_f_s_op2 != cl1.ul_cl_op1 % s_d_s_op2) || ((decimal)(cl1.ul_cl_op1 % s_d_s_op2) != cl1.ul_cl_op1 % s_m_s_op2) || (cl1.ul_cl_op1 % s_m_s_op2 != cl1.ul_cl_op1 % (ulong)s_i_s_op2) || (cl1.ul_cl_op1 % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 26 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)ul_f("op2") != cl1.ul_cl_op1 % ul_f("op2")) || (cl1.ul_cl_op1 % ul_f("op2") != cl1.ul_cl_op1 % (ulong)ul_f("op2")) || (cl1.ul_cl_op1 % (ulong)ul_f("op2") != cl1.ul_cl_op1 % ul_f("op2")) || (cl1.ul_cl_op1 % ul_f("op2") != cl1.ul_cl_op1 % ul_f("op2")) || (cl1.ul_cl_op1 % ul_f("op2") != cl1.ul_cl_op1 % ul_f("op2")) || ((decimal)(cl1.ul_cl_op1 % ul_f("op2")) != cl1.ul_cl_op1 % ul_f("op2")) || (cl1.ul_cl_op1 % ul_f("op2") != cl1.ul_cl_op1 % (ulong)ul_f("op2")) || (cl1.ul_cl_op1 % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 27 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)cl1.i_cl_op2 != cl1.ul_cl_op1 % cl1.ui_cl_op2) || (cl1.ul_cl_op1 % cl1.ui_cl_op2 != cl1.ul_cl_op1 % (ulong)cl1.l_cl_op2) || (cl1.ul_cl_op1 % (ulong)cl1.l_cl_op2 != cl1.ul_cl_op1 % cl1.ul_cl_op2) || (cl1.ul_cl_op1 % cl1.ul_cl_op2 != cl1.ul_cl_op1 % cl1.f_cl_op2) || (cl1.ul_cl_op1 % cl1.f_cl_op2 != cl1.ul_cl_op1 % cl1.d_cl_op2) || ((decimal)(cl1.ul_cl_op1 % cl1.d_cl_op2) != cl1.ul_cl_op1 % cl1.m_cl_op2) || (cl1.ul_cl_op1 % cl1.m_cl_op2 != cl1.ul_cl_op1 % (ulong)cl1.i_cl_op2) || (cl1.ul_cl_op1 % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 28 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)vt1.i_vt_op2 != cl1.ul_cl_op1 % vt1.ui_vt_op2) || (cl1.ul_cl_op1 % vt1.ui_vt_op2 != cl1.ul_cl_op1 % (ulong)vt1.l_vt_op2) || (cl1.ul_cl_op1 % (ulong)vt1.l_vt_op2 != cl1.ul_cl_op1 % vt1.ul_vt_op2) || (cl1.ul_cl_op1 % vt1.ul_vt_op2 != cl1.ul_cl_op1 % vt1.f_vt_op2) || (cl1.ul_cl_op1 % vt1.f_vt_op2 != cl1.ul_cl_op1 % vt1.d_vt_op2) || ((decimal)(cl1.ul_cl_op1 % vt1.d_vt_op2) != cl1.ul_cl_op1 % vt1.m_vt_op2) || (cl1.ul_cl_op1 % vt1.m_vt_op2 != cl1.ul_cl_op1 % (ulong)vt1.i_vt_op2) || (cl1.ul_cl_op1 % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 29 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)i_arr1d_op2[0] != cl1.ul_cl_op1 % ui_arr1d_op2[0]) || (cl1.ul_cl_op1 % ui_arr1d_op2[0] != cl1.ul_cl_op1 % (ulong)l_arr1d_op2[0]) || (cl1.ul_cl_op1 % (ulong)l_arr1d_op2[0] != cl1.ul_cl_op1 % ul_arr1d_op2[0]) || (cl1.ul_cl_op1 % ul_arr1d_op2[0] != cl1.ul_cl_op1 % f_arr1d_op2[0]) || (cl1.ul_cl_op1 % f_arr1d_op2[0] != cl1.ul_cl_op1 % d_arr1d_op2[0]) || ((decimal)(cl1.ul_cl_op1 % d_arr1d_op2[0]) != cl1.ul_cl_op1 % m_arr1d_op2[0]) || (cl1.ul_cl_op1 % m_arr1d_op2[0] != cl1.ul_cl_op1 % (ulong)i_arr1d_op2[0]) || (cl1.ul_cl_op1 % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 30 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(cl1.ul_cl_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != cl1.ul_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != cl1.ul_cl_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (cl1.ul_cl_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 31 failed");
+                passed = false;
+            }
+            if ((cl1.ul_cl_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(cl1.ul_cl_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != cl1.ul_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != cl1.ul_cl_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (cl1.ul_cl_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 32 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)i_l_op2 != vt1.ul_vt_op1 % ui_l_op2) || (vt1.ul_vt_op1 % ui_l_op2 != vt1.ul_vt_op1 % (ulong)l_l_op2) || (vt1.ul_vt_op1 % (ulong)l_l_op2 != vt1.ul_vt_op1 % ul_l_op2) || (vt1.ul_vt_op1 % ul_l_op2 != vt1.ul_vt_op1 % f_l_op2) || (vt1.ul_vt_op1 % f_l_op2 != vt1.ul_vt_op1 % d_l_op2) || ((decimal)(vt1.ul_vt_op1 % d_l_op2) != vt1.ul_vt_op1 % m_l_op2) || (vt1.ul_vt_op1 % m_l_op2 != vt1.ul_vt_op1 % (ulong)i_l_op2) || (vt1.ul_vt_op1 % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 33 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)s_i_s_op2 != vt1.ul_vt_op1 % s_ui_s_op2) || (vt1.ul_vt_op1 % s_ui_s_op2 != vt1.ul_vt_op1 % (ulong)s_l_s_op2) || (vt1.ul_vt_op1 % (ulong)s_l_s_op2 != vt1.ul_vt_op1 % s_ul_s_op2) || (vt1.ul_vt_op1 % s_ul_s_op2 != vt1.ul_vt_op1 % s_f_s_op2) || (vt1.ul_vt_op1 % s_f_s_op2 != vt1.ul_vt_op1 % s_d_s_op2) || ((decimal)(vt1.ul_vt_op1 % s_d_s_op2) != vt1.ul_vt_op1 % s_m_s_op2) || (vt1.ul_vt_op1 % s_m_s_op2 != vt1.ul_vt_op1 % (ulong)s_i_s_op2) || (vt1.ul_vt_op1 % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 34 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)ul_f("op2") != vt1.ul_vt_op1 % ul_f("op2")) || (vt1.ul_vt_op1 % ul_f("op2") != vt1.ul_vt_op1 % (ulong)ul_f("op2")) || (vt1.ul_vt_op1 % (ulong)ul_f("op2") != vt1.ul_vt_op1 % ul_f("op2")) || (vt1.ul_vt_op1 % ul_f("op2") != vt1.ul_vt_op1 % ul_f("op2")) || (vt1.ul_vt_op1 % ul_f("op2") != vt1.ul_vt_op1 % ul_f("op2")) || ((decimal)(vt1.ul_vt_op1 % ul_f("op2")) != vt1.ul_vt_op1 % ul_f("op2")) || (vt1.ul_vt_op1 % ul_f("op2") != vt1.ul_vt_op1 % (ulong)ul_f("op2")) || (vt1.ul_vt_op1 % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 35 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)cl1.i_cl_op2 != vt1.ul_vt_op1 % cl1.ui_cl_op2) || (vt1.ul_vt_op1 % cl1.ui_cl_op2 != vt1.ul_vt_op1 % (ulong)cl1.l_cl_op2) || (vt1.ul_vt_op1 % (ulong)cl1.l_cl_op2 != vt1.ul_vt_op1 % cl1.ul_cl_op2) || (vt1.ul_vt_op1 % cl1.ul_cl_op2 != vt1.ul_vt_op1 % cl1.f_cl_op2) || (vt1.ul_vt_op1 % cl1.f_cl_op2 != vt1.ul_vt_op1 % cl1.d_cl_op2) || ((decimal)(vt1.ul_vt_op1 % cl1.d_cl_op2) != vt1.ul_vt_op1 % cl1.m_cl_op2) || (vt1.ul_vt_op1 % cl1.m_cl_op2 != vt1.ul_vt_op1 % (ulong)cl1.i_cl_op2) || (vt1.ul_vt_op1 % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 36 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)vt1.i_vt_op2 != vt1.ul_vt_op1 % vt1.ui_vt_op2) || (vt1.ul_vt_op1 % vt1.ui_vt_op2 != vt1.ul_vt_op1 % (ulong)vt1.l_vt_op2) || (vt1.ul_vt_op1 % (ulong)vt1.l_vt_op2 != vt1.ul_vt_op1 % vt1.ul_vt_op2) || (vt1.ul_vt_op1 % vt1.ul_vt_op2 != vt1.ul_vt_op1 % vt1.f_vt_op2) || (vt1.ul_vt_op1 % vt1.f_vt_op2 != vt1.ul_vt_op1 % vt1.d_vt_op2) || ((decimal)(vt1.ul_vt_op1 % vt1.d_vt_op2) != vt1.ul_vt_op1 % vt1.m_vt_op2) || (vt1.ul_vt_op1 % vt1.m_vt_op2 != vt1.ul_vt_op1 % (ulong)vt1.i_vt_op2) || (vt1.ul_vt_op1 % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 37 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)i_arr1d_op2[0] != vt1.ul_vt_op1 % ui_arr1d_op2[0]) || (vt1.ul_vt_op1 % ui_arr1d_op2[0] != vt1.ul_vt_op1 % (ulong)l_arr1d_op2[0]) || (vt1.ul_vt_op1 % (ulong)l_arr1d_op2[0] != vt1.ul_vt_op1 % ul_arr1d_op2[0]) || (vt1.ul_vt_op1 % ul_arr1d_op2[0] != vt1.ul_vt_op1 % f_arr1d_op2[0]) || (vt1.ul_vt_op1 % f_arr1d_op2[0] != vt1.ul_vt_op1 % d_arr1d_op2[0]) || ((decimal)(vt1.ul_vt_op1 % d_arr1d_op2[0]) != vt1.ul_vt_op1 % m_arr1d_op2[0]) || (vt1.ul_vt_op1 % m_arr1d_op2[0] != vt1.ul_vt_op1 % (ulong)i_arr1d_op2[0]) || (vt1.ul_vt_op1 % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 38 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % ui_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % ul_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % f_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(vt1.ul_vt_op1 % d_arr2d_op2[index[0, 1], index[1, 0]]) != vt1.ul_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % m_arr2d_op2[index[0, 1], index[1, 0]] != vt1.ul_vt_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (vt1.ul_vt_op1 % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 39 failed");
+                passed = false;
+            }
+            if ((vt1.ul_vt_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(vt1.ul_vt_op1 % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != vt1.ul_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != vt1.ul_vt_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (vt1.ul_vt_op1 % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 40 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)i_l_op2 != ul_arr1d_op1[1] % ui_l_op2) || (ul_arr1d_op1[1] % ui_l_op2 != ul_arr1d_op1[1] % (ulong)l_l_op2) || (ul_arr1d_op1[1] % (ulong)l_l_op2 != ul_arr1d_op1[1] % ul_l_op2) || (ul_arr1d_op1[1] % ul_l_op2 != ul_arr1d_op1[1] % f_l_op2) || (ul_arr1d_op1[1] % f_l_op2 != ul_arr1d_op1[1] % d_l_op2) || ((decimal)(ul_arr1d_op1[1] % d_l_op2) != ul_arr1d_op1[1] % m_l_op2) || (ul_arr1d_op1[1] % m_l_op2 != ul_arr1d_op1[1] % (ulong)i_l_op2) || (ul_arr1d_op1[1] % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 41 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)s_i_s_op2 != ul_arr1d_op1[1] % s_ui_s_op2) || (ul_arr1d_op1[1] % s_ui_s_op2 != ul_arr1d_op1[1] % (ulong)s_l_s_op2) || (ul_arr1d_op1[1] % (ulong)s_l_s_op2 != ul_arr1d_op1[1] % s_ul_s_op2) || (ul_arr1d_op1[1] % s_ul_s_op2 != ul_arr1d_op1[1] % s_f_s_op2) || (ul_arr1d_op1[1] % s_f_s_op2 != ul_arr1d_op1[1] % s_d_s_op2) || ((decimal)(ul_arr1d_op1[1] % s_d_s_op2) != ul_arr1d_op1[1] % s_m_s_op2) || (ul_arr1d_op1[1] % s_m_s_op2 != ul_arr1d_op1[1] % (ulong)s_i_s_op2) || (ul_arr1d_op1[1] % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 42 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)ul_f("op2") != ul_arr1d_op1[1] % ul_f("op2")) || (ul_arr1d_op1[1] % ul_f("op2") != ul_arr1d_op1[1] % (ulong)ul_f("op2")) || (ul_arr1d_op1[1] % (ulong)ul_f("op2") != ul_arr1d_op1[1] % ul_f("op2")) || (ul_arr1d_op1[1] % ul_f("op2") != ul_arr1d_op1[1] % ul_f("op2")) || (ul_arr1d_op1[1] % ul_f("op2") != ul_arr1d_op1[1] % ul_f("op2")) || ((decimal)(ul_arr1d_op1[1] % ul_f("op2")) != ul_arr1d_op1[1] % ul_f("op2")) || (ul_arr1d_op1[1] % ul_f("op2") != ul_arr1d_op1[1] % (ulong)ul_f("op2")) || (ul_arr1d_op1[1] % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 43 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)cl1.i_cl_op2 != ul_arr1d_op1[1] % cl1.ui_cl_op2) || (ul_arr1d_op1[1] % cl1.ui_cl_op2 != ul_arr1d_op1[1] % (ulong)cl1.l_cl_op2) || (ul_arr1d_op1[1] % (ulong)cl1.l_cl_op2 != ul_arr1d_op1[1] % cl1.ul_cl_op2) || (ul_arr1d_op1[1] % cl1.ul_cl_op2 != ul_arr1d_op1[1] % cl1.f_cl_op2) || (ul_arr1d_op1[1] % cl1.f_cl_op2 != ul_arr1d_op1[1] % cl1.d_cl_op2) || ((decimal)(ul_arr1d_op1[1] % cl1.d_cl_op2) != ul_arr1d_op1[1] % cl1.m_cl_op2) || (ul_arr1d_op1[1] % cl1.m_cl_op2 != ul_arr1d_op1[1] % (ulong)cl1.i_cl_op2) || (ul_arr1d_op1[1] % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 44 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)vt1.i_vt_op2 != ul_arr1d_op1[1] % vt1.ui_vt_op2) || (ul_arr1d_op1[1] % vt1.ui_vt_op2 != ul_arr1d_op1[1] % (ulong)vt1.l_vt_op2) || (ul_arr1d_op1[1] % (ulong)vt1.l_vt_op2 != ul_arr1d_op1[1] % vt1.ul_vt_op2) || (ul_arr1d_op1[1] % vt1.ul_vt_op2 != ul_arr1d_op1[1] % vt1.f_vt_op2) || (ul_arr1d_op1[1] % vt1.f_vt_op2 != ul_arr1d_op1[1] % vt1.d_vt_op2) || ((decimal)(ul_arr1d_op1[1] % vt1.d_vt_op2) != ul_arr1d_op1[1] % vt1.m_vt_op2) || (ul_arr1d_op1[1] % vt1.m_vt_op2 != ul_arr1d_op1[1] % (ulong)vt1.i_vt_op2) || (ul_arr1d_op1[1] % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 45 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)i_arr1d_op2[0] != ul_arr1d_op1[1] % ui_arr1d_op2[0]) || (ul_arr1d_op1[1] % ui_arr1d_op2[0] != ul_arr1d_op1[1] % (ulong)l_arr1d_op2[0]) || (ul_arr1d_op1[1] % (ulong)l_arr1d_op2[0] != ul_arr1d_op1[1] % ul_arr1d_op2[0]) || (ul_arr1d_op1[1] % ul_arr1d_op2[0] != ul_arr1d_op1[1] % f_arr1d_op2[0]) || (ul_arr1d_op1[1] % f_arr1d_op2[0] != ul_arr1d_op1[1] % d_arr1d_op2[0]) || ((decimal)(ul_arr1d_op1[1] % d_arr1d_op2[0]) != ul_arr1d_op1[1] % m_arr1d_op2[0]) || (ul_arr1d_op1[1] % m_arr1d_op2[0] != ul_arr1d_op1[1] % (ulong)i_arr1d_op2[0]) || (ul_arr1d_op1[1] % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 46 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr1d_op1[1] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr1d_op1[1] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr1d_op1[1] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 47 failed");
+                passed = false;
+            }
+            if ((ul_arr1d_op1[1] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr1d_op1[1] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr1d_op1[1] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr1d_op1[1] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 48 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % f_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % d_l_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % m_l_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_l_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 49 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)s_i_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % s_ui_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)s_l_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)s_l_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % s_ul_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % s_f_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % s_d_s_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % s_m_s_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)s_i_s_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 50 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_f("op2") != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)ul_f("op2")) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 51 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)cl1.i_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ui_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)cl1.l_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)cl1.l_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.ul_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.f_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.d_cl_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % cl1.m_cl_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)cl1.i_cl_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 52 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)vt1.i_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ui_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)vt1.l_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)vt1.l_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.ul_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.f_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.d_vt_op2) != ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % vt1.m_vt_op2 != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)vt1.i_vt_op2) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 53 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr1d_op2[0]) != ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr1d_op2[0] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr1d_op2[0]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 54 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 55 failed");
+                passed = false;
+            }
+            if ((ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr2d_op1[index[0, 1], index[1, 0]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr2d_op1[index[0, 1], index[1, 0]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 56 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_l_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_l_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_l_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_l_op2 != 2))
+            {
+                Console.WriteLine("testcase 57 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)s_i_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ui_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)s_l_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)s_l_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_ul_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_f_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_d_s_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % s_m_s_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)s_i_s_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)s_i_s_op2 != 2))
+            {
+                Console.WriteLine("testcase 58 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_f("op2") != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)ul_f("op2")) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)ul_f("op2") != 2))
+            {
+                Console.WriteLine("testcase 59 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)cl1.i_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ui_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)cl1.l_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)cl1.l_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.ul_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.f_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.d_cl_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % cl1.m_cl_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)cl1.i_cl_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)cl1.i_cl_op2 != 2))
+            {
+                Console.WriteLine("testcase 60 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)vt1.i_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ui_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)vt1.l_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)vt1.l_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.ul_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.f_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.d_vt_op2) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % vt1.m_vt_op2 != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)vt1.i_vt_op2) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)vt1.i_vt_op2 != 2))
+            {
+                Console.WriteLine("testcase 61 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr1d_op2[0]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr1d_op2[0] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr1d_op2[0]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr1d_op2[0] != 2))
+            {
+                Console.WriteLine("testcase 62 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr2d_op2[index[0, 1], index[1, 0]]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr2d_op2[index[0, 1], index[1, 0]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr2d_op2[index[0, 1], index[1, 0]] != 2))
+            {
+                Console.WriteLine("testcase 63 failed");
+                passed = false;
+            }
+            if ((ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ui_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)l_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % ul_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % f_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) || ((decimal)(ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % d_arr3d_op2[index[0, 0], 0, index[1, 1]]) != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % m_arr3d_op2[index[0, 0], 0, index[1, 1]] != ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]]) || (ul_arr3d_op1[index[0, 0], 0, index[1, 1]] % (ulong)i_arr3d_op2[index[0, 0], 0, index[1, 1]] != 2))
+            {
+                Console.WriteLine("testcase 64 failed");
+                passed = false;
+            }
+        }
+
+        if (!passed)
+        {
+            Console.WriteLine("FAILED");
+            return 1;
+        }
+        else
+        {
+            Console.WriteLine("PASSED");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/eh/interactions/app.config b/tests/src/JIT/Methodical/eh/interactions/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/eh/interactions/cs_template.proj b/tests/src/JIT/Methodical/eh/interactions/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/eh/interactions/ehSO.cs b/tests/src/JIT/Methodical/eh/interactions/ehSO.cs
new file mode 100644 (file)
index 0000000..db16b15
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+Spilling volatile objects opposed to spilling only
+  the exception objects. The equivalence of GTF_OTHER_SIDEEFF and
+  GT_CATCH_ARG is altered by impGetByRefResultType.
+  
+Actual Results:
+System.StackOverflowException during JIT of function
+
+Expected Results:
+no exception
+*/
+
+public class Form1
+{
+    public static volatile bool RunsInWebServer = false;
+
+
+    public Form1()
+    {
+        try
+        {
+        }
+        catch
+        {
+            string lT = string.Format("{0}", RunsInWebServer);
+        }
+    }
+
+    public static int Main()
+    {
+        Form1 f = new Form1();
+        return 100;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/eh/interactions/interactions.csproj b/tests/src/JIT/Methodical/eh/interactions/interactions.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/eh/interactions/packages.config b/tests/src/JIT/Methodical/eh/interactions/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/eh/interactions/volatileFromFinally.cs b/tests/src/JIT/Methodical/eh/interactions/volatileFromFinally.cs
new file mode 100644 (file)
index 0000000..5b9e2c8
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/* 
+
+Expected behavior:
+64 bit = False
+Hello from Main!
+Hello from Crash!
+
+Actual behavior:
+64 bit = False
+Hello from Main!
+Process is terminated due to StackOverflowException.
+*/
+
+using System;
+using System.IO;
+
+internal class Test
+{
+    private static volatile bool s_someField = false;
+
+    private static int s_result = 101;
+
+    private static void Crash()
+    {
+        try
+        {
+            Console.WriteLine("Hello from Crash!");
+            s_result = 100;
+        }
+
+        finally
+        {
+            var unused = new bool[] { s_someField };
+        }
+    }
+
+    private static int Main(string[] args)
+    {
+        //Console.WriteLine("64 bit = {0}", Environment.Is64BitProcess);
+
+        Console.WriteLine("Hello from Main!");
+
+        Crash();
+        return s_result;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/explicit/basic/app.config b/tests/src/JIT/Methodical/explicit/basic/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/basic/basic.csproj b/tests/src/JIT/Methodical/explicit/basic/basic.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/basic/cs_template.proj b/tests/src/JIT/Methodical/explicit/basic/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/basic/packages.config b/tests/src/JIT/Methodical/explicit/basic/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_c.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_c.cs
new file mode 100644 (file)
index 0000000..9bcb51b
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        protected char pad1 = 'z';
+        private AA _self = null;
+        public char mm = 'Q';
+
+        public AA() { _self = this; }
+
+        ~AA()
+        {
+            if (pad1 != 'z' || mm != 'Q')
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+            if (_self != null && (pad1 != 'z' || mm != 'Q'))
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA();
+        public static int exitCode = 1;
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static void Test(ref char n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 'Q')
+                exitCode = 1;
+            exitCode = 100;
+        }
+
+        private static int Main()
+        {
+            Test(ref s_aa.mm);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_f4.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_f4.cs
new file mode 100644 (file)
index 0000000..61711e9
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        public float mm2 = 12.0f;
+        public AA self1 = null;
+        public float mm1 = 11.314f;
+        public AA self2 = null;
+
+        public AA(int reclevel)
+        {
+            if (reclevel < 100)
+            {
+                self1 = new AA(reclevel + 1);
+                self2 = self1.self1;
+            }
+            else
+            {
+                self1 = this;
+                self2 = null;
+            }
+        }
+
+        protected void CheckFields()
+        {
+            if (mm2 != 12.0f || mm1 != 11.314f)
+                throw new Exception();
+        }
+
+        ~AA()
+        {
+            CheckFields();
+            if (self1 != null) self1.CheckFields();
+            if (self2 != null) self2.CheckFields();
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA(0);
+
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static int Test(ref float n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 12.0f)
+            {
+                Console.WriteLine("*** failed ***");
+                return 1;
+            }
+            Console.WriteLine("*** passed ***");
+            return 100;
+        }
+
+        private static int Main()
+        {
+            int exitCode = Test(ref s_aa.mm2);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_f8.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_f8.cs
new file mode 100644 (file)
index 0000000..b0474db
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        public double mm1 = 11.314d;
+        public AA self1 = null;
+        public AA self2 = null;
+        public double mm2 = 12.0d;
+
+        public AA(int reclevel)
+        {
+            if (reclevel < 100)
+            {
+                self1 = new AA(reclevel + 1);
+                self2 = self1.self1;
+            }
+            else
+            {
+                self1 = this;
+                self2 = null;
+            }
+        }
+
+        protected void CheckFields()
+        {
+            if (mm2 != 12.0d || mm1 != 11.314d)
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+        }
+
+        ~AA()
+        {
+            CheckFields();
+            if (self1 != null) self1.CheckFields();
+            if (self2 != null) self2.CheckFields();
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA(0);
+        public static int exitCode = 1;
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static void Test(ref double n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 11.314d)
+                exitCode = 1;
+            exitCode = 100;
+        }
+
+        private static int Main()
+        {
+            Test(ref s_aa.mm1);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_i1.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_i1.cs
new file mode 100644 (file)
index 0000000..4dce46b
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        private AA _self = null;
+        private byte _pad1 = 191;
+        public byte mm = 11;
+
+        public AA(int reclevel) { if (reclevel < 100) _self = new AA(reclevel + 1); }
+
+        ~AA()
+        {
+            try
+            {
+                if (_pad1 != 191 ||
+                    mm != 11 ||
+                    _self._pad1 != 191 ||
+                    _self.mm != 11)
+                {
+                    App.exitCode = 1;
+                    throw new Exception();
+                }
+            }
+            catch (NullReferenceException)
+            {
+                App.exitCode = 100;
+                Console.WriteLine("NullReferenceException caught in Finalizer as expected");
+            }
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA(0);
+        public static int exitCode = 1;
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static void Test(ref byte n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 11)
+                exitCode = 1;
+            exitCode = 100;
+        }
+
+        private static int Main()
+        {
+            Test(ref s_aa.mm);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_i2.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_i2.cs
new file mode 100644 (file)
index 0000000..0a25d5b
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        private short _pad1 = 191;
+        public short mm = 11;
+        public AA self = null;
+
+        ~AA()
+        {
+            if (_pad1 != 191 ||
+                mm != 11)
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+            if (self != null && (_pad1 != 191 || mm != 11))
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA();
+        public static int exitCode = 1;
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static void Test(ref short n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 11)
+                exitCode = 1;
+            exitCode = 100;
+        }
+
+        private static int Main()
+        {
+            s_aa.self = new AA();
+            Test(ref s_aa.mm);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_i4.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_i4.cs
new file mode 100644 (file)
index 0000000..285704f
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        public AA self3 = null;
+        public AA self4 = null;
+        private int _pad1 = 191;
+        public int mm = 11;
+        public AA self1 = null;
+        public AA self2 = null;
+
+        public AA(int reclevel)
+        {
+            self1 = self2 = self4 = this;
+            if (reclevel < 100)
+                self3 = new AA(reclevel + 1);
+        }
+
+        protected void CheckFields()
+        {
+            if (this == null)
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+            if (_pad1 != 191 || mm != 11)
+            {
+                App.exitCode = 1;
+                throw new Exception();
+            }
+        }
+
+        ~AA()
+        {
+            CheckFields();
+            if (self1 != null) self1.CheckFields();
+            if (self2 != null) self2.CheckFields();
+            if (self3 != null) self3.CheckFields();
+            if (self4 != null) self4.CheckFields();
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA(0);
+        public static int exitCode = 1;
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static void Test(ref int n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != 11)
+                exitCode = 1;
+            exitCode = 100;
+        }
+
+        private static int Main()
+        {
+            Test(ref s_aa.mm);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_o.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_o.cs
new file mode 100644 (file)
index 0000000..734fd1c
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        protected char pad1 = 'z';
+        public int mm = 11;
+
+        public AA(AA aa) { m_aa = aa; }
+
+        public AA m_aa = null;
+
+        ~AA()
+        {
+            if (pad1 != 'z' || mm != 11)
+                throw new Exception();
+            if (m_aa != null && (m_aa.pad1 != 'z' || m_aa.mm != 11))
+                throw new Exception();
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA(new AA(null));
+
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static int Test(ref AA aa)
+        {
+            s_aa = null;
+            Litter();
+            if (aa.mm != 11)
+            {
+                Console.WriteLine("*** failed ***");
+                return 1;
+            }
+            Console.WriteLine("*** passed ***");
+            return 100;
+        }
+
+        private static int Main()
+        {
+            int exitCode = Test(ref s_aa.m_aa);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/basic/refarg_s.cs b/tests/src/JIT/Methodical/explicit/basic/refarg_s.cs
new file mode 100644 (file)
index 0000000..80ece32
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Test
+{
+    internal class AA
+    {
+        protected char pad1 = 'z';
+        public String mm = "aha";
+
+        public AA() { _self = this; }
+
+        private AA _self = null;
+
+        ~AA()
+        {
+            if (pad1 != 'z' || mm != "aha")
+                throw new Exception();
+            if (_self != null && (pad1 != 'z' || mm != "aha"))
+                throw new Exception();
+        }
+    }
+
+    internal class App
+    {
+        private static AA s_aa = new AA();
+
+        private static void Litter()
+        {
+            GC.Collect();
+            for (int i = 0; i < 1000; i++)
+            {
+                int[] p = new int[1000];
+            }
+            GC.Collect();
+        }
+
+        private static int Test(ref String n)
+        {
+            s_aa = null;
+            Litter();
+            if (n != "aha")
+            {
+                Console.WriteLine("*** failed ***");
+                return 1;
+            }
+            Console.WriteLine("*** passed ***");
+            return 100;
+        }
+
+        private static int Main()
+        {
+            int exitCode = Test(ref s_aa.mm);
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            return exitCode;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/app.config b/tests/src/JIT/Methodical/explicit/misc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/misc/cs_template.proj b/tests/src/JIT/Methodical/explicit/misc/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit1.cs b/tests/src/JIT/Methodical/explicit/misc/explicit1.cs
new file mode 100644 (file)
index 0000000..a588c40
--- /dev/null
@@ -0,0 +1,257 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private ulong _BASEPAD_0;
+            private int _BASEPAD_1;
+            private String _BASEPAD_2;
+            private uint _BASEPAD_3;
+            private ushort _BASEPAD_4;
+            private int _BASEPAD_5;
+            private uint _BASEPAD_6;
+            private ulong _BASEPAD_7;
+            private String _BASEPAD_8;
+            private int _BASEPAD_9;
+            private ulong _BASEPAD_10;
+            private char _BASEPAD_11;
+            private char _BASEPAD_12;
+            private int _BASEPAD_13;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 102;
+                _BASEPAD_1 = 185;
+                _BASEPAD_2 = "29233";
+                _BASEPAD_3 = 180;
+                _BASEPAD_4 = 112;
+                _BASEPAD_5 = 181;
+                _BASEPAD_6 = 169;
+                _BASEPAD_7 = 161;
+                _BASEPAD_8 = "18456";
+                _BASEPAD_9 = 164;
+                _BASEPAD_10 = 91;
+                _BASEPAD_11 = '`';
+                _BASEPAD_12 = 'O';
+                _BASEPAD_13 = 37;
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 102) throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != 185) throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != "29233") throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != 180) throw new Exception("m_BASEPAD_3");
+                if (_BASEPAD_4 != 112) throw new Exception("m_BASEPAD_4");
+                if (_BASEPAD_5 != 181) throw new Exception("m_BASEPAD_5");
+                if (_BASEPAD_6 != 169) throw new Exception("m_BASEPAD_6");
+                if (_BASEPAD_7 != 161) throw new Exception("m_BASEPAD_7");
+                if (_BASEPAD_8 != "18456") throw new Exception("m_BASEPAD_8");
+                if (_BASEPAD_9 != 164) throw new Exception("m_BASEPAD_9");
+                if (_BASEPAD_10 != 91) throw new Exception("m_BASEPAD_10");
+                if (_BASEPAD_11 != '`') throw new Exception("m_BASEPAD_11");
+                if (_BASEPAD_12 != 'O') throw new Exception("m_BASEPAD_12");
+                if (_BASEPAD_13 != 37) throw new Exception("m_BASEPAD_13");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            public Node m_leftChild;
+            private ulong _MID1PAD_0;
+            private ushort _MID1PAD_1;
+            private byte _MID1PAD_2;
+            private byte _MID1PAD_3;
+            private char _MID1PAD_4;
+            private int _MID1PAD_5;
+            private int _MID1PAD_6;
+            private String _MID1PAD_7;
+            private ushort _MID1PAD_8;
+            private uint _MID1PAD_9;
+            private byte _MID1PAD_10;
+            public int m_weight;
+            private int _MID2PAD_0;
+            private String _MID2PAD_1;
+            private uint _MID2PAD_2;
+            private ulong _MID2PAD_3;
+            private char _MID2PAD_4;
+            private ushort _MID2PAD_5;
+            private uint _MID2PAD_6;
+            private uint _MID2PAD_7;
+            private ulong _MID2PAD_8;
+            private ushort _MID2PAD_9;
+            private uint _MID2PAD_10;
+            public Node m_rightChild;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _MID1PAD_0 = 131;
+                _MID1PAD_1 = 43;
+                _MID1PAD_2 = 156;
+                _MID1PAD_3 = 160;
+                _MID1PAD_4 = '=';
+                _MID1PAD_5 = 38;
+                _MID1PAD_6 = 174;
+                _MID1PAD_7 = "22662";
+                _MID1PAD_8 = 72;
+                _MID1PAD_9 = 221;
+                _MID1PAD_10 = 198;
+                _MID2PAD_0 = 192;
+                _MID2PAD_1 = "29543";
+                _MID2PAD_2 = 122;
+                _MID2PAD_3 = 162;
+                _MID2PAD_4 = '%';
+                _MID2PAD_5 = 32;
+                _MID2PAD_6 = 40;
+                _MID2PAD_7 = 79;
+                _MID2PAD_8 = 41;
+                _MID2PAD_9 = 134;
+                _MID2PAD_10 = 113;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_MID1PAD_0 != 131) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 43) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != 156) throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 160) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != '=') throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 38) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 174) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != "22662") throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != 72) throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != 221) throw new Exception("m_MID1PAD_9");
+                if (_MID1PAD_10 != 198) throw new Exception("m_MID1PAD_10");
+                if (_MID2PAD_0 != 192) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != "29543") throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 122) throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 162) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != '%') throw new Exception("m_MID2PAD_4");
+                if (_MID2PAD_5 != 32) throw new Exception("m_MID2PAD_5");
+                if (_MID2PAD_6 != 40) throw new Exception("m_MID2PAD_6");
+                if (_MID2PAD_7 != 79) throw new Exception("m_MID2PAD_7");
+                if (_MID2PAD_8 != 41) throw new Exception("m_MID2PAD_8");
+                if (_MID2PAD_9 != 134) throw new Exception("m_MID2PAD_9");
+                if (_MID2PAD_10 != 113) throw new Exception("m_MID2PAD_10");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit2.cs b/tests/src/JIT/Methodical/explicit/misc/explicit2.cs
new file mode 100644 (file)
index 0000000..1dcf34d
--- /dev/null
@@ -0,0 +1,329 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private byte _BASEPAD_0;
+            private char _BASEPAD_1;
+            private uint _BASEPAD_2;
+            private String _BASEPAD_3;
+            private char _BASEPAD_4;
+            private String _BASEPAD_5;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 63;
+                _BASEPAD_1 = 'f';
+                _BASEPAD_2 = 64;
+                _BASEPAD_3 = "20808";
+                _BASEPAD_4 = '*';
+                _BASEPAD_5 = "11051";
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 63) throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != 'f') throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != 64) throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != "20808") throw new Exception("m_BASEPAD_3");
+                if (_BASEPAD_4 != '*') throw new Exception("m_BASEPAD_4");
+                if (_BASEPAD_5 != "11051") throw new Exception("m_BASEPAD_5");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private uint _PREPAD_0;
+            private String _PREPAD_1;
+            private char _PREPAD_2;
+            private byte _PREPAD_3;
+            private char _PREPAD_4;
+            private char _PREPAD_5;
+            private char _PREPAD_6;
+            private int _PREPAD_7;
+            private int _PREPAD_8;
+            public Node m_leftChild;
+            private uint _MID1PAD_0;
+            private int _MID1PAD_1;
+            private int _MID1PAD_2;
+            private String _MID1PAD_3;
+            private String _MID1PAD_4;
+            private uint _MID1PAD_5;
+            private int _MID1PAD_6;
+            private uint _MID1PAD_7;
+            private String _MID1PAD_8;
+            private String _MID1PAD_9;
+            private ushort _MID1PAD_10;
+            private uint _MID1PAD_11;
+            private char _MID1PAD_12;
+            private uint _MID1PAD_13;
+            private String _MID1PAD_14;
+            private int _MID1PAD_15;
+            private char _MID1PAD_16;
+            public int m_weight;
+            private byte _MID2PAD_0;
+            private char _MID2PAD_1;
+            private ulong _MID2PAD_2;
+            private ushort _MID2PAD_3;
+            private String _MID2PAD_4;
+            private String _MID2PAD_5;
+            private byte _MID2PAD_6;
+            private ushort _MID2PAD_7;
+            private String _MID2PAD_8;
+            private String _MID2PAD_9;
+            private char _MID2PAD_10;
+            private int _MID2PAD_11;
+            private byte _MID2PAD_12;
+            private String _MID2PAD_13;
+            private char _MID2PAD_14;
+            private ushort _MID2PAD_15;
+            private String _MID2PAD_16;
+            public Node m_rightChild;
+            private String _AFTERPAD_0;
+            private ushort _AFTERPAD_1;
+            private uint _AFTERPAD_2;
+            private String _AFTERPAD_3;
+            private int _AFTERPAD_4;
+            private char _AFTERPAD_5;
+            private ulong _AFTERPAD_6;
+            private byte _AFTERPAD_7;
+            private byte _AFTERPAD_8;
+            private String _AFTERPAD_9;
+            private ushort _AFTERPAD_10;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 33;
+                _PREPAD_1 = "26819";
+                _PREPAD_2 = 'l';
+                _PREPAD_3 = 220;
+                _PREPAD_4 = '^';
+                _PREPAD_5 = '`';
+                _PREPAD_6 = 'o';
+                _PREPAD_7 = 162;
+                _PREPAD_8 = 171;
+                _MID1PAD_0 = 98;
+                _MID1PAD_1 = 90;
+                _MID1PAD_2 = 121;
+                _MID1PAD_3 = "9109";
+                _MID1PAD_4 = "6459";
+                _MID1PAD_5 = 124;
+                _MID1PAD_6 = 74;
+                _MID1PAD_7 = 113;
+                _MID1PAD_8 = "1720";
+                _MID1PAD_9 = "15021";
+                _MID1PAD_10 = 39;
+                _MID1PAD_11 = 133;
+                _MID1PAD_12 = 'N';
+                _MID1PAD_13 = 235;
+                _MID1PAD_14 = "22271";
+                _MID1PAD_15 = 55;
+                _MID1PAD_16 = 'G';
+                _MID2PAD_0 = 173;
+                _MID2PAD_1 = '\7f';
+                _MID2PAD_2 = 94;
+                _MID2PAD_3 = 229;
+                _MID2PAD_4 = "13459";
+                _MID2PAD_5 = "8381";
+                _MID2PAD_6 = 54;
+                _MID2PAD_7 = 215;
+                _MID2PAD_8 = "14415";
+                _MID2PAD_9 = "30092";
+                _MID2PAD_10 = 'S';
+                _MID2PAD_11 = 250;
+                _MID2PAD_12 = 247;
+                _MID2PAD_13 = "3600";
+                _MID2PAD_14 = 'k';
+                _MID2PAD_15 = 229;
+                _MID2PAD_16 = "18373";
+                _AFTERPAD_0 = "18816";
+                _AFTERPAD_1 = 98;
+                _AFTERPAD_2 = 25;
+                _AFTERPAD_3 = "3802";
+                _AFTERPAD_4 = 217;
+                _AFTERPAD_5 = '*';
+                _AFTERPAD_6 = 140;
+                _AFTERPAD_7 = 74;
+                _AFTERPAD_8 = 91;
+                _AFTERPAD_9 = "18469";
+                _AFTERPAD_10 = 77;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 33) throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != "26819") throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != 'l') throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != 220) throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != '^') throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != '`') throw new Exception("m_PREPAD_5");
+                if (_PREPAD_6 != 'o') throw new Exception("m_PREPAD_6");
+                if (_PREPAD_7 != 162) throw new Exception("m_PREPAD_7");
+                if (_PREPAD_8 != 171) throw new Exception("m_PREPAD_8");
+                if (_MID1PAD_0 != 98) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 90) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != 121) throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != "9109") throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != "6459") throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 124) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 74) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 113) throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != "1720") throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != "15021") throw new Exception("m_MID1PAD_9");
+                if (_MID1PAD_10 != 39) throw new Exception("m_MID1PAD_10");
+                if (_MID1PAD_11 != 133) throw new Exception("m_MID1PAD_11");
+                if (_MID1PAD_12 != 'N') throw new Exception("m_MID1PAD_12");
+                if (_MID1PAD_13 != 235) throw new Exception("m_MID1PAD_13");
+                if (_MID1PAD_14 != "22271") throw new Exception("m_MID1PAD_14");
+                if (_MID1PAD_15 != 55) throw new Exception("m_MID1PAD_15");
+                if (_MID1PAD_16 != 'G') throw new Exception("m_MID1PAD_16");
+                if (_MID2PAD_0 != 173) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != '\7f') throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 94) throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 229) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != "13459") throw new Exception("m_MID2PAD_4");
+                if (_MID2PAD_5 != "8381") throw new Exception("m_MID2PAD_5");
+                if (_MID2PAD_6 != 54) throw new Exception("m_MID2PAD_6");
+                if (_MID2PAD_7 != 215) throw new Exception("m_MID2PAD_7");
+                if (_MID2PAD_8 != "14415") throw new Exception("m_MID2PAD_8");
+                if (_MID2PAD_9 != "30092") throw new Exception("m_MID2PAD_9");
+                if (_MID2PAD_10 != 'S') throw new Exception("m_MID2PAD_10");
+                if (_MID2PAD_11 != 250) throw new Exception("m_MID2PAD_11");
+                if (_MID2PAD_12 != 247) throw new Exception("m_MID2PAD_12");
+                if (_MID2PAD_13 != "3600") throw new Exception("m_MID2PAD_13");
+                if (_MID2PAD_14 != 'k') throw new Exception("m_MID2PAD_14");
+                if (_MID2PAD_15 != 229) throw new Exception("m_MID2PAD_15");
+                if (_MID2PAD_16 != "18373") throw new Exception("m_MID2PAD_16");
+                if (_AFTERPAD_0 != "18816") throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 98) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != 25) throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != "3802") throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != 217) throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != '*') throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 140) throw new Exception("m_AFTERPAD_6");
+                if (_AFTERPAD_7 != 74) throw new Exception("m_AFTERPAD_7");
+                if (_AFTERPAD_8 != 91) throw new Exception("m_AFTERPAD_8");
+                if (_AFTERPAD_9 != "18469") throw new Exception("m_AFTERPAD_9");
+                if (_AFTERPAD_10 != 77) throw new Exception("m_AFTERPAD_10");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit3.cs b/tests/src/JIT/Methodical/explicit/misc/explicit3.cs
new file mode 100644 (file)
index 0000000..850466a
--- /dev/null
@@ -0,0 +1,320 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private byte _BASEPAD_0;
+            private ulong _BASEPAD_1;
+            private char _BASEPAD_2;
+            private int _BASEPAD_3;
+            private char _BASEPAD_4;
+            private uint _BASEPAD_5;
+            private byte _BASEPAD_6;
+            private ushort _BASEPAD_7;
+            private byte _BASEPAD_8;
+            private ulong _BASEPAD_9;
+            private char _BASEPAD_10;
+            private ulong _BASEPAD_11;
+            private ushort _BASEPAD_12;
+            private ushort _BASEPAD_13;
+            private byte _BASEPAD_14;
+            private uint _BASEPAD_15;
+            private int _BASEPAD_16;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 104;
+                _BASEPAD_1 = 181;
+                _BASEPAD_2 = '@';
+                _BASEPAD_3 = 187;
+                _BASEPAD_4 = '|';
+                _BASEPAD_5 = 142;
+                _BASEPAD_6 = 225;
+                _BASEPAD_7 = 33;
+                _BASEPAD_8 = 254;
+                _BASEPAD_9 = 177;
+                _BASEPAD_10 = '}';
+                _BASEPAD_11 = 251;
+                _BASEPAD_12 = 151;
+                _BASEPAD_13 = 171;
+                _BASEPAD_14 = 13;
+                _BASEPAD_15 = 23;
+                _BASEPAD_16 = 116;
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 104) throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != 181) throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != '@') throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != 187) throw new Exception("m_BASEPAD_3");
+                if (_BASEPAD_4 != '|') throw new Exception("m_BASEPAD_4");
+                if (_BASEPAD_5 != 142) throw new Exception("m_BASEPAD_5");
+                if (_BASEPAD_6 != 225) throw new Exception("m_BASEPAD_6");
+                if (_BASEPAD_7 != 33) throw new Exception("m_BASEPAD_7");
+                if (_BASEPAD_8 != 254) throw new Exception("m_BASEPAD_8");
+                if (_BASEPAD_9 != 177) throw new Exception("m_BASEPAD_9");
+                if (_BASEPAD_10 != '}') throw new Exception("m_BASEPAD_10");
+                if (_BASEPAD_11 != 251) throw new Exception("m_BASEPAD_11");
+                if (_BASEPAD_12 != 151) throw new Exception("m_BASEPAD_12");
+                if (_BASEPAD_13 != 171) throw new Exception("m_BASEPAD_13");
+                if (_BASEPAD_14 != 13) throw new Exception("m_BASEPAD_14");
+                if (_BASEPAD_15 != 23) throw new Exception("m_BASEPAD_15");
+                if (_BASEPAD_16 != 116) throw new Exception("m_BASEPAD_16");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private String _PREPAD_0;
+            private ulong _PREPAD_1;
+            private byte _PREPAD_2;
+            private String _PREPAD_3;
+            private ushort _PREPAD_4;
+            private int _PREPAD_5;
+            private uint _PREPAD_6;
+            private int _PREPAD_7;
+            private ulong _PREPAD_8;
+            private byte _PREPAD_9;
+            private byte _PREPAD_10;
+            private byte _PREPAD_11;
+            private ulong _PREPAD_12;
+            private char _PREPAD_13;
+            private int _PREPAD_14;
+            public Node m_leftChild;
+            private ushort _MID1PAD_0;
+            private byte _MID1PAD_1;
+            private char _MID1PAD_2;
+            private ushort _MID1PAD_3;
+            private ulong _MID1PAD_4;
+            private uint _MID1PAD_5;
+            private ushort _MID1PAD_6;
+            private byte _MID1PAD_7;
+            public int m_weight;
+            private ulong _MID2PAD_0;
+            private char _MID2PAD_1;
+            private ushort _MID2PAD_2;
+            private ulong _MID2PAD_3;
+            private byte _MID2PAD_4;
+            private ushort _MID2PAD_5;
+            private int _MID2PAD_6;
+            private uint _MID2PAD_7;
+            private ulong _MID2PAD_8;
+            private char _MID2PAD_9;
+            private int _MID2PAD_10;
+            private uint _MID2PAD_11;
+            private char _MID2PAD_12;
+            private ushort _MID2PAD_13;
+            public Node m_rightChild;
+            private uint _AFTERPAD_0;
+            private ushort _AFTERPAD_1;
+            private char _AFTERPAD_2;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = "3928";
+                _PREPAD_1 = 111;
+                _PREPAD_2 = 35;
+                _PREPAD_3 = "27914";
+                _PREPAD_4 = 158;
+                _PREPAD_5 = 157;
+                _PREPAD_6 = 55;
+                _PREPAD_7 = 186;
+                _PREPAD_8 = 161;
+                _PREPAD_9 = 58;
+                _PREPAD_10 = 50;
+                _PREPAD_11 = 201;
+                _PREPAD_12 = 137;
+                _PREPAD_13 = 'e';
+                _PREPAD_14 = 115;
+                _MID1PAD_0 = 86;
+                _MID1PAD_1 = 146;
+                _MID1PAD_2 = 'o';
+                _MID1PAD_3 = 76;
+                _MID1PAD_4 = 215;
+                _MID1PAD_5 = 206;
+                _MID1PAD_6 = 230;
+                _MID1PAD_7 = 232;
+                _MID2PAD_0 = 204;
+                _MID2PAD_1 = '1';
+                _MID2PAD_2 = 27;
+                _MID2PAD_3 = 217;
+                _MID2PAD_4 = 220;
+                _MID2PAD_5 = 123;
+                _MID2PAD_6 = 85;
+                _MID2PAD_7 = 142;
+                _MID2PAD_8 = 63;
+                _MID2PAD_9 = '+';
+                _MID2PAD_10 = 40;
+                _MID2PAD_11 = 235;
+                _MID2PAD_12 = 'v';
+                _MID2PAD_13 = 173;
+                _AFTERPAD_0 = 160;
+                _AFTERPAD_1 = 193;
+                _AFTERPAD_2 = '>';
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != "3928") throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != 111) throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != 35) throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != "27914") throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 158) throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != 157) throw new Exception("m_PREPAD_5");
+                if (_PREPAD_6 != 55) throw new Exception("m_PREPAD_6");
+                if (_PREPAD_7 != 186) throw new Exception("m_PREPAD_7");
+                if (_PREPAD_8 != 161) throw new Exception("m_PREPAD_8");
+                if (_PREPAD_9 != 58) throw new Exception("m_PREPAD_9");
+                if (_PREPAD_10 != 50) throw new Exception("m_PREPAD_10");
+                if (_PREPAD_11 != 201) throw new Exception("m_PREPAD_11");
+                if (_PREPAD_12 != 137) throw new Exception("m_PREPAD_12");
+                if (_PREPAD_13 != 'e') throw new Exception("m_PREPAD_13");
+                if (_PREPAD_14 != 115) throw new Exception("m_PREPAD_14");
+                if (_MID1PAD_0 != 86) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 146) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != 'o') throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 76) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != 215) throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 206) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 230) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 232) throw new Exception("m_MID1PAD_7");
+                if (_MID2PAD_0 != 204) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != '1') throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 27) throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 217) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != 220) throw new Exception("m_MID2PAD_4");
+                if (_MID2PAD_5 != 123) throw new Exception("m_MID2PAD_5");
+                if (_MID2PAD_6 != 85) throw new Exception("m_MID2PAD_6");
+                if (_MID2PAD_7 != 142) throw new Exception("m_MID2PAD_7");
+                if (_MID2PAD_8 != 63) throw new Exception("m_MID2PAD_8");
+                if (_MID2PAD_9 != '+') throw new Exception("m_MID2PAD_9");
+                if (_MID2PAD_10 != 40) throw new Exception("m_MID2PAD_10");
+                if (_MID2PAD_11 != 235) throw new Exception("m_MID2PAD_11");
+                if (_MID2PAD_12 != 'v') throw new Exception("m_MID2PAD_12");
+                if (_MID2PAD_13 != 173) throw new Exception("m_MID2PAD_13");
+                if (_AFTERPAD_0 != 160) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 193) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != '>') throw new Exception("m_AFTERPAD_2");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit4.cs b/tests/src/JIT/Methodical/explicit/misc/explicit4.cs
new file mode 100644 (file)
index 0000000..59b2b89
--- /dev/null
@@ -0,0 +1,239 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private byte _BASEPAD_0;
+            private char _BASEPAD_1;
+            private ulong _BASEPAD_2;
+            private char _BASEPAD_3;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 248;
+                _BASEPAD_1 = '*';
+                _BASEPAD_2 = 17;
+                _BASEPAD_3 = 'Z';
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 248) throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != '*') throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != 17) throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != 'Z') throw new Exception("m_BASEPAD_3");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private char _PREPAD_0;
+            private String _PREPAD_1;
+            private ulong _PREPAD_2;
+            private byte _PREPAD_3;
+            private ulong _PREPAD_4;
+            private int _PREPAD_5;
+            public Node m_leftChild;
+            private ulong _MID1PAD_0;
+            private int _MID1PAD_1;
+            private char _MID1PAD_2;
+            private uint _MID1PAD_3;
+            private byte _MID1PAD_4;
+            private uint _MID1PAD_5;
+            private ushort _MID1PAD_6;
+            private int _MID1PAD_7;
+            private ushort _MID1PAD_8;
+            private ushort _MID1PAD_9;
+            public int m_weight;
+            public Node m_rightChild;
+            private ushort _AFTERPAD_0;
+            private uint _AFTERPAD_1;
+            private uint _AFTERPAD_2;
+            private int _AFTERPAD_3;
+            private String _AFTERPAD_4;
+            private char _AFTERPAD_5;
+            private ushort _AFTERPAD_6;
+            private int _AFTERPAD_7;
+            private uint _AFTERPAD_8;
+            private ulong _AFTERPAD_9;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 'p';
+                _PREPAD_1 = "24797";
+                _PREPAD_2 = 182;
+                _PREPAD_3 = 95;
+                _PREPAD_4 = 40;
+                _PREPAD_5 = 60;
+                _MID1PAD_0 = 17;
+                _MID1PAD_1 = 16;
+                _MID1PAD_2 = '=';
+                _MID1PAD_3 = 127;
+                _MID1PAD_4 = 237;
+                _MID1PAD_5 = 248;
+                _MID1PAD_6 = 61;
+                _MID1PAD_7 = 22;
+                _MID1PAD_8 = 48;
+                _MID1PAD_9 = 157;
+                _AFTERPAD_0 = 173;
+                _AFTERPAD_1 = 81;
+                _AFTERPAD_2 = 60;
+                _AFTERPAD_3 = 132;
+                _AFTERPAD_4 = "22723";
+                _AFTERPAD_5 = 'm';
+                _AFTERPAD_6 = 54;
+                _AFTERPAD_7 = 229;
+                _AFTERPAD_8 = 58;
+                _AFTERPAD_9 = 165;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 'p') throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != "24797") throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != 182) throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != 95) throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 40) throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != 60) throw new Exception("m_PREPAD_5");
+                if (_MID1PAD_0 != 17) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 16) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != '=') throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 127) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != 237) throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 248) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 61) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 22) throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != 48) throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != 157) throw new Exception("m_MID1PAD_9");
+                if (_AFTERPAD_0 != 173) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 81) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != 60) throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != 132) throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != "22723") throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != 'm') throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 54) throw new Exception("m_AFTERPAD_6");
+                if (_AFTERPAD_7 != 229) throw new Exception("m_AFTERPAD_7");
+                if (_AFTERPAD_8 != 58) throw new Exception("m_AFTERPAD_8");
+                if (_AFTERPAD_9 != 165) throw new Exception("m_AFTERPAD_9");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit5.cs b/tests/src/JIT/Methodical/explicit/misc/explicit5.cs
new file mode 100644 (file)
index 0000000..dd13cdc
--- /dev/null
@@ -0,0 +1,274 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            public BaseNode()
+            {
+            }
+
+            public virtual void VerifyValid()
+            {
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private ulong _PREPAD_0;
+            private char _PREPAD_1;
+            private byte _PREPAD_2;
+            private char _PREPAD_3;
+            private uint _PREPAD_4;
+            private int _PREPAD_5;
+            private ulong _PREPAD_6;
+            private ulong _PREPAD_7;
+            private ulong _PREPAD_8;
+            private uint _PREPAD_9;
+            private ushort _PREPAD_10;
+            private byte _PREPAD_11;
+            private String _PREPAD_12;
+            private char _PREPAD_13;
+            private ushort _PREPAD_14;
+            public Node m_leftChild;
+            private int _MID1PAD_0;
+            private ulong _MID1PAD_1;
+            private String _MID1PAD_2;
+            private ulong _MID1PAD_3;
+            private String _MID1PAD_4;
+            private char _MID1PAD_5;
+            private String _MID1PAD_6;
+            private uint _MID1PAD_7;
+            private uint _MID1PAD_8;
+            private uint _MID1PAD_9;
+            private uint _MID1PAD_10;
+            private ushort _MID1PAD_11;
+            public int m_weight;
+            private ushort _MID2PAD_0;
+            private ulong _MID2PAD_1;
+            private ushort _MID2PAD_2;
+            private ulong _MID2PAD_3;
+            private char _MID2PAD_4;
+            public Node m_rightChild;
+            private int _AFTERPAD_0;
+            private ushort _AFTERPAD_1;
+            private byte _AFTERPAD_2;
+            private ushort _AFTERPAD_3;
+            private int _AFTERPAD_4;
+            private String _AFTERPAD_5;
+            private uint _AFTERPAD_6;
+            private char _AFTERPAD_7;
+            private char _AFTERPAD_8;
+            private ushort _AFTERPAD_9;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 49;
+                _PREPAD_1 = 'R';
+                _PREPAD_2 = 202;
+                _PREPAD_3 = '_';
+                _PREPAD_4 = 133;
+                _PREPAD_5 = 51;
+                _PREPAD_6 = 80;
+                _PREPAD_7 = 250;
+                _PREPAD_8 = 38;
+                _PREPAD_9 = 20;
+                _PREPAD_10 = 41;
+                _PREPAD_11 = 202;
+                _PREPAD_12 = "10482";
+                _PREPAD_13 = '9';
+                _PREPAD_14 = 37;
+                _MID1PAD_0 = 81;
+                _MID1PAD_1 = 28;
+                _MID1PAD_2 = "13921";
+                _MID1PAD_3 = 128;
+                _MID1PAD_4 = "14428";
+                _MID1PAD_5 = 'Z';
+                _MID1PAD_6 = "702";
+                _MID1PAD_7 = 94;
+                _MID1PAD_8 = 198;
+                _MID1PAD_9 = 179;
+                _MID1PAD_10 = 31;
+                _MID1PAD_11 = 47;
+                _MID2PAD_0 = 141;
+                _MID2PAD_1 = 22;
+                _MID2PAD_2 = 214;
+                _MID2PAD_3 = 135;
+                _MID2PAD_4 = '$';
+                _AFTERPAD_0 = 47;
+                _AFTERPAD_1 = 237;
+                _AFTERPAD_2 = 202;
+                _AFTERPAD_3 = 177;
+                _AFTERPAD_4 = 177;
+                _AFTERPAD_5 = "28735";
+                _AFTERPAD_6 = 97;
+                _AFTERPAD_7 = '5';
+                _AFTERPAD_8 = '=';
+                _AFTERPAD_9 = 76;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 49) throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != 'R') throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != 202) throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != '_') throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 133) throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != 51) throw new Exception("m_PREPAD_5");
+                if (_PREPAD_6 != 80) throw new Exception("m_PREPAD_6");
+                if (_PREPAD_7 != 250) throw new Exception("m_PREPAD_7");
+                if (_PREPAD_8 != 38) throw new Exception("m_PREPAD_8");
+                if (_PREPAD_9 != 20) throw new Exception("m_PREPAD_9");
+                if (_PREPAD_10 != 41) throw new Exception("m_PREPAD_10");
+                if (_PREPAD_11 != 202) throw new Exception("m_PREPAD_11");
+                if (_PREPAD_12 != "10482") throw new Exception("m_PREPAD_12");
+                if (_PREPAD_13 != '9') throw new Exception("m_PREPAD_13");
+                if (_PREPAD_14 != 37) throw new Exception("m_PREPAD_14");
+                if (_MID1PAD_0 != 81) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 28) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != "13921") throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 128) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != "14428") throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 'Z') throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != "702") throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 94) throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != 198) throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != 179) throw new Exception("m_MID1PAD_9");
+                if (_MID1PAD_10 != 31) throw new Exception("m_MID1PAD_10");
+                if (_MID1PAD_11 != 47) throw new Exception("m_MID1PAD_11");
+                if (_MID2PAD_0 != 141) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != 22) throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 214) throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 135) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != '$') throw new Exception("m_MID2PAD_4");
+                if (_AFTERPAD_0 != 47) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 237) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != 202) throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != 177) throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != 177) throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != "28735") throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 97) throw new Exception("m_AFTERPAD_6");
+                if (_AFTERPAD_7 != '5') throw new Exception("m_AFTERPAD_7");
+                if (_AFTERPAD_8 != '=') throw new Exception("m_AFTERPAD_8");
+                if (_AFTERPAD_9 != 76) throw new Exception("m_AFTERPAD_9");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit6.cs b/tests/src/JIT/Methodical/explicit/misc/explicit6.cs
new file mode 100644 (file)
index 0000000..99f44bc
--- /dev/null
@@ -0,0 +1,236 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private char _BASEPAD_0;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 'k';
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 'k') throw new Exception("m_BASEPAD_0");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private ulong _PREPAD_0;
+            private byte _PREPAD_1;
+            private byte _PREPAD_2;
+            private String _PREPAD_3;
+            private ulong _PREPAD_4;
+            private String _PREPAD_5;
+            public Node m_leftChild;
+            private ulong _MID1PAD_0;
+            private ushort _MID1PAD_1;
+            private String _MID1PAD_2;
+            public int m_weight;
+            private byte _MID2PAD_0;
+            private uint _MID2PAD_1;
+            private char _MID2PAD_2;
+            private byte _MID2PAD_3;
+            private String _MID2PAD_4;
+            private ulong _MID2PAD_5;
+            private ulong _MID2PAD_6;
+            private String _MID2PAD_7;
+            private byte _MID2PAD_8;
+            private uint _MID2PAD_9;
+            private uint _MID2PAD_10;
+            private int _MID2PAD_11;
+            public Node m_rightChild;
+            private ulong _AFTERPAD_0;
+            private ulong _AFTERPAD_1;
+            private ulong _AFTERPAD_2;
+            private uint _AFTERPAD_3;
+            private int _AFTERPAD_4;
+            private ushort _AFTERPAD_5;
+            private byte _AFTERPAD_6;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 84;
+                _PREPAD_1 = 230;
+                _PREPAD_2 = 70;
+                _PREPAD_3 = "31530";
+                _PREPAD_4 = 97;
+                _PREPAD_5 = "2235";
+                _MID1PAD_0 = 171;
+                _MID1PAD_1 = 56;
+                _MID1PAD_2 = "29777";
+                _MID2PAD_0 = 63;
+                _MID2PAD_1 = 0;
+                _MID2PAD_2 = 'P';
+                _MID2PAD_3 = 62;
+                _MID2PAD_4 = "28537";
+                _MID2PAD_5 = 221;
+                _MID2PAD_6 = 214;
+                _MID2PAD_7 = "32307";
+                _MID2PAD_8 = 83;
+                _MID2PAD_9 = 223;
+                _MID2PAD_10 = 43;
+                _MID2PAD_11 = 174;
+                _AFTERPAD_0 = 220;
+                _AFTERPAD_1 = 194;
+                _AFTERPAD_2 = 125;
+                _AFTERPAD_3 = 109;
+                _AFTERPAD_4 = 126;
+                _AFTERPAD_5 = 48;
+                _AFTERPAD_6 = 214;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 84) throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != 230) throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != 70) throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != "31530") throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 97) throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != "2235") throw new Exception("m_PREPAD_5");
+                if (_MID1PAD_0 != 171) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 56) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != "29777") throw new Exception("m_MID1PAD_2");
+                if (_MID2PAD_0 != 63) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != 0) throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 'P') throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 62) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != "28537") throw new Exception("m_MID2PAD_4");
+                if (_MID2PAD_5 != 221) throw new Exception("m_MID2PAD_5");
+                if (_MID2PAD_6 != 214) throw new Exception("m_MID2PAD_6");
+                if (_MID2PAD_7 != "32307") throw new Exception("m_MID2PAD_7");
+                if (_MID2PAD_8 != 83) throw new Exception("m_MID2PAD_8");
+                if (_MID2PAD_9 != 223) throw new Exception("m_MID2PAD_9");
+                if (_MID2PAD_10 != 43) throw new Exception("m_MID2PAD_10");
+                if (_MID2PAD_11 != 174) throw new Exception("m_MID2PAD_11");
+                if (_AFTERPAD_0 != 220) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 194) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != 125) throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != 109) throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != 126) throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != 48) throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 214) throw new Exception("m_AFTERPAD_6");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit7.cs b/tests/src/JIT/Methodical/explicit/misc/explicit7.cs
new file mode 100644 (file)
index 0000000..eeee621
--- /dev/null
@@ -0,0 +1,314 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private String _BASEPAD_0;
+            private String _BASEPAD_1;
+            private uint _BASEPAD_2;
+            private ushort _BASEPAD_3;
+            private uint _BASEPAD_4;
+            private char _BASEPAD_5;
+            private uint _BASEPAD_6;
+            private ushort _BASEPAD_7;
+            private int _BASEPAD_8;
+            private byte _BASEPAD_9;
+            private uint _BASEPAD_10;
+            private char _BASEPAD_11;
+            private int _BASEPAD_12;
+            private ushort _BASEPAD_13;
+            private uint _BASEPAD_14;
+            private ulong _BASEPAD_15;
+            private int _BASEPAD_16;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = "404";
+                _BASEPAD_1 = "16309";
+                _BASEPAD_2 = 167;
+                _BASEPAD_3 = 138;
+                _BASEPAD_4 = 99;
+                _BASEPAD_5 = 'I';
+                _BASEPAD_6 = 172;
+                _BASEPAD_7 = 5;
+                _BASEPAD_8 = 108;
+                _BASEPAD_9 = 46;
+                _BASEPAD_10 = 147;
+                _BASEPAD_11 = 'u';
+                _BASEPAD_12 = 92;
+                _BASEPAD_13 = 17;
+                _BASEPAD_14 = 209;
+                _BASEPAD_15 = 129;
+                _BASEPAD_16 = 145;
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != "404") throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != "16309") throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != 167) throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != 138) throw new Exception("m_BASEPAD_3");
+                if (_BASEPAD_4 != 99) throw new Exception("m_BASEPAD_4");
+                if (_BASEPAD_5 != 'I') throw new Exception("m_BASEPAD_5");
+                if (_BASEPAD_6 != 172) throw new Exception("m_BASEPAD_6");
+                if (_BASEPAD_7 != 5) throw new Exception("m_BASEPAD_7");
+                if (_BASEPAD_8 != 108) throw new Exception("m_BASEPAD_8");
+                if (_BASEPAD_9 != 46) throw new Exception("m_BASEPAD_9");
+                if (_BASEPAD_10 != 147) throw new Exception("m_BASEPAD_10");
+                if (_BASEPAD_11 != 'u') throw new Exception("m_BASEPAD_11");
+                if (_BASEPAD_12 != 92) throw new Exception("m_BASEPAD_12");
+                if (_BASEPAD_13 != 17) throw new Exception("m_BASEPAD_13");
+                if (_BASEPAD_14 != 209) throw new Exception("m_BASEPAD_14");
+                if (_BASEPAD_15 != 129) throw new Exception("m_BASEPAD_15");
+                if (_BASEPAD_16 != 145) throw new Exception("m_BASEPAD_16");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private int _PREPAD_0;
+            private ulong _PREPAD_1;
+            private String _PREPAD_2;
+            private ushort _PREPAD_3;
+            private uint _PREPAD_4;
+            private uint _PREPAD_5;
+            private String _PREPAD_6;
+            private String _PREPAD_7;
+            private ushort _PREPAD_8;
+            private ulong _PREPAD_9;
+            private String _PREPAD_10;
+            private ulong _PREPAD_11;
+            private ushort _PREPAD_12;
+            private uint _PREPAD_13;
+            private int _PREPAD_14;
+            public Node m_leftChild;
+            private char _MID1PAD_0;
+            private int _MID1PAD_1;
+            private char _MID1PAD_2;
+            private int _MID1PAD_3;
+            private ulong _MID1PAD_4;
+            private int _MID1PAD_5;
+            private ushort _MID1PAD_6;
+            private int _MID1PAD_7;
+            private ulong _MID1PAD_8;
+            private byte _MID1PAD_9;
+            private uint _MID1PAD_10;
+            private ulong _MID1PAD_11;
+            private int _MID1PAD_12;
+            private char _MID1PAD_13;
+            private char _MID1PAD_14;
+            public int m_weight;
+            private uint _MID2PAD_0;
+            public Node m_rightChild;
+            private int _AFTERPAD_0;
+            private ulong _AFTERPAD_1;
+            private String _AFTERPAD_2;
+            private String _AFTERPAD_3;
+            private String _AFTERPAD_4;
+            private ushort _AFTERPAD_5;
+            private ulong _AFTERPAD_6;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 13;
+                _PREPAD_1 = 130;
+                _PREPAD_2 = "5130";
+                _PREPAD_3 = 249;
+                _PREPAD_4 = 58;
+                _PREPAD_5 = 166;
+                _PREPAD_6 = "8200";
+                _PREPAD_7 = "864";
+                _PREPAD_8 = 36;
+                _PREPAD_9 = 136;
+                _PREPAD_10 = "21789";
+                _PREPAD_11 = 63;
+                _PREPAD_12 = 49;
+                _PREPAD_13 = 214;
+                _PREPAD_14 = 100;
+                _MID1PAD_0 = '(';
+                _MID1PAD_1 = 8;
+                _MID1PAD_2 = 'w';
+                _MID1PAD_3 = 21;
+                _MID1PAD_4 = 19;
+                _MID1PAD_5 = 100;
+                _MID1PAD_6 = 3;
+                _MID1PAD_7 = 50;
+                _MID1PAD_8 = 201;
+                _MID1PAD_9 = 3;
+                _MID1PAD_10 = 172;
+                _MID1PAD_11 = 230;
+                _MID1PAD_12 = 214;
+                _MID1PAD_13 = 'z';
+                _MID1PAD_14 = ';';
+                _MID2PAD_0 = 153;
+                _AFTERPAD_0 = 84;
+                _AFTERPAD_1 = 74;
+                _AFTERPAD_2 = "30023";
+                _AFTERPAD_3 = "31182";
+                _AFTERPAD_4 = "31631";
+                _AFTERPAD_5 = 8;
+                _AFTERPAD_6 = 17;
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 13) throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != 130) throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != "5130") throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != 249) throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 58) throw new Exception("m_PREPAD_4");
+                if (_PREPAD_5 != 166) throw new Exception("m_PREPAD_5");
+                if (_PREPAD_6 != "8200") throw new Exception("m_PREPAD_6");
+                if (_PREPAD_7 != "864") throw new Exception("m_PREPAD_7");
+                if (_PREPAD_8 != 36) throw new Exception("m_PREPAD_8");
+                if (_PREPAD_9 != 136) throw new Exception("m_PREPAD_9");
+                if (_PREPAD_10 != "21789") throw new Exception("m_PREPAD_10");
+                if (_PREPAD_11 != 63) throw new Exception("m_PREPAD_11");
+                if (_PREPAD_12 != 49) throw new Exception("m_PREPAD_12");
+                if (_PREPAD_13 != 214) throw new Exception("m_PREPAD_13");
+                if (_PREPAD_14 != 100) throw new Exception("m_PREPAD_14");
+                if (_MID1PAD_0 != '(') throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 8) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != 'w') throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 21) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != 19) throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 100) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 3) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 50) throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != 201) throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != 3) throw new Exception("m_MID1PAD_9");
+                if (_MID1PAD_10 != 172) throw new Exception("m_MID1PAD_10");
+                if (_MID1PAD_11 != 230) throw new Exception("m_MID1PAD_11");
+                if (_MID1PAD_12 != 214) throw new Exception("m_MID1PAD_12");
+                if (_MID1PAD_13 != 'z') throw new Exception("m_MID1PAD_13");
+                if (_MID1PAD_14 != ';') throw new Exception("m_MID1PAD_14");
+                if (_MID2PAD_0 != 153) throw new Exception("m_MID2PAD_0");
+                if (_AFTERPAD_0 != 84) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 74) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != "30023") throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != "31182") throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != "31631") throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != 8) throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 17) throw new Exception("m_AFTERPAD_6");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/explicit8.cs b/tests/src/JIT/Methodical/explicit/misc/explicit8.cs
new file mode 100644 (file)
index 0000000..14b6114
--- /dev/null
@@ -0,0 +1,326 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+
+        private class BaseNode
+        {
+            private byte _BASEPAD_0;
+            private ulong _BASEPAD_1;
+            private int _BASEPAD_2;
+            private ulong _BASEPAD_3;
+            private String _BASEPAD_4;
+            private byte _BASEPAD_5;
+            private String _BASEPAD_6;
+            private uint _BASEPAD_7;
+            private ushort _BASEPAD_8;
+            private byte _BASEPAD_9;
+            private String _BASEPAD_10;
+            private int _BASEPAD_11;
+            private int _BASEPAD_12;
+
+            public BaseNode()
+            {
+                _BASEPAD_0 = 124;
+                _BASEPAD_1 = 42;
+                _BASEPAD_2 = 114;
+                _BASEPAD_3 = 8;
+                _BASEPAD_4 = "8319";
+                _BASEPAD_5 = 207;
+                _BASEPAD_6 = "26397";
+                _BASEPAD_7 = 207;
+                _BASEPAD_8 = 46;
+                _BASEPAD_9 = 35;
+                _BASEPAD_10 = "16085";
+                _BASEPAD_11 = 44;
+                _BASEPAD_12 = 138;
+            }
+
+            public virtual void VerifyValid()
+            {
+                if (_BASEPAD_0 != 124) throw new Exception("m_BASEPAD_0");
+                if (_BASEPAD_1 != 42) throw new Exception("m_BASEPAD_1");
+                if (_BASEPAD_2 != 114) throw new Exception("m_BASEPAD_2");
+                if (_BASEPAD_3 != 8) throw new Exception("m_BASEPAD_3");
+                if (_BASEPAD_4 != "8319") throw new Exception("m_BASEPAD_4");
+                if (_BASEPAD_5 != 207) throw new Exception("m_BASEPAD_5");
+                if (_BASEPAD_6 != "26397") throw new Exception("m_BASEPAD_6");
+                if (_BASEPAD_7 != 207) throw new Exception("m_BASEPAD_7");
+                if (_BASEPAD_8 != 46) throw new Exception("m_BASEPAD_8");
+                if (_BASEPAD_9 != 35) throw new Exception("m_BASEPAD_9");
+                if (_BASEPAD_10 != "16085") throw new Exception("m_BASEPAD_10");
+                if (_BASEPAD_11 != 44) throw new Exception("m_BASEPAD_11");
+                if (_BASEPAD_12 != 138) throw new Exception("m_BASEPAD_12");
+            }
+        }
+
+        private class Node : BaseNode
+        {
+            private int _PREPAD_0;
+            private uint _PREPAD_1;
+            private char _PREPAD_2;
+            private uint _PREPAD_3;
+            private ushort _PREPAD_4;
+            public Node m_leftChild;
+            private ulong _MID1PAD_0;
+            private uint _MID1PAD_1;
+            private byte _MID1PAD_2;
+            private int _MID1PAD_3;
+            private char _MID1PAD_4;
+            private ushort _MID1PAD_5;
+            private ushort _MID1PAD_6;
+            private int _MID1PAD_7;
+            private String _MID1PAD_8;
+            private byte _MID1PAD_9;
+            private int _MID1PAD_10;
+            private String _MID1PAD_11;
+            private uint _MID1PAD_12;
+            private ulong _MID1PAD_13;
+            private uint _MID1PAD_14;
+            private String _MID1PAD_15;
+            public int m_weight;
+            private uint _MID2PAD_0;
+            private String _MID2PAD_1;
+            private uint _MID2PAD_2;
+            private byte _MID2PAD_3;
+            private char _MID2PAD_4;
+            private ulong _MID2PAD_5;
+            private byte _MID2PAD_6;
+            private ulong _MID2PAD_7;
+            private ushort _MID2PAD_8;
+            private byte _MID2PAD_9;
+            private int _MID2PAD_10;
+            private int _MID2PAD_11;
+            private String _MID2PAD_12;
+            private String _MID2PAD_13;
+            private int _MID2PAD_14;
+            private char _MID2PAD_15;
+            public Node m_rightChild;
+            private ulong _AFTERPAD_0;
+            private int _AFTERPAD_1;
+            private ulong _AFTERPAD_2;
+            private int _AFTERPAD_3;
+            private ulong _AFTERPAD_4;
+            private ulong _AFTERPAD_5;
+            private ulong _AFTERPAD_6;
+            private ulong _AFTERPAD_7;
+            private String _AFTERPAD_8;
+
+            public Node()
+            {
+                m_weight = s_weightCount++;
+                _PREPAD_0 = 219;
+                _PREPAD_1 = 230;
+                _PREPAD_2 = '`';
+                _PREPAD_3 = 33;
+                _PREPAD_4 = 67;
+                _MID1PAD_0 = 50;
+                _MID1PAD_1 = 44;
+                _MID1PAD_2 = 152;
+                _MID1PAD_3 = 168;
+                _MID1PAD_4 = '{';
+                _MID1PAD_5 = 202;
+                _MID1PAD_6 = 251;
+                _MID1PAD_7 = 135;
+                _MID1PAD_8 = "28824";
+                _MID1PAD_9 = 201;
+                _MID1PAD_10 = 106;
+                _MID1PAD_11 = "12481";
+                _MID1PAD_12 = 83;
+                _MID1PAD_13 = 127;
+                _MID1PAD_14 = 243;
+                _MID1PAD_15 = "28096";
+                _MID2PAD_0 = 107;
+                _MID2PAD_1 = "22265";
+                _MID2PAD_2 = 178;
+                _MID2PAD_3 = 73;
+                _MID2PAD_4 = 'A';
+                _MID2PAD_5 = 40;
+                _MID2PAD_6 = 3;
+                _MID2PAD_7 = 18;
+                _MID2PAD_8 = 97;
+                _MID2PAD_9 = 194;
+                _MID2PAD_10 = 30;
+                _MID2PAD_11 = 62;
+                _MID2PAD_12 = "11775";
+                _MID2PAD_13 = "19219";
+                _MID2PAD_14 = 176;
+                _MID2PAD_15 = 'b';
+                _AFTERPAD_0 = 56;
+                _AFTERPAD_1 = 249;
+                _AFTERPAD_2 = 153;
+                _AFTERPAD_3 = 67;
+                _AFTERPAD_4 = 52;
+                _AFTERPAD_5 = 232;
+                _AFTERPAD_6 = 164;
+                _AFTERPAD_7 = 111;
+                _AFTERPAD_8 = "25014";
+            }
+
+            public override void VerifyValid()
+            {
+                base.VerifyValid();
+                if (_PREPAD_0 != 219) throw new Exception("m_PREPAD_0");
+                if (_PREPAD_1 != 230) throw new Exception("m_PREPAD_1");
+                if (_PREPAD_2 != '`') throw new Exception("m_PREPAD_2");
+                if (_PREPAD_3 != 33) throw new Exception("m_PREPAD_3");
+                if (_PREPAD_4 != 67) throw new Exception("m_PREPAD_4");
+                if (_MID1PAD_0 != 50) throw new Exception("m_MID1PAD_0");
+                if (_MID1PAD_1 != 44) throw new Exception("m_MID1PAD_1");
+                if (_MID1PAD_2 != 152) throw new Exception("m_MID1PAD_2");
+                if (_MID1PAD_3 != 168) throw new Exception("m_MID1PAD_3");
+                if (_MID1PAD_4 != '{') throw new Exception("m_MID1PAD_4");
+                if (_MID1PAD_5 != 202) throw new Exception("m_MID1PAD_5");
+                if (_MID1PAD_6 != 251) throw new Exception("m_MID1PAD_6");
+                if (_MID1PAD_7 != 135) throw new Exception("m_MID1PAD_7");
+                if (_MID1PAD_8 != "28824") throw new Exception("m_MID1PAD_8");
+                if (_MID1PAD_9 != 201) throw new Exception("m_MID1PAD_9");
+                if (_MID1PAD_10 != 106) throw new Exception("m_MID1PAD_10");
+                if (_MID1PAD_11 != "12481") throw new Exception("m_MID1PAD_11");
+                if (_MID1PAD_12 != 83) throw new Exception("m_MID1PAD_12");
+                if (_MID1PAD_13 != 127) throw new Exception("m_MID1PAD_13");
+                if (_MID1PAD_14 != 243) throw new Exception("m_MID1PAD_14");
+                if (_MID1PAD_15 != "28096") throw new Exception("m_MID1PAD_15");
+                if (_MID2PAD_0 != 107) throw new Exception("m_MID2PAD_0");
+                if (_MID2PAD_1 != "22265") throw new Exception("m_MID2PAD_1");
+                if (_MID2PAD_2 != 178) throw new Exception("m_MID2PAD_2");
+                if (_MID2PAD_3 != 73) throw new Exception("m_MID2PAD_3");
+                if (_MID2PAD_4 != 'A') throw new Exception("m_MID2PAD_4");
+                if (_MID2PAD_5 != 40) throw new Exception("m_MID2PAD_5");
+                if (_MID2PAD_6 != 3) throw new Exception("m_MID2PAD_6");
+                if (_MID2PAD_7 != 18) throw new Exception("m_MID2PAD_7");
+                if (_MID2PAD_8 != 97) throw new Exception("m_MID2PAD_8");
+                if (_MID2PAD_9 != 194) throw new Exception("m_MID2PAD_9");
+                if (_MID2PAD_10 != 30) throw new Exception("m_MID2PAD_10");
+                if (_MID2PAD_11 != 62) throw new Exception("m_MID2PAD_11");
+                if (_MID2PAD_12 != "11775") throw new Exception("m_MID2PAD_12");
+                if (_MID2PAD_13 != "19219") throw new Exception("m_MID2PAD_13");
+                if (_MID2PAD_14 != 176) throw new Exception("m_MID2PAD_14");
+                if (_MID2PAD_15 != 'b') throw new Exception("m_MID2PAD_15");
+                if (_AFTERPAD_0 != 56) throw new Exception("m_AFTERPAD_0");
+                if (_AFTERPAD_1 != 249) throw new Exception("m_AFTERPAD_1");
+                if (_AFTERPAD_2 != 153) throw new Exception("m_AFTERPAD_2");
+                if (_AFTERPAD_3 != 67) throw new Exception("m_AFTERPAD_3");
+                if (_AFTERPAD_4 != 52) throw new Exception("m_AFTERPAD_4");
+                if (_AFTERPAD_5 != 232) throw new Exception("m_AFTERPAD_5");
+                if (_AFTERPAD_6 != 164) throw new Exception("m_AFTERPAD_6");
+                if (_AFTERPAD_7 != 111) throw new Exception("m_AFTERPAD_7");
+                if (_AFTERPAD_8 != "25014") throw new Exception("m_AFTERPAD_8");
+            }
+
+            public virtual Node growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+                return this;
+            }
+
+            public virtual void rotateTree(ref int leftWeight, ref int rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")");
+                VerifyValid();
+
+                //     create node objects for children
+                Node newLeftChild = null, newRightChild = null;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+
+                //     replace children
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+
+                for (int I = 0; I < 32; I++) { int[] u = new int[1024]; }
+
+                //     verify all valid
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.m_leftChild.VerifyValid();
+                        m_rightChild.m_rightChild.VerifyValid();
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.m_leftChild.VerifyValid();
+                        m_leftChild.m_rightChild.VerifyValid();
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        int minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                Node root = new Node();
+                root.growTree(6, "").rotateTree(
+                    ref root.m_leftChild.m_weight,
+                    ref root.m_rightChild.m_weight);
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("*** FAILED ***");
+                return 1;
+            }
+            Console.WriteLine("*** PASSED ***");
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/misc/misc.csproj b/tests/src/JIT/Methodical/explicit/misc/misc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/misc/packages.config b/tests/src/JIT/Methodical/explicit/misc/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/rotate/app.config b/tests/src/JIT/Methodical/explicit/rotate/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/rotate/cs_template.proj b/tests/src/JIT/Methodical/explicit/rotate/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/rotate/packages.config b/tests/src/JIT/Methodical/explicit/rotate/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/explicit/rotate/rotarg_double.cs b/tests/src/JIT/Methodical/explicit/rotate/rotarg_double.cs
new file mode 100644 (file)
index 0000000..ded6147
--- /dev/null
@@ -0,0 +1,121 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+        public static int s_objCount = 0;
+
+        private class Node
+        {
+            public double m_weight;
+            public Node m_leftChild, m_rightChild;
+
+            public Node()
+            {
+                s_objCount++;
+                m_weight = (double)(s_weightCount++);
+            }
+
+            ~Node()
+            {
+                //Console.WriteLine("Deleting " + m_weight.ToString());
+                s_objCount--;
+            }
+
+            public void growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+            }
+
+            public void rotateTree(ref double leftWeight, ref double rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - begin");
+                Node newLeftChild = null, newRightChild = null;
+                int objCount = s_objCount;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    objCount++;
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    objCount++;
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+                for (int I = 0; I < 1024; I++) { int[] u = new int[1024]; }
+                GC.Collect();
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        double minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        double minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - end");
+            }
+        }
+
+        private static int Main()
+        {
+            Node root = new Node();
+            root.growTree(4, "");
+            root.rotateTree(ref root.m_leftChild.m_weight, ref root.m_rightChild.m_weight);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/rotate/rotarg_float.cs b/tests/src/JIT/Methodical/explicit/rotate/rotarg_float.cs
new file mode 100644 (file)
index 0000000..9f1000c
--- /dev/null
@@ -0,0 +1,121 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+        public static int s_objCount = 0;
+
+        private class Node
+        {
+            public float m_weight;
+            public Node m_leftChild, m_rightChild;
+
+            public Node()
+            {
+                s_objCount++;
+                m_weight = (float)(s_weightCount++);
+            }
+
+            ~Node()
+            {
+                //Console.WriteLine("Deleting " + m_weight.ToString());
+                s_objCount--;
+            }
+
+            public void growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+            }
+
+            public void rotateTree(ref float leftWeight, ref float rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - begin");
+                Node newLeftChild = null, newRightChild = null;
+                int objCount = s_objCount;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    objCount++;
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    objCount++;
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+                for (int I = 0; I < 1024; I++) { int[] u = new int[1024]; }
+                GC.Collect();
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        float minus1 = -1;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        float minus1 = -1;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - end");
+            }
+        }
+
+        private static int Main()
+        {
+            Node root = new Node();
+            root.growTree(4, "");
+            root.rotateTree(ref root.m_leftChild.m_weight, ref root.m_rightChild.m_weight);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/rotate/rotarg_objref.cs b/tests/src/JIT/Methodical/explicit/rotate/rotarg_objref.cs
new file mode 100644 (file)
index 0000000..93db9ac
--- /dev/null
@@ -0,0 +1,127 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    internal class App
+    {
+        public static int s_weightCount = 1;
+        public static int s_objCount = 0;
+
+        private class Weight
+        {
+            public Weight(int val) { m_value = val; }
+            public int m_value;
+        }
+
+        private class Node
+        {
+            public Weight m_weight;
+            public Node m_leftChild, m_rightChild;
+
+            public Node()
+            {
+                s_objCount++;
+                m_weight = new Weight(s_weightCount++);
+            }
+
+            ~Node()
+            {
+                //Console.WriteLine("Deleting " + m_weight.ToString());
+                s_objCount--;
+            }
+
+            public void growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+            }
+
+            public void rotateTree(ref Weight leftWeight, ref Weight rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - begin");
+                Node newLeftChild = null, newRightChild = null;
+                int objCount = s_objCount;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    objCount++;
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    objCount++;
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+                for (int I = 0; I < 1024; I++) { int[] u = new int[1024]; }
+                GC.Collect();
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        Weight minus1 = null;
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight != m_rightChild.m_weight)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        Weight minus1 = null;
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight != m_leftChild.m_weight)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - end");
+            }
+        }
+
+        private static int Main()
+        {
+            Node root = new Node();
+            root.growTree(4, "");
+            root.rotateTree(ref root.m_leftChild.m_weight, ref root.m_rightChild.m_weight);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/rotate/rotarg_valref.cs b/tests/src/JIT/Methodical/explicit/rotate/rotarg_valref.cs
new file mode 100644 (file)
index 0000000..1965c31
--- /dev/null
@@ -0,0 +1,130 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Rotate
+{
+    public struct Weight
+    {
+        public Weight(int val) { m_value = val; m_padding1 = '0'; m_padding2 = ""; m_padding3 = new App(); }
+        public char m_padding1;
+        public int m_value;
+        public String m_padding2;
+        public Object m_padding3;
+    }
+
+    internal class App
+    {
+        public static int s_weightCount = 1;
+        public static int s_objCount = 0;
+
+        private class Node
+        {
+            public Weight m_weight;
+            public Node m_leftChild, m_rightChild;
+
+            public Node()
+            {
+                s_objCount++;
+                m_weight = new Weight(s_weightCount++);
+            }
+
+            ~Node()
+            {
+                //Console.WriteLine("Deleting " + m_weight.ToString());
+                s_objCount--;
+            }
+
+            public void growTree(int maxHeight, String indent)
+            {
+                //Console.WriteLine(indent + m_weight.ToString());
+                if (maxHeight > 0)
+                {
+                    m_leftChild = new Node();
+                    m_leftChild.growTree(maxHeight - 1, indent + " ");
+                    m_rightChild = new Node();
+                    m_rightChild.growTree(maxHeight - 1, indent + " ");
+                }
+                else
+                    m_leftChild = m_rightChild = null;
+            }
+
+            public void rotateTree(ref Weight leftWeight, ref Weight rightWeight)
+            {
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - begin");
+                Node newLeftChild = null, newRightChild = null;
+                int objCount = s_objCount;
+                if (m_leftChild != null)
+                {
+                    newRightChild = new Node();
+                    objCount++;
+                    newRightChild.m_leftChild = m_leftChild.m_leftChild;
+                    newRightChild.m_rightChild = m_leftChild.m_rightChild;
+                    newRightChild.m_weight = m_leftChild.m_weight;
+                }
+                if (m_rightChild != null)
+                {
+                    newLeftChild = new Node();
+                    objCount++;
+                    newLeftChild.m_leftChild = m_rightChild.m_leftChild;
+                    newLeftChild.m_rightChild = m_rightChild.m_rightChild;
+                    newLeftChild.m_weight = m_rightChild.m_weight;
+                }
+                m_leftChild = newLeftChild;
+                m_rightChild = newRightChild;
+                for (int I = 0; I < 1024; I++) { int[] u = new int[1024]; }
+                GC.Collect();
+                if (m_rightChild != null)
+                {
+                    if (m_rightChild.m_leftChild != null &&
+                        m_rightChild.m_rightChild != null)
+                    {
+                        m_rightChild.rotateTree(
+                            ref m_rightChild.m_leftChild.m_weight,
+                            ref m_rightChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        Weight minus1 = new Weight(0);
+                        m_rightChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (leftWeight.m_value != m_rightChild.m_weight.m_value)
+                    {
+                        Console.WriteLine("left weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                if (m_leftChild != null)
+                {
+                    if (m_leftChild.m_leftChild != null &&
+                        m_leftChild.m_rightChild != null)
+                    {
+                        m_leftChild.rotateTree(
+                            ref m_leftChild.m_leftChild.m_weight,
+                            ref m_leftChild.m_rightChild.m_weight);
+                    }
+                    else
+                    {
+                        Weight minus1 = new Weight(0);
+                        m_leftChild.rotateTree(ref minus1, ref minus1);
+                    }
+                    if (rightWeight.m_value != m_leftChild.m_weight.m_value)
+                    {
+                        Console.WriteLine("right weight do not match.");
+                        throw new Exception();
+                    }
+                }
+                //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - end");
+            }
+        }
+
+        private static int Main()
+        {
+            Node root = new Node();
+            root.growTree(4, "");
+            root.rotateTree(ref root.m_leftChild.m_weight, ref root.m_rightChild.m_weight);
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/explicit/rotate/rotate.csproj b/tests/src/JIT/Methodical/explicit/rotate/rotate.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug614098/app.config b/tests/src/JIT/Methodical/flowgraph/bug614098/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug614098/bug614098.csproj b/tests/src/JIT/Methodical/flowgraph/bug614098/bug614098.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug614098/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/bug614098/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug614098/intToByte.cs b/tests/src/JIT/Methodical/flowgraph/bug614098/intToByte.cs
new file mode 100644 (file)
index 0000000..f637109
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/* 
+ * Bug info:
+ * Asserstion prop was comparing 2 range assertions incorrectly and keeping the wrong one as a result.
+ * Thus assuming it didn't need the narrowing convert to byte. It thus returned the full 32 bit value instead of the lower 8 bits  alone.
+ * 
+ * Repro Steps:
+ * Compile this program with option /optimize and execute it from a console window:
+ * 
+ * Actual Results:
+ * value : 256, lowByte : 0, lowByteInt : 256
+ *
+ * Expected Results:
+ * value : 256, lowByte : 0, lowByteInt : 0
+*/
+
+using System;
+
+internal class Program
+{
+    private struct MyStruct
+    {
+        public ushort value;
+        public MyStruct(ushort value)
+        {
+            this.value = value;
+        }
+    };
+
+    static private MyStruct[] s_myObjects = { new MyStruct(0x0100) };
+
+    private static int Main(string[] args)
+    {
+        MyStruct obj = s_myObjects[0];
+        ushort value = obj.value;
+        byte lowByte = (byte)(value & 0xff);
+        int lowByteInt = lowByte; // here is the bug !
+        Console.WriteLine(String.Format("value : {0}, lowByte : {1}, lowByteInt : {2}", value, lowByte, lowByteInt));
+        return (lowByteInt == 0) ? 100 : 101;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/bug614098/packages.config b/tests/src/JIT/Methodical/flowgraph/bug614098/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/app.config b/tests/src/JIT/Methodical/flowgraph/bug619534/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/bug619534.csproj b/tests/src/JIT/Methodical/flowgraph/bug619534/bug619534.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/bug619534/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/ehCodeMotion.cs b/tests/src/JIT/Methodical/flowgraph/bug619534/ehCodeMotion.cs
new file mode 100644 (file)
index 0000000..7622e39
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * Actually it was a case of the JIT incorrectly move the 'ret=true' down to a point where logically it was reachable via the artifical edges we add to simulate the EH flow, but in reality it was totally unreachable. 
+ * The fix is to recognize such situations and not place code there.
+ * 
+ * Notes from the bug:
+ * Compile the following with no additional command line args.
+ * If you run the resulting assembly on the x86 runtime, it will correctly print "Main: True".
+ * However, if you run it on the amd64 runtime, then it prints "Main: False".
+ * However, if you put something else in the catch block (such as the commented out line) then it works again.
+ * It seems like the 64bit runtime is doing something wrong here.
+ */
+
+
+using System;
+
+internal class Program
+{
+    private static int Main()
+    {
+        //Console.WriteLine("Main: " + new C().M());
+        if (new C().M()) return 100; else return 101;
+    }
+}
+
+internal class C
+{
+    private object _o;
+
+    public bool M()
+    {
+        bool ret = true;
+
+        try
+        {
+            _o.ToString();
+        }
+        catch (NullReferenceException)
+        {
+            //Console.WriteLine(ret); // Uncommenting this line "fixes" the problem
+            goto Label;
+        }
+        ret = false;
+
+    Label:
+
+        return ret;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/finallyclone.cs b/tests/src/JIT/Methodical/flowgraph/bug619534/finallyclone.cs
new file mode 100644 (file)
index 0000000..eda3450
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * Problem: There were no SSA edges added for cloned finally blocks. A finally block is cloned if there is an EH, switch or throw within it. This implied bad codegen as described in the customer scenario below. The call to Console.WriteLine changes code movement around the call and so the issue appears to go away but the Console.WriteLine is not really related.
+ *
+ * Solution: Add an OPONERROR edge around the summary OPSIDEEFFECT tuples to show that they are conditional.
+ * 
+ * Customer Scenario: We seem to be hitting this strange bug (see repro code). If there is a try/catch statement in the finally block, the Test() method returns false, even if this should be impossible. Uncommenting the Console.WriteLine in the try block suddenly makes the test pass. Note that there is only one place where shouldFail becomes true. We tried this on an x86 machine, and the test always returns what we expected (true), we also get the correct result on VS2008, so the bug seems to be only on x64 builds.
+ * 
+ * */
+
+using System;
+
+class ApplicationException : Exception { }
+
+public class TestClass
+{
+    public static int Main(string[] args)
+    {
+        //this should return true;
+        return Test() ? 100 : 101;
+    }
+
+    public static bool Test()
+    {
+        Console.WriteLine("Begin Test....");
+        bool shouldFail = false;
+
+        try
+        {
+            throw new ApplicationException();
+        }
+        catch (ApplicationException) //This is the expected behavior.
+        {
+            Console.WriteLine("correct exception occured.");
+        }
+        catch (Exception e)
+        {
+            Console.WriteLine("ApplicationException  was expected, but instead got:" + e);
+            shouldFail = true;
+        }
+
+        finally
+        {
+            Console.WriteLine("In finally");
+
+            try
+            {
+                //Console.WriteLine("In finally - try block");
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("test threw an Exception in finally: " + e);
+                shouldFail = true;
+            }
+        }
+
+        Console.WriteLine("should fail...{0}", shouldFail);
+        if (shouldFail)
+        {
+            Console.WriteLine("should fail...{0}", shouldFail);
+            return false;
+        }
+
+        Console.WriteLine("End Test. (PASSED)");
+        return true;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/packages.config b/tests/src/JIT/Methodical/flowgraph/bug619534/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug619534/twoEndFinallys.cs b/tests/src/JIT/Methodical/flowgraph/bug619534/twoEndFinallys.cs
new file mode 100644 (file)
index 0000000..b827341
--- /dev/null
@@ -0,0 +1,99 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * The basic scenario is the test should have two returns (endfinallys) in the finally block.
+ * We cannot put a return statement in the finally block for C#
+ * In ordinary circumstances, like this, the C# compiler generates one finally with a branch to that finally for the first break statement.
+ * Hence the IL manually inserts another endfinally within to reproduce this bug.
+ * When optimizing away the if(dummy != 0) block, since it contains a return, the JIT looks at the finally block when removing this basic block.
+ * The x86 JIT expected exactly one return from the finally block, and this test breaks that assumption.
+ *
+ * From notes from the dev:
+ * When we are trying to delete a sequence of block because they have become unreachable due to an optimization we can hit this assert when we attempt to delete the BBJ_CALL/BBJ_ALWAYS blocks
+ * A BBJ_CALL block is a call to a finally region the assert is expecting that the will be exactly one BBJ_RET branch back from the finally block to the BBJ_ALWAYS block.  Typically this is true, however for finally blocks that use multiple return statements (generally a poor practice IMHO)  we can have more than one BBJ_RET back to the BBJ_ALWAYS block.  Thus hitting the assert.  For a retail build we would not assert and would instead just remove one of the back edges to the BBJ_ALWAYS block, which is wrong but does actually cause any further problems in a retail build.
+ * The fix is to loop over all of the back edged into the BBJ_ALWAYS block and remove all of them.
+ */
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal class Test
+{
+    private int _temp;
+    private static int s_result = 100;
+
+    private Test()
+    {
+        _temp = 101;
+    }
+
+    private static int Main(string[] args)
+    {
+        Test t = TwoEndFinallys(args);
+        if (t._temp == 101)
+            return 100;
+        else return 101;
+    }
+    private static Test TwoEndFinallys(string[] args)
+    {
+        Test t = null;
+        Test u = null;
+        try
+        {
+            int dummy = 0;
+            Test l = null;
+            if (s_result != 1000)
+            {
+                if (dummy != 0)
+                {
+                    t = new Test();
+                    t._temp = l._temp;
+                    return t;
+                }
+                try
+                {
+                    return new Test();
+                }
+                catch (Exception obj1)
+                {
+                    System.Exception exn = (System.Exception)obj1;
+                    return null;
+                }
+            }
+        }
+        finally
+        {
+            switch (args.Length)
+            {
+                case 0:
+                    u = dummyCall(0);
+                    if (u != null)
+                        u._temp += 100;
+                    break;
+                default:
+                    t = dummyCall(Convert.ToInt32(args[0]));
+                    t._temp += 101;
+                    break;
+            }
+        }
+        return u;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static Test dummyCall(int input)
+    {
+        try
+        {
+            if (input != 0)
+            {
+                return new Test();
+            }
+            return null;
+        }
+        finally
+        {
+        }
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/flowgraph/bug621705/app.config b/tests/src/JIT/Methodical/flowgraph/bug621705/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug621705/bug621705.csproj b/tests/src/JIT/Methodical/flowgraph/bug621705/bug621705.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug621705/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/bug621705/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug621705/packages.config b/tests/src/JIT/Methodical/flowgraph/bug621705/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug621705/ptuple_lost.cs b/tests/src/JIT/Methodical/flowgraph/bug621705/ptuple_lost.cs
new file mode 100644 (file)
index 0000000..9495031
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+internal class A
+{
+    public static int Main()
+    {
+        int[] arr = new int[10];
+
+        arr[5] = 100;
+
+        short idx = 5;
+        byte bdx = 5;
+        char cdx = Convert.ToChar(5);
+        System.Console.WriteLine(arr[idx] + " " + arr[bdx] + " " + arr[cdx]);
+        if (arr[idx] == 100 && arr[bdx] == 100 && arr[cdx] == 100)
+        {
+            Console.WriteLine("Passed");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("Failed");
+            return 101;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/bug647189/app.config b/tests/src/JIT/Methodical/flowgraph/bug647189/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug647189/bug647189.csproj b/tests/src/JIT/Methodical/flowgraph/bug647189/bug647189.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug647189/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/bug647189/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug647189/packages.config b/tests/src/JIT/Methodical/flowgraph/bug647189/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/bug647189/ssa_tuIsAddr.cs b/tests/src/JIT/Methodical/flowgraph/bug647189/ssa_tuIsAddr.cs
new file mode 100644 (file)
index 0000000..2e23088
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * The SSA phase isn't counting TU_ISADDR leafs when determining how many hash nodes to allocate.
+ * The repro can be generated as:
+ * Basically a lot of static field direct accesses with nothing else in the methods.
+ */
+
+using System;
+
+internal class Repro
+{
+    private static int s_field0 = 0;
+    private static int s_field1 = 1;
+    private static int s_field2 = 2;
+    private static int s_field3 = 3;
+    private static int s_field4 = 4;
+    private static int s_field5 = 5;
+    private static int s_field6 = 6;
+    private static int s_field7 = 7;
+    private static int s_field8 = 8;
+    private static int s_field9 = 9;
+    private static int s_field10 = 10;
+    private static int s_field11 = 11;
+    private static int s_field12 = 12;
+    private static int s_field13 = 13;
+    private static int s_field14 = 14;
+    private static int s_field15 = 15;
+    private static int s_field16 = 16;
+    private static int s_field17 = 17;
+    private static int s_field18 = 18;
+    private static int s_field19 = 19;
+    private static int s_field20 = 20;
+    private static int s_field21 = 21;
+    private static int s_field22 = 22;
+    private static int s_field23 = 23;
+    private static int s_field24 = 24;
+    private static int s_field25 = 25;
+    private static int s_field26 = 26;
+    private static int s_field27 = 27;
+    private static int s_field28 = 28;
+    private static int s_field29 = 29;
+    private static int s_field30 = 30;
+    private static int s_field31 = 31;
+    private static int s_field32 = 32;
+    private static int s_field33 = 33;
+    private static int s_field34 = 34;
+    private static int s_field35 = 35;
+    private static int s_field36 = 36;
+    private static int s_field37 = 37;
+    private static int s_field38 = 38;
+    private static int s_field39 = 39;
+    private static int s_field40 = 40;
+    private static int s_field41 = 41;
+    private static int s_field42 = 42;
+    private static int s_field43 = 43;
+    private static int s_field44 = 44;
+    private static int s_field45 = 45;
+    private static int s_field46 = 46;
+    private static int s_field47 = 47;
+    private static int s_field48 = 48;
+    private static int s_field49 = 49;
+    private static int s_field50 = 50;
+    private static int s_field51 = 51;
+    private static int s_field52 = 52;
+    private static int s_field53 = 53;
+    private static int s_field54 = 54;
+    private static int s_field55 = 55;
+    private static int s_field56 = 56;
+    private static int s_field57 = 57;
+    private static int s_field58 = 58;
+    private static int s_field59 = 59;
+
+    private static int Main()
+    {
+        s_field0 = 2;
+        if (s_field0 == 2)
+        {
+            Console.WriteLine("Passed");
+            return 100;
+        }
+        else
+        {
+            Console.WriteLine("Failed");
+            return 101;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/app.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/arrayDim.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/arrayDim.cs
new file mode 100644 (file)
index 0000000..2cc05a5
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * We need to propigate array dimmension changes through OPADDs that are already NonNull. 
+ * Expected and actual output is at the end of the test.
+ * */
+
+using System;
+
+public class Test
+
+{
+    private static int Main()
+
+    {
+        int[] iAr1 = null;
+
+        for (int j = 10; j < 20; j++)
+
+        {
+            Console.WriteLine("j=" + j);
+
+            iAr1 = new int[j];
+
+            Console.WriteLine(iAr1.Length); // wrong when j=11
+
+            for (int i = 0; i < j; i++)
+
+            {
+                Console.Write(i + " ");
+
+                iAr1[i] = i; // IndexOutOfRangeException when j=11, i=10
+            }
+
+            Console.WriteLine();
+        }
+
+        Console.WriteLine("Done");
+
+        return 100;
+    }
+}
+
+
+/* 
+Expected: 
+
+C:\Temp>repro
+j=10
+10
+0 1 2 3 4 5 6 7 8 9
+j=11
+11
+0 1 2 3 4 5 6 7 8 9 10
+j=12
+12
+0 1 2 3 4 5 6 7 8 9 10 11
+j=13
+13
+0 1 2 3 4 5 6 7 8 9 10 11 12
+j=14
+14
+0 1 2 3 4 5 6 7 8 9 10 11 12 13
+j=15
+15
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+j=16
+16
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+j=17
+17
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+j=18
+18
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
+j=19
+19
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
+Done
+
+
+Actual:
+
+C:\Temp>repro
+j=10
+10
+0 1 2 3 4 5 6 7 8 9
+j=11
+10
+0 1 2 3 4 5 6 7 8 9 10
+Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
+   at Test.Main() 
+*/
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/dev10_bug675304.csproj b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/dev10_bug675304.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/osrAddovershot.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/osrAddovershot.cs
new file mode 100644 (file)
index 0000000..6c3350c
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// This test determines if a range check can pass through an operation
+// Suppose we have:
+//     x = rangecheck(i, bound) where i is the iterator variable
+//     y = x * 4
+//       = y
+//     i = i + 1
+// We want to strength-reduce this as
+//     y' = rangecheck(y, bound*4)
+//        = y'
+//     y  = y + 4
+// This is only legal under certain conditions
+//     - multiply by a positive constant
+//     - add/subtract when the initial IV is known to be >= 0
+//     - add a value smaller than pointer size (to avoid a value off the end of an array) <-- This last check was missing and hence the bug!!!!!
+// 
+// Problem: The JIT seems to be rewriting the IV and the loop test in terms of the struct member, which is not safe because the member is more than pointer size past the end of the array. 
+// 
+// Fix: Stop OSR from rewriting IV's when the ADD is greater than pointer size. Need to further beat down OSR to have it stop rewriting IVs when they would be offset more than pointer-sized past the end of an array or object. 
+// 
+// PLEASE NOTE: You have to set complus_GCSTRESS=4 to see the AV.
+
+using System;
+
+internal struct MyStruct
+{
+    public int a, b, c, d, e, f, g, h;
+}
+
+internal static class Repro
+{
+    private static int SumMSH(MyStruct[] ms)
+    {
+        int sum = 0;
+        for (int i = 0; i < ms.Length; i++)
+        {
+            sum += ms[i].h; //Gives an AV
+                            //sum += ms[i].b; //will not give an AV since offset is less than 8 bytes. 
+        }
+        return sum;
+    }
+
+    private static MyStruct[] InitMS(int length)
+    {
+        MyStruct[] ms = new MyStruct[length];
+        for (int i = 0, j = 0; i < ms.Length; i++)
+        {
+            ms[i].a = j++;
+            ms[i].b = j++;
+            ms[i].c = j++;
+            ms[i].d = j++;
+            ms[i].e = j++;
+            ms[i].f = j++;
+            ms[i].g = j++;
+            ms[i].h = j++;
+        }
+        return ms;
+    }
+
+    private static int Main(string[] args)
+    {
+        MyStruct[] ms = InitMS(5); //InitMS(args.Length > 0 ? int.Parse(args[0]) : 5);
+                                   //Do not expect to take in any arguments here for simplicity sake.
+                                   //This does not impact functionality of the repro.
+        if (SumMSH(ms) == 115) return 100; else return 101;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/packages.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug675304/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/GCOverReporting.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/GCOverReporting.cs
new file mode 100644 (file)
index 0000000..2b32908
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * If using a value type/struct that contains only a single reference type field, under certain situations the x64 JIT reports the stack location as a live GC pointer before zero-initializing it.
+ * The only workaround would be to disable optimizations via MethodImplOptions.NoOptimization.  This GC hole is sort of an existing one and sort of a regression.
+ * In one sense, it has been in the JIT since we turned on candidates and made worse with OPT_WITH_EH (since it adds a lot of cases where we try and then undo worthless register candidates), which was done between beta2 and RTM of Whidbey/2.0.
+ * Previously bugs in this area caused the stack’s lifetime to not get reported at all.
+ * Earlier this year 2 bugs were fixed, and recently I ported those fixes to arrowhead, so that we now correctly report the untracked stack lifetime of these value types.
+ * This bug is a manifestation of the opposite problem where the reference pointer is reported, but not initialized.
+ * Thus depending upon the previous stack contents, can cause an inverse-GCHole (reporting of a non-GC pointer as a GC pointer).
+ * This is not as serious because it is *not* the normal GC hole that leads to type system hole that leads to security exploit.
+ * The worst this could cause is an AV in the runtime which would trigger an ExecutionException which I believe cannot be caught, so it would just tear down the process and hopefully invoke Watson.
+ *
+ * Expected output:
+ * 2
+ * 3
+ * 5
+ * 6
+ * 8
+ * 9
+ *
+ * Actual output:
+ * 2
+ * 3
+ * and then a crash!
+ * 
+ */
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal struct MB8
+{
+    public object foo;
+}
+
+internal class Repro
+{
+    private static int s_counter;
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static MB8 MakeNewMB8()
+    {
+        GC.Collect();
+        MB8 mb;
+        mb.foo = ++s_counter;
+        return mb;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static MB8 MakeAndUseMB8(MB8 mb)
+    {
+        mb.foo = ++s_counter;
+        return mb;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static void Method()
+    {
+        MB8 mb = MakeNewMB8();
+        for (int i = 0; i < 5; i += 3)
+        {
+            try
+            {
+                mb = MakeAndUseMB8(mb);
+            }
+            finally
+            {
+                Console.WriteLine(s_counter);
+            }
+        }
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static unsafe void TrashStack()
+    {
+        ulong* stack = stackalloc ulong[256];
+        for (int i = 0; i < 256; i++)
+            stack[i] = 0xCCCCCCCCCCCCCCCCL;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
+    private static void ConsumeStack(int i)
+    {
+        if (i > 0)
+            ConsumeStack(i - 1);
+        else
+            Method();
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static unsafe void DoTest()
+    {
+        TrashStack();
+        ConsumeStack(3);
+    }
+
+    private static int Main()
+    {
+        Method();
+        TrashStack();
+        ConsumeStack(0);
+        DoTest();
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/app.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/castClassEH.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/castClassEH.cs
new file mode 100644 (file)
index 0000000..6377c60
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+This is a potential security exploit. 
+If the result of a cast is stored into a local the JIT incorrectly optimizes it such that the local gets set to the new object 
+reference before throwing any exception.  Thus if the cast is in a try block, and the cast fails and the exception is caught, 
+the code can still use the local as if the cast had succeeded.
+
+Fix: Use an intermediate temporary, just like for other patterns, when the cast is inside a try block.
+
+*/
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal static class Repro
+{
+    private class Helper<T>
+    {
+        public Helper(T s) { t = s; }
+        public T t;
+    }
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private static int reinterpret_cast<DestType, SrcType>(SrcType s)
+    {
+        Helper<DestType> d = null;
+        int ReturnVal = 101;
+        try
+        {
+            Helper<SrcType> hs = new Helper<SrcType>(s);
+            d = (Helper<DestType>)(object)hs;
+        }
+        catch (InvalidCastException)
+        {
+        }
+        try
+        {
+            DestType r = d.t;
+        }
+        catch (System.NullReferenceException)
+        {
+            ReturnVal = 100;
+        }
+
+        return ReturnVal;
+    }
+
+    private static int Main()
+    {
+        int exploit = reinterpret_cast<IntPtr, string>("Hello World!");
+        Console.WriteLine(exploit);
+        return exploit;
+    }
+}
+
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/dev10_bug679008.csproj b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/dev10_bug679008.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/packages.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/sealedCastVariance.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/sealedCastVariance.cs
new file mode 100644 (file)
index 0000000..ea9cf95
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * This is a potential security exploit. Variance allows a sealed type to be cast to/from another sealed type that is neither it's base class or derived class (which to the JIT makes it look like interfaces or other unsealed types).
+ */
+
+using System;
+
+internal static class Repro
+{
+    private static bool CheckType(Action<string> a)
+    {
+        return a.GetType() == typeof(Action<object>);
+    }
+    private static int Main()
+    {
+        Action<string> a = (Action<object>)Console.WriteLine;
+        if (CheckType(a))
+        {
+            Console.WriteLine("pass");
+            return 100;
+        }
+        Console.WriteLine("FAIL");
+        return 101;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/singleRefField.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/singleRefField.cs
new file mode 100644 (file)
index 0000000..c5c6083
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * The JIT generates incorrect code for occasional uses of a struct parameter that contains a single field that is a reference type.
+ * This can cause GC holes, GC overreporting, crashes, corrupt data.
+ * Fix is to not undo a register allocation as worthless, but rather to just force it to spill (and not spill when the spill would be redundant).
+ */
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal struct MB8
+{
+    public object foo;
+}
+
+internal class Repro
+{
+    private int _state = 1;
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public virtual int Use(MB8 mb8, string s)
+    {
+        return 2;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private int Use(MB8 mb8, int i, string s)
+    {
+        return 2;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private void Use(MB8 mb8)
+    {
+    }
+
+    private Repro[] _preExecutionDelegates = new Repro[0];
+
+    private int Bug(MB8 mb8, string V_2)
+    {
+        if (V_2 == null)
+        {
+            throw new ArgumentNullException("V_2");
+        }
+        _state = 2;
+        int loc0 = 0;
+        foreach (Repro loc1 in _preExecutionDelegates)
+        {
+            if (loc1 != null)
+            {
+                loc0 = loc1.Use(mb8, V_2);
+            }
+            if (loc0 != 0)
+                break;
+        }
+        if (loc0 == 1)
+        {
+            Use(mb8); // No retval
+        }
+        else if (loc0 == 2)
+        {
+            Use(mb8, 0, V_2); // Pop
+        }
+        return loc0;
+    }
+
+    private static int Main()
+    {
+        new Repro().Bug(new MB8(), "Test");
+        return 100;
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/zeroInitStackSlot.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug679008/zeroInitStackSlot.cs
new file mode 100644 (file)
index 0000000..59df3ea
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * The JIT was removing a zero-init, but then emitting an untracked lifetime. 
+ * Please run under GCSTRESS = 0x4
+ */
+
+using System;
+using System.Runtime.CompilerServices;
+
+internal struct SqlBinary
+{
+    private byte[] _value;
+}
+
+internal class WarehouseResultDatabase : IDisposable
+{
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    public WarehouseResultDatabase()
+    {
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    void IDisposable.Dispose()
+    {
+    }
+}
+
+internal delegate bool WarehouseRowVersionQueryDelegate(WarehouseResultDatabase database, SqlBinary waterMark);
+
+internal class Repro
+{
+    private static int Main()
+    {
+        new Repro().ProcessResults(Query);
+        return 100;
+    }
+
+    [MethodImpl(MethodImplOptions.NoInlining)]
+    private void GetProcessingParameters(out SqlBinary binary)
+    {
+        binary = new SqlBinary();
+    }
+
+    private static bool Query(WarehouseResultDatabase database, SqlBinary waterMark)
+    {
+        return false;
+    }
+
+    private void ProcessResults(WarehouseRowVersionQueryDelegate query)
+    {
+        SqlBinary binary;
+        bool moreDataAvailable = true;
+        this.GetProcessingParameters(out binary);
+        SqlBinary waterMark = binary;
+        while (moreDataAvailable)
+        {
+            bool result = false;
+            using (WarehouseResultDatabase database = new WarehouseResultDatabase())
+            {
+                result = query(database, waterMark);
+            }
+            moreDataAvailable = result;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/app.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/cs_template.proj b/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/dev10_bug723489.csproj b/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/dev10_bug723489.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/packages.config b/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/qMarkColon.cs b/tests/src/JIT/Methodical/flowgraph/dev10_bug723489/qMarkColon.cs
new file mode 100644 (file)
index 0000000..219ca54
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * Basically when we have two Qmark-Colon trees used as the register arguments to a call we don\92t take into account that the first one to be evaluated should add a register interference with ECX/EDX so that the next tree will not try to use that register when deciding what register it can use for enregistration of locals.
+ * An OKMask Assert was being hit in this case.
+ */
+
+using System;
+internal class Repro
+{
+    public static bool MyEquals(object obj1, object obj2)
+    {
+        return ((obj1 as Version) == (obj2 as Version));
+    }
+
+    public static int Main(String[] args)
+    {
+        Version ver0 = null;
+        Version ver1 = null;
+        if (args.Length >= 2)
+        {
+            ver0 = new Version(args[0]);
+            ver1 = new Version(args[1]);
+        }
+
+        bool result = MyEquals(ver0, ver1);
+        if (result)
+            return 100;
+        else
+            return 101;
+    }
+}
diff --git a/tests/src/JIT/Methodical/inlining/bug505642/app.config b/tests/src/JIT/Methodical/inlining/bug505642/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/inlining/bug505642/bug505642.csproj b/tests/src/JIT/Methodical/inlining/bug505642/bug505642.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/inlining/bug505642/cs_template.proj b/tests/src/JIT/Methodical/inlining/bug505642/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/inlining/bug505642/packages.config b/tests/src/JIT/Methodical/inlining/bug505642/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/inlining/bug505642/test.cs b/tests/src/JIT/Methodical/inlining/bug505642/test.cs
new file mode 100644 (file)
index 0000000..0a3409c
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * Some comments about the test:
+ * Expected: The code runs and completes successfully.
+ * Acutal: The application hangs when it is run.
+ * The csharp compiler seems to be generating the same IL in both the cases.
+ *
+ * Some comments about the bug:
+ * The problem is that the way we use ComputePreferredZapModule grows exponentially in this test case.  The thing with the inliner is a red herring.  If you increase the constant from 5 to 15 it also hangs.  The only reason that it's worse with the inliner is because of the way we handle the unbounded recursion.  Once you get about 5 deep you go all the way infinitely (because the call site size is always smaller than the estimated function body).
+ *
+ */
+
+using System;
+
+public struct Tuple<T0, T1>
+{
+    public readonly T0 Field0;
+    public readonly T1 Field1;
+    public Tuple(T0 Field0, T1 Field1)
+    {
+        this.Field0 = Field0;
+        this.Field1 = Field1;
+    }
+}
+
+internal static class M
+{
+    private static int Main()
+    {
+        return meth<int>(8, 100);
+        //Console.Write(meth<int>(8, 100));
+        //Console.Write(meth<int>(5, 1)); Increasing levels to 8
+    }
+
+    private static T meth<T>(int v, T x)
+    {
+        //Recursive generic
+        return ((v >= 0) ? meth<Tuple<T, T>>(v - 1, new Tuple<T, T>(x, x)).Field0 : x);
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/arrays/app.config b/tests/src/JIT/Methodical/int64/arrays/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/arrays/arrays.csproj b/tests/src/JIT/Methodical/int64/arrays/arrays.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/arrays/cs_template.proj b/tests/src/JIT/Methodical/int64/arrays/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/arrays/lcs_long.cs b/tests/src/JIT/Methodical/int64/arrays/lcs_long.cs
new file mode 100644 (file)
index 0000000..dde569a
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(long[,,,] b, char[] X, long[] ind)
+        {
+            for (long i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            long L = b[ind[0], ind[1], ind[2], ind[3]];
+            if (L == RANK)
+            {
+                for (long i = 0; i < RANK; i++)
+                    ind[i]--;
+                long idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(long[,,,] c, long[,,,] b, char[][] seq, long[] len)
+        {
+            long[] ind = new long[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (long i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0], ind[1], ind[2], ind[3]] =
+                                    c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] + 1;
+                                b[ind[0], ind[1], ind[2], ind[3]] = RANK;
+                                continue;
+                            }
+
+                            long R = -1;
+                            long M = -1;
+                            for (long i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (c[ind[0], ind[1], ind[2], ind[3]] > M)
+                                {
+                                    R = i;
+                                    M = c[ind[0], ind[1], ind[2], ind[3]];
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            c[ind[0], ind[1], ind[2], ind[3]] = M;
+                            b[ind[0], ind[1], ind[2], ind[3]] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for longest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            long[] len = new long[RANK];
+            char[][] seq = new char[RANK][];
+            for (long i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            long[,,,] c = new long[(int)len[0], (int)len[1], (int)len[2], (int)len[3]];
+            long[,,,] b = new long[(int)len[0], (int)len[1], (int)len[2], (int)len[3]];
+
+            findLCS(c, b, seq, len);
+
+            for (long i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/arrays/lcs_ulong.cs b/tests/src/JIT/Methodical/int64/arrays/lcs_ulong.cs
new file mode 100644 (file)
index 0000000..1add52a
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS(ulong[,,,] b, char[] X, ulong[] ind)
+        {
+            for (ulong i = 0; i < RANK; i++)
+                if (ind[i] == 0) return "";
+
+            ulong L = b[ind[0], ind[1], ind[2], ind[3]];
+            if (L == RANK)
+            {
+                for (ulong i = 0; i < RANK; i++)
+                    ind[i]--;
+                ulong idx = ind[0];
+                return buildLCS(b, X, ind) + X[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                ind[L]--;
+                return buildLCS(b, X, ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(ulong[,,,] c, ulong[,,,] b, char[][] seq, ulong[] len)
+        {
+            ulong[] ind = new ulong[RANK];
+            for (ind[0] = 1; ind[0] < len[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < len[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < len[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < len[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (ulong i = 1; i < RANK; i++)
+                            {
+                                if (seq[i][ind[i] - 1] != seq[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                c[ind[0], ind[1], ind[2], ind[3]] =
+                                    c[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] + 1;
+                                b[ind[0], ind[1], ind[2], ind[3]] = RANK;
+                                continue;
+                            }
+
+                            ulong R = 0;
+                            ulong M = 0;
+                            for (ulong i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (c[ind[0], ind[1], ind[2], ind[3]] + 1 > M)
+                                {
+                                    R = i + 1;
+                                    M = c[ind[0], ind[1], ind[2], ind[3]] + 1;
+                                }
+                                ind[i]++;
+                            }
+                            if (R == 0 || M == 0)
+                                throw new Exception();
+
+                            c[ind[0], ind[1], ind[2], ind[3]] = checked(M - 1);
+                            b[ind[0], ind[1], ind[2], ind[3]] = checked(R - 1);
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Console.WriteLine("Test searches for ulongest common subsequence of 4 strings\n\n");
+            String[] str = new String[RANK] {
+                "The Sun has left his blackness",
+                "and has found a fresher morning",
+                "and the fair Moon rejoices",
+                "in the clear and cloudless night"
+            };
+
+            ulong[] len = new ulong[RANK];
+            char[][] seq = new char[RANK][];
+            for (ulong i = 0; i < RANK; i++)
+            {
+                len[i] = checked((ulong)(str[i].Length + 1));
+                seq[i] = str[i].ToCharArray();
+            }
+
+            ulong[,,,] c = new ulong[(int)len[0], (int)len[1], (int)len[2], (int)len[3]];
+            ulong[,,,] b = new ulong[(int)len[0], (int)len[1], (int)len[2], (int)len[3]];
+
+            findLCS(c, b, seq, len);
+
+            for (ulong i = 0; i < RANK; i++)
+                len[i]--;
+
+            if ("n ha  es" == buildLCS(b, seq[0], len))
+            {
+                Console.WriteLine("Test passed");
+                return 100;
+            }
+            else
+            {
+                Console.WriteLine("Test failed.");
+                return 0;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/arrays/packages.config b/tests/src/JIT/Methodical/int64/arrays/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/misc/app.config b/tests/src/JIT/Methodical/int64/misc/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/misc/binop.cs b/tests/src/JIT/Methodical/int64/misc/binop.cs
new file mode 100644 (file)
index 0000000..4a1f79b
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static int Main()
+        {
+            long L1, L2;
+            ulong U1, U2;
+            try
+            {
+                L1 = 0x7000123480001234;
+                L2 = 0x7123400081234000;
+                if ((L1 & L2) != 0x7000000080000000)
+                    goto fail;
+
+                L1 = 0x7000123480001234;
+                L2 = 0x7123400081234000;
+                if ((L1 | L2) != 0x7123523481235234)
+                    goto fail;
+
+                U1 = 0x8000123480001234;
+                U2 = 0x8123400081234000;
+                if (~(U1 & U2) != 0x7fffffff7fffffff)
+                    goto fail;
+
+                U1 = 0x8000123480001234;
+                U2 = 0x8123400081234000;
+                if ((U1 | U2) != 0x8123523481235234)
+                    goto fail;
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("Exception handled!");
+                goto fail;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        fail:
+            Console.WriteLine("Failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/misc/box.cs b/tests/src/JIT/Methodical/int64/misc/box.cs
new file mode 100644 (file)
index 0000000..e42728a
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static int Main()
+        {
+            try
+            {
+                ulong L1 = 0x8000123480001234;
+                if (L1 != (ulong)(object)(ulong)(object)(ulong)(object)L1)
+                    goto fail;
+                long L2 = unchecked((long)0x8000123480001234);
+                if (L2 != (long)(object)(long)(object)(long)(object)L2)
+                    goto fail;
+            }
+            catch (Exception)
+            {
+                Console.WriteLine("Exception handled!");
+                goto fail;
+            }
+            Console.WriteLine("Passed");
+            return 100;
+        fail:
+            Console.WriteLine("Failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/misc/cs_template.proj b/tests/src/JIT/Methodical/int64/misc/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/misc/misc.csproj b/tests/src/JIT/Methodical/int64/misc/misc.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/misc/packages.config b/tests/src/JIT/Methodical/int64/misc/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/signed/app.config b/tests/src/JIT/Methodical/int64/signed/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/signed/cs_template.proj b/tests/src/JIT/Methodical/int64/signed/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/signed/packages.config b/tests/src/JIT/Methodical/int64/signed/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/signed/s_addsub.cs b/tests/src/JIT/Methodical/int64/signed/s_addsub.cs
new file mode 100644 (file)
index 0000000..05614ab
--- /dev/null
@@ -0,0 +1,338 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static void testNumbers(long a, long b)
+        {
+            long c = 0;
+            try
+            {
+                c = checked(a + b);
+            }
+            catch (OverflowException)
+            {
+                bool negative = false;
+                ulong au, bu;
+
+                if (a < 0)
+                {
+                    negative = !negative;
+                    au = checked((ulong)(-a));
+                }
+                else
+                {
+                    au = checked((ulong)a);
+                }
+                if (b < 0)
+                {
+                    negative = !negative;
+                    bu = checked((ulong)(-b));
+                }
+                else
+                {
+                    bu = checked((ulong)b);
+                }
+
+                ulong AH = au >> 32;
+                ulong AL = au & 0xffffffff;
+                ulong BH = bu >> 32;
+                ulong BL = bu & 0xffffffff;
+
+                ulong L = checked(BL + AL);
+                ulong H = checked(AH + BH);
+                if (H < 0x100000000)
+                {
+                    if (L >= 0x100000000)
+                    {
+                        checked
+                        {
+                            H++;
+                            L -= 0x100000000;
+                            if (L >= 0x100000000)
+                                throw new Exception();
+                        }
+                    }
+                    if (checked(L <= 0xffffffffffffffff - (H << 32)))
+                        throw new Exception();
+                }
+                return;
+            }
+            if (checked(c - b != a || c - a != b))
+                throw new Exception();
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                testNumbers(unchecked((long)0x0000000000000009), unchecked((long)0x00000000000000b8));
+                testNumbers(unchecked((long)0x0000000000000009), unchecked((long)0x00000000000000f9));
+                testNumbers(unchecked((long)0x000000000000006e), unchecked((long)0x0000000000000093));
+                testNumbers(unchecked((long)0x000000000000001e), unchecked((long)0x0000000000000086));
+                testNumbers(unchecked((long)0x00000000000000cc), unchecked((long)0x000000000000583f));
+                testNumbers(unchecked((long)0x00000000000000c9), unchecked((long)0x000000000000a94c));
+                testNumbers(unchecked((long)0x0000000000000054), unchecked((long)0x0000000000002d06));
+                testNumbers(unchecked((long)0x0000000000000030), unchecked((long)0x0000000000009921));
+                testNumbers(unchecked((long)0x000000000000001d), unchecked((long)0x0000000000450842));
+                testNumbers(unchecked((long)0x000000000000002a), unchecked((long)0x0000000000999f6c));
+                testNumbers(unchecked((long)0x00000000000000c5), unchecked((long)0x000000000090faa7));
+                testNumbers(unchecked((long)0x0000000000000050), unchecked((long)0x000000000069de08));
+                testNumbers(unchecked((long)0x000000000000009a), unchecked((long)0x000000000cd715be));
+                testNumbers(unchecked((long)0x0000000000000039), unchecked((long)0x0000000016a61eb5));
+                testNumbers(unchecked((long)0x00000000000000e0), unchecked((long)0x0000000095575fef));
+                testNumbers(unchecked((long)0x0000000000000093), unchecked((long)0x00000000209e58c5));
+                testNumbers(unchecked((long)0x000000000000003b), unchecked((long)0x0000000c3c34b48c));
+                testNumbers(unchecked((long)0x00000000000000c2), unchecked((long)0x0000006a671c470f));
+                testNumbers(unchecked((long)0x000000000000004b), unchecked((long)0x000000f538cede2b));
+                testNumbers(unchecked((long)0x0000000000000099), unchecked((long)0x0000005ba885d43b));
+                testNumbers(unchecked((long)0x0000000000000068), unchecked((long)0x00009f692f98ac45));
+                testNumbers(unchecked((long)0x00000000000000d9), unchecked((long)0x00008d5eaa7f0a8e));
+                testNumbers(unchecked((long)0x00000000000000ac), unchecked((long)0x0000ba1316512e4c));
+                testNumbers(unchecked((long)0x000000000000001c), unchecked((long)0x00008c4fbf2f14aa));
+                testNumbers(unchecked((long)0x00000000000000c0), unchecked((long)0x0069a9eb9a9bc822));
+                testNumbers(unchecked((long)0x0000000000000074), unchecked((long)0x003f8f5a893de200));
+                testNumbers(unchecked((long)0x0000000000000027), unchecked((long)0x000650eb1747a5bc));
+                testNumbers(unchecked((long)0x00000000000000d9), unchecked((long)0x00d3d50809c70fda));
+                testNumbers(unchecked((long)0x00000000000000c0), unchecked((long)0xac6556a4ca94513e));
+                testNumbers(unchecked((long)0x0000000000000020), unchecked((long)0xa697fcbfd6d232d1));
+                testNumbers(unchecked((long)0x000000000000009c), unchecked((long)0xc4421a4f5147b9b8));
+                testNumbers(unchecked((long)0x000000000000009e), unchecked((long)0xc5ef494112a7b33f));
+                testNumbers(unchecked((long)0x000000000000f7fa), unchecked((long)0x00000000000000af));
+                testNumbers(unchecked((long)0x000000000000ad17), unchecked((long)0x00000000000000e8));
+                testNumbers(unchecked((long)0x000000000000c9c4), unchecked((long)0x0000000000000045));
+                testNumbers(unchecked((long)0x000000000000a704), unchecked((long)0x0000000000000012));
+                testNumbers(unchecked((long)0x000000000000c55b), unchecked((long)0x000000000000a33a));
+                testNumbers(unchecked((long)0x000000000000ab88), unchecked((long)0x0000000000009a3c));
+                testNumbers(unchecked((long)0x000000000000a539), unchecked((long)0x000000000000cf3a));
+                testNumbers(unchecked((long)0x0000000000005890), unchecked((long)0x000000000000eec8));
+                testNumbers(unchecked((long)0x000000000000e9e2), unchecked((long)0x0000000000fe7c46));
+                testNumbers(unchecked((long)0x0000000000007303), unchecked((long)0x0000000000419f2a));
+                testNumbers(unchecked((long)0x000000000000e105), unchecked((long)0x000000000013f913));
+                testNumbers(unchecked((long)0x0000000000008191), unchecked((long)0x0000000000fa2458));
+                testNumbers(unchecked((long)0x00000000000006d9), unchecked((long)0x0000000091cf14f7));
+                testNumbers(unchecked((long)0x000000000000bdb1), unchecked((long)0x0000000086c2a97c));
+                testNumbers(unchecked((long)0x000000000000e905), unchecked((long)0x0000000064f702f4));
+                testNumbers(unchecked((long)0x0000000000002fdc), unchecked((long)0x00000000f059caf6));
+                testNumbers(unchecked((long)0x000000000000f8fd), unchecked((long)0x00000013f0265b1e));
+                testNumbers(unchecked((long)0x000000000000e8b8), unchecked((long)0x0000000aa69a6308));
+                testNumbers(unchecked((long)0x0000000000003d00), unchecked((long)0x000000fbcb67879b));
+                testNumbers(unchecked((long)0x000000000000aa46), unchecked((long)0x00000085c3d371d5));
+                testNumbers(unchecked((long)0x0000000000005f60), unchecked((long)0x000008cde4a63203));
+                testNumbers(unchecked((long)0x00000000000092b5), unchecked((long)0x00007ca86ba2f30e));
+                testNumbers(unchecked((long)0x00000000000093c6), unchecked((long)0x0000a2d73fc4eac0));
+                testNumbers(unchecked((long)0x0000000000004156), unchecked((long)0x000006dbd08f2fda));
+                testNumbers(unchecked((long)0x0000000000004597), unchecked((long)0x006cfb0ba5962826));
+                testNumbers(unchecked((long)0x0000000000006bac), unchecked((long)0x001e79315071480f));
+                testNumbers(unchecked((long)0x0000000000002c3a), unchecked((long)0x0092f12cbd82df69));
+                testNumbers(unchecked((long)0x0000000000009859), unchecked((long)0x00b0f0cd9dc019f2));
+                testNumbers(unchecked((long)0x000000000000b37f), unchecked((long)0x4966447d15850076));
+                testNumbers(unchecked((long)0x0000000000005e34), unchecked((long)0x7c1869c9ed2cad38));
+                testNumbers(unchecked((long)0x0000000000005c54), unchecked((long)0x7cee70ee82837a08));
+                testNumbers(unchecked((long)0x000000000000967f), unchecked((long)0x4eb98adf4b8b0d32));
+                testNumbers(unchecked((long)0x0000000000fd2919), unchecked((long)0x000000000000005d));
+                testNumbers(unchecked((long)0x0000000000abd5b1), unchecked((long)0x0000000000000098));
+                testNumbers(unchecked((long)0x0000000000ab1887), unchecked((long)0x00000000000000ef));
+                testNumbers(unchecked((long)0x000000000096034a), unchecked((long)0x000000000000002f));
+                testNumbers(unchecked((long)0x0000000000d5bb94), unchecked((long)0x00000000000057d2));
+                testNumbers(unchecked((long)0x0000000000d7b2cb), unchecked((long)0x00000000000080f5));
+                testNumbers(unchecked((long)0x00000000004ccc6d), unchecked((long)0x000000000000087c));
+                testNumbers(unchecked((long)0x0000000000ec0c50), unchecked((long)0x000000000000bdff));
+                testNumbers(unchecked((long)0x00000000008a6865), unchecked((long)0x000000000076c014));
+                testNumbers(unchecked((long)0x0000000000ac38dd), unchecked((long)0x0000000000f12b09));
+                testNumbers(unchecked((long)0x0000000000615e2a), unchecked((long)0x0000000000e7cbf8));
+                testNumbers(unchecked((long)0x00000000000e214f), unchecked((long)0x00000000005b8e2f));
+                testNumbers(unchecked((long)0x00000000003bd7c6), unchecked((long)0x00000000c1db4e46));
+                testNumbers(unchecked((long)0x0000000000ae208d), unchecked((long)0x0000000001c9aa7a));
+                testNumbers(unchecked((long)0x00000000008a9cef), unchecked((long)0x0000000003930b07));
+                testNumbers(unchecked((long)0x000000000036b866), unchecked((long)0x00000000d64b7bef));
+                testNumbers(unchecked((long)0x0000000000d337cd), unchecked((long)0x000000a2b45fb7de));
+                testNumbers(unchecked((long)0x0000000000024471), unchecked((long)0x0000005c5de3da89));
+                testNumbers(unchecked((long)0x0000000000012b15), unchecked((long)0x0000007cd40030fe));
+                testNumbers(unchecked((long)0x0000000000d38af2), unchecked((long)0x0000005905921572));
+                testNumbers(unchecked((long)0x0000000000aca0d7), unchecked((long)0x0000c632301abeb8));
+                testNumbers(unchecked((long)0x00000000004eadc2), unchecked((long)0x00006a1ebf37403c));
+                testNumbers(unchecked((long)0x00000000005d909c), unchecked((long)0x00004021bfa15862));
+                testNumbers(unchecked((long)0x0000000000710e08), unchecked((long)0x0000e9a1a030b230));
+                testNumbers(unchecked((long)0x0000000000478b9b), unchecked((long)0x00804add8afc31d9));
+                testNumbers(unchecked((long)0x00000000005754ed), unchecked((long)0x00af85e7ebb1ce33));
+                testNumbers(unchecked((long)0x00000000003ab44e), unchecked((long)0x00f41b9f70360f78));
+                testNumbers(unchecked((long)0x00000000007aa129), unchecked((long)0x00eb6e4eddf7eb87));
+                testNumbers(unchecked((long)0x00000000003b036f), unchecked((long)0x333874e4330fbfa4));
+                testNumbers(unchecked((long)0x0000000000a33186), unchecked((long)0xec8607412503fc4c));
+                testNumbers(unchecked((long)0x00000000009af471), unchecked((long)0xe7ad0935fdbff151));
+                testNumbers(unchecked((long)0x0000000000c04e8c), unchecked((long)0x58ee406ab936ac24));
+                testNumbers(unchecked((long)0x0000000054fdd28b), unchecked((long)0x0000000000000034));
+                testNumbers(unchecked((long)0x0000000033736b36), unchecked((long)0x00000000000000fd));
+                testNumbers(unchecked((long)0x0000000069cfe4b7), unchecked((long)0x0000000000000026));
+                testNumbers(unchecked((long)0x00000000fd078d36), unchecked((long)0x00000000000000dc));
+                testNumbers(unchecked((long)0x0000000075cc3f36), unchecked((long)0x0000000000001617));
+                testNumbers(unchecked((long)0x00000000075d660e), unchecked((long)0x0000000000008511));
+                testNumbers(unchecked((long)0x0000000052acb037), unchecked((long)0x00000000000043cb));
+                testNumbers(unchecked((long)0x00000000a0db7bf5), unchecked((long)0x0000000000002c98));
+                testNumbers(unchecked((long)0x0000000083d4be11), unchecked((long)0x0000000000ba37c9));
+                testNumbers(unchecked((long)0x0000000083d04f94), unchecked((long)0x00000000003ddbd0));
+                testNumbers(unchecked((long)0x000000005ed41f6a), unchecked((long)0x0000000000eaf1d5));
+                testNumbers(unchecked((long)0x000000000e364a9a), unchecked((long)0x000000000085880c));
+                testNumbers(unchecked((long)0x0000000012657ecb), unchecked((long)0x00000000a88b8a68));
+                testNumbers(unchecked((long)0x000000009897a4ac), unchecked((long)0x0000000076707981));
+                testNumbers(unchecked((long)0x00000000469cd1cf), unchecked((long)0x00000000cf40f67a));
+                testNumbers(unchecked((long)0x00000000ee7444c8), unchecked((long)0x00000000d1b0d7de));
+                testNumbers(unchecked((long)0x00000000fbb6f547), unchecked((long)0x000000c1ef3c4d9b));
+                testNumbers(unchecked((long)0x000000000e20dd53), unchecked((long)0x000000b05833c7cf));
+                testNumbers(unchecked((long)0x00000000e5733fb8), unchecked((long)0x0000008eae18a855));
+                testNumbers(unchecked((long)0x000000005db1c271), unchecked((long)0x000000c4a2f7c27d));
+                testNumbers(unchecked((long)0x0000000007add22a), unchecked((long)0x00000ed9fd23dc3e));
+                testNumbers(unchecked((long)0x000000002239d1d5), unchecked((long)0x0000a1ae07a62635));
+                testNumbers(unchecked((long)0x00000000410d4d58), unchecked((long)0x0000c05c5205bed2));
+                testNumbers(unchecked((long)0x000000004c3c435e), unchecked((long)0x00001e30c1bf628a));
+                testNumbers(unchecked((long)0x00000000096f44d5), unchecked((long)0x005488c521a6072b));
+                testNumbers(unchecked((long)0x0000000017f28913), unchecked((long)0x00796ff3891c44ff));
+                testNumbers(unchecked((long)0x0000000065be69cf), unchecked((long)0x00dd5c6f9b3f3119));
+                testNumbers(unchecked((long)0x000000002200f221), unchecked((long)0x00ab6c98c90cfe9d));
+                testNumbers(unchecked((long)0x00000000d48bee1a), unchecked((long)0x64b76d7491a58799));
+                testNumbers(unchecked((long)0x000000006cb93100), unchecked((long)0xa515fe27402dad45));
+                testNumbers(unchecked((long)0x00000000bed95abe), unchecked((long)0xc9924098acc74be9));
+                testNumbers(unchecked((long)0x0000000092781a2e), unchecked((long)0x67ada9ef3f9e39b7));
+                testNumbers(unchecked((long)0x000000e3aafcdae2), unchecked((long)0x000000000000009c));
+                testNumbers(unchecked((long)0x000000d8dad80c34), unchecked((long)0x0000000000000099));
+                testNumbers(unchecked((long)0x000000addcd074d6), unchecked((long)0x00000000000000ea));
+                testNumbers(unchecked((long)0x00000096735bc25a), unchecked((long)0x00000000000000ba));
+                testNumbers(unchecked((long)0x000000f492ef7446), unchecked((long)0x00000000000039b1));
+                testNumbers(unchecked((long)0x000000bc86816119), unchecked((long)0x0000000000001520));
+                testNumbers(unchecked((long)0x00000060a36818e7), unchecked((long)0x000000000000c5a8));
+                testNumbers(unchecked((long)0x000000317121d508), unchecked((long)0x000000000000ac3d));
+                testNumbers(unchecked((long)0x0000004abfdaf232), unchecked((long)0x00000000005cea57));
+                testNumbers(unchecked((long)0x000000acc458f392), unchecked((long)0x0000000000a9c3e3));
+                testNumbers(unchecked((long)0x0000001020993532), unchecked((long)0x0000000000df6042));
+                testNumbers(unchecked((long)0x000000ad25b80abb), unchecked((long)0x0000000000cec15b));
+                testNumbers(unchecked((long)0x0000002305d2c443), unchecked((long)0x000000002a26131c));
+                testNumbers(unchecked((long)0x00000007c42e2ce0), unchecked((long)0x000000009768024f));
+                testNumbers(unchecked((long)0x00000076f674816c), unchecked((long)0x000000008d33c7b4));
+                testNumbers(unchecked((long)0x000000bf567b23bc), unchecked((long)0x00000000ef264890));
+                testNumbers(unchecked((long)0x000000e3283681a0), unchecked((long)0x0000002e66850719));
+                testNumbers(unchecked((long)0x000000011fe13754), unchecked((long)0x00000066fad0b407));
+                testNumbers(unchecked((long)0x00000052f259009f), unchecked((long)0x000000a2886ef414));
+                testNumbers(unchecked((long)0x000000a9ebb540fc), unchecked((long)0x0000009d27ba694f));
+                testNumbers(unchecked((long)0x00000083af60d7eb), unchecked((long)0x0000b6f2a0f51f4c));
+                testNumbers(unchecked((long)0x000000f2ec42d13a), unchecked((long)0x000046855f279407));
+                testNumbers(unchecked((long)0x00000094e71cb562), unchecked((long)0x00002d9566618e56));
+                testNumbers(unchecked((long)0x000000c0ee690ddc), unchecked((long)0x000054295c8ca584));
+                testNumbers(unchecked((long)0x0000002683cd5206), unchecked((long)0x00a5a2d269bcd188));
+                testNumbers(unchecked((long)0x0000002e77038305), unchecked((long)0x00c727f0f3787e22));
+                testNumbers(unchecked((long)0x0000008323b9d026), unchecked((long)0x00fed29f8575c120));
+                testNumbers(unchecked((long)0x0000007b3231f0fc), unchecked((long)0x0091080854b27d3e));
+                testNumbers(unchecked((long)0x00000084522a7708), unchecked((long)0x91ba8f22fccd6222));
+                testNumbers(unchecked((long)0x000000afb1b50d90), unchecked((long)0x3261a532b65c7838));
+                testNumbers(unchecked((long)0x0000002c65e838c6), unchecked((long)0x5b858452c9bf6f39));
+                testNumbers(unchecked((long)0x000000219e837734), unchecked((long)0x97873bed5bb0a44b));
+                testNumbers(unchecked((long)0x00009f133e2f116f), unchecked((long)0x0000000000000073));
+                testNumbers(unchecked((long)0x0000887577574766), unchecked((long)0x0000000000000048));
+                testNumbers(unchecked((long)0x0000ba4c778d4aa8), unchecked((long)0x000000000000003a));
+                testNumbers(unchecked((long)0x00002683df421474), unchecked((long)0x0000000000000056));
+                testNumbers(unchecked((long)0x00006ff76294c275), unchecked((long)0x00000000000089f7));
+                testNumbers(unchecked((long)0x0000fdf053abefa2), unchecked((long)0x000000000000eb65));
+                testNumbers(unchecked((long)0x0000ea4b254b24eb), unchecked((long)0x000000000000ba27));
+                testNumbers(unchecked((long)0x000009f7ce21b811), unchecked((long)0x000000000000e8f6));
+                testNumbers(unchecked((long)0x00009cc645fa08a1), unchecked((long)0x0000000000a29ea3));
+                testNumbers(unchecked((long)0x0000726f9a9f816e), unchecked((long)0x000000000070dce1));
+                testNumbers(unchecked((long)0x0000a4be34825ef6), unchecked((long)0x0000000000bb2be7));
+                testNumbers(unchecked((long)0x000057ff147cb7c1), unchecked((long)0x0000000000e255af));
+                testNumbers(unchecked((long)0x0000ab9d6f546dd4), unchecked((long)0x000000007e2772a5));
+                testNumbers(unchecked((long)0x0000b148e3446e89), unchecked((long)0x0000000051ed3c28));
+                testNumbers(unchecked((long)0x00001e3abfe9725e), unchecked((long)0x00000000d4dec3f4));
+                testNumbers(unchecked((long)0x0000f61bcaba115e), unchecked((long)0x00000000fade149f));
+                testNumbers(unchecked((long)0x0000ae642b9a6626), unchecked((long)0x000000d8de0e0b9a));
+                testNumbers(unchecked((long)0x00009d015a13c8ae), unchecked((long)0x000000afc8827997));
+                testNumbers(unchecked((long)0x0000ecc72cc2df89), unchecked((long)0x00000070d47ec7c4));
+                testNumbers(unchecked((long)0x0000fdbf05894fd2), unchecked((long)0x00000012aec393bd));
+                testNumbers(unchecked((long)0x0000cd7675a70874), unchecked((long)0x0000d7d696a62cbc));
+                testNumbers(unchecked((long)0x0000fad44a89216d), unchecked((long)0x0000cb8cfc8ada4c));
+                testNumbers(unchecked((long)0x0000f41eb5363551), unchecked((long)0x00009c040aa7775e));
+                testNumbers(unchecked((long)0x00003c02d93e01f6), unchecked((long)0x0000f1f4e68a14f8));
+                testNumbers(unchecked((long)0x0000e0d99954b598), unchecked((long)0x00b2a2de4e453485));
+                testNumbers(unchecked((long)0x0000a6081be866d9), unchecked((long)0x00f2a12e845e4f2e));
+                testNumbers(unchecked((long)0x0000ae56a5680dfd), unchecked((long)0x00c96cd7c15d5bec));
+                testNumbers(unchecked((long)0x0000360363e37938), unchecked((long)0x00d4ed572e1937e0));
+                testNumbers(unchecked((long)0x00001f052aebf185), unchecked((long)0x3584e582d1c6db1a));
+                testNumbers(unchecked((long)0x00003fac9c7b3d1b), unchecked((long)0xa4b120f080d69113));
+                testNumbers(unchecked((long)0x00005330d51c3217), unchecked((long)0xc16dd32ffd822c0e));
+                testNumbers(unchecked((long)0x0000cd0694ff5ab0), unchecked((long)0x29673fe67245fbfc));
+                testNumbers(unchecked((long)0x0098265e5a308523), unchecked((long)0x000000000000007d));
+                testNumbers(unchecked((long)0x00560863350df217), unchecked((long)0x00000000000000c8));
+                testNumbers(unchecked((long)0x00798ce804d829a1), unchecked((long)0x00000000000000b1));
+                testNumbers(unchecked((long)0x007994c0051256fd), unchecked((long)0x000000000000005c));
+                testNumbers(unchecked((long)0x00ff1a2838e69f42), unchecked((long)0x0000000000003c16));
+                testNumbers(unchecked((long)0x009e7e95ac5de2c7), unchecked((long)0x000000000000ed49));
+                testNumbers(unchecked((long)0x00fd6867eabba5c0), unchecked((long)0x000000000000c689));
+                testNumbers(unchecked((long)0x009d1632daf20de0), unchecked((long)0x000000000000b74f));
+                testNumbers(unchecked((long)0x00ee29d8f76d4e9c), unchecked((long)0x00000000008020d4));
+                testNumbers(unchecked((long)0x0089e03ecf8daa0a), unchecked((long)0x00000000003e7587));
+                testNumbers(unchecked((long)0x00115763be4beb44), unchecked((long)0x000000000088f762));
+                testNumbers(unchecked((long)0x00815cfc87c427d0), unchecked((long)0x00000000009eec06));
+                testNumbers(unchecked((long)0x001d9c3c9ded0c1a), unchecked((long)0x00000000b9f6d331));
+                testNumbers(unchecked((long)0x00932225412f1222), unchecked((long)0x00000000130ff743));
+                testNumbers(unchecked((long)0x00fe82151e2e0bf3), unchecked((long)0x00000000781cd6f9));
+                testNumbers(unchecked((long)0x002222abb5061b12), unchecked((long)0x000000000491f1df));
+                testNumbers(unchecked((long)0x0012ce0cf0452748), unchecked((long)0x000000a8566274aa));
+                testNumbers(unchecked((long)0x00e570484e9937e1), unchecked((long)0x000000ac81f171be));
+                testNumbers(unchecked((long)0x00eb371f7f8f514e), unchecked((long)0x000000df0248189c));
+                testNumbers(unchecked((long)0x003777a7cc43dfd7), unchecked((long)0x0000003a7b8eaf40));
+                testNumbers(unchecked((long)0x00e181db76238786), unchecked((long)0x00004126e572a568));
+                testNumbers(unchecked((long)0x00ac1df87977e122), unchecked((long)0x0000e1e8cfde6678));
+                testNumbers(unchecked((long)0x001c858763a2c23b), unchecked((long)0x000004ef61f3964f));
+                testNumbers(unchecked((long)0x00bd786bbb71ce46), unchecked((long)0x00002cda097a464f));
+                testNumbers(unchecked((long)0x00a7a6de21a46360), unchecked((long)0x00007afda16f98c3));
+                testNumbers(unchecked((long)0x006fed70a6ccfdf2), unchecked((long)0x009771441e8e00e8));
+                testNumbers(unchecked((long)0x005ad2782dcd5e60), unchecked((long)0x000d170d518385f6));
+                testNumbers(unchecked((long)0x001fd67b153bc9b9), unchecked((long)0x007b3366dff66c6c));
+                testNumbers(unchecked((long)0x00bf00203beb73f4), unchecked((long)0x693495fefab1c77e));
+                testNumbers(unchecked((long)0x002faac1b1b068f8), unchecked((long)0x1cb11cc5c3aaff86));
+                testNumbers(unchecked((long)0x00bb63cfbffe7648), unchecked((long)0x84f5b0c583f9e77b));
+                testNumbers(unchecked((long)0x00615db89673241c), unchecked((long)0x8de5f125247eba0f));
+                testNumbers(unchecked((long)0x9be183a6b293dffe), unchecked((long)0x0000000000000072));
+                testNumbers(unchecked((long)0xa3df9b76d8a51b19), unchecked((long)0x00000000000000c4));
+                testNumbers(unchecked((long)0xb4cc300f0ea7566d), unchecked((long)0x000000000000007e));
+                testNumbers(unchecked((long)0xfdac12a8e23e16e7), unchecked((long)0x0000000000000015));
+                testNumbers(unchecked((long)0xc0805405aadc0f47), unchecked((long)0x00000000000019d4));
+                testNumbers(unchecked((long)0x843a391f8d9f8972), unchecked((long)0x000000000000317a));
+                testNumbers(unchecked((long)0x5a0d124c427ed453), unchecked((long)0x00000000000034fe));
+                testNumbers(unchecked((long)0x8631150f34008f1b), unchecked((long)0x0000000000002ecd));
+                testNumbers(unchecked((long)0x3ff4c18715ad3a76), unchecked((long)0x000000000072d22a));
+                testNumbers(unchecked((long)0x3ef93e5a649422bd), unchecked((long)0x0000000000db5c60));
+                testNumbers(unchecked((long)0x6bdd1056ae58fe0e), unchecked((long)0x0000000000805c75));
+                testNumbers(unchecked((long)0xeff1fa30f3ad9ded), unchecked((long)0x00000000000c83ca));
+                testNumbers(unchecked((long)0xbbc143ac147e56a9), unchecked((long)0x00000000161179b7));
+                testNumbers(unchecked((long)0x0829dde88caa2e45), unchecked((long)0x000000001443ab62));
+                testNumbers(unchecked((long)0x97ac43ff797a4514), unchecked((long)0x0000000033eef42b));
+                testNumbers(unchecked((long)0x703e9cdf96a148aa), unchecked((long)0x000000008e08f3d8));
+                testNumbers(unchecked((long)0x75cbb739b54e2ad6), unchecked((long)0x0000007a8b12628c));
+                testNumbers(unchecked((long)0x91e42fafe97d638f), unchecked((long)0x0000000fbe867c51));
+                testNumbers(unchecked((long)0x9159d77deec116c1), unchecked((long)0x00000096c0c774fc));
+                testNumbers(unchecked((long)0xb59dbb4c15761d88), unchecked((long)0x0000004a033a73e7));
+                testNumbers(unchecked((long)0xab668e9783af9617), unchecked((long)0x00005aa18404076c));
+                testNumbers(unchecked((long)0x54c68e5b5c4127df), unchecked((long)0x0000f2934fd8dd1f));
+                testNumbers(unchecked((long)0xf490d3936184c9f9), unchecked((long)0x00004007477e2110));
+                testNumbers(unchecked((long)0x349e577c9d5c44e2), unchecked((long)0x0000bdb2235af963));
+                testNumbers(unchecked((long)0x58f3ac26cdafde28), unchecked((long)0x0017d4f4ade9ec35));
+                testNumbers(unchecked((long)0xa4a263c316d21f4c), unchecked((long)0x00a7ec1e6fda834b));
+                testNumbers(unchecked((long)0x6ab14771c448666f), unchecked((long)0x005b0f49593c3a27));
+                testNumbers(unchecked((long)0x15f392c3602aa4f7), unchecked((long)0x0018af171045f88e));
+                testNumbers(unchecked((long)0xf17de69c0063f62c), unchecked((long)0xee2a164c2c3a46f8));
+                testNumbers(unchecked((long)0xf34b743eeff8e5c6), unchecked((long)0x4f4067f1a0e404ad));
+                testNumbers(unchecked((long)0xee0296f678756647), unchecked((long)0xf1bbfdc6f0280d36));
+                testNumbers(unchecked((long)0x65c33db0c952b829), unchecked((long)0xa7ab9c39dcffbcf3));
+                Console.WriteLine("All tests passed.");
+                return 100;
+            }
+            catch (DivideByZeroException)
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldc_div.cs b/tests/src/JIT/Methodical/int64/signed/s_ldc_div.cs
new file mode 100644 (file)
index 0000000..e0761a4
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool check(long op1, long op2, long product, bool overflow)
+        {
+            Console.Write("Dividing {0} by {1}...", product, op1);
+            try
+            {
+                if (product / op1 != op2)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (DivideByZeroException)
+            {
+                Console.WriteLine("divide by zero.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!check(0x000000007fffffff, 0x000000007fffffff, 0x3fffffff00000001, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x000000007fffffff, 0x7fffffff00000000, false))
+                goto fail;
+            if (!check(0x3fffffffffffffff, 0x0000000000000002, 0x7ffffffffffffffe, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0xfffffffffffffffe), 2, false))
+                goto fail;
+            if (!check(0x0000000000100000, 0x0000001000000000, 0x0100000000000000, false))
+                goto fail;
+            if (!check(2, 0, 1, false))
+                goto fail;
+            if (!check(-2, 0, 1, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0x8000000000000001), 0x7fffffffffffffff, false))
+                goto fail;
+            if (!check(0, 0, 1000, true))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldc_mul.cs b/tests/src/JIT/Methodical/int64/signed/s_ldc_mul.cs
new file mode 100644 (file)
index 0000000..661f576
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool check(long op1, long op2, long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", op1, op2);
+            try
+            {
+                if (unchecked(op1 * op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!check(0x000000007fffffff, 0x000000007fffffff, 0x3fffffff00000001, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x000000007fffffff, 0x7fffffff00000000, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x0000000100000000, 0x0000000000000000, false))
+                goto fail;
+            if (!check(0x3fffffffffffffff, 0x0000000000000002, 0x7ffffffffffffffe, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0xfffffffffffffffe), 2, false))
+                goto fail;
+            if (!check(0x0000000000100000, 0x0000001000000000, 0x0100000000000000, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0x8000000000000001), 0x7fffffffffffffff, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldc_mulovf.cs b/tests/src/JIT/Methodical/int64/signed/s_ldc_mulovf.cs
new file mode 100644 (file)
index 0000000..b7c9228
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool check(long op1, long op2, long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", op1, op2);
+            try
+            {
+                if (checked(op1 * op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!check(0x000000007fffffff, 0x000000007fffffff, 0x3fffffff00000001, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x000000007fffffff, 0x7fffffff00000000, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x0000000100000000, 0x0000000000000000, true))
+                goto fail;
+            if (!check(0x3fffffffffffffff, 0x0000000000000002, 0x7ffffffffffffffe, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0xfffffffffffffffe), 2, false))
+                goto fail;
+            if (!check(0x0000000000100000, 0x0000001000000000, 0x0100000000000000, false))
+                goto fail;
+            if (!check(unchecked((long)0xffffffffffffffff), unchecked((long)0x8000000000000001), 0x7fffffffffffffff, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldfld_mul.cs b/tests/src/JIT/Methodical/int64/signed/s_ldfld_mul.cs
new file mode 100644 (file)
index 0000000..3a8ceb8
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private long _op1, _op2;
+        private bool check(long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", _op1, _op2);
+            try
+            {
+                if (unchecked(_op1 * _op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            Test app = new Test();
+            app._op1 = 0x000000007fffffff;
+            app._op2 = 0x000000007fffffff;
+            if (!app.check(0x3fffffff00000001, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x000000007fffffff;
+            if (!app.check(0x7fffffff00000000, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x0000000100000000;
+            if (!app.check(0x0000000000000000, false))
+                goto fail;
+            app._op1 = 0x3fffffffffffffff;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0x7ffffffffffffffe, false))
+                goto fail;
+            app._op1 = unchecked((long)0xffffffffffffffff);
+            app._op2 = unchecked((long)0xfffffffffffffffe);
+            if (!app.check(2, false))
+                goto fail;
+            app._op1 = 0x0000000000100000;
+            app._op2 = 0x0000001000000000;
+            if (!app.check(0x0100000000000000, false))
+                goto fail;
+            app._op1 = unchecked((long)0xffffffffffffffff);
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(0x7fffffffffffffff, false))
+                goto fail;
+            app._op1 = unchecked((long)0xfffffffffffffffe);
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(unchecked((long)0xfffffffffffffffe), false))
+                goto fail;
+            app._op1 = 2;
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(2, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldfld_mulovf.cs b/tests/src/JIT/Methodical/int64/signed/s_ldfld_mulovf.cs
new file mode 100644 (file)
index 0000000..5d0b43f
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private long _op1,_op2;
+        private bool check(long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", _op1, _op2);
+            try
+            {
+                if (checked(_op1 * _op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            Test app = new Test();
+            app._op1 = 0x000000007fffffff;
+            app._op2 = 0x000000007fffffff;
+            if (!app.check(0x3fffffff00000001, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x000000007fffffff;
+            if (!app.check(0x7fffffff00000000, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x0000000100000000;
+            if (!app.check(0x0000000000000000, true))
+                goto fail;
+            app._op1 = 0x3fffffffffffffff;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0x7ffffffffffffffe, false))
+                goto fail;
+            app._op1 = unchecked((long)0xffffffffffffffff);
+            app._op2 = unchecked((long)0xfffffffffffffffe);
+            if (!app.check(2, false))
+                goto fail;
+            app._op1 = 0x0000000000100000;
+            app._op2 = 0x0000001000000000;
+            if (!app.check(0x0100000000000000, false))
+                goto fail;
+            app._op1 = unchecked((long)0xffffffffffffffff);
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(0x7fffffffffffffff, false))
+                goto fail;
+            app._op1 = unchecked((long)0xfffffffffffffffe);
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(0, true))
+                goto fail;
+            app._op1 = 2;
+            app._op2 = unchecked((long)0x8000000000000001);
+            if (!app.check(0, true))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldsfld_mul.cs b/tests/src/JIT/Methodical/int64/signed/s_ldsfld_mul.cs
new file mode 100644 (file)
index 0000000..ce376c5
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static long s_op1,s_op2;
+        private static bool check(long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", s_op1, s_op2);
+            try
+            {
+                if (unchecked(s_op1 * s_op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            s_op1 = 0x000000007fffffff;
+            s_op2 = 0x000000007fffffff;
+            if (!check(0x3fffffff00000001, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x000000007fffffff;
+            if (!check(0x7fffffff00000000, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x0000000100000000;
+            if (!check(0x0000000000000000, false))
+                goto fail;
+            s_op1 = 0x3fffffffffffffff;
+            s_op2 = 0x0000000000000002;
+            if (!check(0x7ffffffffffffffe, false))
+                goto fail;
+            s_op1 = unchecked((long)0xffffffffffffffff);
+            s_op2 = unchecked((long)0xfffffffffffffffe);
+            if (!check(2, false))
+                goto fail;
+            s_op1 = 0x0000000000100000;
+            s_op2 = 0x0000001000000000;
+            if (!check(0x0100000000000000, false))
+                goto fail;
+            s_op1 = unchecked((long)0xffffffffffffffff);
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(0x7fffffffffffffff, false))
+                goto fail;
+            s_op1 = unchecked((long)0xfffffffffffffffe);
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(unchecked((long)0xfffffffffffffffe), false))
+                goto fail;
+            s_op1 = 2;
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(2, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_ldsfld_mulovf.cs b/tests/src/JIT/Methodical/int64/signed/s_ldsfld_mulovf.cs
new file mode 100644 (file)
index 0000000..91935e7
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static long s_op1,s_op2;
+        private static bool check(long product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", s_op1, s_op2);
+            try
+            {
+                if (checked(s_op1 * s_op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            s_op1 = 0x000000007fffffff;
+            s_op2 = 0x000000007fffffff;
+            if (!check(0x3fffffff00000001, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x000000007fffffff;
+            if (!check(0x7fffffff00000000, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x0000000100000000;
+            if (!check(0x0000000000000000, true))
+                goto fail;
+            s_op1 = 0x3fffffffffffffff;
+            s_op2 = 0x0000000000000002;
+            if (!check(0x7ffffffffffffffe, false))
+                goto fail;
+            s_op1 = unchecked((long)0xffffffffffffffff);
+            s_op2 = unchecked((long)0xfffffffffffffffe);
+            if (!check(2, false))
+                goto fail;
+            s_op1 = 0x0000000000100000;
+            s_op2 = 0x0000001000000000;
+            if (!check(0x0100000000000000, false))
+                goto fail;
+            s_op1 = unchecked((long)0xffffffffffffffff);
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(0x7fffffffffffffff, false))
+                goto fail;
+            s_op1 = unchecked((long)0xfffffffffffffffe);
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(0, true))
+                goto fail;
+            s_op1 = 2;
+            s_op2 = unchecked((long)0x8000000000000001);
+            if (!check(0, true))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/s_muldiv.cs b/tests/src/JIT/Methodical/int64/signed/s_muldiv.cs
new file mode 100644 (file)
index 0000000..c70950e
--- /dev/null
@@ -0,0 +1,362 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static long s_A,s_B;
+
+        private static void testNumbers(long a, long b)
+        {
+            s_A = a;
+            s_B = b;
+            long c = 0;
+            try
+            {
+                c = checked(a * b);
+            }
+            catch (OverflowException)
+            {
+                bool negative = false;
+                ulong au, bu;
+
+                if (a < 0)
+                {
+                    negative = !negative;
+                    au = checked((ulong)(-a));
+                }
+                else
+                {
+                    au = checked((ulong)a);
+                }
+                if (b < 0)
+                {
+                    negative = !negative;
+                    bu = checked((ulong)(-b));
+                }
+                else
+                {
+                    bu = checked((ulong)b);
+                }
+
+                ulong AH = au >> 32;
+                ulong AL = au & 0xffffffff;
+                ulong BH = bu >> 32;
+                ulong BL = bu & 0xffffffff;
+
+                if (checked(AH * 0x100000000 + AL) != au)
+                    throw new Exception();
+                if (checked(BH * 0x100000000 + BL) != bu)
+                    throw new Exception();
+
+                if (AH == 0 || BH == 0)
+                {
+                    ulong sum = checked(AL * BH + AH * BL);
+                    if (sum < 0x80000000)
+                    {
+                        sum = checked(sum * 0x100000000);
+                        ulong T1 = checked(AL * BL);
+                        if (T1 < 0x80000000)
+                        {
+                            if (T1 <= checked(0xffffffffffffffff - sum))
+                                throw new Exception();
+                        }
+                    }
+                }
+                return;
+            }
+            try
+            {
+                if (c / b != a)
+                    throw new Exception();
+            }
+            catch (DivideByZeroException)
+            {
+                if (b != 0)
+                    throw new Exception();
+            }
+            try
+            {
+                if (c / a != b)
+                    throw new Exception();
+            }
+            catch (DivideByZeroException)
+            {
+                if (a != 0)
+                    throw new Exception();
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                testNumbers(unchecked((long)0x0000000000000009), unchecked((long)0x00000000000000b8));
+                testNumbers(unchecked((long)0x0000000000000009), unchecked((long)0x00000000000000f9));
+                testNumbers(unchecked((long)0x000000000000006e), unchecked((long)0x0000000000000093));
+                testNumbers(unchecked((long)0x000000000000001e), unchecked((long)0x0000000000000086));
+                testNumbers(unchecked((long)0x00000000000000cc), unchecked((long)0x000000000000583f));
+                testNumbers(unchecked((long)0x00000000000000c9), unchecked((long)0x000000000000a94c));
+                testNumbers(unchecked((long)0x0000000000000054), unchecked((long)0x0000000000002d06));
+                testNumbers(unchecked((long)0x0000000000000030), unchecked((long)0x0000000000009921));
+                testNumbers(unchecked((long)0x000000000000001d), unchecked((long)0x0000000000450842));
+                testNumbers(unchecked((long)0x000000000000002a), unchecked((long)0x0000000000999f6c));
+                testNumbers(unchecked((long)0x00000000000000c5), unchecked((long)0x000000000090faa7));
+                testNumbers(unchecked((long)0x0000000000000050), unchecked((long)0x000000000069de08));
+                testNumbers(unchecked((long)0x000000000000009a), unchecked((long)0x000000000cd715be));
+                testNumbers(unchecked((long)0x0000000000000039), unchecked((long)0x0000000016a61eb5));
+                testNumbers(unchecked((long)0x00000000000000e0), unchecked((long)0x0000000095575fef));
+                testNumbers(unchecked((long)0x0000000000000093), unchecked((long)0x00000000209e58c5));
+                testNumbers(unchecked((long)0x000000000000003b), unchecked((long)0x0000000c3c34b48c));
+                testNumbers(unchecked((long)0x00000000000000c2), unchecked((long)0x0000006a671c470f));
+                testNumbers(unchecked((long)0x000000000000004b), unchecked((long)0x000000f538cede2b));
+                testNumbers(unchecked((long)0x0000000000000099), unchecked((long)0x0000005ba885d43b));
+                testNumbers(unchecked((long)0x0000000000000068), unchecked((long)0x00009f692f98ac45));
+                testNumbers(unchecked((long)0x00000000000000d9), unchecked((long)0x00008d5eaa7f0a8e));
+                testNumbers(unchecked((long)0x00000000000000ac), unchecked((long)0x0000ba1316512e4c));
+                testNumbers(unchecked((long)0x000000000000001c), unchecked((long)0x00008c4fbf2f14aa));
+                testNumbers(unchecked((long)0x00000000000000c0), unchecked((long)0x0069a9eb9a9bc822));
+                testNumbers(unchecked((long)0x0000000000000074), unchecked((long)0x003f8f5a893de200));
+                testNumbers(unchecked((long)0x0000000000000027), unchecked((long)0x000650eb1747a5bc));
+                testNumbers(unchecked((long)0x00000000000000d9), unchecked((long)0x00d3d50809c70fda));
+                testNumbers(unchecked((long)0x00000000000000c0), unchecked((long)0xac6556a4ca94513e));
+                testNumbers(unchecked((long)0x0000000000000020), unchecked((long)0xa697fcbfd6d232d1));
+                testNumbers(unchecked((long)0x000000000000009c), unchecked((long)0xc4421a4f5147b9b8));
+                testNumbers(unchecked((long)0x000000000000009e), unchecked((long)0xc5ef494112a7b33f));
+                testNumbers(unchecked((long)0x000000000000f7fa), unchecked((long)0x00000000000000af));
+                testNumbers(unchecked((long)0x000000000000ad17), unchecked((long)0x00000000000000e8));
+                testNumbers(unchecked((long)0x000000000000c9c4), unchecked((long)0x0000000000000045));
+                testNumbers(unchecked((long)0x000000000000a704), unchecked((long)0x0000000000000012));
+                testNumbers(unchecked((long)0x000000000000c55b), unchecked((long)0x000000000000a33a));
+                testNumbers(unchecked((long)0x000000000000ab88), unchecked((long)0x0000000000009a3c));
+                testNumbers(unchecked((long)0x000000000000a539), unchecked((long)0x000000000000cf3a));
+                testNumbers(unchecked((long)0x0000000000005890), unchecked((long)0x000000000000eec8));
+                testNumbers(unchecked((long)0x000000000000e9e2), unchecked((long)0x0000000000fe7c46));
+                testNumbers(unchecked((long)0x0000000000007303), unchecked((long)0x0000000000419f2a));
+                testNumbers(unchecked((long)0x000000000000e105), unchecked((long)0x000000000013f913));
+                testNumbers(unchecked((long)0x0000000000008191), unchecked((long)0x0000000000fa2458));
+                testNumbers(unchecked((long)0x00000000000006d9), unchecked((long)0x0000000091cf14f7));
+                testNumbers(unchecked((long)0x000000000000bdb1), unchecked((long)0x0000000086c2a97c));
+                testNumbers(unchecked((long)0x000000000000e905), unchecked((long)0x0000000064f702f4));
+                testNumbers(unchecked((long)0x0000000000002fdc), unchecked((long)0x00000000f059caf6));
+                testNumbers(unchecked((long)0x000000000000f8fd), unchecked((long)0x00000013f0265b1e));
+                testNumbers(unchecked((long)0x000000000000e8b8), unchecked((long)0x0000000aa69a6308));
+                testNumbers(unchecked((long)0x0000000000003d00), unchecked((long)0x000000fbcb67879b));
+                testNumbers(unchecked((long)0x000000000000aa46), unchecked((long)0x00000085c3d371d5));
+                testNumbers(unchecked((long)0x0000000000005f60), unchecked((long)0x000008cde4a63203));
+                testNumbers(unchecked((long)0x00000000000092b5), unchecked((long)0x00007ca86ba2f30e));
+                testNumbers(unchecked((long)0x00000000000093c6), unchecked((long)0x0000a2d73fc4eac0));
+                testNumbers(unchecked((long)0x0000000000004156), unchecked((long)0x000006dbd08f2fda));
+                testNumbers(unchecked((long)0x0000000000004597), unchecked((long)0x006cfb0ba5962826));
+                testNumbers(unchecked((long)0x0000000000006bac), unchecked((long)0x001e79315071480f));
+                testNumbers(unchecked((long)0x0000000000002c3a), unchecked((long)0x0092f12cbd82df69));
+                testNumbers(unchecked((long)0x0000000000009859), unchecked((long)0x00b0f0cd9dc019f2));
+                testNumbers(unchecked((long)0x000000000000b37f), unchecked((long)0x4966447d15850076));
+                testNumbers(unchecked((long)0x0000000000005e34), unchecked((long)0x7c1869c9ed2cad38));
+                testNumbers(unchecked((long)0x0000000000005c54), unchecked((long)0x7cee70ee82837a08));
+                testNumbers(unchecked((long)0x000000000000967f), unchecked((long)0x4eb98adf4b8b0d32));
+                testNumbers(unchecked((long)0x0000000000fd2919), unchecked((long)0x000000000000005d));
+                testNumbers(unchecked((long)0x0000000000abd5b1), unchecked((long)0x0000000000000098));
+                testNumbers(unchecked((long)0x0000000000ab1887), unchecked((long)0x00000000000000ef));
+                testNumbers(unchecked((long)0x000000000096034a), unchecked((long)0x000000000000002f));
+                testNumbers(unchecked((long)0x0000000000d5bb94), unchecked((long)0x00000000000057d2));
+                testNumbers(unchecked((long)0x0000000000d7b2cb), unchecked((long)0x00000000000080f5));
+                testNumbers(unchecked((long)0x00000000004ccc6d), unchecked((long)0x000000000000087c));
+                testNumbers(unchecked((long)0x0000000000ec0c50), unchecked((long)0x000000000000bdff));
+                testNumbers(unchecked((long)0x00000000008a6865), unchecked((long)0x000000000076c014));
+                testNumbers(unchecked((long)0x0000000000ac38dd), unchecked((long)0x0000000000f12b09));
+                testNumbers(unchecked((long)0x0000000000615e2a), unchecked((long)0x0000000000e7cbf8));
+                testNumbers(unchecked((long)0x00000000000e214f), unchecked((long)0x00000000005b8e2f));
+                testNumbers(unchecked((long)0x00000000003bd7c6), unchecked((long)0x00000000c1db4e46));
+                testNumbers(unchecked((long)0x0000000000ae208d), unchecked((long)0x0000000001c9aa7a));
+                testNumbers(unchecked((long)0x00000000008a9cef), unchecked((long)0x0000000003930b07));
+                testNumbers(unchecked((long)0x000000000036b866), unchecked((long)0x00000000d64b7bef));
+                testNumbers(unchecked((long)0x0000000000d337cd), unchecked((long)0x000000a2b45fb7de));
+                testNumbers(unchecked((long)0x0000000000024471), unchecked((long)0x0000005c5de3da89));
+                testNumbers(unchecked((long)0x0000000000012b15), unchecked((long)0x0000007cd40030fe));
+                testNumbers(unchecked((long)0x0000000000d38af2), unchecked((long)0x0000005905921572));
+                testNumbers(unchecked((long)0x0000000000aca0d7), unchecked((long)0x0000c632301abeb8));
+                testNumbers(unchecked((long)0x00000000004eadc2), unchecked((long)0x00006a1ebf37403c));
+                testNumbers(unchecked((long)0x00000000005d909c), unchecked((long)0x00004021bfa15862));
+                testNumbers(unchecked((long)0x0000000000710e08), unchecked((long)0x0000e9a1a030b230));
+                testNumbers(unchecked((long)0x0000000000478b9b), unchecked((long)0x00804add8afc31d9));
+                testNumbers(unchecked((long)0x00000000005754ed), unchecked((long)0x00af85e7ebb1ce33));
+                testNumbers(unchecked((long)0x00000000003ab44e), unchecked((long)0x00f41b9f70360f78));
+                testNumbers(unchecked((long)0x00000000007aa129), unchecked((long)0x00eb6e4eddf7eb87));
+                testNumbers(unchecked((long)0x00000000003b036f), unchecked((long)0x333874e4330fbfa4));
+                testNumbers(unchecked((long)0x0000000000a33186), unchecked((long)0xec8607412503fc4c));
+                testNumbers(unchecked((long)0x00000000009af471), unchecked((long)0xe7ad0935fdbff151));
+                testNumbers(unchecked((long)0x0000000000c04e8c), unchecked((long)0x58ee406ab936ac24));
+                testNumbers(unchecked((long)0x0000000054fdd28b), unchecked((long)0x0000000000000034));
+                testNumbers(unchecked((long)0x0000000033736b36), unchecked((long)0x00000000000000fd));
+                testNumbers(unchecked((long)0x0000000069cfe4b7), unchecked((long)0x0000000000000026));
+                testNumbers(unchecked((long)0x00000000fd078d36), unchecked((long)0x00000000000000dc));
+                testNumbers(unchecked((long)0x0000000075cc3f36), unchecked((long)0x0000000000001617));
+                testNumbers(unchecked((long)0x00000000075d660e), unchecked((long)0x0000000000008511));
+                testNumbers(unchecked((long)0x0000000052acb037), unchecked((long)0x00000000000043cb));
+                testNumbers(unchecked((long)0x00000000a0db7bf5), unchecked((long)0x0000000000002c98));
+                testNumbers(unchecked((long)0x0000000083d4be11), unchecked((long)0x0000000000ba37c9));
+                testNumbers(unchecked((long)0x0000000083d04f94), unchecked((long)0x00000000003ddbd0));
+                testNumbers(unchecked((long)0x000000005ed41f6a), unchecked((long)0x0000000000eaf1d5));
+                testNumbers(unchecked((long)0x000000000e364a9a), unchecked((long)0x000000000085880c));
+                testNumbers(unchecked((long)0x0000000012657ecb), unchecked((long)0x00000000a88b8a68));
+                testNumbers(unchecked((long)0x000000009897a4ac), unchecked((long)0x0000000076707981));
+                testNumbers(unchecked((long)0x00000000469cd1cf), unchecked((long)0x00000000cf40f67a));
+                testNumbers(unchecked((long)0x00000000ee7444c8), unchecked((long)0x00000000d1b0d7de));
+                testNumbers(unchecked((long)0x00000000fbb6f547), unchecked((long)0x000000c1ef3c4d9b));
+                testNumbers(unchecked((long)0x000000000e20dd53), unchecked((long)0x000000b05833c7cf));
+                testNumbers(unchecked((long)0x00000000e5733fb8), unchecked((long)0x0000008eae18a855));
+                testNumbers(unchecked((long)0x000000005db1c271), unchecked((long)0x000000c4a2f7c27d));
+                testNumbers(unchecked((long)0x0000000007add22a), unchecked((long)0x00000ed9fd23dc3e));
+                testNumbers(unchecked((long)0x000000002239d1d5), unchecked((long)0x0000a1ae07a62635));
+                testNumbers(unchecked((long)0x00000000410d4d58), unchecked((long)0x0000c05c5205bed2));
+                testNumbers(unchecked((long)0x000000004c3c435e), unchecked((long)0x00001e30c1bf628a));
+                testNumbers(unchecked((long)0x00000000096f44d5), unchecked((long)0x005488c521a6072b));
+                testNumbers(unchecked((long)0x0000000017f28913), unchecked((long)0x00796ff3891c44ff));
+                testNumbers(unchecked((long)0x0000000065be69cf), unchecked((long)0x00dd5c6f9b3f3119));
+                testNumbers(unchecked((long)0x000000002200f221), unchecked((long)0x00ab6c98c90cfe9d));
+                testNumbers(unchecked((long)0x00000000d48bee1a), unchecked((long)0x64b76d7491a58799));
+                testNumbers(unchecked((long)0x000000006cb93100), unchecked((long)0xa515fe27402dad45));
+                testNumbers(unchecked((long)0x00000000bed95abe), unchecked((long)0xc9924098acc74be9));
+                testNumbers(unchecked((long)0x0000000092781a2e), unchecked((long)0x67ada9ef3f9e39b7));
+                testNumbers(unchecked((long)0x000000e3aafcdae2), unchecked((long)0x000000000000009c));
+                testNumbers(unchecked((long)0x000000d8dad80c34), unchecked((long)0x0000000000000099));
+                testNumbers(unchecked((long)0x000000addcd074d6), unchecked((long)0x00000000000000ea));
+                testNumbers(unchecked((long)0x00000096735bc25a), unchecked((long)0x00000000000000ba));
+                testNumbers(unchecked((long)0x000000f492ef7446), unchecked((long)0x00000000000039b1));
+                testNumbers(unchecked((long)0x000000bc86816119), unchecked((long)0x0000000000001520));
+                testNumbers(unchecked((long)0x00000060a36818e7), unchecked((long)0x000000000000c5a8));
+                testNumbers(unchecked((long)0x000000317121d508), unchecked((long)0x000000000000ac3d));
+                testNumbers(unchecked((long)0x0000004abfdaf232), unchecked((long)0x00000000005cea57));
+                testNumbers(unchecked((long)0x000000acc458f392), unchecked((long)0x0000000000a9c3e3));
+                testNumbers(unchecked((long)0x0000001020993532), unchecked((long)0x0000000000df6042));
+                testNumbers(unchecked((long)0x000000ad25b80abb), unchecked((long)0x0000000000cec15b));
+                testNumbers(unchecked((long)0x0000002305d2c443), unchecked((long)0x000000002a26131c));
+                testNumbers(unchecked((long)0x00000007c42e2ce0), unchecked((long)0x000000009768024f));
+                testNumbers(unchecked((long)0x00000076f674816c), unchecked((long)0x000000008d33c7b4));
+                testNumbers(unchecked((long)0x000000bf567b23bc), unchecked((long)0x00000000ef264890));
+                testNumbers(unchecked((long)0x000000e3283681a0), unchecked((long)0x0000002e66850719));
+                testNumbers(unchecked((long)0x000000011fe13754), unchecked((long)0x00000066fad0b407));
+                testNumbers(unchecked((long)0x00000052f259009f), unchecked((long)0x000000a2886ef414));
+                testNumbers(unchecked((long)0x000000a9ebb540fc), unchecked((long)0x0000009d27ba694f));
+                testNumbers(unchecked((long)0x00000083af60d7eb), unchecked((long)0x0000b6f2a0f51f4c));
+                testNumbers(unchecked((long)0x000000f2ec42d13a), unchecked((long)0x000046855f279407));
+                testNumbers(unchecked((long)0x00000094e71cb562), unchecked((long)0x00002d9566618e56));
+                testNumbers(unchecked((long)0x000000c0ee690ddc), unchecked((long)0x000054295c8ca584));
+                testNumbers(unchecked((long)0x0000002683cd5206), unchecked((long)0x00a5a2d269bcd188));
+                testNumbers(unchecked((long)0x0000002e77038305), unchecked((long)0x00c727f0f3787e22));
+                testNumbers(unchecked((long)0x0000008323b9d026), unchecked((long)0x00fed29f8575c120));
+                testNumbers(unchecked((long)0x0000007b3231f0fc), unchecked((long)0x0091080854b27d3e));
+                testNumbers(unchecked((long)0x00000084522a7708), unchecked((long)0x91ba8f22fccd6222));
+                testNumbers(unchecked((long)0x000000afb1b50d90), unchecked((long)0x3261a532b65c7838));
+                testNumbers(unchecked((long)0x0000002c65e838c6), unchecked((long)0x5b858452c9bf6f39));
+                testNumbers(unchecked((long)0x000000219e837734), unchecked((long)0x97873bed5bb0a44b));
+                testNumbers(unchecked((long)0x00009f133e2f116f), unchecked((long)0x0000000000000073));
+                testNumbers(unchecked((long)0x0000887577574766), unchecked((long)0x0000000000000048));
+                testNumbers(unchecked((long)0x0000ba4c778d4aa8), unchecked((long)0x000000000000003a));
+                testNumbers(unchecked((long)0x00002683df421474), unchecked((long)0x0000000000000056));
+                testNumbers(unchecked((long)0x00006ff76294c275), unchecked((long)0x00000000000089f7));
+                testNumbers(unchecked((long)0x0000fdf053abefa2), unchecked((long)0x000000000000eb65));
+                testNumbers(unchecked((long)0x0000ea4b254b24eb), unchecked((long)0x000000000000ba27));
+                testNumbers(unchecked((long)0x000009f7ce21b811), unchecked((long)0x000000000000e8f6));
+                testNumbers(unchecked((long)0x00009cc645fa08a1), unchecked((long)0x0000000000a29ea3));
+                testNumbers(unchecked((long)0x0000726f9a9f816e), unchecked((long)0x000000000070dce1));
+                testNumbers(unchecked((long)0x0000a4be34825ef6), unchecked((long)0x0000000000bb2be7));
+                testNumbers(unchecked((long)0x000057ff147cb7c1), unchecked((long)0x0000000000e255af));
+                testNumbers(unchecked((long)0x0000ab9d6f546dd4), unchecked((long)0x000000007e2772a5));
+                testNumbers(unchecked((long)0x0000b148e3446e89), unchecked((long)0x0000000051ed3c28));
+                testNumbers(unchecked((long)0x00001e3abfe9725e), unchecked((long)0x00000000d4dec3f4));
+                testNumbers(unchecked((long)0x0000f61bcaba115e), unchecked((long)0x00000000fade149f));
+                testNumbers(unchecked((long)0x0000ae642b9a6626), unchecked((long)0x000000d8de0e0b9a));
+                testNumbers(unchecked((long)0x00009d015a13c8ae), unchecked((long)0x000000afc8827997));
+                testNumbers(unchecked((long)0x0000ecc72cc2df89), unchecked((long)0x00000070d47ec7c4));
+                testNumbers(unchecked((long)0x0000fdbf05894fd2), unchecked((long)0x00000012aec393bd));
+                testNumbers(unchecked((long)0x0000cd7675a70874), unchecked((long)0x0000d7d696a62cbc));
+                testNumbers(unchecked((long)0x0000fad44a89216d), unchecked((long)0x0000cb8cfc8ada4c));
+                testNumbers(unchecked((long)0x0000f41eb5363551), unchecked((long)0x00009c040aa7775e));
+                testNumbers(unchecked((long)0x00003c02d93e01f6), unchecked((long)0x0000f1f4e68a14f8));
+                testNumbers(unchecked((long)0x0000e0d99954b598), unchecked((long)0x00b2a2de4e453485));
+                testNumbers(unchecked((long)0x0000a6081be866d9), unchecked((long)0x00f2a12e845e4f2e));
+                testNumbers(unchecked((long)0x0000ae56a5680dfd), unchecked((long)0x00c96cd7c15d5bec));
+                testNumbers(unchecked((long)0x0000360363e37938), unchecked((long)0x00d4ed572e1937e0));
+                testNumbers(unchecked((long)0x00001f052aebf185), unchecked((long)0x3584e582d1c6db1a));
+                testNumbers(unchecked((long)0x00003fac9c7b3d1b), unchecked((long)0xa4b120f080d69113));
+                testNumbers(unchecked((long)0x00005330d51c3217), unchecked((long)0xc16dd32ffd822c0e));
+                testNumbers(unchecked((long)0x0000cd0694ff5ab0), unchecked((long)0x29673fe67245fbfc));
+                testNumbers(unchecked((long)0x0098265e5a308523), unchecked((long)0x000000000000007d));
+                testNumbers(unchecked((long)0x00560863350df217), unchecked((long)0x00000000000000c8));
+                testNumbers(unchecked((long)0x00798ce804d829a1), unchecked((long)0x00000000000000b1));
+                testNumbers(unchecked((long)0x007994c0051256fd), unchecked((long)0x000000000000005c));
+                testNumbers(unchecked((long)0x00ff1a2838e69f42), unchecked((long)0x0000000000003c16));
+                testNumbers(unchecked((long)0x009e7e95ac5de2c7), unchecked((long)0x000000000000ed49));
+                testNumbers(unchecked((long)0x00fd6867eabba5c0), unchecked((long)0x000000000000c689));
+                testNumbers(unchecked((long)0x009d1632daf20de0), unchecked((long)0x000000000000b74f));
+                testNumbers(unchecked((long)0x00ee29d8f76d4e9c), unchecked((long)0x00000000008020d4));
+                testNumbers(unchecked((long)0x0089e03ecf8daa0a), unchecked((long)0x00000000003e7587));
+                testNumbers(unchecked((long)0x00115763be4beb44), unchecked((long)0x000000000088f762));
+                testNumbers(unchecked((long)0x00815cfc87c427d0), unchecked((long)0x00000000009eec06));
+                testNumbers(unchecked((long)0x001d9c3c9ded0c1a), unchecked((long)0x00000000b9f6d331));
+                testNumbers(unchecked((long)0x00932225412f1222), unchecked((long)0x00000000130ff743));
+                testNumbers(unchecked((long)0x00fe82151e2e0bf3), unchecked((long)0x00000000781cd6f9));
+                testNumbers(unchecked((long)0x002222abb5061b12), unchecked((long)0x000000000491f1df));
+                testNumbers(unchecked((long)0x0012ce0cf0452748), unchecked((long)0x000000a8566274aa));
+                testNumbers(unchecked((long)0x00e570484e9937e1), unchecked((long)0x000000ac81f171be));
+                testNumbers(unchecked((long)0x00eb371f7f8f514e), unchecked((long)0x000000df0248189c));
+                testNumbers(unchecked((long)0x003777a7cc43dfd7), unchecked((long)0x0000003a7b8eaf40));
+                testNumbers(unchecked((long)0x00e181db76238786), unchecked((long)0x00004126e572a568));
+                testNumbers(unchecked((long)0x00ac1df87977e122), unchecked((long)0x0000e1e8cfde6678));
+                testNumbers(unchecked((long)0x001c858763a2c23b), unchecked((long)0x000004ef61f3964f));
+                testNumbers(unchecked((long)0x00bd786bbb71ce46), unchecked((long)0x00002cda097a464f));
+                testNumbers(unchecked((long)0x00a7a6de21a46360), unchecked((long)0x00007afda16f98c3));
+                testNumbers(unchecked((long)0x006fed70a6ccfdf2), unchecked((long)0x009771441e8e00e8));
+                testNumbers(unchecked((long)0x005ad2782dcd5e60), unchecked((long)0x000d170d518385f6));
+                testNumbers(unchecked((long)0x001fd67b153bc9b9), unchecked((long)0x007b3366dff66c6c));
+                testNumbers(unchecked((long)0x00bf00203beb73f4), unchecked((long)0x693495fefab1c77e));
+                testNumbers(unchecked((long)0x002faac1b1b068f8), unchecked((long)0x1cb11cc5c3aaff86));
+                testNumbers(unchecked((long)0x00bb63cfbffe7648), unchecked((long)0x84f5b0c583f9e77b));
+                testNumbers(unchecked((long)0x00615db89673241c), unchecked((long)0x8de5f125247eba0f));
+                testNumbers(unchecked((long)0x9be183a6b293dffe), unchecked((long)0x0000000000000072));
+                testNumbers(unchecked((long)0xa3df9b76d8a51b19), unchecked((long)0x00000000000000c4));
+                testNumbers(unchecked((long)0xb4cc300f0ea7566d), unchecked((long)0x000000000000007e));
+                testNumbers(unchecked((long)0xfdac12a8e23e16e7), unchecked((long)0x0000000000000015));
+                testNumbers(unchecked((long)0xc0805405aadc0f47), unchecked((long)0x00000000000019d4));
+                testNumbers(unchecked((long)0x843a391f8d9f8972), unchecked((long)0x000000000000317a));
+                testNumbers(unchecked((long)0x5a0d124c427ed453), unchecked((long)0x00000000000034fe));
+                testNumbers(unchecked((long)0x8631150f34008f1b), unchecked((long)0x0000000000002ecd));
+                testNumbers(unchecked((long)0x3ff4c18715ad3a76), unchecked((long)0x000000000072d22a));
+                testNumbers(unchecked((long)0x3ef93e5a649422bd), unchecked((long)0x0000000000db5c60));
+                testNumbers(unchecked((long)0x6bdd1056ae58fe0e), unchecked((long)0x0000000000805c75));
+                testNumbers(unchecked((long)0xeff1fa30f3ad9ded), unchecked((long)0x00000000000c83ca));
+                testNumbers(unchecked((long)0xbbc143ac147e56a9), unchecked((long)0x00000000161179b7));
+                testNumbers(unchecked((long)0x0829dde88caa2e45), unchecked((long)0x000000001443ab62));
+                testNumbers(unchecked((long)0x97ac43ff797a4514), unchecked((long)0x0000000033eef42b));
+                testNumbers(unchecked((long)0x703e9cdf96a148aa), unchecked((long)0x000000008e08f3d8));
+                testNumbers(unchecked((long)0x75cbb739b54e2ad6), unchecked((long)0x0000007a8b12628c));
+                testNumbers(unchecked((long)0x91e42fafe97d638f), unchecked((long)0x0000000fbe867c51));
+                testNumbers(unchecked((long)0x9159d77deec116c1), unchecked((long)0x00000096c0c774fc));
+                testNumbers(unchecked((long)0xb59dbb4c15761d88), unchecked((long)0x0000004a033a73e7));
+                testNumbers(unchecked((long)0xab668e9783af9617), unchecked((long)0x00005aa18404076c));
+                testNumbers(unchecked((long)0x54c68e5b5c4127df), unchecked((long)0x0000f2934fd8dd1f));
+                testNumbers(unchecked((long)0xf490d3936184c9f9), unchecked((long)0x00004007477e2110));
+                testNumbers(unchecked((long)0x349e577c9d5c44e2), unchecked((long)0x0000bdb2235af963));
+                testNumbers(unchecked((long)0x58f3ac26cdafde28), unchecked((long)0x0017d4f4ade9ec35));
+                testNumbers(unchecked((long)0xa4a263c316d21f4c), unchecked((long)0x00a7ec1e6fda834b));
+                testNumbers(unchecked((long)0x6ab14771c448666f), unchecked((long)0x005b0f49593c3a27));
+                testNumbers(unchecked((long)0x15f392c3602aa4f7), unchecked((long)0x0018af171045f88e));
+                testNumbers(unchecked((long)0xf17de69c0063f62c), unchecked((long)0xee2a164c2c3a46f8));
+                testNumbers(unchecked((long)0xf34b743eeff8e5c6), unchecked((long)0x4f4067f1a0e404ad));
+                testNumbers(unchecked((long)0xee0296f678756647), unchecked((long)0xf1bbfdc6f0280d36));
+                testNumbers(unchecked((long)0x65c33db0c952b829), unchecked((long)0xa7ab9c39dcffbcf3));
+                Console.WriteLine("All tests passed.");
+                return 100;
+            }
+            catch (DivideByZeroException)
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/signed/signed.csproj b/tests/src/JIT/Methodical/int64/signed/signed.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/superlong/app.config b/tests/src/JIT/Methodical/int64/superlong/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/superlong/cs_template.proj b/tests/src/JIT/Methodical/int64/superlong/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/superlong/packages.config b/tests/src/JIT/Methodical/int64/superlong/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/superlong/superlong.cs b/tests/src/JIT/Methodical/int64/superlong/superlong.cs
new file mode 100644 (file)
index 0000000..a2e77ac
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct superlong
+    {
+        private ulong _lo,_hi;
+
+        private void Assign(superlong v) { _hi = v._hi; _lo = v._lo; }
+
+        private static superlong add(superlong op1, superlong op2)
+        {
+            checked
+            {
+                superlong result;
+                result._hi = op1._hi + op2._hi;
+                try
+                {
+                    result._lo = op1._lo + op2._lo;
+                }
+                catch (OverflowException)
+                {
+                    result._lo = unchecked(op1._lo + op2._lo);
+                    result._hi++;
+                }
+                return result;
+            }
+        }
+
+        private static int Main()
+        {
+            superlong v1;
+            superlong v2;
+            v1._hi = 0x8000000000000000;
+            v1._lo = 0x0000000000000000;
+            v2._hi = 0x7fffffffffffffff;
+            v2._lo = 0xffffffffffffffff;
+            superlong sum = superlong.add(v1, v2);
+            if (sum._hi != 0xffffffffffffffff || sum._lo != 0xffffffffffffffff)
+            {
+                Console.WriteLine("Failed.");
+                return 1;
+            }
+            v1._hi = 0x8000000000000000;
+            v1._lo = 0x0000000000000000;
+            v2.Assign(v1);
+            try
+            {
+                sum = superlong.add(v1, v2);
+            }
+            catch (OverflowException)
+            {
+                v1._hi = 0x1234567876543210;
+                v1._lo = 0xfdcba98789abcdef;
+                v2._hi = 0xedcba98789abcdee;
+                v2._lo = 0x1234567876543210;
+                sum = superlong.add(v1, v2);
+                if (sum._hi != 0xffffffffffffffff || sum._lo != 0x0fffffffffffffff)
+                {
+                    Console.WriteLine("Failed (3).");
+                    return 1;
+                }
+                Console.WriteLine("Passed!");
+                return 100;
+            }
+            Console.WriteLine("Failed (2).");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/superlong/superlong.csproj b/tests/src/JIT/Methodical/int64/superlong/superlong.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/unsigned/addsub.cs b/tests/src/JIT/Methodical/int64/unsigned/addsub.cs
new file mode 100644 (file)
index 0000000..a242945
--- /dev/null
@@ -0,0 +1,318 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static void testNumbers(ulong a, ulong b)
+        {
+            ulong c = 0;
+            try
+            {
+                c = checked(a + b);
+                if (c < a || c < b)
+                    throw new Exception();
+            }
+            catch (OverflowException)
+            {
+                ulong AH = a >> 32;
+                ulong AL = a & 0xffffffff;
+                ulong BH = b >> 32;
+                ulong BL = b & 0xffffffff;
+
+                ulong L = checked(BL + AL);
+                ulong H = checked(AH + BH);
+                if (H < 0x100000000)
+                {
+                    if (L >= 0x100000000)
+                    {
+                        checked
+                        {
+                            H++;
+                            L -= 0x100000000;
+                            if (L >= 0x100000000)
+                                throw new Exception();
+                        }
+                    }
+                    if (checked(L <= 0xffffffffffffffff - (H << 32)))
+                        throw new Exception();
+                }
+                return;
+            }
+            if (checked(c - b != a || c - a != b))
+                throw new Exception();
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                testNumbers(0x0000000000000009, 0x00000000000000b8);
+                testNumbers(0x0000000000000009, 0x00000000000000f9);
+                testNumbers(0x000000000000006e, 0x0000000000000093);
+                testNumbers(0x000000000000001e, 0x0000000000000086);
+                testNumbers(0x00000000000000cc, 0x000000000000583f);
+                testNumbers(0x00000000000000c9, 0x000000000000a94c);
+                testNumbers(0x0000000000000054, 0x0000000000002d06);
+                testNumbers(0x0000000000000030, 0x0000000000009921);
+                testNumbers(0x000000000000001d, 0x0000000000450842);
+                testNumbers(0x000000000000002a, 0x0000000000999f6c);
+                testNumbers(0x00000000000000c5, 0x000000000090faa7);
+                testNumbers(0x0000000000000050, 0x000000000069de08);
+                testNumbers(0x000000000000009a, 0x000000000cd715be);
+                testNumbers(0x0000000000000039, 0x0000000016a61eb5);
+                testNumbers(0x00000000000000e0, 0x0000000095575fef);
+                testNumbers(0x0000000000000093, 0x00000000209e58c5);
+                testNumbers(0x000000000000003b, 0x0000000c3c34b48c);
+                testNumbers(0x00000000000000c2, 0x0000006a671c470f);
+                testNumbers(0x000000000000004b, 0x000000f538cede2b);
+                testNumbers(0x0000000000000099, 0x0000005ba885d43b);
+                testNumbers(0x0000000000000068, 0x00009f692f98ac45);
+                testNumbers(0x00000000000000d9, 0x00008d5eaa7f0a8e);
+                testNumbers(0x00000000000000ac, 0x0000ba1316512e4c);
+                testNumbers(0x000000000000001c, 0x00008c4fbf2f14aa);
+                testNumbers(0x00000000000000c0, 0x0069a9eb9a9bc822);
+                testNumbers(0x0000000000000074, 0x003f8f5a893de200);
+                testNumbers(0x0000000000000027, 0x000650eb1747a5bc);
+                testNumbers(0x00000000000000d9, 0x00d3d50809c70fda);
+                testNumbers(0x00000000000000c0, 0xac6556a4ca94513e);
+                testNumbers(0x0000000000000020, 0xa697fcbfd6d232d1);
+                testNumbers(0x000000000000009c, 0xc4421a4f5147b9b8);
+                testNumbers(0x000000000000009e, 0xc5ef494112a7b33f);
+                testNumbers(0x000000000000f7fa, 0x00000000000000af);
+                testNumbers(0x000000000000ad17, 0x00000000000000e8);
+                testNumbers(0x000000000000c9c4, 0x0000000000000045);
+                testNumbers(0x000000000000a704, 0x0000000000000012);
+                testNumbers(0x000000000000c55b, 0x000000000000a33a);
+                testNumbers(0x000000000000ab88, 0x0000000000009a3c);
+                testNumbers(0x000000000000a539, 0x000000000000cf3a);
+                testNumbers(0x0000000000005890, 0x000000000000eec8);
+                testNumbers(0x000000000000e9e2, 0x0000000000fe7c46);
+                testNumbers(0x0000000000007303, 0x0000000000419f2a);
+                testNumbers(0x000000000000e105, 0x000000000013f913);
+                testNumbers(0x0000000000008191, 0x0000000000fa2458);
+                testNumbers(0x00000000000006d9, 0x0000000091cf14f7);
+                testNumbers(0x000000000000bdb1, 0x0000000086c2a97c);
+                testNumbers(0x000000000000e905, 0x0000000064f702f4);
+                testNumbers(0x0000000000002fdc, 0x00000000f059caf6);
+                testNumbers(0x000000000000f8fd, 0x00000013f0265b1e);
+                testNumbers(0x000000000000e8b8, 0x0000000aa69a6308);
+                testNumbers(0x0000000000003d00, 0x000000fbcb67879b);
+                testNumbers(0x000000000000aa46, 0x00000085c3d371d5);
+                testNumbers(0x0000000000005f60, 0x000008cde4a63203);
+                testNumbers(0x00000000000092b5, 0x00007ca86ba2f30e);
+                testNumbers(0x00000000000093c6, 0x0000a2d73fc4eac0);
+                testNumbers(0x0000000000004156, 0x000006dbd08f2fda);
+                testNumbers(0x0000000000004597, 0x006cfb0ba5962826);
+                testNumbers(0x0000000000006bac, 0x001e79315071480f);
+                testNumbers(0x0000000000002c3a, 0x0092f12cbd82df69);
+                testNumbers(0x0000000000009859, 0x00b0f0cd9dc019f2);
+                testNumbers(0x000000000000b37f, 0x4966447d15850076);
+                testNumbers(0x0000000000005e34, 0x7c1869c9ed2cad38);
+                testNumbers(0x0000000000005c54, 0x7cee70ee82837a08);
+                testNumbers(0x000000000000967f, 0x4eb98adf4b8b0d32);
+                testNumbers(0x0000000000fd2919, 0x000000000000005d);
+                testNumbers(0x0000000000abd5b1, 0x0000000000000098);
+                testNumbers(0x0000000000ab1887, 0x00000000000000ef);
+                testNumbers(0x000000000096034a, 0x000000000000002f);
+                testNumbers(0x0000000000d5bb94, 0x00000000000057d2);
+                testNumbers(0x0000000000d7b2cb, 0x00000000000080f5);
+                testNumbers(0x00000000004ccc6d, 0x000000000000087c);
+                testNumbers(0x0000000000ec0c50, 0x000000000000bdff);
+                testNumbers(0x00000000008a6865, 0x000000000076c014);
+                testNumbers(0x0000000000ac38dd, 0x0000000000f12b09);
+                testNumbers(0x0000000000615e2a, 0x0000000000e7cbf8);
+                testNumbers(0x00000000000e214f, 0x00000000005b8e2f);
+                testNumbers(0x00000000003bd7c6, 0x00000000c1db4e46);
+                testNumbers(0x0000000000ae208d, 0x0000000001c9aa7a);
+                testNumbers(0x00000000008a9cef, 0x0000000003930b07);
+                testNumbers(0x000000000036b866, 0x00000000d64b7bef);
+                testNumbers(0x0000000000d337cd, 0x000000a2b45fb7de);
+                testNumbers(0x0000000000024471, 0x0000005c5de3da89);
+                testNumbers(0x0000000000012b15, 0x0000007cd40030fe);
+                testNumbers(0x0000000000d38af2, 0x0000005905921572);
+                testNumbers(0x0000000000aca0d7, 0x0000c632301abeb8);
+                testNumbers(0x00000000004eadc2, 0x00006a1ebf37403c);
+                testNumbers(0x00000000005d909c, 0x00004021bfa15862);
+                testNumbers(0x0000000000710e08, 0x0000e9a1a030b230);
+                testNumbers(0x0000000000478b9b, 0x00804add8afc31d9);
+                testNumbers(0x00000000005754ed, 0x00af85e7ebb1ce33);
+                testNumbers(0x00000000003ab44e, 0x00f41b9f70360f78);
+                testNumbers(0x00000000007aa129, 0x00eb6e4eddf7eb87);
+                testNumbers(0x00000000003b036f, 0x333874e4330fbfa4);
+                testNumbers(0x0000000000a33186, 0xec8607412503fc4c);
+                testNumbers(0x00000000009af471, 0xe7ad0935fdbff151);
+                testNumbers(0x0000000000c04e8c, 0x58ee406ab936ac24);
+                testNumbers(0x0000000054fdd28b, 0x0000000000000034);
+                testNumbers(0x0000000033736b36, 0x00000000000000fd);
+                testNumbers(0x0000000069cfe4b7, 0x0000000000000026);
+                testNumbers(0x00000000fd078d36, 0x00000000000000dc);
+                testNumbers(0x0000000075cc3f36, 0x0000000000001617);
+                testNumbers(0x00000000075d660e, 0x0000000000008511);
+                testNumbers(0x0000000052acb037, 0x00000000000043cb);
+                testNumbers(0x00000000a0db7bf5, 0x0000000000002c98);
+                testNumbers(0x0000000083d4be11, 0x0000000000ba37c9);
+                testNumbers(0x0000000083d04f94, 0x00000000003ddbd0);
+                testNumbers(0x000000005ed41f6a, 0x0000000000eaf1d5);
+                testNumbers(0x000000000e364a9a, 0x000000000085880c);
+                testNumbers(0x0000000012657ecb, 0x00000000a88b8a68);
+                testNumbers(0x000000009897a4ac, 0x0000000076707981);
+                testNumbers(0x00000000469cd1cf, 0x00000000cf40f67a);
+                testNumbers(0x00000000ee7444c8, 0x00000000d1b0d7de);
+                testNumbers(0x00000000fbb6f547, 0x000000c1ef3c4d9b);
+                testNumbers(0x000000000e20dd53, 0x000000b05833c7cf);
+                testNumbers(0x00000000e5733fb8, 0x0000008eae18a855);
+                testNumbers(0x000000005db1c271, 0x000000c4a2f7c27d);
+                testNumbers(0x0000000007add22a, 0x00000ed9fd23dc3e);
+                testNumbers(0x000000002239d1d5, 0x0000a1ae07a62635);
+                testNumbers(0x00000000410d4d58, 0x0000c05c5205bed2);
+                testNumbers(0x000000004c3c435e, 0x00001e30c1bf628a);
+                testNumbers(0x00000000096f44d5, 0x005488c521a6072b);
+                testNumbers(0x0000000017f28913, 0x00796ff3891c44ff);
+                testNumbers(0x0000000065be69cf, 0x00dd5c6f9b3f3119);
+                testNumbers(0x000000002200f221, 0x00ab6c98c90cfe9d);
+                testNumbers(0x00000000d48bee1a, 0x64b76d7491a58799);
+                testNumbers(0x000000006cb93100, 0xa515fe27402dad45);
+                testNumbers(0x00000000bed95abe, 0xc9924098acc74be9);
+                testNumbers(0x0000000092781a2e, 0x67ada9ef3f9e39b7);
+                testNumbers(0x000000e3aafcdae2, 0x000000000000009c);
+                testNumbers(0x000000d8dad80c34, 0x0000000000000099);
+                testNumbers(0x000000addcd074d6, 0x00000000000000ea);
+                testNumbers(0x00000096735bc25a, 0x00000000000000ba);
+                testNumbers(0x000000f492ef7446, 0x00000000000039b1);
+                testNumbers(0x000000bc86816119, 0x0000000000001520);
+                testNumbers(0x00000060a36818e7, 0x000000000000c5a8);
+                testNumbers(0x000000317121d508, 0x000000000000ac3d);
+                testNumbers(0x0000004abfdaf232, 0x00000000005cea57);
+                testNumbers(0x000000acc458f392, 0x0000000000a9c3e3);
+                testNumbers(0x0000001020993532, 0x0000000000df6042);
+                testNumbers(0x000000ad25b80abb, 0x0000000000cec15b);
+                testNumbers(0x0000002305d2c443, 0x000000002a26131c);
+                testNumbers(0x00000007c42e2ce0, 0x000000009768024f);
+                testNumbers(0x00000076f674816c, 0x000000008d33c7b4);
+                testNumbers(0x000000bf567b23bc, 0x00000000ef264890);
+                testNumbers(0x000000e3283681a0, 0x0000002e66850719);
+                testNumbers(0x000000011fe13754, 0x00000066fad0b407);
+                testNumbers(0x00000052f259009f, 0x000000a2886ef414);
+                testNumbers(0x000000a9ebb540fc, 0x0000009d27ba694f);
+                testNumbers(0x00000083af60d7eb, 0x0000b6f2a0f51f4c);
+                testNumbers(0x000000f2ec42d13a, 0x000046855f279407);
+                testNumbers(0x00000094e71cb562, 0x00002d9566618e56);
+                testNumbers(0x000000c0ee690ddc, 0x000054295c8ca584);
+                testNumbers(0x0000002683cd5206, 0x00a5a2d269bcd188);
+                testNumbers(0x0000002e77038305, 0x00c727f0f3787e22);
+                testNumbers(0x0000008323b9d026, 0x00fed29f8575c120);
+                testNumbers(0x0000007b3231f0fc, 0x0091080854b27d3e);
+                testNumbers(0x00000084522a7708, 0x91ba8f22fccd6222);
+                testNumbers(0x000000afb1b50d90, 0x3261a532b65c7838);
+                testNumbers(0x0000002c65e838c6, 0x5b858452c9bf6f39);
+                testNumbers(0x000000219e837734, 0x97873bed5bb0a44b);
+                testNumbers(0x00009f133e2f116f, 0x0000000000000073);
+                testNumbers(0x0000887577574766, 0x0000000000000048);
+                testNumbers(0x0000ba4c778d4aa8, 0x000000000000003a);
+                testNumbers(0x00002683df421474, 0x0000000000000056);
+                testNumbers(0x00006ff76294c275, 0x00000000000089f7);
+                testNumbers(0x0000fdf053abefa2, 0x000000000000eb65);
+                testNumbers(0x0000ea4b254b24eb, 0x000000000000ba27);
+                testNumbers(0x000009f7ce21b811, 0x000000000000e8f6);
+                testNumbers(0x00009cc645fa08a1, 0x0000000000a29ea3);
+                testNumbers(0x0000726f9a9f816e, 0x000000000070dce1);
+                testNumbers(0x0000a4be34825ef6, 0x0000000000bb2be7);
+                testNumbers(0x000057ff147cb7c1, 0x0000000000e255af);
+                testNumbers(0x0000ab9d6f546dd4, 0x000000007e2772a5);
+                testNumbers(0x0000b148e3446e89, 0x0000000051ed3c28);
+                testNumbers(0x00001e3abfe9725e, 0x00000000d4dec3f4);
+                testNumbers(0x0000f61bcaba115e, 0x00000000fade149f);
+                testNumbers(0x0000ae642b9a6626, 0x000000d8de0e0b9a);
+                testNumbers(0x00009d015a13c8ae, 0x000000afc8827997);
+                testNumbers(0x0000ecc72cc2df89, 0x00000070d47ec7c4);
+                testNumbers(0x0000fdbf05894fd2, 0x00000012aec393bd);
+                testNumbers(0x0000cd7675a70874, 0x0000d7d696a62cbc);
+                testNumbers(0x0000fad44a89216d, 0x0000cb8cfc8ada4c);
+                testNumbers(0x0000f41eb5363551, 0x00009c040aa7775e);
+                testNumbers(0x00003c02d93e01f6, 0x0000f1f4e68a14f8);
+                testNumbers(0x0000e0d99954b598, 0x00b2a2de4e453485);
+                testNumbers(0x0000a6081be866d9, 0x00f2a12e845e4f2e);
+                testNumbers(0x0000ae56a5680dfd, 0x00c96cd7c15d5bec);
+                testNumbers(0x0000360363e37938, 0x00d4ed572e1937e0);
+                testNumbers(0x00001f052aebf185, 0x3584e582d1c6db1a);
+                testNumbers(0x00003fac9c7b3d1b, 0xa4b120f080d69113);
+                testNumbers(0x00005330d51c3217, 0xc16dd32ffd822c0e);
+                testNumbers(0x0000cd0694ff5ab0, 0x29673fe67245fbfc);
+                testNumbers(0x0098265e5a308523, 0x000000000000007d);
+                testNumbers(0x00560863350df217, 0x00000000000000c8);
+                testNumbers(0x00798ce804d829a1, 0x00000000000000b1);
+                testNumbers(0x007994c0051256fd, 0x000000000000005c);
+                testNumbers(0x00ff1a2838e69f42, 0x0000000000003c16);
+                testNumbers(0x009e7e95ac5de2c7, 0x000000000000ed49);
+                testNumbers(0x00fd6867eabba5c0, 0x000000000000c689);
+                testNumbers(0x009d1632daf20de0, 0x000000000000b74f);
+                testNumbers(0x00ee29d8f76d4e9c, 0x00000000008020d4);
+                testNumbers(0x0089e03ecf8daa0a, 0x00000000003e7587);
+                testNumbers(0x00115763be4beb44, 0x000000000088f762);
+                testNumbers(0x00815cfc87c427d0, 0x00000000009eec06);
+                testNumbers(0x001d9c3c9ded0c1a, 0x00000000b9f6d331);
+                testNumbers(0x00932225412f1222, 0x00000000130ff743);
+                testNumbers(0x00fe82151e2e0bf3, 0x00000000781cd6f9);
+                testNumbers(0x002222abb5061b12, 0x000000000491f1df);
+                testNumbers(0x0012ce0cf0452748, 0x000000a8566274aa);
+                testNumbers(0x00e570484e9937e1, 0x000000ac81f171be);
+                testNumbers(0x00eb371f7f8f514e, 0x000000df0248189c);
+                testNumbers(0x003777a7cc43dfd7, 0x0000003a7b8eaf40);
+                testNumbers(0x00e181db76238786, 0x00004126e572a568);
+                testNumbers(0x00ac1df87977e122, 0x0000e1e8cfde6678);
+                testNumbers(0x001c858763a2c23b, 0x000004ef61f3964f);
+                testNumbers(0x00bd786bbb71ce46, 0x00002cda097a464f);
+                testNumbers(0x00a7a6de21a46360, 0x00007afda16f98c3);
+                testNumbers(0x006fed70a6ccfdf2, 0x009771441e8e00e8);
+                testNumbers(0x005ad2782dcd5e60, 0x000d170d518385f6);
+                testNumbers(0x001fd67b153bc9b9, 0x007b3366dff66c6c);
+                testNumbers(0x00bf00203beb73f4, 0x693495fefab1c77e);
+                testNumbers(0x002faac1b1b068f8, 0x1cb11cc5c3aaff86);
+                testNumbers(0x00bb63cfbffe7648, 0x84f5b0c583f9e77b);
+                testNumbers(0x00615db89673241c, 0x8de5f125247eba0f);
+                testNumbers(0x9be183a6b293dffe, 0x0000000000000072);
+                testNumbers(0xa3df9b76d8a51b19, 0x00000000000000c4);
+                testNumbers(0xb4cc300f0ea7566d, 0x000000000000007e);
+                testNumbers(0xfdac12a8e23e16e7, 0x0000000000000015);
+                testNumbers(0xc0805405aadc0f47, 0x00000000000019d4);
+                testNumbers(0x843a391f8d9f8972, 0x000000000000317a);
+                testNumbers(0x5a0d124c427ed453, 0x00000000000034fe);
+                testNumbers(0x8631150f34008f1b, 0x0000000000002ecd);
+                testNumbers(0x3ff4c18715ad3a76, 0x000000000072d22a);
+                testNumbers(0x3ef93e5a649422bd, 0x0000000000db5c60);
+                testNumbers(0x6bdd1056ae58fe0e, 0x0000000000805c75);
+                testNumbers(0xeff1fa30f3ad9ded, 0x00000000000c83ca);
+                testNumbers(0xbbc143ac147e56a9, 0x00000000161179b7);
+                testNumbers(0x0829dde88caa2e45, 0x000000001443ab62);
+                testNumbers(0x97ac43ff797a4514, 0x0000000033eef42b);
+                testNumbers(0x703e9cdf96a148aa, 0x000000008e08f3d8);
+                testNumbers(0x75cbb739b54e2ad6, 0x0000007a8b12628c);
+                testNumbers(0x91e42fafe97d638f, 0x0000000fbe867c51);
+                testNumbers(0x9159d77deec116c1, 0x00000096c0c774fc);
+                testNumbers(0xb59dbb4c15761d88, 0x0000004a033a73e7);
+                testNumbers(0xab668e9783af9617, 0x00005aa18404076c);
+                testNumbers(0x54c68e5b5c4127df, 0x0000f2934fd8dd1f);
+                testNumbers(0xf490d3936184c9f9, 0x00004007477e2110);
+                testNumbers(0x349e577c9d5c44e2, 0x0000bdb2235af963);
+                testNumbers(0x58f3ac26cdafde28, 0x0017d4f4ade9ec35);
+                testNumbers(0xa4a263c316d21f4c, 0x00a7ec1e6fda834b);
+                testNumbers(0x6ab14771c448666f, 0x005b0f49593c3a27);
+                testNumbers(0x15f392c3602aa4f7, 0x0018af171045f88e);
+                testNumbers(0xf17de69c0063f62c, 0xee2a164c2c3a46f8);
+                testNumbers(0xf34b743eeff8e5c6, 0x4f4067f1a0e404ad);
+                testNumbers(0xee0296f678756647, 0xf1bbfdc6f0280d36);
+                testNumbers(0x65c33db0c952b829, 0xa7ab9c39dcffbcf3);
+                Console.WriteLine("All tests passed.");
+                return 100;
+            }
+            catch (DivideByZeroException)
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/app.config b/tests/src/JIT/Methodical/int64/unsigned/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/unsigned/cs_template.proj b/tests/src/JIT/Methodical/int64/unsigned/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldc_mul.cs b/tests/src/JIT/Methodical/int64/unsigned/ldc_mul.cs
new file mode 100644 (file)
index 0000000..afa9ac0
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool check(ulong op1, ulong op2, ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", op1, op2);
+            try
+            {
+                if (unchecked(op1 * op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!check(0x00000000ffffffff, 0x00000000ffffffff, 0xfffffffe00000001, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x00000000ffffffff, 0xffffffff00000000, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x0000000100000000, 0x0000000000000000, false))
+                goto fail;
+            if (!check(0x7fffffffffffffff, 0x0000000000000002, 0xfffffffffffffffe, false))
+                goto fail;
+            if (!check(0x8000000000000000, 0x0000000000000002, 0x0000000000000000, false))
+                goto fail;
+            if (!check(0x0000000000100000, 0x0000001000000000, 0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldc_mulovf.cs b/tests/src/JIT/Methodical/int64/unsigned/ldc_mulovf.cs
new file mode 100644 (file)
index 0000000..ec3d678
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static bool check(ulong op1, ulong op2, ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", op1, op2);
+            try
+            {
+                if (checked(op1 * op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            if (!check(0x00000000ffffffff, 0x00000000ffffffff, 0xfffffffe00000001, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x00000000ffffffff, 0xffffffff00000000, false))
+                goto fail;
+            if (!check(0x0000000100000000, 0x0000000100000000, 0x0000000000000000, true))
+                goto fail;
+            if (!check(0x7fffffffffffffff, 0x0000000000000002, 0xfffffffffffffffe, false))
+                goto fail;
+            if (!check(0x8000000000000000, 0x0000000000000002, 0x0000000000000000, true))
+                goto fail;
+            if (!check(0x0000000000100000, 0x0000001000000000, 0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldfld_mul.cs b/tests/src/JIT/Methodical/int64/unsigned/ldfld_mul.cs
new file mode 100644 (file)
index 0000000..322fae8
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private ulong _op1,_op2;
+
+        private bool check(ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", _op1, _op2);
+            try
+            {
+                if (unchecked(_op1 * _op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            Test app = new Test();
+            app._op1 = 0x00000000ffffffff;
+            app._op2 = 0x00000000ffffffff;
+            if (!app.check(0xfffffffe00000001, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x00000000ffffffff;
+            if (!app.check(0xffffffff00000000, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x0000000100000000;
+            if (!app.check(0x0000000000000000, false))
+                goto fail;
+            app._op1 = 0x7fffffffffffffff;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0xfffffffffffffffe, false))
+                goto fail;
+            app._op1 = 0x8000000000000000;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0x0000000000000000, false))
+                goto fail;
+            app._op1 = 0x0000000000100000;
+            app._op2 = 0x0000001000000000;
+            if (!app.check(0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldfld_mulovf.cs b/tests/src/JIT/Methodical/int64/unsigned/ldfld_mulovf.cs
new file mode 100644 (file)
index 0000000..f00ba3f
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private ulong _op1,_op2;
+
+        private bool check(ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", _op1, _op2);
+            try
+            {
+                if (checked(_op1 * _op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            Test app = new Test();
+            app._op1 = 0x00000000ffffffff;
+            app._op2 = 0x00000000ffffffff;
+            if (!app.check(0xfffffffe00000001, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x00000000ffffffff;
+            if (!app.check(0xffffffff00000000, false))
+                goto fail;
+            app._op1 = 0x0000000100000000;
+            app._op2 = 0x0000000100000000;
+            if (!app.check(0x0000000000000000, true))
+                goto fail;
+            app._op1 = 0x7fffffffffffffff;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0xfffffffffffffffe, false))
+                goto fail;
+            app._op1 = 0x8000000000000000;
+            app._op2 = 0x0000000000000002;
+            if (!app.check(0x0000000000000000, true))
+                goto fail;
+            app._op1 = 0x0000000000100000;
+            app._op2 = 0x0000001000000000;
+            if (!app.check(0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldsfld_mul.cs b/tests/src/JIT/Methodical/int64/unsigned/ldsfld_mul.cs
new file mode 100644 (file)
index 0000000..5c3ee48
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static ulong s_op1,s_op2;
+
+        private static bool check(ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", s_op1, s_op2);
+            try
+            {
+                if (unchecked(s_op1 * s_op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            s_op1 = 0x00000000ffffffff;
+            s_op2 = 0x00000000ffffffff;
+            if (!check(0xfffffffe00000001, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x00000000ffffffff;
+            if (!check(0xffffffff00000000, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x0000000100000000;
+            if (!check(0x0000000000000000, false))
+                goto fail;
+            s_op1 = 0x7fffffffffffffff;
+            s_op2 = 0x0000000000000002;
+            if (!check(0xfffffffffffffffe, false))
+                goto fail;
+            s_op1 = 0x8000000000000000;
+            s_op2 = 0x0000000000000002;
+            if (!check(0x0000000000000000, false))
+                goto fail;
+            s_op1 = 0x0000000000100000;
+            s_op2 = 0x0000001000000000;
+            if (!check(0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/ldsfld_mulovf.cs b/tests/src/JIT/Methodical/int64/unsigned/ldsfld_mulovf.cs
new file mode 100644 (file)
index 0000000..3f39f67
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static ulong s_op1,s_op2;
+
+        private static bool check(ulong product, bool overflow)
+        {
+            Console.Write("Multiplying {0} and {1}...", s_op1, s_op2);
+            try
+            {
+                if (checked(s_op1 * s_op2) != product)
+                    return false;
+                Console.WriteLine();
+                return !overflow;
+            }
+            catch (OverflowException)
+            {
+                Console.WriteLine("overflow.");
+                return overflow;
+            }
+        }
+
+        private static int Main()
+        {
+            s_op1 = 0x00000000ffffffff;
+            s_op2 = 0x00000000ffffffff;
+            if (!check(0xfffffffe00000001, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x00000000ffffffff;
+            if (!check(0xffffffff00000000, false))
+                goto fail;
+            s_op1 = 0x0000000100000000;
+            s_op2 = 0x0000000100000000;
+            if (!check(0x0000000000000000, true))
+                goto fail;
+            s_op1 = 0x7fffffffffffffff;
+            s_op2 = 0x0000000000000002;
+            if (!check(0xfffffffffffffffe, false))
+                goto fail;
+            s_op1 = 0x8000000000000000;
+            s_op2 = 0x0000000000000002;
+            if (!check(0x0000000000000000, true))
+                goto fail;
+            s_op1 = 0x0000000000100000;
+            s_op2 = 0x0000001000000000;
+            if (!check(0x0100000000000000, false))
+                goto fail;
+
+            Console.WriteLine("Test passed");
+            return 100;
+        fail:
+            Console.WriteLine("Test failed");
+            return 1;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/muldiv.cs b/tests/src/JIT/Methodical/int64/unsigned/muldiv.cs
new file mode 100644 (file)
index 0000000..cc61b67
--- /dev/null
@@ -0,0 +1,336 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static ulong s_A,s_B;
+
+        private static void testNumbers(ulong a, ulong b)
+        {
+            s_A = a;
+            s_B = b;
+            ulong c = 0;
+            try
+            {
+                c = checked(a * b);
+            }
+            catch (OverflowException)
+            {
+                ulong AH = a >> 32;
+                ulong AL = a & 0xffffffff;
+                ulong BH = b >> 32;
+                ulong BL = b & 0xffffffff;
+
+                if (checked(AH * 0x100000000 + AL) != a)
+                    throw new Exception();
+                if (checked(BH * 0x100000000 + BL) != b)
+                    throw new Exception();
+
+                if (AH == 0 || BH == 0)
+                {
+                    ulong sum = checked(AL * BH + AH * BL);
+                    if (sum < 0x100000000)
+                    {
+                        sum = checked(sum * 0x100000000);
+                        if (checked(AL * BL) <= checked(0xffffffffffffffff - sum))
+                            throw new Exception();
+                    }
+                }
+                return;
+            }
+            try
+            {
+                if (c / b != a)
+                    throw new Exception();
+            }
+            catch (DivideByZeroException)
+            {
+                if (b != 0)
+                    throw new Exception();
+            }
+            try
+            {
+                if (c / a != b)
+                    throw new Exception();
+            }
+            catch (DivideByZeroException)
+            {
+                if (a != 0)
+                    throw new Exception();
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                testNumbers(0x0000000000000009, 0x00000000000000b8);
+                testNumbers(0x0000000000000009, 0x00000000000000f9);
+                testNumbers(0x000000000000006e, 0x0000000000000093);
+                testNumbers(0x000000000000001e, 0x0000000000000086);
+                testNumbers(0x00000000000000cc, 0x000000000000583f);
+                testNumbers(0x00000000000000c9, 0x000000000000a94c);
+                testNumbers(0x0000000000000054, 0x0000000000002d06);
+                testNumbers(0x0000000000000030, 0x0000000000009921);
+                testNumbers(0x000000000000001d, 0x0000000000450842);
+                testNumbers(0x000000000000002a, 0x0000000000999f6c);
+                testNumbers(0x00000000000000c5, 0x000000000090faa7);
+                testNumbers(0x0000000000000050, 0x000000000069de08);
+                testNumbers(0x000000000000009a, 0x000000000cd715be);
+                testNumbers(0x0000000000000039, 0x0000000016a61eb5);
+                testNumbers(0x00000000000000e0, 0x0000000095575fef);
+                testNumbers(0x0000000000000093, 0x00000000209e58c5);
+                testNumbers(0x000000000000003b, 0x0000000c3c34b48c);
+                testNumbers(0x00000000000000c2, 0x0000006a671c470f);
+                testNumbers(0x000000000000004b, 0x000000f538cede2b);
+                testNumbers(0x0000000000000099, 0x0000005ba885d43b);
+                testNumbers(0x0000000000000068, 0x00009f692f98ac45);
+                testNumbers(0x00000000000000d9, 0x00008d5eaa7f0a8e);
+                testNumbers(0x00000000000000ac, 0x0000ba1316512e4c);
+                testNumbers(0x000000000000001c, 0x00008c4fbf2f14aa);
+                testNumbers(0x00000000000000c0, 0x0069a9eb9a9bc822);
+                testNumbers(0x0000000000000074, 0x003f8f5a893de200);
+                testNumbers(0x0000000000000027, 0x000650eb1747a5bc);
+                testNumbers(0x00000000000000d9, 0x00d3d50809c70fda);
+                testNumbers(0x00000000000000c0, 0xac6556a4ca94513e);
+                testNumbers(0x0000000000000020, 0xa697fcbfd6d232d1);
+                testNumbers(0x000000000000009c, 0xc4421a4f5147b9b8);
+                testNumbers(0x000000000000009e, 0xc5ef494112a7b33f);
+                testNumbers(0x000000000000f7fa, 0x00000000000000af);
+                testNumbers(0x000000000000ad17, 0x00000000000000e8);
+                testNumbers(0x000000000000c9c4, 0x0000000000000045);
+                testNumbers(0x000000000000a704, 0x0000000000000012);
+                testNumbers(0x000000000000c55b, 0x000000000000a33a);
+                testNumbers(0x000000000000ab88, 0x0000000000009a3c);
+                testNumbers(0x000000000000a539, 0x000000000000cf3a);
+                testNumbers(0x0000000000005890, 0x000000000000eec8);
+                testNumbers(0x000000000000e9e2, 0x0000000000fe7c46);
+                testNumbers(0x0000000000007303, 0x0000000000419f2a);
+                testNumbers(0x000000000000e105, 0x000000000013f913);
+                testNumbers(0x0000000000008191, 0x0000000000fa2458);
+                testNumbers(0x00000000000006d9, 0x0000000091cf14f7);
+                testNumbers(0x000000000000bdb1, 0x0000000086c2a97c);
+                testNumbers(0x000000000000e905, 0x0000000064f702f4);
+                testNumbers(0x0000000000002fdc, 0x00000000f059caf6);
+                testNumbers(0x000000000000f8fd, 0x00000013f0265b1e);
+                testNumbers(0x000000000000e8b8, 0x0000000aa69a6308);
+                testNumbers(0x0000000000003d00, 0x000000fbcb67879b);
+                testNumbers(0x000000000000aa46, 0x00000085c3d371d5);
+                testNumbers(0x0000000000005f60, 0x000008cde4a63203);
+                testNumbers(0x00000000000092b5, 0x00007ca86ba2f30e);
+                testNumbers(0x00000000000093c6, 0x0000a2d73fc4eac0);
+                testNumbers(0x0000000000004156, 0x000006dbd08f2fda);
+                testNumbers(0x0000000000004597, 0x006cfb0ba5962826);
+                testNumbers(0x0000000000006bac, 0x001e79315071480f);
+                testNumbers(0x0000000000002c3a, 0x0092f12cbd82df69);
+                testNumbers(0x0000000000009859, 0x00b0f0cd9dc019f2);
+                testNumbers(0x000000000000b37f, 0x4966447d15850076);
+                testNumbers(0x0000000000005e34, 0x7c1869c9ed2cad38);
+                testNumbers(0x0000000000005c54, 0x7cee70ee82837a08);
+                testNumbers(0x000000000000967f, 0x4eb98adf4b8b0d32);
+                testNumbers(0x0000000000fd2919, 0x000000000000005d);
+                testNumbers(0x0000000000abd5b1, 0x0000000000000098);
+                testNumbers(0x0000000000ab1887, 0x00000000000000ef);
+                testNumbers(0x000000000096034a, 0x000000000000002f);
+                testNumbers(0x0000000000d5bb94, 0x00000000000057d2);
+                testNumbers(0x0000000000d7b2cb, 0x00000000000080f5);
+                testNumbers(0x00000000004ccc6d, 0x000000000000087c);
+                testNumbers(0x0000000000ec0c50, 0x000000000000bdff);
+                testNumbers(0x00000000008a6865, 0x000000000076c014);
+                testNumbers(0x0000000000ac38dd, 0x0000000000f12b09);
+                testNumbers(0x0000000000615e2a, 0x0000000000e7cbf8);
+                testNumbers(0x00000000000e214f, 0x00000000005b8e2f);
+                testNumbers(0x00000000003bd7c6, 0x00000000c1db4e46);
+                testNumbers(0x0000000000ae208d, 0x0000000001c9aa7a);
+                testNumbers(0x00000000008a9cef, 0x0000000003930b07);
+                testNumbers(0x000000000036b866, 0x00000000d64b7bef);
+                testNumbers(0x0000000000d337cd, 0x000000a2b45fb7de);
+                testNumbers(0x0000000000024471, 0x0000005c5de3da89);
+                testNumbers(0x0000000000012b15, 0x0000007cd40030fe);
+                testNumbers(0x0000000000d38af2, 0x0000005905921572);
+                testNumbers(0x0000000000aca0d7, 0x0000c632301abeb8);
+                testNumbers(0x00000000004eadc2, 0x00006a1ebf37403c);
+                testNumbers(0x00000000005d909c, 0x00004021bfa15862);
+                testNumbers(0x0000000000710e08, 0x0000e9a1a030b230);
+                testNumbers(0x0000000000478b9b, 0x00804add8afc31d9);
+                testNumbers(0x00000000005754ed, 0x00af85e7ebb1ce33);
+                testNumbers(0x00000000003ab44e, 0x00f41b9f70360f78);
+                testNumbers(0x00000000007aa129, 0x00eb6e4eddf7eb87);
+                testNumbers(0x00000000003b036f, 0x333874e4330fbfa4);
+                testNumbers(0x0000000000a33186, 0xec8607412503fc4c);
+                testNumbers(0x00000000009af471, 0xe7ad0935fdbff151);
+                testNumbers(0x0000000000c04e8c, 0x58ee406ab936ac24);
+                testNumbers(0x0000000054fdd28b, 0x0000000000000034);
+                testNumbers(0x0000000033736b36, 0x00000000000000fd);
+                testNumbers(0x0000000069cfe4b7, 0x0000000000000026);
+                testNumbers(0x00000000fd078d36, 0x00000000000000dc);
+                testNumbers(0x0000000075cc3f36, 0x0000000000001617);
+                testNumbers(0x00000000075d660e, 0x0000000000008511);
+                testNumbers(0x0000000052acb037, 0x00000000000043cb);
+                testNumbers(0x00000000a0db7bf5, 0x0000000000002c98);
+                testNumbers(0x0000000083d4be11, 0x0000000000ba37c9);
+                testNumbers(0x0000000083d04f94, 0x00000000003ddbd0);
+                testNumbers(0x000000005ed41f6a, 0x0000000000eaf1d5);
+                testNumbers(0x000000000e364a9a, 0x000000000085880c);
+                testNumbers(0x0000000012657ecb, 0x00000000a88b8a68);
+                testNumbers(0x000000009897a4ac, 0x0000000076707981);
+                testNumbers(0x00000000469cd1cf, 0x00000000cf40f67a);
+                testNumbers(0x00000000ee7444c8, 0x00000000d1b0d7de);
+                testNumbers(0x00000000fbb6f547, 0x000000c1ef3c4d9b);
+                testNumbers(0x000000000e20dd53, 0x000000b05833c7cf);
+                testNumbers(0x00000000e5733fb8, 0x0000008eae18a855);
+                testNumbers(0x000000005db1c271, 0x000000c4a2f7c27d);
+                testNumbers(0x0000000007add22a, 0x00000ed9fd23dc3e);
+                testNumbers(0x000000002239d1d5, 0x0000a1ae07a62635);
+                testNumbers(0x00000000410d4d58, 0x0000c05c5205bed2);
+                testNumbers(0x000000004c3c435e, 0x00001e30c1bf628a);
+                testNumbers(0x00000000096f44d5, 0x005488c521a6072b);
+                testNumbers(0x0000000017f28913, 0x00796ff3891c44ff);
+                testNumbers(0x0000000065be69cf, 0x00dd5c6f9b3f3119);
+                testNumbers(0x000000002200f221, 0x00ab6c98c90cfe9d);
+                testNumbers(0x00000000d48bee1a, 0x64b76d7491a58799);
+                testNumbers(0x000000006cb93100, 0xa515fe27402dad45);
+                testNumbers(0x00000000bed95abe, 0xc9924098acc74be9);
+                testNumbers(0x0000000092781a2e, 0x67ada9ef3f9e39b7);
+                testNumbers(0x000000e3aafcdae2, 0x000000000000009c);
+                testNumbers(0x000000d8dad80c34, 0x0000000000000099);
+                testNumbers(0x000000addcd074d6, 0x00000000000000ea);
+                testNumbers(0x00000096735bc25a, 0x00000000000000ba);
+                testNumbers(0x000000f492ef7446, 0x00000000000039b1);
+                testNumbers(0x000000bc86816119, 0x0000000000001520);
+                testNumbers(0x00000060a36818e7, 0x000000000000c5a8);
+                testNumbers(0x000000317121d508, 0x000000000000ac3d);
+                testNumbers(0x0000004abfdaf232, 0x00000000005cea57);
+                testNumbers(0x000000acc458f392, 0x0000000000a9c3e3);
+                testNumbers(0x0000001020993532, 0x0000000000df6042);
+                testNumbers(0x000000ad25b80abb, 0x0000000000cec15b);
+                testNumbers(0x0000002305d2c443, 0x000000002a26131c);
+                testNumbers(0x00000007c42e2ce0, 0x000000009768024f);
+                testNumbers(0x00000076f674816c, 0x000000008d33c7b4);
+                testNumbers(0x000000bf567b23bc, 0x00000000ef264890);
+                testNumbers(0x000000e3283681a0, 0x0000002e66850719);
+                testNumbers(0x000000011fe13754, 0x00000066fad0b407);
+                testNumbers(0x00000052f259009f, 0x000000a2886ef414);
+                testNumbers(0x000000a9ebb540fc, 0x0000009d27ba694f);
+                testNumbers(0x00000083af60d7eb, 0x0000b6f2a0f51f4c);
+                testNumbers(0x000000f2ec42d13a, 0x000046855f279407);
+                testNumbers(0x00000094e71cb562, 0x00002d9566618e56);
+                testNumbers(0x000000c0ee690ddc, 0x000054295c8ca584);
+                testNumbers(0x0000002683cd5206, 0x00a5a2d269bcd188);
+                testNumbers(0x0000002e77038305, 0x00c727f0f3787e22);
+                testNumbers(0x0000008323b9d026, 0x00fed29f8575c120);
+                testNumbers(0x0000007b3231f0fc, 0x0091080854b27d3e);
+                testNumbers(0x00000084522a7708, 0x91ba8f22fccd6222);
+                testNumbers(0x000000afb1b50d90, 0x3261a532b65c7838);
+                testNumbers(0x0000002c65e838c6, 0x5b858452c9bf6f39);
+                testNumbers(0x000000219e837734, 0x97873bed5bb0a44b);
+                testNumbers(0x00009f133e2f116f, 0x0000000000000073);
+                testNumbers(0x0000887577574766, 0x0000000000000048);
+                testNumbers(0x0000ba4c778d4aa8, 0x000000000000003a);
+                testNumbers(0x00002683df421474, 0x0000000000000056);
+                testNumbers(0x00006ff76294c275, 0x00000000000089f7);
+                testNumbers(0x0000fdf053abefa2, 0x000000000000eb65);
+                testNumbers(0x0000ea4b254b24eb, 0x000000000000ba27);
+                testNumbers(0x000009f7ce21b811, 0x000000000000e8f6);
+                testNumbers(0x00009cc645fa08a1, 0x0000000000a29ea3);
+                testNumbers(0x0000726f9a9f816e, 0x000000000070dce1);
+                testNumbers(0x0000a4be34825ef6, 0x0000000000bb2be7);
+                testNumbers(0x000057ff147cb7c1, 0x0000000000e255af);
+                testNumbers(0x0000ab9d6f546dd4, 0x000000007e2772a5);
+                testNumbers(0x0000b148e3446e89, 0x0000000051ed3c28);
+                testNumbers(0x00001e3abfe9725e, 0x00000000d4dec3f4);
+                testNumbers(0x0000f61bcaba115e, 0x00000000fade149f);
+                testNumbers(0x0000ae642b9a6626, 0x000000d8de0e0b9a);
+                testNumbers(0x00009d015a13c8ae, 0x000000afc8827997);
+                testNumbers(0x0000ecc72cc2df89, 0x00000070d47ec7c4);
+                testNumbers(0x0000fdbf05894fd2, 0x00000012aec393bd);
+                testNumbers(0x0000cd7675a70874, 0x0000d7d696a62cbc);
+                testNumbers(0x0000fad44a89216d, 0x0000cb8cfc8ada4c);
+                testNumbers(0x0000f41eb5363551, 0x00009c040aa7775e);
+                testNumbers(0x00003c02d93e01f6, 0x0000f1f4e68a14f8);
+                testNumbers(0x0000e0d99954b598, 0x00b2a2de4e453485);
+                testNumbers(0x0000a6081be866d9, 0x00f2a12e845e4f2e);
+                testNumbers(0x0000ae56a5680dfd, 0x00c96cd7c15d5bec);
+                testNumbers(0x0000360363e37938, 0x00d4ed572e1937e0);
+                testNumbers(0x00001f052aebf185, 0x3584e582d1c6db1a);
+                testNumbers(0x00003fac9c7b3d1b, 0xa4b120f080d69113);
+                testNumbers(0x00005330d51c3217, 0xc16dd32ffd822c0e);
+                testNumbers(0x0000cd0694ff5ab0, 0x29673fe67245fbfc);
+                testNumbers(0x0098265e5a308523, 0x000000000000007d);
+                testNumbers(0x00560863350df217, 0x00000000000000c8);
+                testNumbers(0x00798ce804d829a1, 0x00000000000000b1);
+                testNumbers(0x007994c0051256fd, 0x000000000000005c);
+                testNumbers(0x00ff1a2838e69f42, 0x0000000000003c16);
+                testNumbers(0x009e7e95ac5de2c7, 0x000000000000ed49);
+                testNumbers(0x00fd6867eabba5c0, 0x000000000000c689);
+                testNumbers(0x009d1632daf20de0, 0x000000000000b74f);
+                testNumbers(0x00ee29d8f76d4e9c, 0x00000000008020d4);
+                testNumbers(0x0089e03ecf8daa0a, 0x00000000003e7587);
+                testNumbers(0x00115763be4beb44, 0x000000000088f762);
+                testNumbers(0x00815cfc87c427d0, 0x00000000009eec06);
+                testNumbers(0x001d9c3c9ded0c1a, 0x00000000b9f6d331);
+                testNumbers(0x00932225412f1222, 0x00000000130ff743);
+                testNumbers(0x00fe82151e2e0bf3, 0x00000000781cd6f9);
+                testNumbers(0x002222abb5061b12, 0x000000000491f1df);
+                testNumbers(0x0012ce0cf0452748, 0x000000a8566274aa);
+                testNumbers(0x00e570484e9937e1, 0x000000ac81f171be);
+                testNumbers(0x00eb371f7f8f514e, 0x000000df0248189c);
+                testNumbers(0x003777a7cc43dfd7, 0x0000003a7b8eaf40);
+                testNumbers(0x00e181db76238786, 0x00004126e572a568);
+                testNumbers(0x00ac1df87977e122, 0x0000e1e8cfde6678);
+                testNumbers(0x001c858763a2c23b, 0x000004ef61f3964f);
+                testNumbers(0x00bd786bbb71ce46, 0x00002cda097a464f);
+                testNumbers(0x00a7a6de21a46360, 0x00007afda16f98c3);
+                testNumbers(0x006fed70a6ccfdf2, 0x009771441e8e00e8);
+                testNumbers(0x005ad2782dcd5e60, 0x000d170d518385f6);
+                testNumbers(0x001fd67b153bc9b9, 0x007b3366dff66c6c);
+                testNumbers(0x00bf00203beb73f4, 0x693495fefab1c77e);
+                testNumbers(0x002faac1b1b068f8, 0x1cb11cc5c3aaff86);
+                testNumbers(0x00bb63cfbffe7648, 0x84f5b0c583f9e77b);
+                testNumbers(0x00615db89673241c, 0x8de5f125247eba0f);
+                testNumbers(0x9be183a6b293dffe, 0x0000000000000072);
+                testNumbers(0xa3df9b76d8a51b19, 0x00000000000000c4);
+                testNumbers(0xb4cc300f0ea7566d, 0x000000000000007e);
+                testNumbers(0xfdac12a8e23e16e7, 0x0000000000000015);
+                testNumbers(0xc0805405aadc0f47, 0x00000000000019d4);
+                testNumbers(0x843a391f8d9f8972, 0x000000000000317a);
+                testNumbers(0x5a0d124c427ed453, 0x00000000000034fe);
+                testNumbers(0x8631150f34008f1b, 0x0000000000002ecd);
+                testNumbers(0x3ff4c18715ad3a76, 0x000000000072d22a);
+                testNumbers(0x3ef93e5a649422bd, 0x0000000000db5c60);
+                testNumbers(0x6bdd1056ae58fe0e, 0x0000000000805c75);
+                testNumbers(0xeff1fa30f3ad9ded, 0x00000000000c83ca);
+                testNumbers(0xbbc143ac147e56a9, 0x00000000161179b7);
+                testNumbers(0x0829dde88caa2e45, 0x000000001443ab62);
+                testNumbers(0x97ac43ff797a4514, 0x0000000033eef42b);
+                testNumbers(0x703e9cdf96a148aa, 0x000000008e08f3d8);
+                testNumbers(0x75cbb739b54e2ad6, 0x0000007a8b12628c);
+                testNumbers(0x91e42fafe97d638f, 0x0000000fbe867c51);
+                testNumbers(0x9159d77deec116c1, 0x00000096c0c774fc);
+                testNumbers(0xb59dbb4c15761d88, 0x0000004a033a73e7);
+                testNumbers(0xab668e9783af9617, 0x00005aa18404076c);
+                testNumbers(0x54c68e5b5c4127df, 0x0000f2934fd8dd1f);
+                testNumbers(0xf490d3936184c9f9, 0x00004007477e2110);
+                testNumbers(0x349e577c9d5c44e2, 0x0000bdb2235af963);
+                testNumbers(0x58f3ac26cdafde28, 0x0017d4f4ade9ec35);
+                testNumbers(0xa4a263c316d21f4c, 0x00a7ec1e6fda834b);
+                testNumbers(0x6ab14771c448666f, 0x005b0f49593c3a27);
+                testNumbers(0x15f392c3602aa4f7, 0x0018af171045f88e);
+                testNumbers(0xf17de69c0063f62c, 0xee2a164c2c3a46f8);
+                testNumbers(0xf34b743eeff8e5c6, 0x4f4067f1a0e404ad);
+                testNumbers(0xee0296f678756647, 0xf1bbfdc6f0280d36);
+                testNumbers(0x65c33db0c952b829, 0xa7ab9c39dcffbcf3);
+                Console.WriteLine("All tests passed.");
+                return 100;
+            }
+            catch (DivideByZeroException)
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/int64/unsigned/packages.config b/tests/src/JIT/Methodical/int64/unsigned/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/int64/unsigned/unsigned.csproj b/tests/src/JIT/Methodical/int64/unsigned/unsigned.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/app.config b/tests/src/JIT/Methodical/nonvirtualcall/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/classic.cs b/tests/src/JIT/Methodical/nonvirtualcall/classic.cs
new file mode 100644 (file)
index 0000000..692d3fc
--- /dev/null
@@ -0,0 +1,225 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public abstract class Base
+    {
+        public abstract string AbstractFinal();
+        public abstract string AbstractOverrideFinal();
+        public abstract string AbstractOverrideOverride();
+        public abstract string AbstractOverrideNil();
+
+        public virtual string VirtualFinal()
+        {
+            return "Base.VirtualFinal";
+        }
+        public virtual string VirtualNilFinal()
+        {
+            return "Base.VirtualNilFinal";
+        }
+        public virtual string VirtualOverrideFinal()
+        {
+            return "Base.VirtualOverrideFinal";
+        }
+        public virtual string VirtualNilOverride()
+        {
+            return "Base.VirtualNilOverride";
+        }
+        public virtual string VirtualNilNil()
+        {
+            return "Base.VirtualNilNil";
+        }
+        public virtual string VirtualOverrideOverride()
+        {
+            return "Base.VirtualOverrideOverride";
+        }
+        public virtual string VirtualOverrideNil()
+        {
+            return "Base.VirtualOverrideNil";
+        }
+    }
+
+    public class Child : Base
+    {
+        public sealed override string AbstractFinal()
+        {
+            return "Child.AbstractFinal";
+        }
+        public override string AbstractOverrideFinal()
+        {
+            return "Child.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride()
+        {
+            return "Child.AbstractOverrideOverride";
+        }
+        public override string AbstractOverrideNil()
+        {
+            return "Child.AbstractOverrideNil";
+        }
+        public sealed override string VirtualFinal()
+        {
+            return "Child.VirtualFinal";
+        }
+        public override string VirtualOverrideFinal()
+        {
+            return "Child.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "Child.VirtualOverrideOverride";
+        }
+        public override string VirtualOverrideNil()
+        {
+            return "Child.VirtualOverrideNil";
+        }
+
+        public void TestChild()
+        {
+            Console.WriteLine("Call from inside Child");
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal());
+            Assert.AreEqual("Child.AbstractOverrideFinal", AbstractOverrideFinal());
+            Assert.AreEqual("Child.AbstractOverrideOverride", AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil());
+            Assert.AreEqual("Base.VirtualFinal", base.VirtualFinal());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal());
+            Assert.AreEqual("Base.VirtualOverrideFinal", base.VirtualOverrideFinal());
+            Assert.AreEqual("Child.VirtualOverrideFinal", VirtualOverrideFinal());
+            Assert.AreEqual("Base.VirtualOverrideOverride", base.VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideOverride", VirtualOverrideOverride());
+            Assert.AreEqual("Base.VirtualOverrideNil", base.VirtualOverrideNil());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil());
+        }
+    }
+
+    public class GrandChild : Child
+    {
+        public sealed override string AbstractOverrideFinal()
+        {
+            return "GrandChild.AbstractOverrideFinal";
+        }
+
+        public override string AbstractOverrideOverride()
+        {
+            return "GrandChild.AbstractOverrideOverride";
+        }
+        public sealed override string VirtualNilFinal()
+        {
+            return "GrandChild.VirtualNilFinal";
+        }
+        public sealed override string VirtualOverrideFinal()
+        {
+            return "GrandChild.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "GrandChild.VirtualOverrideOverride";
+        }
+        public override string VirtualNilOverride()
+        {
+            return "GrandChild.VirtualNilOverride";
+        }
+
+        public void TestGrandChild()
+        {
+            Console.WriteLine("Call from inside GrandChild");
+            Assert.AreEqual("Child.AbstractFinal", base.AbstractFinal());
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal());
+            Assert.AreEqual("Child.AbstractOverrideFinal", base.AbstractOverrideFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", AbstractOverrideFinal());
+            Assert.AreEqual("Child.AbstractOverrideOverride", base.AbstractOverrideOverride());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", base.AbstractOverrideNil());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil());
+            Assert.AreEqual("Child.VirtualFinal", base.VirtualFinal());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal());
+            Assert.AreEqual("Child.VirtualOverrideFinal", base.VirtualOverrideFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", VirtualOverrideFinal());
+            Assert.AreEqual("Child.VirtualOverrideOverride", base.VirtualOverrideOverride());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideNil", base.VirtualOverrideNil());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil());
+        }
+    }
+
+    public sealed class SealedGrandChild : GrandChild
+    { }
+
+    public static class Program
+    {
+        public static void CallSealedGrandChild()
+        {
+            Console.WriteLine("Call SealedGrandChild from outside");
+            // Calling methods of a sealed class from outside
+            SealedGrandChild o = new SealedGrandChild();
+            Assert.AreEqual("Child.AbstractFinal", o.AbstractFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", o.AbstractOverrideFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", o.AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", o.AbstractOverrideNil());
+            Assert.AreEqual("Child.VirtualFinal", o.VirtualFinal());
+            Assert.AreEqual("GrandChild.VirtualNilFinal", o.VirtualNilFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", o.VirtualOverrideFinal());
+            Assert.AreEqual("GrandChild.VirtualNilOverride", o.VirtualNilOverride());
+            Assert.AreEqual("Base.VirtualNilNil", o.VirtualNilNil());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", o.VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideNil", o.VirtualOverrideNil());
+        }
+
+        public static void CallFromInsideChild()
+        {
+            Child child = new Child();
+            child.TestChild();
+        }
+
+        public static void CallFromInsideGrandChild()
+        {
+            GrandChild child = new GrandChild();
+            child.TestGrandChild();
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallSealedGrandChild();
+                CallFromInsideChild();
+                CallFromInsideGrandChild();
+
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/cs_template.proj b/tests/src/JIT/Methodical/nonvirtualcall/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/delegate.cs b/tests/src/JIT/Methodical/nonvirtualcall/delegate.cs
new file mode 100644 (file)
index 0000000..510cb94
--- /dev/null
@@ -0,0 +1,187 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public abstract class Base
+    {
+        public abstract string AbstractFinal();
+        public abstract string AbstractOverrideFinal();
+        public abstract string AbstractOverrideOverride();
+        public abstract string AbstractOverrideNil();
+
+        public virtual string VirtualFinal()
+        {
+            return "Base.VirtualFinal";
+        }
+
+        public virtual string VirtualNilFinal()
+        {
+            return "Base.VirtualNilFinal";
+        }
+
+        public virtual string VirtualOverrideFinal()
+        {
+            return "Base.VirtualOverrideFinal";
+        }
+        public virtual string VirtualNilOverride()
+        {
+            return "Base.VirtualNilOverride";
+        }
+        public virtual string VirtualNilNil()
+        {
+            return "Base.VirtualNilNil";
+        }
+        public virtual string VirtualOverrideOverride()
+        {
+            return "Base.VirtualOverrideOverride";
+        }
+        public virtual string VirtualOverrideNil()
+        {
+            return "Base.VirtualOverrideNil";
+        }
+    }
+
+    public class Child : Base
+    {
+        public sealed override string AbstractFinal()
+        {
+            return "Child.AbstractFinal";
+        }
+        public override string AbstractOverrideFinal()
+        {
+            return "Child.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride()
+        {
+            return "Child.AbstractOverrideOverride";
+        }
+        public override string AbstractOverrideNil()
+        {
+            return "Child.AbstractOverrideNil";
+        }
+        public sealed override string VirtualFinal()
+        {
+            return "Child.VirtualFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "Child.VirtualOverrideOverride";
+        }
+        public override string VirtualOverrideNil()
+        {
+            return "Child.VirtualOverrideNil";
+        }
+    }
+
+    public class GrandChild : Child
+    {
+        public sealed override string AbstractOverrideFinal()
+        {
+            return "GrandChild.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride()
+        {
+            return "GrandChild.AbstractOverrideOverride";
+        }
+        public sealed override string VirtualNilFinal()
+        {
+            return "GrandChild.VirtualNilFinal";
+        }
+        public sealed override string VirtualOverrideFinal()
+        {
+            return "GrandChild.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "GrandChild.VirtualOverrideOverride";
+        }
+        public override string VirtualNilOverride()
+        {
+            return "GrandChild.VirtualNilOverride";
+        }
+    }
+
+    public sealed class SealedGrandChild : GrandChild
+    { }
+
+    public delegate string TestMethod();
+
+    public static class Program
+    {
+        public static void CallDelegateFromSealedGrandChild()
+        {
+            SealedGrandChild child = new SealedGrandChild();
+
+            Assert.AreEqual("Child.AbstractFinal", new TestMethod(child.AbstractFinal));
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", new TestMethod(child.AbstractOverrideFinal));
+            Assert.AreEqual("Child.AbstractOverrideNil", new TestMethod(child.AbstractOverrideNil));
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", new TestMethod(child.AbstractOverrideOverride));
+            Assert.AreEqual("Child.VirtualFinal", new TestMethod(child.VirtualFinal));
+            Assert.AreEqual("GrandChild.VirtualNilFinal", new TestMethod(child.VirtualNilFinal));
+            Assert.AreEqual("Base.VirtualNilNil", new TestMethod(child.VirtualNilNil));
+            Assert.AreEqual("GrandChild.VirtualNilOverride", new TestMethod(child.VirtualNilOverride));
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", new TestMethod(child.VirtualOverrideFinal));
+            Assert.AreEqual("Child.VirtualOverrideNil", new TestMethod(child.VirtualOverrideNil));
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", new TestMethod(child.VirtualOverrideOverride));
+        }
+
+        public static void CallDelegateFromGrandChild()
+        {
+            GrandChild child = new GrandChild();
+
+            Assert.AreEqual("Child.AbstractFinal", new TestMethod(child.AbstractFinal));
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", new TestMethod(child.AbstractOverrideFinal));
+            Assert.AreEqual("Child.VirtualFinal", new TestMethod(child.VirtualFinal));
+            Assert.AreEqual("GrandChild.VirtualNilFinal", new TestMethod(child.VirtualNilFinal));
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", new TestMethod(child.VirtualOverrideFinal));
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallDelegateFromGrandChild();
+                CallDelegateFromSealedGrandChild();
+
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, TestMethod right)
+        {
+            AreEqual(left, right());
+        }
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/generics.cs b/tests/src/JIT/Methodical/nonvirtualcall/generics.cs
new file mode 100644 (file)
index 0000000..8cb50e8
--- /dev/null
@@ -0,0 +1,224 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public abstract class Base
+    {
+        public abstract string AbstractFinal<T>();
+        public abstract string AbstractOverrideFinal<T>();
+        public abstract string AbstractOverrideOverride<T>();
+        public abstract string AbstractOverrideNil<T>();
+
+        public virtual string VirtualFinal<T>()
+        {
+            return "Base.VirtualFinal";
+        }
+        public virtual string VirtualNilFinal<T>()
+        {
+            return "Base.VirtualNilFinal";
+        }
+        public virtual string VirtualOverrideFinal<T>()
+        {
+            return "Base.VirtualOverrideFinal";
+        }
+        public virtual string VirtualNilOverride<T>()
+        {
+            return "Base.VirtualNilOverride";
+        }
+        public virtual string VirtualNilNil<T>()
+        {
+            return "Base.VirtualNilNil";
+        }
+        public virtual string VirtualOverrideOverride<T>()
+        {
+            return "Base.VirtualOverrideOverride";
+        }
+        public virtual string VirtualOverrideNil<T>()
+        {
+            return "Base.VirtualOverrideNil";
+        }
+    }
+
+    public class Child : Base
+    {
+        public sealed override string AbstractFinal<T>()
+        {
+            return "Child.AbstractFinal";
+        }
+        public override string AbstractOverrideFinal<T>()
+        {
+            return "Child.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride<T>()
+        {
+            return "Child.AbstractOverrideOverride";
+        }
+        public override string AbstractOverrideNil<T>()
+        {
+            return "Child.AbstractOverrideNil";
+        }
+        public sealed override string VirtualFinal<T>()
+        {
+            return "Child.VirtualFinal";
+        }
+        public override string VirtualOverrideFinal<T>()
+        {
+            return "Child.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride<T>()
+        {
+            return "Child.VirtualOverrideOverride";
+        }
+        public override string VirtualOverrideNil<T>()
+        {
+            return "Child.VirtualOverrideNil";
+        }
+
+        public void TestChild()
+        {
+            Console.WriteLine("Call from inside Child");
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal<object>());
+            Assert.AreEqual("Child.AbstractOverrideFinal", AbstractOverrideFinal<object>());
+            Assert.AreEqual("Child.AbstractOverrideOverride", AbstractOverrideOverride<object>());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil<object>());
+            Assert.AreEqual("Base.VirtualFinal", base.VirtualFinal<object>());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal<object>());
+            Assert.AreEqual("Base.VirtualOverrideFinal", base.VirtualOverrideFinal<object>());
+            Assert.AreEqual("Child.VirtualOverrideFinal", VirtualOverrideFinal<object>());
+            Assert.AreEqual("Base.VirtualOverrideOverride", base.VirtualOverrideOverride<object>());
+            Assert.AreEqual("Child.VirtualOverrideOverride", VirtualOverrideOverride<object>());
+            Assert.AreEqual("Base.VirtualOverrideNil", base.VirtualOverrideNil<object>());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil<object>());
+        }
+    }
+
+    public class GrandChild : Child
+    {
+        public sealed override string AbstractOverrideFinal<T>()
+        {
+            return "GrandChild.AbstractOverrideFinal";
+        }
+
+        public override string AbstractOverrideOverride<T>()
+        {
+            return "GrandChild.AbstractOverrideOverride";
+        }
+        public sealed override string VirtualNilFinal<T>()
+        {
+            return "GrandChild.VirtualNilFinal";
+        }
+        public sealed override string VirtualOverrideFinal<T>()
+        {
+            return "GrandChild.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride<T>()
+        {
+            return "GrandChild.VirtualOverrideOverride";
+        }
+        public override string VirtualNilOverride<T>()
+        {
+            return "GrandChild.VirtualNilOverride";
+        }
+
+        public void TestGrandChild()
+        {
+            Console.WriteLine("Call from inside GrandChild");
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal<object>());
+            Assert.AreEqual("Child.AbstractOverrideFinal", base.AbstractOverrideFinal<object>());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", AbstractOverrideFinal<object>());
+            Assert.AreEqual("Child.AbstractOverrideOverride", base.AbstractOverrideOverride<object>());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", AbstractOverrideOverride<object>());
+            Assert.AreEqual("Child.AbstractOverrideNil", base.AbstractOverrideNil<object>());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil<object>());
+            Assert.AreEqual("Child.VirtualFinal", base.VirtualFinal<object>());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal<object>());
+            Assert.AreEqual("Child.VirtualOverrideFinal", base.VirtualOverrideFinal<object>());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", VirtualOverrideFinal<object>());
+            Assert.AreEqual("Child.VirtualOverrideOverride", base.VirtualOverrideOverride<object>());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", VirtualOverrideOverride<object>());
+            Assert.AreEqual("Child.VirtualOverrideNil", base.VirtualOverrideNil<object>());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil<object>());
+        }
+    }
+
+    public sealed class SealedGrandChild : GrandChild
+    { }
+
+    public static class Program
+    {
+        public static void CallSealedGrandChild()
+        {
+            Console.WriteLine("Call SealedGrandChild from outside");
+            // Calling methods of a sealed class from outside
+            SealedGrandChild o = new SealedGrandChild();
+            Assert.AreEqual("Child.AbstractFinal", o.AbstractFinal<object>());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", o.AbstractOverrideFinal<object>());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", o.AbstractOverrideOverride<object>());
+            Assert.AreEqual("Child.AbstractOverrideNil", o.AbstractOverrideNil<object>());
+            Assert.AreEqual("Child.VirtualFinal", o.VirtualFinal<object>());
+            Assert.AreEqual("GrandChild.VirtualNilFinal", o.VirtualNilFinal<object>());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", o.VirtualOverrideFinal<object>());
+            Assert.AreEqual("GrandChild.VirtualNilOverride", o.VirtualNilOverride<object>());
+            Assert.AreEqual("Base.VirtualNilNil", o.VirtualNilNil<object>());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", o.VirtualOverrideOverride<object>());
+            Assert.AreEqual("Child.VirtualOverrideNil", o.VirtualOverrideNil<object>());
+        }
+
+        public static void CallFromInsideChild()
+        {
+            Child child = new Child();
+            child.TestChild();
+        }
+
+        public static void CallFromInsideGrandChild()
+        {
+            GrandChild child = new GrandChild();
+            child.TestGrandChild();
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallSealedGrandChild();
+                CallFromInsideChild();
+                CallFromInsideGrandChild();
+
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/generics2.cs b/tests/src/JIT/Methodical/nonvirtualcall/generics2.cs
new file mode 100644 (file)
index 0000000..58ecc28
--- /dev/null
@@ -0,0 +1,224 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public abstract class Base<K>
+    {
+        public abstract string AbstractFinal();
+        public abstract string AbstractOverrideFinal();
+        public abstract string AbstractOverrideOverride();
+        public abstract string AbstractOverrideNil();
+
+        public virtual string VirtualFinal()
+        {
+            return "Base.VirtualFinal";
+        }
+        public virtual string VirtualNilFinal()
+        {
+            return "Base.VirtualNilFinal";
+        }
+        public virtual string VirtualOverrideFinal()
+        {
+            return "Base.VirtualOverrideFinal";
+        }
+        public virtual string VirtualNilOverride()
+        {
+            return "Base.VirtualNilOverride";
+        }
+        public virtual string VirtualNilNil()
+        {
+            return "Base.VirtualNilNil";
+        }
+        public virtual string VirtualOverrideOverride()
+        {
+            return "Base.VirtualOverrideOverride";
+        }
+        public virtual string VirtualOverrideNil()
+        {
+            return "Base.VirtualOverrideNil";
+        }
+    }
+
+    public class Child<K> : Base<K>
+    {
+        public sealed override string AbstractFinal()
+        {
+            return "Child.AbstractFinal";
+        }
+        public override string AbstractOverrideFinal()
+        {
+            return "Child.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride()
+        {
+            return "Child.AbstractOverrideOverride";
+        }
+        public override string AbstractOverrideNil()
+        {
+            return "Child.AbstractOverrideNil";
+        }
+        public sealed override string VirtualFinal()
+        {
+            return "Child.VirtualFinal";
+        }
+        public override string VirtualOverrideFinal()
+        {
+            return "Child.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "Child.VirtualOverrideOverride";
+        }
+        public override string VirtualOverrideNil()
+        {
+            return "Child.VirtualOverrideNil";
+        }
+
+        public void TestChild()
+        {
+            Console.WriteLine("Call from inside Child");
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal());
+            Assert.AreEqual("Child.AbstractOverrideFinal", AbstractOverrideFinal());
+            Assert.AreEqual("Child.AbstractOverrideOverride", AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil());
+            Assert.AreEqual("Base.VirtualFinal", base.VirtualFinal());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal());
+            Assert.AreEqual("Base.VirtualOverrideFinal", base.VirtualOverrideFinal());
+            Assert.AreEqual("Child.VirtualOverrideFinal", VirtualOverrideFinal());
+            Assert.AreEqual("Base.VirtualOverrideOverride", base.VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideOverride", VirtualOverrideOverride());
+            Assert.AreEqual("Base.VirtualOverrideNil", base.VirtualOverrideNil());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil());
+        }
+    }
+
+    public class GrandChild<K> : Child<K>
+    {
+        public sealed override string AbstractOverrideFinal()
+        {
+            return "GrandChild.AbstractOverrideFinal";
+        }
+
+        public override string AbstractOverrideOverride()
+        {
+            return "GrandChild.AbstractOverrideOverride";
+        }
+        public sealed override string VirtualNilFinal()
+        {
+            return "GrandChild.VirtualNilFinal";
+        }
+        public sealed override string VirtualOverrideFinal()
+        {
+            return "GrandChild.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "GrandChild.VirtualOverrideOverride";
+        }
+        public override string VirtualNilOverride()
+        {
+            return "GrandChild.VirtualNilOverride";
+        }
+
+        public void TestGrandChild()
+        {
+            Console.WriteLine("Call from inside GrandChild");
+            Assert.AreEqual("Child.AbstractFinal", AbstractFinal());
+            Assert.AreEqual("Child.AbstractOverrideFinal", base.AbstractOverrideFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", AbstractOverrideFinal());
+            Assert.AreEqual("Child.AbstractOverrideOverride", base.AbstractOverrideOverride());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", base.AbstractOverrideNil());
+            Assert.AreEqual("Child.AbstractOverrideNil", AbstractOverrideNil());
+            Assert.AreEqual("Child.VirtualFinal", base.VirtualFinal());
+            Assert.AreEqual("Child.VirtualFinal", VirtualFinal());
+            Assert.AreEqual("Child.VirtualOverrideFinal", base.VirtualOverrideFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", VirtualOverrideFinal());
+            Assert.AreEqual("Child.VirtualOverrideOverride", base.VirtualOverrideOverride());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideNil", base.VirtualOverrideNil());
+            Assert.AreEqual("Child.VirtualOverrideNil", VirtualOverrideNil());
+        }
+    }
+
+    public sealed class SealedGrandChild<K> : GrandChild<K>
+    { }
+
+    public static class Program
+    {
+        public static void CallSealedGrandChild()
+        {
+            Console.WriteLine("Call SealedGrandChild from outside");
+            // Calling methods of a sealed class from outside
+            SealedGrandChild<object> o = new SealedGrandChild<object>();
+            Assert.AreEqual("Child.AbstractFinal", o.AbstractFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", o.AbstractOverrideFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", o.AbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", o.AbstractOverrideNil());
+            Assert.AreEqual("Child.VirtualFinal", o.VirtualFinal());
+            Assert.AreEqual("GrandChild.VirtualNilFinal", o.VirtualNilFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", o.VirtualOverrideFinal());
+            Assert.AreEqual("GrandChild.VirtualNilOverride", o.VirtualNilOverride());
+            Assert.AreEqual("Base.VirtualNilNil", o.VirtualNilNil());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", o.VirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideNil", o.VirtualOverrideNil());
+        }
+
+        public static void CallFromInsideChild()
+        {
+            Child<object> child = new Child<object>();
+            child.TestChild();
+        }
+
+        public static void CallFromInsideGrandChild()
+        {
+            GrandChild<object> child = new GrandChild<object>();
+            child.TestGrandChild();
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallSealedGrandChild();
+                CallFromInsideChild();
+                CallFromInsideGrandChild();
+
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/nonvirtualcall.csproj b/tests/src/JIT/Methodical/nonvirtualcall/nonvirtualcall.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/packages.config b/tests/src/JIT/Methodical/nonvirtualcall/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/tailcall.cs b/tests/src/JIT/Methodical/nonvirtualcall/tailcall.cs
new file mode 100644 (file)
index 0000000..0222a22
--- /dev/null
@@ -0,0 +1,223 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public abstract class Base
+    {
+        public abstract string AbstractFinal();
+        public abstract string AbstractOverrideFinal();
+        public abstract string AbstractOverrideOverride();
+        public abstract string AbstractOverrideNil();
+
+        public virtual string VirtualFinal()
+        {
+            return "Base.VirtualFinal";
+        }
+
+        public virtual string VirtualNilFinal()
+        {
+            return "Base.VirtualNilFinal";
+        }
+
+        public virtual string VirtualOverrideFinal()
+        {
+            return "Base.VirtualOverrideFinal";
+        }
+        public virtual string VirtualNilOverride()
+        {
+            return "Base.VirtualNilOverride";
+        }
+        public virtual string VirtualNilNil()
+        {
+            return "Base.VirtualNilNil";
+        }
+        public virtual string VirtualOverrideOverride()
+        {
+            return "Base.VirtualOverrideOverride";
+        }
+        public virtual string VirtualOverrideNil()
+        {
+            return "Base.VirtualOverrideNil";
+        }
+    }
+
+    public class Child : Base
+    {
+        public sealed override string AbstractFinal()
+        {
+            return "Child.AbstractFinal";
+        }
+        public string CallAbstractFinal()
+        {
+            return AbstractFinal();
+        }
+        public override string AbstractOverrideFinal()
+        {
+            return "Child.AbstractOverrideFinal";
+        }
+        public override string AbstractOverrideOverride()
+        {
+            return "Child.AbstractOverrideOverride";
+        }
+        public override string AbstractOverrideNil()
+        {
+            return "Child.AbstractOverrideNil";
+        }
+        public string CallAbstractOverrideNil()
+        {
+            return AbstractOverrideNil();
+        }
+        public sealed override string VirtualFinal()
+        {
+            return "Child.VirtualFinal";
+        }
+        public string CallVirtualFinal()
+        {
+            return VirtualFinal();
+        }
+        public override string VirtualOverrideFinal()
+        {
+            return "Child.VirtualOverrideFinal";
+        }
+        public override string VirtualOverrideOverride()
+        {
+            return "Child.VirtualOverrideOverride";
+        }
+        public override string VirtualOverrideNil()
+        {
+            return "Child.VirtualOverrideNil";
+        }
+        public string CallVirtualOverrideNil()
+        {
+            return VirtualOverrideNil();
+        }
+    }
+
+    public class GrandChild : Child
+    {
+        public sealed override string AbstractOverrideFinal()
+        {
+            return "GrandChild.AbstractOverrideFinal";
+        }
+
+        public string CallAbstractOverrideFinal()
+        {
+            return AbstractOverrideFinal();
+        }
+
+        public override string AbstractOverrideOverride()
+        {
+            return "GrandChild.AbstractOverrideOverride";
+        }
+
+        public string CallAbstractOverrideOverride()
+        {
+            return AbstractOverrideOverride();
+        }
+
+        public sealed override string VirtualNilFinal()
+        {
+            return "GrandChild.VirtualNilFinal";
+        }
+
+        public string CallVirtualNilFinal()
+        {
+            return VirtualNilFinal();
+        }
+
+        public sealed override string VirtualOverrideFinal()
+        {
+            return "GrandChild.VirtualOverrideFinal";
+        }
+
+        public string CallVirtualOverrideFinal()
+        {
+            return VirtualOverrideFinal();
+        }
+
+        public override string VirtualOverrideOverride()
+        {
+            return "GrandChild.VirtualOverrideOverride";
+        }
+
+        public string CallVirtualOverrideOverride()
+        {
+            return VirtualOverrideOverride();
+        }
+
+        public override string VirtualNilOverride()
+        {
+            return "GrandChild.VirtualNilOverride";
+        }
+
+        public string CallVirtualNilOverride()
+        {
+            return VirtualNilOverride();
+        }
+
+        public void TestGrandChild()
+        {
+            Console.WriteLine("Call from inside GrandChild");
+            Assert.AreEqual("Child.AbstractFinal", CallAbstractFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideFinal", CallAbstractOverrideFinal());
+            Assert.AreEqual("GrandChild.AbstractOverrideOverride", CallAbstractOverrideOverride());
+            Assert.AreEqual("Child.AbstractOverrideNil", CallAbstractOverrideNil());
+            Assert.AreEqual("Child.VirtualFinal", CallVirtualFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideFinal", CallVirtualOverrideFinal());
+            Assert.AreEqual("GrandChild.VirtualOverrideOverride", CallVirtualOverrideOverride());
+            Assert.AreEqual("Child.VirtualOverrideNil", CallVirtualOverrideNil());
+        }
+    }
+
+    public static class Program
+    {
+        public static void CallFromInsideGrandChild()
+        {
+            GrandChild child = new GrandChild();
+            child.TestGrandChild();
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallFromInsideGrandChild();
+
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/nonvirtualcall/valuetype.cs b/tests/src/JIT/Methodical/nonvirtualcall/valuetype.cs
new file mode 100644 (file)
index 0000000..37d3994
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+class ApplicationException : Exception
+{
+    public ApplicationException(string message) : base(message) { }
+}
+
+namespace Test
+{
+    public struct Dummy
+    {
+        public string Virtual()
+        {
+            return "Dummy.Virtual";
+        }
+    }
+
+    public delegate string TestMethod();
+
+    public static class Program
+    {
+        public static void CallDummy()
+        {
+            Dummy dummy = new Dummy();
+            Assert.AreEqual("Dummy.Virtual", dummy.Virtual());
+            Assert.AreEqual("Dummy.Virtual", new TestMethod(dummy.Virtual));
+        }
+
+        public static int Main(string[] args)
+        {
+            try
+            {
+                CallDummy();
+                Console.WriteLine("Test SUCCESS");
+                return 100;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex);
+                Console.WriteLine("Test FAILED");
+                return 101;
+            }
+        }
+    }
+
+    public static class Assert
+    {
+        public static void AreEqual(string left, TestMethod right)
+        {
+            AreEqual(left, right());
+        }
+        public static void AreEqual(string left, string right)
+        {
+            if (String.IsNullOrEmpty(left))
+                throw new ArgumentNullException("left");
+            if (string.IsNullOrEmpty(right))
+                throw new ArgumentNullException("right");
+            if (left != right)
+            {
+                string message = String.Format("[[{0}]] != [[{1}]]", left, right);
+                throw new ApplicationException(message);
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/app.config b/tests/src/JIT/Methodical/refany/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/refany/array1.cs b/tests/src/JIT/Methodical/refany/array1.cs
new file mode 100644 (file)
index 0000000..2609597
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static void TestRef(TypedReference _ref)
+        {
+            if (__reftype(_ref) == typeof(Array))
+            {
+                for (int i = 0; i < __refvalue(_ref, Array).Length; i++)
+                    __refvalue(_ref, Array).SetValue(new Test(), i);
+            }
+            if (__reftype(_ref) == typeof(long[]))
+            {
+                for (int i = 0; i < __refvalue(_ref, long[]).Length; i++)
+                    __refvalue(_ref, long[])[i]++;
+            }
+            if (__reftype(_ref) == typeof(ulong[,]))
+            {
+                for (int i = 0; i < 2; i++)
+                {
+                    for (int j = 0; j < 3; j++)
+                    {
+                        __refvalue(_ref, ulong[,])[i, j]--;
+                    }
+                }
+            }
+            if (__reftype(_ref) == typeof(ulong[][]))
+            {
+                for (int i = 0; i < 2; i++)
+                {
+                    for (int j = 0; j < 3; j++)
+                    {
+                        __refvalue(_ref, ulong[][])[i][j]--;
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            Array genericArray = Array.CreateInstance(typeof(Test), 16);
+            TestRef(__makeref(genericArray));
+            for (int i = 0; i < 16; i++)
+            {
+                if (genericArray.GetValue(i) == null ||
+                    genericArray.GetValue(i).GetType() != typeof(Test))
+                    return 1;
+            }
+
+            long[] al = new long[] { 1, 2, 3 };
+            TestRef(__makeref(al));
+            if (al[0] != 2 || al[1] != 3 || al[2] != 4)
+                return 2;
+
+            ulong[,] aul2 = new ulong[,] { { 1, 2, 3 }, { 4, 5, 6 } };
+            TestRef(__makeref(aul2));
+            for (int i = 0; i < 2; i++)
+            {
+                for (int j = 0; j < 3; j++)
+                {
+                    if (aul2[i, j] != (ulong)(i * 3 + j))
+                        return 3;
+                }
+            }
+
+            ulong[][] aul1 = new ulong[][] { new ulong[] { 1, 2, 3 }, new ulong[] { 4, 5, 6 } };
+            TestRef(__makeref(aul1));
+            for (int i = 0; i < 2; i++)
+            {
+                for (int j = 0; j < 3; j++)
+                {
+                    if (aul1[i][j] != (ulong)(i * 3 + j))
+                        return 3;
+                }
+            }
+
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/array2.cs b/tests/src/JIT/Methodical/refany/array2.cs
new file mode 100644 (file)
index 0000000..2517715
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static void TestRef(TypedReference _ref)
+        {
+            if (__reftype(_ref) == typeof(ulong[,]))
+            {
+                for (int i = 0; i < 2; i++)
+                {
+                    for (int j = 0; j < 3; j++)
+                    {
+                        __refvalue(_ref, ulong[,])[i, j]--;
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            ulong[,] aul2 = new ulong[,] { { 1, 2, 3 }, { 4, 5, 6 } };
+            TestRef(__makeref(aul2));
+            for (int i = 0; i < 2; i++)
+            {
+                for (int j = 0; j < 3; j++)
+                {
+                    if (aul2[i, j] != (ulong)(i * 3 + j))
+                        return 3;
+                }
+            }
+
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/cs_template.proj b/tests/src/JIT/Methodical/refany/cs_template.proj
new file mode 100644 (file)
index 0000000..dccc73f
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <LinkLocalMscorlib>true</LinkLocalMscorlib>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
diff --git a/tests/src/JIT/Methodical/refany/format.cs b/tests/src/JIT/Methodical/refany/format.cs
new file mode 100644 (file)
index 0000000..62e657a
--- /dev/null
@@ -0,0 +1,279 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal enum Mood
+    {
+        good,
+        bad,
+        worse
+    }
+
+    internal class TestClass
+    {
+        private static String Format(TypedReference format, TypedReference _ref)
+        {
+            int length = __refvalue(format, String).Length;
+            char[] chars = __refvalue(format, String).ToCharArray();
+
+            String result = "";
+            int arg = 0;
+            for (int I = 0; I < length; I++)
+            {
+                if (chars[I] != '%')
+                    result += chars[I];
+                else
+                {
+                    I++;
+                    if (I >= length)
+                        throw new Exception();
+
+                    bool FALSE = false;
+                    bool TRUE = true;
+                    TypedReference bLong = __makeref(FALSE);
+                    if (chars[I] == 'l')
+                    {
+                        bLong = __makeref(TRUE);
+                        I++;
+                        if (I >= length)
+                            throw new Exception();
+                    }
+
+                    if (arg++ == 1)
+                        throw new Exception();
+
+                    switch (chars[I])
+                    {
+                        case 'b':
+                            if (__refvalue(bLong, bool))
+                                throw new Exception();
+                            if (__reftype(_ref) != typeof(bool))
+                                throw new Exception();
+                            if (__refvalue(_ref, bool))
+                                result += "true";
+                            else
+                                result += "false";
+                            break;
+
+                        case 'd':
+                            if (__refvalue(bLong, bool))
+                            {
+                                if (__reftype(_ref) != typeof(long))
+                                    throw new Exception();
+                                result += __refvalue(_ref, long).ToString();
+                            }
+                            else
+                            {
+                                if (__reftype(_ref) != typeof(int))
+                                    throw new Exception();
+                                result += __refvalue(_ref, int).ToString();
+                            }
+                            break;
+
+                        case 'u':
+                            if (__refvalue(bLong, bool))
+                            {
+                                if (__reftype(_ref) != typeof(UInt64))
+                                    throw new Exception();
+                                result += __refvalue(_ref, ulong).ToString();
+                            }
+                            else
+                            {
+                                if (__reftype(_ref) != typeof(uint))
+                                    throw new Exception();
+                                result += __refvalue(_ref, uint).ToString();
+                            }
+                            break;
+
+                        case 'f':
+                            if (__refvalue(bLong, bool))
+                            {
+                                if (__reftype(_ref) != typeof(double))
+                                    throw new Exception();
+                                result += __refvalue(_ref, double).ToString();
+                            }
+                            else
+                            {
+                                if (__reftype(_ref) != typeof(float))
+                                    throw new Exception();
+                                result += __refvalue(_ref, float).ToString();
+                            }
+                            break;
+
+                        case 's':
+                            if (__refvalue(bLong, bool))
+                                throw new Exception();
+                            if (__reftype(_ref) != typeof(String))
+                                throw new Exception();
+                            result += __refvalue(_ref, String) != null ? __refvalue(_ref, String) : "(null)";
+                            break;
+
+                        case 't':
+                            if (__refvalue(bLong, bool))
+                                throw new Exception();
+                            if (__reftype(_ref) != typeof(DateTime))
+                                throw new Exception();
+                            result += __refvalue(_ref, DateTime).ToString();
+                            break;
+
+                        case 'p':
+                            if (__refvalue(bLong, bool))
+                                throw new Exception();
+                            if (__reftype(_ref) != typeof(PlatformID))
+                                throw new Exception();
+                            result += __refvalue(_ref, PlatformID).ToString();
+                            break;
+
+                        case 'e':
+                            if (__refvalue(bLong, bool))
+                                throw new Exception();
+                            if (__reftype(_ref) != typeof(Mood))
+                                throw new Exception();
+                            switch (__refvalue(_ref, Mood))
+                            {
+                                case Mood.good:
+                                    result += "good";
+                                    break;
+                                case Mood.bad:
+                                    result += "bad";
+                                    break;
+                                case Mood.worse:
+                                    result += "worse";
+                                    break;
+                                default:
+                                    throw new Exception();
+                            }
+                            break;
+
+                        default:
+                            throw new Exception();
+                    }
+                }
+            }
+            return result;
+        }
+
+        private static void Test(String format, TypedReference arg, String result)
+        {
+            String s = Format(__makeref(format), arg);
+            if (s != result)
+            {
+                throw new Exception();
+            }
+        }
+
+        private static void TestLocals()
+        {
+            int d = 10;
+            uint u = 11u;
+            long l = 12;
+            ulong ul = 13u;
+            float f = 14.0f;
+            double dbl = 15.0d;
+            bool b = true;
+            DateTime t = new DateTime(100, 10, 1);
+            PlatformID pid = PlatformID.Win32NT;
+            Mood mood = Mood.good;
+            Test("{%d}", __makeref(d), "{10}");
+            Test("{%u}", __makeref(u), "{11}");
+            Test("{%ld}", __makeref(l), "{12}");
+            Test("{%lu}", __makeref(ul), "{13}");
+            Test("{%f}", __makeref(f), "{14}");
+            Test("{%lf}", __makeref(dbl), "{15}");
+            Test("{%b}", __makeref(b), "{true}");
+            Test("{%t}", __makeref(t), "{" + t.ToString() + "}");
+            Test("{%p}", __makeref(pid), "{Win32NT}");
+            Test("{%e}", __makeref(mood), "{good}");
+        }
+
+        private int _m_d = 20;
+        private static uint s_m_u = 21u;
+        private long _m_l = 22;
+        private static ulong s_m_ul = 23u;
+        private float _m_f = 24.0f;
+        private double _m_dbl = 25.0d;
+        private bool _m_b = false;
+        private static DateTime s_m_t = new DateTime(100, 10, 1);
+        private PlatformID _m_pid = PlatformID.Win32NT;
+        private Mood _m_mood = Mood.good;
+
+        private void TestFields()
+        {
+            Test("{%d}", __makeref(_m_d), "{20}");
+            Test("{%u}", __makeref(s_m_u), "{21}");
+            Test("{%ld}", __makeref(_m_l), "{22}");
+            Test("{%lu}", __makeref(s_m_ul), "{23}");
+            Test("{%f}", __makeref(_m_f), "{24}");
+            Test("{%lf}", __makeref(_m_dbl), "{25}");
+            Test("{%b}", __makeref(_m_b), "{false}");
+            Test("{%t}", __makeref(s_m_t), "{" + s_m_t.ToString() + "}");
+            Test("{%p}", __makeref(_m_pid), "{Win32NT}");
+            Test("{%e}", __makeref(_m_mood), "{good}");
+        }
+
+        private static void DoTestArgSlots(ref int d, ref uint u, ref long l,
+            ref ulong ul, ref float f, ref double dbl, ref bool b,
+            ref DateTime t, ref PlatformID pid)
+        {
+            Test("{%d}", __makeref(d), "{20}");
+            Test("{%u}", __makeref(u), "{21}");
+            Test("{%ld}", __makeref(l), "{22}");
+            Test("{%lu}", __makeref(ul), "{23}");
+            Test("{%f}", __makeref(f), "{24}");
+            Test("{%lf}", __makeref(dbl), "{25}");
+            Test("{%b}", __makeref(b), "{false}");
+            Test("{%t}", __makeref(t), "{" + t.ToString() + "}");
+            Test("{%p}", __makeref(pid), "{2}");
+        }
+
+        private static void TestArgSlots()
+        {
+            int d = 20;
+            uint u = 21u;
+            long l = 22;
+            ulong ul = 23u;
+            float f = 24.0f;
+            double dbl = 25.0d;
+            bool b = false;
+            DateTime t = new DateTime(100, 10, 1);
+            PlatformID pid = PlatformID.Win32NT;
+            DoTestArgSlots(ref d, ref u, ref l, ref ul, ref f, ref dbl, ref b, ref t, ref pid);
+        }
+
+        private static void TestArrayElem()
+        {
+            int[] d = new int[] { 10 };
+            uint[] u = new uint[] { 11u };
+            long[] l = new long[] { 12 };
+            ulong[] ul = new ulong[] { 13u };
+            float[] f = new float[] { 14.0f };
+            double[] dbl = new double[] { 15.0d };
+            bool[] b = new bool[] { true };
+            DateTime[] t = new DateTime[200];
+            t[1] = new DateTime(100, 10, 1);
+            PlatformID[] pid = new PlatformID[] { PlatformID.Win32NT };
+            Mood[] mood = new Mood[] { Mood.good };
+            Test("{%d}", __makeref(d[0]), "{10}");
+            Test("{%u}", __makeref(u[0]), "{11}");
+            Test("{%ld}", __makeref(l[0]), "{12}");
+            Test("{%lu}", __makeref(ul[0]), "{13}");
+            Test("{%f}", __makeref(f[0]), "{14}");
+            Test("{%lf}", __makeref(dbl[0]), "{15}");
+            Test("{%b}", __makeref(b[0]), "{true}");
+            Test("{%t}", __makeref(t[1]), "{" + t[1].ToString() + "}");
+            Test("{%p}", __makeref(pid[0]), "{Win32NT}");
+            Test("{%e}", __makeref(mood[0]), "{good}");
+        }
+
+        private static int Main()
+        {
+            TestLocals();
+            new TestClass().TestFields();
+            TestArrayElem();
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/gcreport.cs b/tests/src/JIT/Methodical/refany/gcreport.cs
new file mode 100644 (file)
index 0000000..d4f92da
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class StressTest2
+    {
+        public String m_helloStr = "Hello!";
+        public StressTest m_parent = null;
+    }
+
+    internal class StressTest
+    {
+        private StressTest2 _m_internal;
+
+        private StressTest()
+        {
+            _m_internal = new StressTest2();
+            _m_internal.m_parent = this;
+        }
+
+        private static bool Scenario1()
+        {
+            StressTest2 S = new StressTest2();
+            TypedReference R = __makeref(S);
+            S = null;
+            GC.Collect();
+            try
+            {
+                string str = __refvalue(R, StressTest2).m_helloStr;
+                return false;
+            }
+            catch (NullReferenceException)
+            {
+                return true;
+            }
+        }
+
+        private static bool Scenario2()
+        {
+            StressTest S = new StressTest();
+            TypedReference R = __makeref(S._m_internal);
+            S = null;
+            GC.Collect();
+            return __refvalue(R, StressTest2).m_parent._m_internal == __refvalue(R, StressTest2);
+        }
+
+        private static int Main()
+        {
+            if (!Scenario1())
+            {
+                return 1;
+            }
+            if (!Scenario2())
+            {
+                return 2;
+            }
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/lcs.cs b/tests/src/JIT/Methodical/refany/lcs.cs
new file mode 100644 (file)
index 0000000..14ec67f
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class LCS
+    {
+        private const int RANK = 4;
+
+        private static String buildLCS( /*int[,,,]*/TypedReference _b,
+                                /*char[]*/ TypedReference _X,
+                                /*int[]*/ TypedReference _ind)
+        {
+            int _i = 0;
+            for (TypedReference i = __makeref(_i);
+                __refvalue(i, int) < RANK; _i++)
+                if (__refvalue(_ind, int[])[__refvalue(i, int)] == 0) return "";
+
+            int L = __refvalue(_b, int[,,,])[
+                        __refvalue(_ind, int[])[0],
+                        __refvalue(_ind, int[])[1],
+                        __refvalue(_ind, int[])[2],
+                        __refvalue(_ind, int[])[3]];
+
+            if (L == RANK)
+            {
+                _i = 0;
+                for (TypedReference i = __makeref(_i);
+                    __refvalue(i, int) < RANK; _i++)
+                    __refvalue(_ind, int[])[__refvalue(i, int)]--;
+                int idx = __refvalue(_ind, int[])[0];
+                return buildLCS(_b, _X, _ind) + __refvalue(_X, char[])[idx];
+            }
+            if (L >= 0 && L < RANK)
+            {
+                __refvalue(_ind, int[])[L]--;
+                return buildLCS(_b, _X, _ind);
+            }
+            throw new Exception();
+        }
+
+        private static void findLCS(    /*int[,,,]*/ TypedReference _c,
+                                /*int[,,,]*/ TypedReference _b,
+                                /*char[][]*/ TypedReference _seq,
+                                /*int[]*/ TypedReference _len)
+        {
+            int[] ind = new int[RANK];
+            for (ind[0] = 1; ind[0] < __refvalue(_len, int[])[0]; ind[0]++)
+            {
+                for (ind[1] = 1; ind[1] < __refvalue(_len, int[])[1]; ind[1]++)
+                {
+                    for (ind[2] = 1; ind[2] < __refvalue(_len, int[])[2]; ind[2]++)
+                    {
+                        for (ind[3] = 1; ind[3] < __refvalue(_len, int[])[3]; ind[3]++)
+                        {
+                            bool eqFlag = true;
+                            for (int i = 1; i < RANK; i++)
+                            {
+                                if (__refvalue(_seq, char[][])[i][ind[i] - 1] !=
+                                    __refvalue(_seq, char[][])[i - 1][ind[i - 1] - 1])
+                                {
+                                    eqFlag = false;
+                                    break;
+                                }
+                            }
+
+                            if (eqFlag)
+                            {
+                                __refvalue(_c, int[,,,])[ind[0], ind[1], ind[2], ind[3]] =
+                                    __refvalue(_c, int[,,,])[ind[0] - 1, ind[1] - 1, ind[2] - 1, ind[3] - 1] + 1;
+                                __refvalue(_b, int[,,,])[ind[0], ind[1], ind[2], ind[3]] = RANK;
+                                continue;
+                            }
+
+                            int R = -1;
+                            int M = -1;
+                            for (int i = 0; i < RANK; i++)
+                            {
+                                ind[i]--;
+                                if (__refvalue(_c, int[,,,])[ind[0], ind[1], ind[2], ind[3]] > M)
+                                {
+                                    R = i;
+                                    M = __refvalue(_c, int[,,,])[ind[0], ind[1], ind[2], ind[3]];
+                                }
+                                ind[i]++;
+                            }
+                            if (R < 0 || M < 0)
+                                throw new Exception();
+
+                            __refvalue(_c, int[,,,])[ind[0], ind[1], ind[2], ind[3]] = M;
+                            __refvalue(_b, int[,,,])[ind[0], ind[1], ind[2], ind[3]] = R;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static int Main()
+        {
+            String[] str = new String[RANK] {
+                "The Sun has left",
+                "his blackness and",
+                "has found a fresher",
+                "morning and the fair Moon"
+            };
+
+            int[] len = new int[RANK];
+            char[][] seq = new char[RANK][];
+            for (int i = 0; i < RANK; i++)
+            {
+                len[i] = str[i].Length + 1;
+                seq[i] = str[i].ToCharArray();
+            }
+
+            int[,,,] c = new int[len[0], len[1], len[2], len[3]];
+            int[,,,] b = new int[len[0], len[1], len[2], len[3]];
+
+            findLCS(__makeref(c), __makeref(b), __makeref(seq), __makeref(len));
+
+            for (int i = 0; i < RANK; i++)
+                len[i]--;
+
+            String s = buildLCS(__makeref(b), __makeref(seq[0]), __makeref(len));
+            if (" n a" == s)
+            {
+                return 100;
+            }
+            else
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/native.cs b/tests/src/JIT/Methodical/refany/native.cs
new file mode 100644 (file)
index 0000000..f4df50f
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+//THIS IS NOT A TEST
+
+namespace JitTest
+{
+    internal class Test
+    {
+        private static int Main()
+        {
+            int N = 0x1492;
+            TypedReference _ref = __makeref(N);
+            if (__reftype(_ref) != typeof(int))
+            {
+                return 1;
+            }
+            if (__refvalue(_ref, int) != 0x1492)
+            {
+                return 2;
+            }
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/refany/packages.config b/tests/src/JIT/Methodical/refany/packages.config
new file mode 100644 (file)
index 0000000..79ece06
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+</packages>
diff --git a/tests/src/JIT/Methodical/refany/refany.csproj b/tests/src/JIT/Methodical/refany/refany.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/refany/virtcall.cs b/tests/src/JIT/Methodical/refany/virtcall.cs
new file mode 100644 (file)
index 0000000..e8a335e
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal class StressTest
+    {
+        private const int ITERATIONS = 2000;
+        private const ulong MAGIC = 0x7700001492000077;
+
+        public virtual ulong UnpackRef(TypedReference _ref, int iterCount)
+        {
+            if (iterCount++ == ITERATIONS)
+            {
+                if (__refvalue(_ref, ulong) == MAGIC)
+                {
+                    throw new ArgumentException();  //cleanup in an unusual way
+                }
+                else
+                {
+                    throw new Exception();
+                }
+            }
+            else
+                return __refvalue(_ref, ulong);
+        }
+
+        public virtual void PackRef(TypedReference _ref, int iterCount)
+        {
+            if (++iterCount == ITERATIONS)
+            {
+                UnpackRef(_ref, iterCount);
+            }
+            else
+            {
+                ulong N = UnpackRef(_ref, 0);
+                PackRef(__makeref(N), iterCount);
+            }
+        }
+
+        private static int Main()
+        {
+            try
+            {
+                ulong N = MAGIC;
+                new StressTest().PackRef(__makeref(N), 0);
+                return 2;
+            }
+            catch (ArgumentException)
+            {
+                return 100;
+            }
+            catch (Exception)
+            {
+                return 1;
+            }
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/tailcall_v4/app.config b/tests/src/JIT/Methodical/tailcall_v4/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/tailcall_v4/cs_template.proj b/tests/src/JIT/Methodical/tailcall_v4/cs_template.proj
new file mode 100644 (file)
index 0000000..9646df5
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/tailcall_v4/delegateParamCallTarget.cs b/tests/src/JIT/Methodical/tailcall_v4/delegateParamCallTarget.cs
new file mode 100644 (file)
index 0000000..4b24083
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*
+ * When generating the code for a tail call, the JIT was not careful to preserve any stack-based parameters used in the computation of the call target address if it is a simple indirection (like in the case of delgate.Invoke).
+ * Thus, in the case where an outgoing argument overwrites the same slot as the incoming delegate, the new value is used in the indirection to compute the target address.
+ * The fix is to not hoist any parameter uses when we hoist the indirection onto the call, and instead use tmpvars. This leaves the use of the parameter above the assignment to the slot for the outgoing tail call. In this one example it actually made the code better.
+ *
+ * Expected output:
+ * Accomplice
+ * Passed
+ *
+ * Actual output:
+ * Accomplice
+ * Failed 
+ */
+
+using System;
+
+public delegate int DoIt(int a, int b, int c, DoIt d);
+
+internal class Repro
+{
+    private int DoItWrong(int a, int b, int c, DoIt d)
+    {
+        Console.WriteLine("Failed");
+        return -1;
+    }
+
+    private int DoItRight(int a, int b, int c, DoIt d)
+    {
+        Console.WriteLine("Pass");
+        return 100;
+    }
+
+    private int Accomplice(int a, int b, int c, DoIt d)
+    {
+        Console.WriteLine("Accomplice");
+        DoIt d2 = this.DoItWrong;
+        return d(a, b, c, d2);
+    }
+
+    public static int Main()
+    {
+        Repro r = new Repro();
+        DoIt d = r.DoItRight;
+        return r.Accomplice(1, 2, 3, d);
+    }
+}
diff --git a/tests/src/JIT/Methodical/tailcall_v4/packages.config b/tests/src/JIT/Methodical/tailcall_v4/packages.config
new file mode 100644 (file)
index 0000000..37e10b9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+    <package id="System.Console" version="4.0.0-beta-22405" />
+    <package id="System.Runtime" version="4.0.20-beta-22405" />
+    <package id="System.Runtime.Extensions" version="4.0.10-beta-22412" />
+</packages>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/tailcall_v4/tailcall_v4.csproj b/tests/src/JIT/Methodical/tailcall_v4/tailcall_v4.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/xxobj/operand/app.config b/tests/src/JIT/Methodical/xxobj/operand/app.config
new file mode 100644 (file)
index 0000000..8077c95
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.0.20.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/xxobj/operand/cs_template.proj b/tests/src/JIT/Methodical/xxobj/operand/cs_template.proj
new file mode 100644 (file)
index 0000000..dccc73f
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <AssemblyName>$(AssemblyName1)</AssemblyName>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <LinkLocalMscorlib>true</LinkLocalMscorlib>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="$(AssemblyName1).cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="app.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup> 
+</Project>
diff --git a/tests/src/JIT/Methodical/xxobj/operand/operand.csproj b/tests/src/JIT/Methodical/xxobj/operand/operand.csproj
new file mode 100644 (file)
index 0000000..6f3522c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+  </PropertyGroup>
+  <Target Name="Build">
+    <ItemGroup>
+      <AllSourceFiles Include="$(MSBuildProjectDirectory)\*.cs" />
+    </ItemGroup>
+    <PropertyGroup>
+      <GenerateRunScript>false</GenerateRunScript>
+    </PropertyGroup>
+    <MSBuild Projects="cs_template.proj" Properties="AssemblyName1=%(AllSourceFiles.FileName);AllowUnsafeBlocks=True;IntermediateOutputPath=$(IntermediateOutputPath)\%(AllSourceFiles.FileName)\" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/tests/src/JIT/Methodical/xxobj/operand/packages.config b/tests/src/JIT/Methodical/xxobj/operand/packages.config
new file mode 100644 (file)
index 0000000..79ece06
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+</packages>
diff --git a/tests/src/JIT/Methodical/xxobj/operand/refanyval.cs b/tests/src/JIT/Methodical/xxobj/operand/refanyval.cs
new file mode 100644 (file)
index 0000000..af7ceca
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Test
+    {
+        private int _m_v;
+
+        private static int refanyval_ldobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            TypedReference R = __makeref(T);
+            return __refvalue(R, Test)._m_v - 1;
+        }
+
+        private static int refanyval_initobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            TypedReference R = __makeref(T);
+            __refvalue(R, Test) = new Test();
+            return T._m_v;
+        }
+
+        private static int refanyval_cpobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            Test T1 = new Test();
+            TypedReference R = __makeref(T);    //replace with cpobj in IL
+            __refvalue(R, Test) = T1;
+            return T._m_v;
+        }
+
+        private static int refanyval_stobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            Test T1 = new Test();
+            TypedReference R = __makeref(T);
+            __refvalue(R, Test) = T1;
+            return T._m_v;
+        }
+
+        private static int Main()
+        {
+            if (refanyval_ldobj() != 0)
+            {
+                return 101;
+            }
+            if (refanyval_initobj() != 0)
+            {
+                return 102;
+            }
+            if (refanyval_stobj() != 0)
+            {
+                return 103;
+            }
+            if (refanyval_cpobj() != 0)
+            {
+                return 104;
+            }
+            return 100;
+        }
+    }
+}
diff --git a/tests/src/JIT/Methodical/xxobj/operand/unbox.cs b/tests/src/JIT/Methodical/xxobj/operand/unbox.cs
new file mode 100644 (file)
index 0000000..24d07b3
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace JitTest
+{
+    internal struct Test
+    {
+        private int _m_v;
+
+        private static int unbox_ldobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            object R = T;
+            return ((Test)R)._m_v - 1;
+        }
+
+        private static int unbox_initobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            object R = T;
+            R = new Test();     //change to unbox<R> = new Test() in IL
+            return ((Test)R)._m_v;
+        }
+
+        private static int unbox_cpobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            Test T1 = new Test();
+            object R = T;
+            R = T1;     //change to unbox<R> = T1 in IL
+            return ((Test)R)._m_v;
+        }
+
+        private static int unbox_stobj()
+        {
+            Test T = new Test();
+            T._m_v = 1;
+            Test T1 = new Test();
+            object R = T;
+            R = T1;     //change to unbox<R> = T1 in IL 
+            return ((Test)R)._m_v;
+        }
+
+        private static int Main()
+        {
+            if (unbox_ldobj() != 0)
+            {
+                return 101;
+            }
+            if (unbox_initobj() != 0)
+            {
+                return 102;
+            }
+            if (unbox_stobj() != 0)
+            {
+                return 103;
+            }
+            if (unbox_cpobj() != 0)
+            {
+                return 104;
+            }
+            return 100;
+        }
+    }
+}