From 6aef0fc5d86dac10245d8455d3f46900d6e6fa9f Mon Sep 17 00:00:00 2001 From: Kevin Barabash Date: Sun, 28 Jul 2024 17:38:53 -0400 Subject: [PATCH] add a test case for pattern matching an empty variant type --- src/Escalier.TypeChecker.Tests/Tests.fs | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/Escalier.TypeChecker.Tests/Tests.fs b/src/Escalier.TypeChecker.Tests/Tests.fs index 6416447..2bd7be6 100644 --- a/src/Escalier.TypeChecker.Tests/Tests.fs +++ b/src/Escalier.TypeChecker.Tests/Tests.fs @@ -1064,6 +1064,46 @@ let InferEnumPatternMatching () = printfn "result = %A" result Assert.False(Result.isError result) +[] +let InferGenericEnumPatternMatching () = + let result = + result { + let src = + """ + enum Option { + Some[T], + None, + } + declare let value: Option; + + let x = match value { + Option.Some[value] => value, + Option.None => 0, + }; + """ + + let! ctx, env = inferModule src + + Assert.Empty(ctx.Report.Diagnostics) + + let! enumType = + env.GetScheme(QualifiedIdent.Ident "Option") + |> Result.mapError CompileError.TypeError + + printfn $"enumType = {enumType}" + + Assert.Type( + env, + "Option", + "({readonly __TAG__: unique symbol} & [T] | {readonly __TAG__: unique symbol})" + ) + + Assert.Value(env, "x", "number") + } + + printfn "result = %A" result + Assert.False(Result.isError result) + [] let InferIfLet () = let result =