Add infra for Monitor.ReliableEnter (#21)

This commit is contained in:
Patrick Stevens
2025-05-26 21:39:10 +01:00
committed by GitHub
parent 40eca9381d
commit 5fc11b1742
11 changed files with 189 additions and 31 deletions

View File

@@ -21,7 +21,7 @@ module TestBasicLock =
let dotnetRuntimes =
DotnetRuntime.SelectForDll assy.Location |> ImmutableArray.CreateRange
let impls = NativeImpls.Mock ()
let impls = MockEnv.make ()
use peImage = new MemoryStream (image)

View File

@@ -18,17 +18,22 @@ module TestCases =
{
FileName = "BasicException.cs"
ExpectedReturnCode = 10
NativeImpls = NativeImpls.Mock ()
NativeImpls = MockEnv.make ()
}
{
FileName = "BasicLock.cs"
ExpectedReturnCode = 10
NativeImpls = NativeImpls.Mock ()
NativeImpls =
let mock = MockEnv.make ()
{ mock with
System_Threading_Monitor = System_Threading_Monitor.passThru
}
}
{
FileName = "WriteLine.cs"
ExpectedReturnCode = 1
NativeImpls = NativeImpls.Mock ()
NativeImpls = MockEnv.make ()
}
]
@@ -37,21 +42,21 @@ module TestCases =
{
FileName = "NoOp.cs"
ExpectedReturnCode = 1
NativeImpls = NativeImpls.Mock ()
NativeImpls = MockEnv.make ()
}
{
FileName = "TriangleNumber.cs"
ExpectedReturnCode = 10
NativeImpls = NativeImpls.Mock ()
NativeImpls = MockEnv.make ()
}
{
FileName = "InstaQuit.cs"
ExpectedReturnCode = 1
NativeImpls =
let mock = NativeImpls.Mock ()
let mock = MockEnv.make ()
{ mock with
System_Env =
System_Environment =
{ System_EnvironmentMock.Empty with
GetProcessorCount =
fun thread state ->
@@ -109,13 +114,11 @@ module TestCases =
let dotnetRuntimes =
DotnetRuntime.SelectForDll assy.Location |> ImmutableArray.CreateRange
let impls = NativeImpls.Mock ()
use peImage = new MemoryStream (image)
try
let terminalState, terminatingThread =
Program.run loggerFactory (Some case.FileName) peImage dotnetRuntimes impls []
Program.run loggerFactory (Some case.FileName) peImage dotnetRuntimes case.NativeImpls []
let exitCode =
match terminalState.ThreadState.[terminatingThread].MethodState.EvaluationStack.Values with

View File

@@ -17,17 +17,12 @@ type RunResult =
FinalState : IlMachineState
}
type NativeImpls =
{
System_Env : ISystem_Environment
}
interface ISystem_Environment_Env with
member this.System_Environment = this.System_Env
static member Mock () =
[<RequireQualifiedAccess>]
module MockEnv =
let make () : NativeImpls =
{
System_Env = System_EnvironmentMock.Empty
System_Environment = System_EnvironmentMock.Empty
System_Threading_Monitor = System_Threading_MonitorMock.Empty
}
type TestCase =

View File

@@ -22,7 +22,7 @@ module TestHelloWorld =
let dotnetRuntimes =
DotnetRuntime.SelectForDll assy.Location |> ImmutableArray.CreateRange
let impls = NativeImpls.Mock ()
let impls = MockEnv.make ()
try
use peImage = new MemoryStream (image)