diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets
index 83fe906016..82ece0f622 100644
--- a/.nuget/NuGet.targets
+++ b/.nuget/NuGet.targets
@@ -35,6 +35,8 @@
$(SolutionDir).nuget
packages.config
+ /Library/Frameworks/Mono.framework/Commands/mono
+ mono
@@ -43,7 +45,7 @@
@(PackageSource)
"$(NuGetExePath)"
- mono --runtime=v4.0.30319 $(NuGetExePath)
+ $(MonoPath) --runtime=v4.0.30319 $(NuGetExePath)
$(TargetDir.Trim('\\'))
diff --git a/before_install.sh b/before_install.sh
index 247abe9912..4dab6a15f4 100755
--- a/before_install.sh
+++ b/before_install.sh
@@ -58,9 +58,9 @@ fi)
fi)
#TODO: work out how to avoid the need for this
-chmod u+x packages/FSharp.Compiler.Tools.4.0.1.19/tools/fsi.exe
-chmod u+x packages/FsLexYacc.7.0.3/build/fslex.exe
-chmod u+x packages/FsLexYacc.7.0.3/build/fsyacc.exe
+chmod u+x packages/FSharp.Compiler.Tools.4.0.1.21/tools/fsi.exe
+chmod u+x packages/FsLexYacc.7.0.4/build/fslex.exe
+chmod u+x packages/FsLexYacc.7.0.4/build/fsyacc.exe
# The FSharp.Compiler.Tools package doesn't work correctly unless a proper install of F# has been done on the machine.
# OSX can skip this because the OSX Mono installer includes F#.
diff --git a/build.cmd b/build.cmd
index 39e4d1020c..390849ed54 100644
--- a/build.cmd
+++ b/build.cmd
@@ -482,7 +482,7 @@ if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' (
set _dotnetexe=%~dp0Tools\dotnetcli\dotnet.exe
set NUGET_PACKAGES=%~dp0Packages
-set _fsiexe="packages\FSharp.Compiler.Tools.4.0.1.19\tools\fsi.exe"
+set _fsiexe="packages\FSharp.Compiler.Tools.4.0.1.21\tools\fsi.exe"
if not exist %_fsiexe% echo Error: Could not find %_fsiexe% && goto :failure
%_ngenexe% install %_fsiexe% /nologo
@@ -522,8 +522,8 @@ if '%BUILD_PROTO%' == '1' (
if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '0' (
- echo %_ngenexe% install packages\FSharp.Compiler.Tools.4.0.1.19\tools\fsc.exe /nologo
- %_ngenexe% install packages\FSharp.Compiler.Tools.4.0.1.19\tools\fsc.exe /nologo
+ echo %_ngenexe% install packages\FSharp.Compiler.Tools.4.0.1.21\tools\fsc.exe /nologo
+ %_ngenexe% install packages\FSharp.Compiler.Tools.4.0.1.21\tools\fsc.exe /nologo
echo %_msbuildexe% %msbuildflags% src\fsharp-proto-build.proj
%_msbuildexe% %msbuildflags% src\fsharp-proto-build.proj
diff --git a/build.sh b/build.sh
index dea81f15f2..273d771065 100755
--- a/build.sh
+++ b/build.sh
@@ -13,5 +13,7 @@ if [ $rc -ne 0 ]; then
fi
# This is a very, very limited build script for Mono which bootstraps the compiler
-xbuild src/fsharp-proto-build.proj
-xbuild build-everything.proj /p:Configuration=release
+echo "xbuild src/fsharp-proto-build.proj /p:UseMonoPackaging=true"
+xbuild src/fsharp-proto-build.proj /p:UseMonoPackaging=true
+echo "xbuild build-everything.proj /p:Configuration=release /p:UseMonoPackaging=true"
+xbuild build-everything.proj /p:Configuration=release /p:UseMonoPackaging=true
diff --git a/packages.config b/packages.config
index 8e613ab53d..2a3d6d73fa 100644
--- a/packages.config
+++ b/packages.config
@@ -4,7 +4,7 @@
-
+
@@ -38,7 +38,7 @@
-
+
diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets
index d33187d20a..d03a65f2e8 100644
--- a/src/FSharpSource.Settings.targets
+++ b/src/FSharpSource.Settings.targets
@@ -36,10 +36,10 @@
obj\$(Configuration)\$(TargetFramework)\
obj\$(Configuration)\$(TargetFramework)\$(PortableProfileBeingReferenced)\
+
-
-
+
true
true
true
@@ -117,19 +117,22 @@
- $(FSharpSourcesRoot)\..\packages\fssrgen.3.1.0\lib\net46
- $(FSharpSourcesRoot)\..\packages\FsLexYacc.7.0.3\build
- $(FSharpSourcesRoot)\..\packages\FsLexYacc.7.0.3\build
+ $(FSharpSourcesRoot)\..\packages\FsLexYacc.7.0.4\build
+ $(FSharpSourcesRoot)\..\packages\FsLexYacc.7.0.4\build
fsi.exe
fslex.exe
fsyacc.exe
2.0.0-rc3-61324-01
14.0
14.3.25407
+
+
+ v12.0"
+ 12.0.0.0
- $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.19\tools
+ $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.21\tools
diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets
index 3b7028a27b..111dc990e4 100644
--- a/src/FSharpSource.targets
+++ b/src/FSharpSource.targets
@@ -8,6 +8,7 @@
3.47.41.0
3.78.41.0
3.259.41.0
+
@@ -18,6 +19,16 @@
+
+
+
+ $(OtherFlags) --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk"
+ STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY;$(DefineConstants)
+ true
+ $(FSCoreVersion)
+ fs
+
+
true
@@ -88,10 +99,19 @@
+
+ $(OtherFlags) --version:"$(MicroBuildAssemblyVersion)"
+
+
NO_STRONG_NAMES;$(DefineConstants)
+
+
+ MSBUILD_AT_LEAST_14;$(DefineConstants)
+
+
false
@@ -108,6 +128,7 @@
+ $(DefineConstants);CROSS_PLATFORM_COMPILER
$(DefineConstants);ENABLE_MONO_SUPPORT
$(DefineConstants);BE_SECURITY_TRANSPARENT
$(DefineConstants);FX_LCIDFROMCODEPAGE
@@ -348,9 +369,9 @@
$(FSharpSourcesRoot)\..\$(Configuration)\$(ProtoFlavour)\bin
- $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.19\tools
+ $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.21\tools
$(FSharpSourcesRoot)\..\Tools\lkg
- ..\packages\FSharp.Compiler.Tools.4.0.1.19\tools\Microsoft.FSharp.Targets
+ ..\packages\FSharp.Compiler.Tools.4.0.1.21\tools\Microsoft.FSharp.Targets
$(FSharpSourcesRoot)\..\Tools\dotnetcli
dotnet.exe
@@ -362,8 +383,8 @@
$(FSharpSourcesRoot)\..\$(Configuration)\$(ProtoFlavour)\bin
- $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.19\tools
- ..\packages\FSharp.Compiler.Tools.4.0.1.19\tools\Microsoft.FSharp.Targets
+ $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.21\tools
+ ..\packages\FSharp.Compiler.Tools.4.0.1.21\tools\Microsoft.FSharp.Targets
@@ -393,7 +414,6 @@
-
@@ -402,7 +422,6 @@
-
@@ -451,7 +470,8 @@
Name="CopyAndSubstituteTextFiles"
Inputs="@(CopyAndSubstituteText)"
Outputs="@(CopyAndSubstituteText->'$(OutDir)%(TargetFilename)')" >
-
+
+
diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs
index f982af1199..c4a73c6815 100644
--- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs
+++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs
@@ -19,4 +19,8 @@ open System.Runtime.InteropServices
[]
[]
#endif
+#if STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY
+[]
+[]
+#endif
do()
diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs
index b1a2118178..4970e17de9 100644
--- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs
+++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs
@@ -47,5 +47,20 @@ open System.Runtime.InteropServices
[]
[]
#endif
-
+#if STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+#endif
do()
diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs
index 221c746583..9b905e6109 100644
--- a/src/fsharp/CompileOps.fs
+++ b/src/fsharp/CompileOps.fs
@@ -2770,22 +2770,37 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) =
[tcConfig.MakePathAbsolute x]
| None ->
#if ENABLE_MONO_SUPPORT
- // When running on Mono we lead everyone to believe we're doing .NET 2.0 compilation
- // by default.
if runningOnMono then
- [System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()]
+ [ let runtimeRoot = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
+ let runtimeRootWithoutSlash = runtimeRoot.TrimEnd('/', '\\')
+ let api = runtimeRootWithoutSlash + "-api"
+ yield runtimeRoot // The defaut FSharp.Core is found in lib/mono/4.5
+ if Directory.Exists(api) then
+ yield api
+ let facades = Path.Combine(api, "Facades")
+ if Directory.Exists(facades) then
+ yield facades
+ let facades = Path.Combine(runtimeRoot, "Facades")
+ if Directory.Exists(facades) then
+ yield facades
+ ]
else
#endif
try
+ [
match tcConfig.resolutionEnvironment with
#if !FSI_TODO_NETCORE
| ReferenceResolver.RuntimeLike ->
- [System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()]
+ yield System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
#endif
| _ ->
let frameworkRoot = tcConfig.referenceResolver.DotNetFrameworkReferenceAssembliesRootDirectory
let frameworkRootVersion = Path.Combine(frameworkRoot,tcConfig.targetFrameworkVersion)
- [frameworkRootVersion]
+ yield frameworkRootVersion
+ let facades = Path.Combine(frameworkRootVersion, "Facades")
+ if Directory.Exists(facades) then
+ yield facades
+ ]
with e ->
errorRecovery e range0; []
@@ -3408,13 +3423,13 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres
member tcResolutions.TryFindByResolvedPath nm = resolvedPathToResolution.TryFind nm
member tcResolutions.TryFindByOriginalReferenceText nm = originalReferenceToResolution.TryFind nm
- static member ResolveAssemblyReferences (ctok,tcConfig:TcConfig,assemblyList:AssemblyReference list, knownUnresolved:UnresolvedAssemblyReference list) : TcAssemblyResolutions =
+ static member ResolveAssemblyReferences (ctok, tcConfig:TcConfig,assemblyList:AssemblyReference list, knownUnresolved:UnresolvedAssemblyReference list) : TcAssemblyResolutions =
let resolved,unresolved =
if tcConfig.useSimpleResolution then
let resolutions =
assemblyList
|> List.map (fun assemblyReference ->
- try
+ try
Choice1Of2 (tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, assemblyReference) |> Option.get)
with e ->
errorRecovery e assemblyReference.Range
@@ -4767,7 +4782,7 @@ module private ScriptPreprocessClosure =
let isInteractive = (codeContext = CodeContext.Evaluation)
let isInvalidationSupported = (codeContext = CodeContext.Editing)
// always use primary assembly = mscorlib for scripts
- let tcConfigB = TcConfigBuilder.CreateNew(referenceResolver, Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value, true (* optimize for memory *), projectDir, isInteractive, isInvalidationSupported)
+ let tcConfigB = TcConfigBuilder.CreateNew(referenceResolver, Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None).Value, true (* optimize for memory *), projectDir, isInteractive, isInvalidationSupported)
applyCommandLineArgs tcConfigB
match basicReferences with
| None -> BasicReferencesForScriptLoadClosure(useSimpleResolution, useFsiAuxLib, assumeDotNetFramework) |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0,f)) // Add script references
diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj
index 1aa95e5d43..900b6d239f 100644
--- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj
+++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj
@@ -52,6 +52,8 @@
+
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
@@ -65,5 +67,22 @@
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
diff --git a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs
index 0ed3ee1737..b08ecbd794 100644
--- a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs
+++ b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs
@@ -16,10 +16,39 @@ type CreateFSharpManifestResourceName public () =
(rootNamespace:string), (* may be null *)
(dependentUponFileName:string), (* may be null *)
(binaryStream:System.IO.Stream) (* may be null *)) : string =
+
+#if CROSS_PLATFORM_COMPILER
+ // The Visual CSharp and XBuild CSharp toolchains transform resource names like this:
+ // SubDir\abc.resx --> SubDir.abc.resources
+ // SubDir\abc.txt --> SubDir.abc.txt
+ //
+ // For resx resources, both the Visual FSharp and XBuild FSHarp toolchains do the right thing, i.e.
+ // SubDir\abc.resx --> SubDir.abc.resources
+ //
+ // However for non-resx resources, for some reason Visual FSharp does _not_ add the directory name to the resource name.
+ // It is very unclear where the directory name gets dropped in the Visual FSharp implementation
+ // - is it in Microsoft.Common.targets, Microfost.FSharp.targets or how the base type CreateCSharpManifestResourceName
+ // is created and used - who knows, the code is not easy to understand despite it doing something very simple. That's
+ // the nature of MSBuild/XBuild....
+ //
+ // Anyway, dropping the directory name seems like a mistake. But we attempt to replicate the behaviour here
+ // for consistency with Visual FSharp. This may not be the right place to do this and this many not be consistent
+ // when cultures are used - that case has not been tested.
+
+ let runningOnMono =
+ try
+ System.Type.GetType("Mono.Runtime") <> null
+ with e ->
+ false
+ let fileName = if not runningOnMono || fileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then fileName else Path.GetFileName(fileName)
+ let linkFileName = if not runningOnMono || linkFileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then linkFileName else Path.GetFileName(linkFileName)
+#endif
+
let embeddedFileName =
match linkFileName with
| null -> fileName
| _ -> linkFileName
+
// since we do not support resources dependent on a form, we always pass null for a binary stream
// rootNamespace is always empty - we do not support it
let cSharpResult =
diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj
index 8691ae2de0..5d696c416b 100644
--- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj
+++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj
@@ -50,12 +50,12 @@
- Microsoft.FSharp.targets
- {BuildSuffix}
-
+ Microsoft.FSharp.Targets
+ {BuildSuffix}
+
- Microsoft.Portable.FSharp.targets
+ Microsoft.Portable.FSharp.Targets
{BuildSuffix}
@@ -63,6 +63,8 @@
+
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
@@ -76,6 +78,23 @@
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
{DED3BBD7-53F4-428A-8C9F-27968E768605}
diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs
index ba1603049a..5a07056681 100644
--- a/src/fsharp/FSharp.Build/Fsc.fs
+++ b/src/fsharp/FSharp.Build/Fsc.fs
@@ -145,7 +145,10 @@ type [.Assembly.Location))
+ with _ -> None
+ match FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(locationOfThisDll) with
| Some s -> s
| None -> ""
let mutable versionFile : string = null
diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets
index 33b5e101d8..0360705841 100644
--- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets
+++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets
@@ -198,6 +198,7 @@ this file.
/>
+
-
-
+
+
+
+
+
+
+
+
-
+
+
diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj
index a3ae8dea56..e2fd82d83f 100644
--- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj
+++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj
@@ -452,6 +452,13 @@
+ ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll
+ ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll
+ ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll
+ ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
+ ..\..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll
+
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
@@ -464,11 +471,23 @@
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
- ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll
- ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll
- ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll
- ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
- ..\..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/AssemblyInfo.fs b/src/fsharp/FSharp.Compiler.Server.Shared/AssemblyInfo.fs
index 8316da7c53..ced7dcebac 100644
--- a/src/fsharp/FSharp.Compiler.Server.Shared/AssemblyInfo.fs
+++ b/src/fsharp/FSharp.Compiler.Server.Shared/AssemblyInfo.fs
@@ -22,7 +22,9 @@ do()
[]
do()
+#if HAVE_VS_SDK
// This Visual Studio-specific attribute is needed on this DLL because for historical reasons it shipped as part of the Visual F# IDE Tools rather than this F# SDK
[]
do()
+#endif
diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
index 48c127a329..3acf10d8d0 100644
--- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
+++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
@@ -18,6 +18,7 @@
true
true
v4.6
+ $(DefineConstants);HAVE_VS_SDK
@@ -30,10 +31,10 @@
-
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).$(RoslynVSPackagesVersion)\lib\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).dll
-
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.Immutable.10.0.10.0.30319\lib\net40\Microsoft.VisualStudio.Shell.Immutable.10.0.dll
diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj
index 6fd306cd47..8ce4ec3e6a 100644
--- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj
+++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj
@@ -509,6 +509,13 @@
+ ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll
+ ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll
+ ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll
+ ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
+ ..\..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dlltrue
+
+
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
@@ -521,11 +528,23 @@
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
- ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll
- ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll
- ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll
- ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
- ..\..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dlltrue
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj
index 278c681eb3..95492a7e2f 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj
@@ -63,10 +63,6 @@
..\..\..\packages\System.ValueTuple.4.3.0\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll
True
-
- ..\..\..\packages\Microsoft.FSharp.TupleSample.1.0.0-alpha-161121/lib/portable-net40+sl4+win8+wp8/TupleSample.dll
- True
-
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs
index ce38c35121..dfbb894fe6 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs
@@ -529,7 +529,7 @@ type ArrayModule() =
[]
member this.countBy() =
// countBy should work on empty array
- Assert.AreEqual([||], Array.countBy (fun _ -> failwith "should not be executed") [||])
+ Assert.AreEqual(0,Array.countBy (fun _ -> failwith "should not be executed") [||] |> Array.length)
// countBy should not work on null
CheckThrowsArgumentNullException(fun () -> Array.countBy (fun _ -> failwith "should not be executed") null |> ignore)
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs
index 064cc45764..c9394fdacf 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs
@@ -211,8 +211,8 @@ type ListModule() =
[]
member this.Take() =
- Assert.AreEqual([], List.take 0 [])
- Assert.AreEqual(([] : string list), List.take 0 ["str1";"str2";"str3";"str4"])
+ Assert.AreEqual(([] : int list) ,List.take 0 ([] : int list))
+ Assert.AreEqual(([] : string list),List.take 0 ["str1";"str2";"str3";"str4"])
Assert.AreEqual([1;2;4],List.take 3 [1;2;4;5;7])
Assert.AreEqual(["str1";"str2"],List.take 2 ["str1";"str2";"str3";"str4"])
@@ -275,12 +275,12 @@ type ListModule() =
[]
member this.takeWhile() =
- Assert.AreEqual([], List.takeWhile (fun x -> failwith "should not be used") [])
+ Assert.AreEqual(([] : int list),List.takeWhile (fun x -> failwith "should not be used") ([] : int list))
Assert.AreEqual([1;2;4;5],List.takeWhile (fun x -> x < 6) [1;2;4;5;6;7])
Assert.AreEqual(["a"; "ab"; "abc"],List.takeWhile (fun (x:string) -> x.Length < 4) ["a"; "ab"; "abc"; "abcd"; "abcde"])
Assert.AreEqual(["a"; "ab"; "abc"; "abcd"; "abcde"],List.takeWhile (fun _ -> true) ["a"; "ab"; "abc"; "abcd"; "abcde"])
- Assert.AreEqual(([] : string list), List.takeWhile (fun _ -> false) ["a"; "ab"; "abc"; "abcd"; "abcde"])
- Assert.AreEqual(([] : string list), List.takeWhile (fun _ -> false) ["a"])
+ Assert.AreEqual(([] : string list),List.takeWhile (fun _ -> false) ["a"; "ab"; "abc"; "abcd"; "abcde"])
+ Assert.AreEqual(([] : string list),List.takeWhile (fun _ -> false) ["a"])
Assert.AreEqual(["a"],List.takeWhile (fun _ -> true) ["a"])
Assert.AreEqual(["a"],List.takeWhile (fun x -> x <> "ab") ["a"; "ab"; "abc"; "abcd"; "abcde"])
@@ -312,12 +312,12 @@ type ListModule() =
[]
member this.splitAt() =
- Assert.IsTrue(([],[]) = List.splitAt 0 [])
+ Assert.AreEqual((([] : int list),([] : int list)), List.splitAt 0 ([] : int list))
Assert.AreEqual([1..4], List.splitAt 4 [1..10] |> fst)
Assert.AreEqual([5..10], List.splitAt 4 [1..10] |> snd)
- Assert.AreEqual(([] : int list), List.splitAt 0 [1..2] |> fst)
+ Assert.AreEqual(([]: int list), List.splitAt 0 [1..2] |> fst)
Assert.AreEqual([1..2], List.splitAt 0 [1..2] |> snd)
Assert.AreEqual([1], List.splitAt 1 [1..2] |> fst)
@@ -338,7 +338,7 @@ type ListModule() =
[]
member this.countBy() =
// countBy should work on empty list
- Assert.AreEqual(([] : (obj*int) list), List.countBy (fun _ -> failwith "should not be executed") [])
+ Assert.AreEqual(0,List.countBy (fun _ -> failwith "should not be executed") [] |> List.length)
// countBy should count by the given key function
Assert.AreEqual([5,1; 2,2; 3,2],List.countBy id [5;2;2;3;3])
@@ -453,9 +453,9 @@ type ListModule() =
Assert.AreEqual(["..."; "...."], resultStr)
// empty List
- let emptyArr:int list = [ ]
- let resultEpt = List.where funcInt emptyArr
- Assert.AreEqual(emptyArr, resultEpt)
+ let emptyList:int list = [ ]
+ let resultEpt = List.where funcInt emptyList
+ Assert.AreEqual(emptyList, resultEpt)
()
@@ -493,9 +493,9 @@ type ListModule() =
[]
member this.replicate() =
// replicate should create multiple copies of the given value
- Assert.AreEqual([], List.replicate 0 null)
- Assert.AreEqual(([] : int list), List.replicate 0 1)
- Assert.AreEqual([null],List.replicate 1 null)
+ Assert.AreEqual(0,List.replicate 0 null |> List.length)
+ Assert.AreEqual(0,List.replicate 0 1 |> List.length)
+ Assert.AreEqual([ (null : obj) ],(List.replicate 1 null : obj list))
Assert.AreEqual(["1";"1"],List.replicate 2 "1")
CheckThrowsArgumentException (fun () -> List.replicate -1 null |> ignore)
@@ -1022,7 +1022,6 @@ type ListModule() =
[]
member this.``pairwise should return pairs of the input list``() =
- Assert.AreEqual(([] : (obj*obj) list), List.pairwise [])
Assert.AreEqual(([] : (int*int) list), List.pairwise [1])
Assert.AreEqual([1,2], List.pairwise [1;2])
Assert.AreEqual([1,2; 2,3], List.pairwise [1;2;3])
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs
index 9697fe5a0b..ee9c0b1157 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs
@@ -234,8 +234,8 @@ type ListModule02() =
Assert.AreEqual("BBC", resultStrAcc)
// empty List
- let resultEpt,resultEptAcc = List.mapFold funcInt 100 []
- Assert.AreEqual(([] : int list), resultEpt)
+ let (resultEpt: int list),resultEptAcc = List.mapFold funcInt 100 []
+ Assert.AreEqual(([]: int list), resultEpt)
Assert.AreEqual(100, resultEptAcc)
()
@@ -260,8 +260,8 @@ type ListModule02() =
Assert.AreEqual("CBB", resultStrAcc)
// empty List
- let resultEpt,resultEptAcc = List.mapFoldBack funcInt [] 100
- Assert.AreEqual(([] : int list), resultEpt)
+ let (resultEpt: int list),resultEptAcc = List.mapFoldBack funcInt [] 100
+ Assert.AreEqual(([]: int list), resultEpt)
Assert.AreEqual(100, resultEptAcc)
()
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs
index 34b09419c3..6e9bf803d1 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs
@@ -242,7 +242,7 @@ type ListType() =
Assert.AreEqual(lst.[1..], [2;3;4;5;6])
Assert.AreEqual(lst.[2..], [3;4;5;6])
Assert.AreEqual(lst.[5..], [6])
- Assert.AreEqual(lst.[6..], ([] : int list))
+ Assert.AreEqual(lst.[6..], ([]: int list))
CheckThrowsIndexOutRangException((fun _ -> lst.[7..] |> ignore))
CheckThrowsIndexOutRangException((fun _ -> lst.[.. -1] |> ignore))
@@ -254,8 +254,8 @@ type ListType() =
Assert.AreEqual(lst.[..5], [1;2;3;4;5;6])
CheckThrowsIndexOutRangException((fun _ -> lst.[..6] |> ignore))
- Assert.AreEqual(lst.[1..-1], ([] : int list))
- Assert.AreEqual(lst.[1..0], ([] : int list))
+ Assert.AreEqual(lst.[1..-1], ([]: int list))
+ Assert.AreEqual(lst.[1..0], ([]: int list))
Assert.AreEqual(lst.[1..1], [2])
Assert.AreEqual(lst.[1..2], [2;3])
Assert.AreEqual(lst.[1..3], [2;3;4])
@@ -266,17 +266,17 @@ type ListType() =
CheckThrowsIndexOutRangException((fun _ -> lst.[-1..1] |> ignore))
Assert.AreEqual(lst.[0..1], [1;2])
Assert.AreEqual(lst.[1..1], [2])
- Assert.AreEqual(lst.[2..1], ([] : int list))
- Assert.AreEqual(lst.[3..1], ([] : int list))
- Assert.AreEqual(lst.[4..1], ([] : int list))
+ Assert.AreEqual(lst.[2..1], ([]: int list))
+ Assert.AreEqual(lst.[3..1], ([]: int list))
+ Assert.AreEqual(lst.[4..1], ([]: int list))
- Assert.AreEqual(lst.[-3..-4], ([] : int list))
+ Assert.AreEqual(lst.[-3..-4], ([]: int list))
CheckThrowsIndexOutRangException((fun _ -> lst.[-4..-3] |> ignore))
let empty : obj list = List.empty
- Assert.AreEqual(empty.[*], [])
- Assert.AreEqual(empty.[5..3], [])
- Assert.AreEqual(empty.[0..], [])
+ Assert.AreEqual(empty.[*], ([]: obj list))
+ Assert.AreEqual(empty.[5..3], ([]: obj list))
+ Assert.AreEqual(empty.[0..], ([]: obj list))
CheckThrowsIndexOutRangException((fun _ -> empty.[..0] |> ignore))
CheckThrowsIndexOutRangException((fun _ -> empty.[0..0] |> ignore))
CheckThrowsIndexOutRangException((fun _ -> empty.[0..1] |> ignore))
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs
index 06b69feb34..0645069b4f 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs
@@ -63,17 +63,17 @@ type SeqModule2() =
[]
member this.Tl() =
- // integer seq
- let resultInt = Seq.tail <| seq { 1..10 }
- VerifySeqsEqual (seq { 2..10 }) resultInt
+ // integer seq
+ let resultInt = Seq.tail <| seq { 1..10 }
+ Assert.AreEqual(Array.ofSeq (seq { 2..10 }), Array.ofSeq resultInt)
// string seq
let resultStr = Seq.tail <| seq { yield "a"; yield "b"; yield "c"; yield "d" }
- VerifySeqsEqual (seq { yield "b"; yield "c" ; yield "d" }) resultStr
+ Assert.AreEqual(Array.ofSeq (seq { yield "b"; yield "c" ; yield "d" }), Array.ofSeq resultStr)
// 1-element seq
let resultStr2 = Seq.tail <| seq { yield "a" }
- VerifySeqsEqual Seq.empty resultStr2
+ Assert.AreEqual(Array.ofSeq (Seq.empty : seq), Array.ofSeq resultStr2)
CheckThrowsArgumentNullException(fun () -> Seq.tail null |> ignore)
CheckThrowsArgumentException(fun () -> Seq.tail Seq.empty |> Seq.iter (fun _ -> failwith "Should not be reached"))
diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs
index 128b30dacf..2c8e02d7af 100644
--- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs
+++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs
@@ -48,7 +48,10 @@ type BigIntType() =
Assert.AreEqual((new BigInteger(168)).ToString(), "168")
Assert.AreEqual(-168I.ToString(), "-168")
Assert.AreEqual(-0I.ToString(), "0")
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger()).ToString(), "0")
+#endif
[]
@@ -68,17 +71,26 @@ type BigIntType() =
Assert.IsTrue( (c = a) )
Assert.IsTrue( (z1 = z2) )
Assert.IsTrue( (z2 = z3) )
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue( (z3 = z4) )
Assert.IsTrue( (z4 = z1) )
+#endif
Assert.IsTrue( (z1 = -z2) )
Assert.IsTrue( (z2 = -z3) )
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue( (z3 = -z4) )
Assert.IsTrue( (z4 = -z1) )
+#endif
Assert.IsTrue( a.Equals(b) ); Assert.IsTrue( b.Equals(a) )
Assert.IsTrue( b.Equals(c) ); Assert.IsTrue( c.Equals(b) )
Assert.IsTrue( c.Equals(a) ); Assert.IsTrue( a.Equals(c) )
Assert.IsTrue( z1.Equals(z2) ); Assert.IsTrue( z2.Equals(z3) )
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue( z3.Equals(z4) ); Assert.IsTrue( z4.Equals(z1) )
+#endif
// Self equality
let a = new BigInteger(168)
@@ -86,17 +98,26 @@ type BigIntType() =
Assert.IsTrue( (z1 = z1) )
Assert.IsTrue( (z2 = z2) )
Assert.IsTrue( (z3 = z3) )
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue( (z4 = z4) )
+#endif
Assert.IsTrue(a.Equals(a))
Assert.IsTrue(z1.Equals(z1))
Assert.IsTrue(z2.Equals(z2))
Assert.IsTrue(z3.Equals(z3))
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue(z4.Equals(z4))
+#endif
// Null
Assert.IsFalse(a.Equals(null))
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue(0I.GetHashCode() = (BigInteger()).GetHashCode())
+#endif
// static methods
[]
@@ -110,7 +131,10 @@ type BigIntType() =
Assert.AreEqual(BigInteger.Abs(bigNegativeB),
bigPositiveB)
Assert.AreEqual(BigInteger.Abs(0I), 0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(BigInteger.Abs(BigInteger()), 0I)
+#endif
()
@@ -141,12 +165,15 @@ type BigIntType() =
q <- BigInteger.DivRem(0I, 100I, &r)
Assert.AreEqual((q,r), (0I, 0I))
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
qr <- BigInteger.DivRem(BigInteger(), 1I)
Assert.AreEqual(qr, (0I, 0I))
-
- CheckThrowsDivideByZeroException(fun () -> BigInteger.DivRem(100I,0I) |> ignore)
CheckThrowsDivideByZeroException(fun () -> BigInteger.DivRem(100I, BigInteger()) |> ignore)
CheckThrowsDivideByZeroException(fun () -> BigInteger.DivRem(BigInteger(), BigInteger()) |> ignore)
+#endif
+
+ CheckThrowsDivideByZeroException(fun () -> BigInteger.DivRem(100I,0I) |> ignore)
()
@@ -156,10 +183,13 @@ type BigIntType() =
Assert.AreEqual(BigInteger.GreatestCommonDivisor(bigPositiveA, bigPositiveB), 900000000090I)
Assert.AreEqual(BigInteger.GreatestCommonDivisor(bigNegativeA, bigNegativeB), 900000000090I)
Assert.AreEqual(BigInteger.GreatestCommonDivisor(0I, bigPositiveA), bigPositiveA)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(BigInteger.GreatestCommonDivisor(BigInteger(), bigPositiveA), bigPositiveA)
Assert.AreEqual(BigInteger.GreatestCommonDivisor(bigPositiveA, BigInteger()), bigPositiveA)
Assert.AreEqual(BigInteger.GreatestCommonDivisor(BigInteger(), bigNegativeA), bigPositiveA)
Assert.AreEqual(BigInteger.GreatestCommonDivisor(BigInteger(), BigInteger()), 0I)
+#endif
()
@@ -199,9 +229,12 @@ type BigIntType() =
Assert.AreEqual(BigInteger.Pow(2I, 0), 1I)
Assert.AreEqual(BigInteger.Pow(-10I, 2), 100I)
Assert.AreEqual(BigInteger.Pow(0I, 0), 1I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(BigInteger.Pow(BigInteger(), 0), 1I)
- Assert.AreEqual(BigInteger.Pow(0I, 1), 0I)
Assert.AreEqual(BigInteger.Pow(BigInteger(), 1), 0I)
+#endif
+ Assert.AreEqual(BigInteger.Pow(0I, 1), 0I)
CheckThrowsArgumentOutOfRangeException(fun() -> BigInteger.Pow(100I, -2) |> ignore)
()
@@ -219,8 +252,11 @@ type BigIntType() =
Assert.IsTrue(-0I.IsZero)
Assert.IsTrue(BigInteger.Zero.IsZero)
Assert.IsTrue((-BigInteger.Zero).IsZero)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsTrue(BigInteger().IsZero)
Assert.IsTrue((-BigInteger()).IsZero)
+#endif
Assert.IsTrue(BigInteger(0).IsZero)
Assert.IsTrue((-BigInteger(0)).IsZero)
Assert.IsFalse(1I.IsZero)
@@ -234,8 +270,11 @@ type BigIntType() =
Assert.IsFalse(-0I.IsOne)
Assert.IsFalse(BigInteger.Zero.IsOne)
Assert.IsFalse((-BigInteger.Zero).IsOne)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.IsFalse(BigInteger().IsOne)
Assert.IsFalse((-BigInteger()).IsOne)
+#endif
Assert.IsFalse(BigInteger(0).IsOne)
Assert.IsFalse((-BigInteger(0)).IsOne)
Assert.IsTrue(1I.IsOne)
@@ -247,7 +286,10 @@ type BigIntType() =
[]
member this.ToDouble() =
Assert.AreEqual(double 0I, 0.0)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(double (BigInteger()), 0.0)
+#endif
Assert.AreEqual(double 123I, 123.0)
Assert.AreEqual(double -123I, -123.0)
()
@@ -255,7 +297,10 @@ type BigIntType() =
[]
member this.ToInt32() =
Assert.AreEqual(int32 0I, 0)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(int32 (BigInteger()), 0)
+#endif
Assert.AreEqual(int32 123I, 123)
Assert.AreEqual(int32 -123I, -123)
()
@@ -263,7 +308,10 @@ type BigIntType() =
[]
member this.ToInt64() =
Assert.AreEqual(int64 0I, 0L)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(int64 (BigInteger()), 0L)
+#endif
Assert.AreEqual(int64 123I, 123L)
Assert.AreEqual(int64 -123I, -123L)
@@ -272,7 +320,10 @@ type BigIntType() =
[]
member this.Zero() =
Assert.AreEqual(BigInteger.Zero,0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(BigInteger.Zero, BigInteger())
+#endif
()
// operators
@@ -281,8 +332,11 @@ type BigIntType() =
Assert.AreEqual((123I + 456I),579I)
Assert.AreEqual((-123I + (-456I)),-579I)
Assert.AreEqual((0I + 123I),123I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger() + 123I),123I)
Assert.AreEqual((123I + BigInteger()),123I)
+#endif
Assert.AreEqual((bigPositiveA + 0I),bigPositiveA)
Assert.AreEqual((bigPositiveA + bigNegativeA),0I)
@@ -293,7 +347,10 @@ type BigIntType() =
Assert.AreEqual((123I / 124I),0I)
Assert.AreEqual((123I / (-124I)),0I)
Assert.AreEqual((0I / 123I),0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger() / 123I),0I)
+#endif
()
@@ -304,7 +361,10 @@ type BigIntType() =
Assert.AreEqual((bigNegativeA = bigPositiveA),false)
Assert.AreEqual((bigNegativeA = (-123I)),false)
Assert.AreEqual((0I = new BigInteger(0)),true)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((0I = new BigInteger()),true)
+#endif
()
@@ -314,10 +374,13 @@ type BigIntType() =
Assert.AreEqual((bigNegativeA > bigPositiveB),false)
Assert.AreEqual((bigNegativeA > (-123I)),false)
Assert.AreEqual((0I > new BigInteger(0)),false)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((0I > new BigInteger()),false)
Assert.AreEqual((BigInteger() > BigInteger()),false)
Assert.AreEqual((BigInteger() > 1I),false)
Assert.AreEqual((BigInteger() > -1I),true)
+#endif
()
@@ -328,10 +391,13 @@ type BigIntType() =
Assert.AreEqual((bigPositiveB >= bigPositiveA),true)
Assert.AreEqual((bigNegativeA >= bigNegativeA),true)
Assert.AreEqual((0I >= new BigInteger(0)),true)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((0I >= new BigInteger()),true)
Assert.AreEqual((BigInteger() >= BigInteger()),true)
Assert.AreEqual((BigInteger() >= 1I),false)
Assert.AreEqual((BigInteger() >= -1I),true)
+#endif
()
@@ -342,10 +408,13 @@ type BigIntType() =
Assert.AreEqual((bigPositiveA < bigNegativeB),false)
Assert.AreEqual((bigNegativeA < bigPositiveB),true)
Assert.AreEqual((0I < new BigInteger(0)),false)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((0I < new BigInteger()),false)
Assert.AreEqual((BigInteger() < BigInteger()),false)
Assert.AreEqual((BigInteger() < 1I),true)
Assert.AreEqual((BigInteger() < -1I),false)
+#endif
()
@@ -356,10 +425,13 @@ type BigIntType() =
Assert.AreEqual((bigNegativeB <= bigPositiveA),true)
Assert.AreEqual((bigNegativeA <= bigNegativeA),true)
Assert.AreEqual((0I <= new BigInteger(-0)),true)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((0I <= new BigInteger()),true)
Assert.AreEqual((BigInteger() <= BigInteger()),true)
Assert.AreEqual((BigInteger() <= 1I),true)
Assert.AreEqual((BigInteger() <= -1I),false)
+#endif
()
@@ -368,9 +440,12 @@ type BigIntType() =
Assert.AreEqual((bigPositiveA % bigPositiveB),bigPositiveA)
Assert.AreEqual((bigNegativeA % bigNegativeB),bigNegativeA)
Assert.AreEqual((0I % bigPositiveA),0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger() % bigPositiveA),0I)
CheckThrowsDivideByZeroException(fun () -> 2I % 0I |> ignore)
CheckThrowsDivideByZeroException(fun () -> 2I % (BigInteger()) |> ignore)
+#endif
()
@@ -380,7 +455,10 @@ type BigIntType() =
Assert.AreEqual((123I * (-100I)),-12300I)
Assert.AreEqual((-123I * (-100I)),12300I)
Assert.AreEqual((0I * bigPositiveA),0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger() * bigPositiveA),0I)
+#endif
Assert.AreEqual((1I * 0I),0I)
()
@@ -412,10 +490,14 @@ type BigIntType() =
VerifySeqsEqual resultNeg seqNeg
let resultSmall1 = [0I..5I]
- let resultSmall2 = [BigInteger()..5I]
let seqSmall = [0I;1I;2I;3I;4I;5I]
VerifySeqsEqual resultSmall1 seqSmall
+
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
+ let resultSmall2 = [BigInteger()..5I]
VerifySeqsEqual resultSmall2 seqSmall
+#endif
()
@@ -443,12 +525,15 @@ type BigIntType() =
VerifySeqsEqual resultNeg seqNeg
let resultSmall1 = [0I..3I..9I]
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
let resultSmall1 = [BigInteger()..3I..9I]
let seqSmall = [0I;3I;6I;9I]
VerifySeqsEqual resultSmall1 seqSmall
CheckThrowsArgumentException(fun () -> [0I .. BigInteger() .. 3I] |> ignore)
+#endif
VerifySeqsEqual [0I .. -2I .. 10I] []
()
@@ -457,8 +542,11 @@ type BigIntType() =
member this.Subtraction() =
Assert.AreEqual((100I - 123I),-23I)
Assert.AreEqual((0I - bigPositiveB),bigNegativeB)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual((BigInteger() - bigPositiveB),bigNegativeB)
Assert.AreEqual((bigPositiveB - BigInteger()),bigPositiveB)
+#endif
Assert.AreEqual((bigPositiveB - 0I),bigPositiveB)
Assert.AreEqual((-100I - (-123I)),23I)
Assert.AreEqual((100I - (-123I)),223I)
@@ -471,7 +559,10 @@ type BigIntType() =
Assert.AreEqual(-bigPositiveA,bigNegativeA)
Assert.AreEqual(-bigNegativeA,bigPositiveA)
Assert.AreEqual(-0I,0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(-BigInteger(),0I)
+#endif
()
@@ -480,7 +571,10 @@ type BigIntType() =
Assert.AreEqual(+bigPositiveA,bigPositiveA)
Assert.AreEqual(+bigNegativeA,bigNegativeA)
Assert.AreEqual(+0I,0I)
+#if CROSS_PLATFORM_COMPILER // see https://bugzilla.xamarin.com/show_bug.cgi?id=22591
+#else
Assert.AreEqual(+BigInteger(),0I)
+#endif
()
diff --git a/src/fsharp/FSharp.Core.Unittests/StructTuples.fs b/src/fsharp/FSharp.Core.Unittests/StructTuples.fs
index d65b4800f1..d16efa8f21 100644
--- a/src/fsharp/FSharp.Core.Unittests/StructTuples.fs
+++ b/src/fsharp/FSharp.Core.Unittests/StructTuples.fs
@@ -4,6 +4,7 @@
namespace FSharp.Core.Unittests.FSharpStructTuples
+#if TUPLE_SAMPLE
open System
open FSharp.Core.Unittests.LibraryTestFx
open NUnit.Framework
@@ -139,3 +140,4 @@ type StructTuplesCSharpInterop() =
let struct (one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) )
Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) && (eleven=11) && (twelve=12) && (thirteen=13) && (fourteen=14) && (fifteen=15) && (sixteen=16) )
()
+#endif
diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs
index bacb36eb34..0fdcc27abe 100644
--- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs
+++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs
@@ -3527,4 +3527,9 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType
Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType()
Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()
"
+#if CROSS_PLATFORM_COMPILER
+ ()
+ // disabled because of slight order and GetMember discrepencies
+#else
SurfaceArea.verify expected "net40" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__))
+#endif
diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs
index 01a15aff35..9c63e5a493 100644
--- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs
+++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs
@@ -3498,4 +3498,4 @@ System.IObserver`1[T]: Void OnCompleted()
System.IObserver`1[T]: Void OnError(System.Exception)
System.IObserver`1[T]: Void OnNext(T)
"
- SurfaceArea.verify expected "portable47" (sprintf "%s\\%s" __SOURCE_DIRECTORY__ __SOURCE_FILE__)
+ SurfaceArea.verify expected "portable47" (sprintf "%s/%s" __SOURCE_DIRECTORY__ __SOURCE_FILE__)
diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj
index ced3541870..8ad25ce16c 100644
--- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj
+++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj
@@ -228,6 +228,29 @@
+
+ false
+
+
+ false
+
+
+ false
+
diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs
index 9fcc440268..9fdfeef402 100644
--- a/src/fsharp/FSharp.Core/prim-types.fs
+++ b/src/fsharp/FSharp.Core/prim-types.fs
@@ -4710,7 +4710,10 @@ namespace Microsoft.FSharp.Core
#if BE_SECURITY_TRANSPARENT
[] // assembly is fully transparent
+#if CROSS_PLATFORM_COMPILER
+#else
[] // v4 transparency; soon to be the default, but not yet
+#endif
#else
#if !FX_NO_SECURITY_PERMISSIONS
// REVIEW: Need to choose a specific permission for the action to be applied to
diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj
index abcca2ff43..b1f17a6ea2 100644
--- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj
+++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj
@@ -593,18 +593,6 @@
$(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.Design.$(RoslynVSPackagesVersion)\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
-
- $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
-
-
- $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll
-
-
- $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll
-
-
- $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
-
$(FSharpSourcesRoot)\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll
True
@@ -629,4 +617,35 @@
FSharp.Core
+
+
+ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll
+
+
+ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll
+
+
+ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll
+
+
+ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
\ No newline at end of file
diff --git a/src/fsharp/MSBuildReferenceResolver.fs b/src/fsharp/MSBuildReferenceResolver.fs
index e85ea1f345..04d73b6a2f 100644
--- a/src/fsharp/MSBuildReferenceResolver.fs
+++ b/src/fsharp/MSBuildReferenceResolver.fs
@@ -70,11 +70,13 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver
//[]
//let private Net452 = "v4.5.2" // not available in Dev15 MSBuild version
+#if MSBUILD_AT_LEAST_14
[]
let private Net46 = "v4.6"
[]
let private Net461 = "v4.6.1"
+#endif
/// Get the path to the .NET Framework implementation assemblies by using ToolLocationHelper.GetPathToDotNetFramework.
/// This is only used to specify the "last resort" path for assembly resolution.
@@ -88,9 +90,11 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver
| Net40 -> Some TargetDotNetFrameworkVersion.Version40
| Net45 -> Some TargetDotNetFrameworkVersion.Version45
| Net451 -> Some TargetDotNetFrameworkVersion.Version451
+#if MSBUILD_AT_LEAST_14
//| Net452 -> Some TargetDotNetFrameworkVersion.Version452 // not available in Dev15 MSBuild version
| Net46 -> Some TargetDotNetFrameworkVersion.Version46
| Net461 -> Some TargetDotNetFrameworkVersion.Version461
+#endif
| _ -> assert false; None
match v with
| Some v ->
@@ -128,13 +132,19 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver
/// Use MSBuild to determine the version of the highest installed framework.
let HighestInstalledNetFrameworkVersion() =
+ try
+#if MSBUILD_AT_LEAST_14
if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version461)) <> null then Net461
elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version46)) <> null then Net46
// 4.5.2 enumeration is not available in Dev15 MSBuild version
//elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version452)) <> null then Net452
elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then Net451
+#else
+ if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then Net451
+#endif
elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version45)) <> null then Net45
- else Net40 // version is 4.0 assumed since this code is running.
+ else Net45 // version is 4.0 assumed since this code is running.
+ with _ -> Net45
/// Derive the target framework directories.
let DeriveTargetFrameworkDirectories (targetFrameworkVersion:string, logMessage) =
diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs
index 83501a69a6..3fd7236a61 100644
--- a/src/fsharp/ast.fs
+++ b/src/fsharp/ast.fs
@@ -61,8 +61,8 @@ type XmlDocCollector() =
check()
savedLines.Add(line,pos)
- member x.LinesBefore(grabPointPos) =
-
+ member x.LinesBefore(grabPointPos) =
+ try
let lines = savedLinesAsArray.Force()
let grabPoints = savedGrabPointsAsArray.Force()
let firstLineIndexAfterGrabPoint = Array.findFirstIndexWhereTrue lines (fun (_,pos) -> posGeq pos grabPointPos)
@@ -76,6 +76,9 @@ type XmlDocCollector() =
Array.findFirstIndexWhereTrue lines (fun (_,pos) -> posGeq pos prevGrabPointPos)
//printfn "#lines = %d, firstLineIndexAfterPrevGrabPoint = %d, firstLineIndexAfterGrabPoint = %d" lines.Length firstLineIndexAfterPrevGrabPoint firstLineIndexAfterGrabPoint
lines.[firstLineIndexAfterPrevGrabPoint..firstLineIndexAfterGrabPoint-1] |> Array.map fst
+ with e ->
+ //printfn "unexpected error in LinesBefore:\n%s" (e.ToString())
+ [| |]
type XmlDoc =
| XmlDoc of string[]
diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs
index ad5f00e867..941ea7c555 100644
--- a/src/fsharp/fsi/console.fs
+++ b/src/fsharp/fsi/console.fs
@@ -350,6 +350,11 @@ type internal ReadLineConsole() =
input.Remove(!current, 1) |> ignore;
render();
+ let deleteToEndOfLine() =
+ if (!current < input.Length) then
+ input.Remove (!current, input.Length - !current) |> ignore;
+ render();
+
let insert(key: ConsoleKeyInfo) =
// REVIEW: is this F6 rewrite required? 0x1A looks like Ctrl-Z.
// REVIEW: the Ctrl-Z code is not recognised as EOF by the lexer.
@@ -411,6 +416,45 @@ type internal ReadLineConsole() =
current := input.Length;
(!anchor).PlaceAt(x.Inset,!rendered);
change()
+ | _ ->
+ match (key.Modifiers, key.KeyChar) with
+ // Control-A
+ | (ConsoleModifiers.Control, '\001') ->
+ current := 0;
+ (!anchor).PlaceAt(x.Inset,0)
+ change ()
+ // Control-E
+ | (ConsoleModifiers.Control, '\005') ->
+ current := input.Length;
+ (!anchor).PlaceAt(x.Inset,!rendered)
+ change ()
+ // Control-B
+ | (ConsoleModifiers.Control, '\002') ->
+ moveLeft()
+ change ()
+ // Control-f
+ | (ConsoleModifiers.Control, '\006') ->
+ moveRight()
+ change ()
+ // Control-k delete to end of line
+ | (ConsoleModifiers.Control, '\011') ->
+ deleteToEndOfLine()
+ change()
+ // Control-P
+ | (ConsoleModifiers.Control, '\016') ->
+ setInput(history.Previous());
+ change()
+ // Control-n
+ | (ConsoleModifiers.Control, '\014') ->
+ setInput(history.Next());
+ change()
+ // Control-d
+ | (ConsoleModifiers.Control, '\004') ->
+ if (input.Length = 0) then
+ exit 0 //quit
+ else
+ delete()
+ change()
| _ ->
// Note: If KeyChar=0, the not a proper char, e.g. it could be part of a multi key-press character,
// e.g. e-acute is ' and e with the French (Belgium) IME and US Intl KB.
diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs
index 11e1155a72..3d02f977d7 100644
--- a/src/fsharp/fsi/fsi.fs
+++ b/src/fsharp/fsi/fsi.fs
@@ -580,7 +580,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, argv: s
// Mono on Win32 doesn't implement correct console processing
not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT)
#endif
+// In the cross-platform edition of F#, 'gui' support is currently off by default
+#if CROSS_PLATFORM_COMPILER
+ let mutable gui = false // override via "--gui", off by default
+#else
let mutable gui = true // override via "--gui", on by default
+#endif
#if DEBUG
let mutable showILCode = false // show modul il code
#endif
diff --git a/src/fsharp/test.snk b/src/fsharp/test.snk
new file mode 100644
index 0000000000..c16543bdc4
Binary files /dev/null and b/src/fsharp/test.snk differ
diff --git a/src/fsharp/vs/IncrementalBuild.fs b/src/fsharp/vs/IncrementalBuild.fs
index 867f3556cc..5310c067ce 100755
--- a/src/fsharp/vs/IncrementalBuild.fs
+++ b/src/fsharp/vs/IncrementalBuild.fs
@@ -1813,7 +1813,7 @@ type IncrementalBuilder(ctokCtor: CompilationThreadToken, frameworkTcImportsCach
/// Create a type-check configuration
let tcConfigB, sourceFilesNew =
- let defaultFSharpBinariesDir = Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value
+ let defaultFSharpBinariesDir = Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None).Value
// see also fsc.fs:runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB
let tcConfigB =
diff --git a/src/scripts/fssrgen.targets b/src/scripts/fssrgen.targets
index fcfad9cc02..f090cd0cd2 100644
--- a/src/scripts/fssrgen.targets
+++ b/src/scripts/fssrgen.targets
@@ -24,7 +24,8 @@ Copyright (C) Microsoft Corporation. Apache 2.0 License.
-
+
+
diff --git a/src/scripts/scriptlib.fsx b/src/scripts/scriptlib.fsx
index f8f2dc14bd..f9c3fd3d44 100644
--- a/src/scripts/scriptlib.fsx
+++ b/src/scripts/scriptlib.fsx
@@ -34,7 +34,7 @@ module Scripting =
0
#if INTERACTIVE
- let argv = Microsoft.FSharp.Compiler.Interactive.Settings.fsi.CommandLineArgs |> Array.skip 1
+ let argv = Microsoft.FSharp.Compiler.Interactive.Settings.fsi.CommandLineArgs |> Seq.skip 1 |> Seq.toArray
let getCmdLineArgOptional switchName =
argv |> Array.filter(fun t -> t.StartsWith(switchName)) |> Array.map(fun t -> t.Remove(0, switchName.Length).Trim()) |> Array.tryHead
diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs
index a7d02fea26..58df295e4f 100644
--- a/src/utils/CompilerLocationUtils.fs
+++ b/src/utils/CompilerLocationUtils.fs
@@ -188,15 +188,15 @@ module internal FSharpEnvironment =
// - default location of fsi.exe in FSharp.VS.FSI.dll
// - default location of fsc.exe in FSharp.Compiler.CodeDom.dll
// - default F# binaries directory in (project system) Project.fs
+ let BinFolderOfDefaultFSharpCompiler(probePoint:string option) =
#if FX_NO_WIN_REGISTRY
- let BinFolderOfDefaultFSharpCompiler =
+ ignore probePoint
#if FX_NO_APP_DOMAINS
Some System.AppContext.BaseDirectory
#else
- Some System.AppDomain.CurrentDomain.BaseDirectory
+ Some System.AppDomain.CurrentDomain.BaseDirectory
#endif
#else
- let BinFolderOfDefaultFSharpCompiler =
// Check for an app.config setting to redirect the default compiler location
// Like fsharp-compiler-location
try
@@ -205,7 +205,13 @@ module internal FSharpEnvironment =
match result with
| Some _ -> result
| None ->
-
+
+ let safeExists f = (try File.Exists(f) with _ -> false)
+ // Look in the probePoint if given, e.g. look for a compiler alongside of FSharp.Build.dll
+ match probePoint with
+ | Some p when safeExists (Path.Combine(p,"fsc.exe")) || safeExists (Path.Combine(p,"Fsc.exe")) -> Some p
+ | _ ->
+
// On windows the location of the compiler is via a registry key
// Note: If the keys below change, be sure to update code in:
@@ -253,11 +259,13 @@ module internal FSharpEnvironment =
// Check if the framework version 4.5 or above is installed at the given key entry
let IsNetFx45OrAboveInstalledAt subkey =
+ try
useKey subkey (fun regkey ->
match regkey with
| null -> false
| _ -> regkey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0
-
+ with _ -> false
+
// Check if the framework version 4.5 or above is installed
let IsNetFx45OrAboveInstalled =
IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" ||
diff --git a/tests/fsharp/core/access/test.fsx b/tests/fsharp/core/access/test.fsx
index 238a0e6e4a..26034dc99e 100644
--- a/tests/fsharp/core/access/test.fsx
+++ b/tests/fsharp/core/access/test.fsx
@@ -4,11 +4,17 @@ module Core_access
#endif
#light
+let failures = ref []
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
(*--------------------*)
@@ -262,9 +268,17 @@ module RestrictedRecordsAndUnionsUsingPrivateAndInternalTypes =
(*--------------------*)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
diff --git a/tests/fsharp/core/apporder/test.fsx b/tests/fsharp/core/apporder/test.fsx
index 77395080a4..521ea7aaa6 100644
--- a/tests/fsharp/core/apporder/test.fsx
+++ b/tests/fsharp/core/apporder/test.fsx
@@ -4,9 +4,13 @@ module Core_apporder
#endif
#light
-let failures = ref false
-let report_failure (s) =
- stderr.WriteLine ("NO: " + s); failures := true
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
let test s b = if b then () else report_failure(s)
(* TEST SUITE FOR Int32 *)
@@ -1119,9 +1123,18 @@ module RecordInitialisationWithDifferentTxpes =
check "cewekcjnwe21" expected actual
check "cewekcjnwe22" "1234567" !order
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/array/test.fsx b/tests/fsharp/core/array/test.fsx
index 5a1f8a6a33..eb91597dd7 100644
--- a/tests/fsharp/core/array/test.fsx
+++ b/tests/fsharp/core/array/test.fsx
@@ -6,7 +6,7 @@ module Core_array
let mutable failures = []
let report_failure (s) =
stderr.WriteLine " NO"; failures <- s :: failures
-let test s b = if not b then (stderr.Write(s:string); report_failure() )
+let test s b = if not b then (stderr.Write(s:string); report_failure(s) )
let check s b1 b2 = test s (b1 = b2)
@@ -779,8 +779,11 @@ module StringSlicingTest =
test "slice1940" (s1.[0..1] = "ab")
test "slice1941" (s1.[1..1] = "b")
test "slice1942" (s1.[2..1] = "")
+#if MONO
test "slice1943" (s1.[3..1] = "")
test "slice1944" (s1.[4..1] = "")
+#endif
+
test "slice1950" (s1.[-3..-4] = "")
test "slice1951" (try s1.[-4..-3] |> ignore; false with _ -> true)
@@ -1496,9 +1499,17 @@ module bug6447 =
do check "bug6447_hash_a2" (hash a2) 10727
#endif
+#if TESTS_AS_APP
+let RUN() = failures
+#else
let aa =
- if not failures.IsEmpty then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+ match failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/attributes/test.fsx b/tests/fsharp/core/attributes/test.fsx
index 82aecdffa0..75a03c570e 100644
--- a/tests/fsharp/core/attributes/test.fsx
+++ b/tests/fsharp/core/attributes/test.fsx
@@ -15,13 +15,23 @@ module Core_attributes
#r "cslib.dll"
#endif
-let mutable failures : string list = []
-let report_failure msg =
- printf "\n................TEST '%s' FAILED...............\n" msg; failures <- failures @ [msg]
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
let check (s:string) e r =
if r = e then stdout.WriteLine (s+": YES")
- else (stdout.WriteLine ("\n***** "+s+": FAIL\n"); report_failure s)
+ else (stdout.Write ("\n***** "+s+": FAIL: ");
+ printfn "Expected '%A', Got '%A'" r e
+ report_failure s)
open System
open System.Diagnostics
@@ -366,7 +376,7 @@ module CheckGenericParameterAttibutesAndNames =
if typeof.GetMethod("M2").GetGenericArguments().[1].Name <> "V" then report_failure "wrong name on generic parameter (C)"
if typeof.GetMethod("M3").GetGenericArguments().[0].Name <> "a" then report_failure "unexpected inferred name on generic parameter (D)"
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
module CheckAttributesOnElementsWithSignatures =
let checkOneAttribute msg (cas: _ []) =
@@ -501,7 +511,7 @@ module ThreadStaticTest = begin
static val mutable private results : int list
static member Results with get() = C.results and set v = C.results <- v
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !MONO && !FX_PORTABLE_OR_NETSTANDARD
let N = 1000
let main() =
let t1 =
@@ -985,36 +995,44 @@ module TestTypeInstantiationsInAttributes =
let attrs1 = typeof.GetCustomAttributes(typeof,false) ;
match attrs1 with
| [| (:? System.Diagnostics.DebuggerDisplayAttribute as ca) |] ->
- check "test423cwo3nh01" ca.Value "{Length}"
- check "test423cwo3nh02" ca.Target typeof>
+ check "test423cwo3nh01a" ca.Value "{Length}"
+ check "test423cwo3nh02a" ca.Target typeof>
| _ -> check "no attribute found" true false
let attrs2 = typeof.GetCustomAttributes(typeof,false) ;
match attrs2 with
| [| (:? System.Diagnostics.DebuggerTypeProxyAttribute as ca) |] ->
- check "test423cwo3nq01" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
- check "test423cwo3nq02" ca.Target typeof>
+#if !MONO
+ check "test423cwo3nq01b" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
+#endif
+ check "test423cwo3nq02b" ca.Target typeof>
| _ -> check "no attribute found" true false
let attrs3 = typeof.GetCustomAttributes(typeof,false) ;
match attrs3 with
| [| (:? System.Diagnostics.DebuggerTypeProxyAttribute as ca) |] ->
- check "test423cwo3nw01" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
- check "test423cwo3nw02" ca.Target typeof>
+#if !MONO
+ check "test423cwo3nw01c" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
+#endif
+ check "test423cwo3nw02c" ca.Target typeof>
| _ -> check "no attribute found" true false
let attrs4 = typeof.GetCustomAttributes(typeof,false) ;
match attrs4 with
| [| (:? System.Diagnostics.DebuggerTypeProxyAttribute as ca) |] ->
- check "test423cwo3nd01" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
- check "test423cwo3nd02" ca.Target typeof[,]>
+#if !MONO
+ check "test423cwo3nd01d" ca.ProxyTypeName (typeof>).AssemblyQualifiedName
+#endif
+ check "test423cwo3nd02d" ca.Target typeof[,]>
| _ -> check "no attribute found" true false
let attrs5 = typeof.GetCustomAttributes(typeof,false) ;
match attrs5 with
| [| (:? System.Diagnostics.DebuggerTypeProxyAttribute as ca) |] ->
- check "test423cwo3ng01" ca.ProxyTypeName (typedefof>).AssemblyQualifiedName
- check "test423cwo3ng02" ca.Target typedefof>
+#if !MONO
+ check "test423cwo3ng01e" ca.ProxyTypeName (typedefof>).AssemblyQualifiedName
+#endif
+ check "test423cwo3ng02e" ca.Target typedefof>
| _ -> check "no attribute found" true false
module NullsInAttributes =
@@ -1291,18 +1309,37 @@ module ParamArrayNullAttribute =
check "vwcewecioj9" (test3()) "Attr()"
+// See https://github.com/fsharp/fsharp/issues/483
+// We do not expect an exception
+module TestFsiLoadOfNonExistentAssembly =
+ let test() =
+ try
+ let log4netType = System.Type.GetType("ThisTypeDoes.Not.Exist, thisAssemblyDoesNotExist")
+ let exists = log4netType <> null
+ if exists then report_failure (sprintf "type existed!")
+ do printfn "%A" exists
+ with e ->
+ report_failure (sprintf "exception unexpected: %s" e.Message)
+
+ do test()
+
(*-------------------------------------------------------------------------
!* Test passed?
*------------------------------------------------------------------------- *)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- match failures with
- | [] -> ()
- | _ ->
- stdout.WriteLine "Test Failed"; exit 1
-
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/comprehensions-hw/test.fsx b/tests/fsharp/core/comprehensions-hw/test.fsx
index d8660ad985..38d7f8c316 100644
--- a/tests/fsharp/core/comprehensions-hw/test.fsx
+++ b/tests/fsharp/core/comprehensions-hw/test.fsx
@@ -7,10 +7,19 @@ open System.Text.RegularExpressions
open System.IO
open System.Xml
-let mutable failures = false
-let report_failure () =
- stderr.WriteLine " NO"; failures <- true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
test "coic23a" (Seq.toList { 'a' .. 'c' } = ['a';'b';'c'])
@@ -1032,9 +1041,17 @@ module TryFinallySequenceExpressionTests =
testve937()
-let _ =
- if failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/comprehensions/test.fsx b/tests/fsharp/core/comprehensions/test.fsx
index 8d33823699..1339196c63 100644
--- a/tests/fsharp/core/comprehensions/test.fsx
+++ b/tests/fsharp/core/comprehensions/test.fsx
@@ -3,10 +3,17 @@
module Core_comprehensions
#endif
#light
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
#if FSCORE_PORTABLE_OLD
let printfn s = printfn "%s" s
@@ -615,7 +622,7 @@ let pickering() =
printf "Regressions: 1017\n"
let fails f = try f() |> ignore; false with e -> true
-let check str x = if x then printf "OK: %s\n" str else (printf "FAILED: %s\n" str; report_failure ())
+let check str x = if x then printf "OK: %s\n" str else (printf "FAILED: %s\n" str; report_failure (str))
let rec steps x dx n = if n=0 then [] else x :: steps (x+dx) dx (n-1)
@@ -843,9 +850,12 @@ module MoreSequenceSyntaxTests =
return 2 }
let x0m = async { printfn "hello" }
+#if TESTS_AS_APP
+#else
let f103 () =
async { do! Async.SwitchToNewThread()
do! Async.SwitchToNewThread() }
+#endif
module AmbiguityTests1 =
@@ -940,6 +950,8 @@ module SyncMonad =
sync { printfn "hello" }
+#if TESTS_AS_APP
+#else
type ThreadBuilder () =
inherit SyncBuilder()
member x.Run(f) = async { do! Async.SwitchToNewThread()
@@ -989,6 +1001,7 @@ module SyncMonad =
return 2 }
let x0m : unit =
thread { printfn "hello" }
+#endif
module ContMonad =
type Cont<'a> = (('a -> unit) * (exn -> unit) -> unit)
@@ -1433,7 +1446,6 @@ module EnumPatternWithFunkyTypes_FSharp_1_0_13904 =
// This is allowed - 'a is known to be "bool"
let s = seq { for i in T true -> i }
-
module SideEffectListMonad =
type SideEffectListWithReturnBuilder(onReturn, onZero) =
member b.Bind(x:unit,f) :list<'b> = f()
@@ -1473,8 +1485,17 @@ module SideEffectListMonad =
test "x0b" (x0b = ([1], 1))
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/control/test.fsx b/tests/fsharp/core/control/test.fsx
index 3186079d3e..d72ef111ef 100644
--- a/tests/fsharp/core/control/test.fsx
+++ b/tests/fsharp/core/control/test.fsx
@@ -80,6 +80,7 @@ type Microsoft.FSharp.Control.Async with
return resArray }
module BasicTests =
+ let Run() =
check "cew23242g" (Async.RunSynchronously (async { do () })) ()
check "32o8f43k1" (Async.RunSynchronously (async { return () })) ()
check "32o8f43k2" (Async.RunSynchronously (async { return 1 })) 1
@@ -97,16 +98,16 @@ module BasicTests =
return x+1 }) with _ -> 2) 2
//check "32o8f43kt" (Async.RunSynchronously (Async.Catch (async { do failwith "error" }))) (Choice2Of2 (Failure "error"))
- check "32o8f43kt" (Async.RunSynchronously (Async.Catch (async { return 1 }))) (Choice1Of2 1)
+ check "32o8f43kta" (Async.RunSynchronously (Async.Catch (async { return 1 }))) (Choice1Of2 1)
- check "32o8f43kt" (Async.RunSynchronously (async { try
+ check "32o8f43ktb" (Async.RunSynchronously (async { try
do failwith "error"
return 3
with _ ->
return 2
})) 2
- check "32o8f43kt"
+ check "32o8f43ktc"
(Async.RunSynchronously
(async { try
do failwith "error"
@@ -116,7 +117,7 @@ module BasicTests =
}))
2
- check "32o8f43kt"
+ check "32o8f43ktd"
(Async.RunSynchronously
(async { try
try
@@ -315,7 +316,8 @@ module StartChildTrampoliningCheck =
module StartChildOutsideOfAsync =
- open System.Threading
+ open System.Threading
+ let Run() =
check "dshfukeryhu8we"
(let b = async {return 27} |> Async.StartChild
@@ -344,19 +346,21 @@ module StartChildOutsideOfAsync =
true
-check "32o8f43kaI: Spawn"
- (let mutable result = 0
- Async.Start(async { do printfn "hello 1"
- do! Async.Sleep(30)
- do result <- 1 });
- while result = 0 do
- printf "."
+module SpawnTests =
+ let Run() =
+ check "32o8f43kaI: Spawn"
+ (let mutable result = 0
+ Async.Start(async { do printfn "hello 1"
+ do! Async.Sleep(30)
+ do result <- 1 });
+ while result = 0 do
+ printf "."
#if FX_PORTABLE_OR_NETSTANDARD
- Task.Delay(10).Wait()
+ Task.Delay(10).Wait()
#else
- System.Threading.Thread.Sleep(10)
+ System.Threading.Thread.Sleep(10)
#endif
- result) 1
+ result) 1
#if !FX_PORTABLE_OR_NETSTANDARD
@@ -448,7 +452,7 @@ module Bug6078 =
let throwingAsync = async { raise <| new InvalidOperationException("foo") }
for i in 1..100 do
- check "5678w6r78w"
+ check ("5678w6r78w"+string i)
begin
try
[ for j in 1..i do yield sleepingAsync;
@@ -461,7 +465,7 @@ module Bug6078 =
"foo"
Test()
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !MONO && !FX_PORTABLE_OR_NETSTANDARD
module AwaitEventTests =
let AwaitEventTest() =
// AwaitEvent
@@ -511,7 +515,8 @@ module AwaitEventTests =
expectedResult
- AwaitEventTest()
+ //AwaitEventTest()
+
#endif
module AsBeginEndTests =
@@ -707,7 +712,7 @@ module AsBeginEndTests =
(try req.EndAsync(iar) with :? System.OperationCanceledException as e -> 100 ))
100
- AsBeginEndTest()
+ //AsBeginEndTest()
(*
@@ -758,6 +763,7 @@ check "32o8f43ka2: Cancel a For loop"
*)
module OnCancelTests =
+ let Run() =
check "32o8f43ka1: No cancellation"
(let mutable count = 0
let mutable res = 0
@@ -776,7 +782,7 @@ module OnCancelTests =
res) 0
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
module SyncContextReturnTests =
let p() = printfn "running on %A" System.Threading.SynchronizationContext.Current
@@ -990,6 +996,7 @@ module SyncContextReturnTests =
#endif
module GenerateTests =
+ let Run() =
for n = 0 to 20 do
check (sprintf "32o8f43ka2: Async.Generate, n = %d" n)
(Async.RunSynchronously (Async.Generate(n, (fun i -> async { return i })))) [| 0..n-1 |]
@@ -1014,6 +1021,7 @@ module GenerateTests =
[| 0xdeadbeef |]
module ParallelTests =
+ let Run() =
for n = 1 to 20 do
check
(sprintf "32o8f43ka6: Async.Parallel w/- last failure, n = %d" n)
@@ -1128,6 +1136,7 @@ module ParallelTests =
#if !FX_PORTABLE_OR_NETSTANDARD
module AsyncWaitOneTest1 =
+ let Run() =
check
"c32398u1: AsyncWaitOne"
@@ -1252,6 +1261,7 @@ Async.RunSynchronously (async { let! n = s.AsyncRead(buffer,0,9) in return n })
#if !FX_PORTABLE_OR_NETSTANDARD
module AsyncGenerateTests =
+ let Run() =
for length in 1 .. 10 do
for chunks in 1 .. 10 do
check (sprintf "c3239438u: Run/Generate, length=%d, chunks=%d" length chunks)
@@ -1770,7 +1780,7 @@ module ParallelTest =
Test()
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
// See bug 5570, check we do not switch threads
module CheckNoPumpingOrThreadSwitchingBecauseWeTrampolineSynchronousCode =
let checkOnThread msg expectedThreadId =
@@ -2067,18 +2077,34 @@ module Bug391710 =
check "Bug391710" true false
printfn "%s" (e.ToString())
+// Some tests should not be run in the static constructor
+let RunAll() =
+ BasicTests.Run()
+ StartChildOutsideOfAsync.Run()
+ SpawnTests.Run()
+ AsBeginEndTests.AsBeginEndTest()
+#if !MONO && !FX_PORTABLE_OR_NETSTANDARD
+ AwaitEventTests.AwaitEventTest()
+#endif
+ OnCancelTests.Run()
+ GenerateTests.Run()
+ ParallelTests.Run()
+#if !FX_PORTABLE_OR_NETSTANDARD
+ AsyncWaitOneTest1.Run()
+ AsyncGenerateTests.Run()
+#endif
+
#if TESTS_AS_APP
-let aa = if not failures.IsEmpty then exit 1 else stdout.WriteLine "Test Passed"; exit 0
+let RUN() = RunAll(); failures
#else
-let _ =
- if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
-// debug: why is the fsi test failing? is it because test.ok does not exist?
- if System.IO.File.Exists("test.ok") then
- stdout.WriteLine ("test.ok found at {0}", System.IO.FileInfo("test.ok").FullName)
- else
- stdout.WriteLine ("test.ok not found")
- exit 0)
-
-#endif
\ No newline at end of file
+RunAll()
+let aa =
+ if not failures.IsEmpty then
+ stdout.WriteLine "Test Failed"
+ exit 1
+ else
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+#endif
+
diff --git a/tests/fsharp/core/controlChamenos/test.fsx b/tests/fsharp/core/controlChamenos/test.fsx
index cb57e4baa9..f4199c9245 100644
--- a/tests/fsharp/core/controlChamenos/test.fsx
+++ b/tests/fsharp/core/controlChamenos/test.fsx
@@ -100,7 +100,7 @@ open System
open System.Diagnostics
-let () =
+let RunAll() =
let meetings = 100000
let colors = [Blue; Red; Yellow; Blue]
@@ -114,21 +114,15 @@ let () =
check "Chamenos" (Seq.sum meets) (meetings*2)
#if TESTS_AS_APP
-let aa =
- if not failures.IsEmpty then exit 1
- else
- stdout.WriteLine "Test Passed"
- exit 0
+let RUN() = RunAll(); failures
#else
-let _ =
- if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
-// debug: why is the fsi test failing? is it because test.ok does not exist?
- if System.IO.File.Exists("test.ok") then
- stdout.WriteLine ("test.ok found at {0}", System.IO.FileInfo("test.ok").FullName)
- else
- stdout.WriteLine ("test.ok not found")
- exit 0)
+RunAll()
+let aa =
+ if not failures.IsEmpty then
+ stdout.WriteLine "Test Failed"
+ exit 1
+ else
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
#endif
-
diff --git a/tests/fsharp/core/controlMailbox/test.fsx b/tests/fsharp/core/controlMailbox/test.fsx
index dab799b85f..ac63919aef 100644
--- a/tests/fsharp/core/controlMailbox/test.fsx
+++ b/tests/fsharp/core/controlMailbox/test.fsx
@@ -307,7 +307,6 @@ module MailboxProcessorBasicTests =
mb.Post(true)
r)
None
- test()
module MailboxProcessorErrorEventTests =
exception Err of int
@@ -359,7 +358,6 @@ module MailboxProcessorErrorEventTests =
#endif
!res)
100
- test()
type msg = Increment of int | Fetch of AsyncReplyChannel | Reset
let mailboxes() = new MailboxProcessor(fun inbox ->
@@ -563,22 +561,6 @@ type Path(str) =
current <- n
-test5()
-test6()
-timeout_para()
-timeout_par()
-timeout_para_def()
-timeout_par_def()
-timeout_tpara()
-timeout_tpar()
-timeout_tpara_def()
-timeout_tpar_def()
-// ToDo: 7/31/2008: Disabled because of probable timing issue. QA needs to re-enable post-CTP.
-// Tracked by bug FSharp 1.0:2891
-//test15()
-// ToDo: 7/31/2008: Disabled because of probable timing issue. QA needs to re-enable post-CTP.
-// Tracked by bug FSharp 1.0:2891
-//test15b()
module LotsOfMessages =
let test () =
@@ -610,19 +592,38 @@ module LotsOfMessages =
System.Threading.Thread.Sleep(10)
#endif
check "celrv09ervknf3ew" logger.CurrentQueueLength 0
- test()
+
+let RunAll() =
+ MailboxProcessorBasicTests.test()
+ MailboxProcessorErrorEventTests.test()
+ test5()
+ test6()
+ timeout_para()
+ timeout_par()
+ timeout_para_def()
+ timeout_par_def()
+ timeout_tpara()
+ timeout_tpar()
+ timeout_tpara_def()
+ timeout_tpar_def()
+ // ToDo: 7/31/2008: Disabled because of probable timing issue. QA needs to re-enable post-CTP.
+ // Tracked by bug FSharp 1.0:2891
+ //test15()
+ // ToDo: 7/31/2008: Disabled because of probable timing issue. QA needs to re-enable post-CTP.
+ // Tracked by bug FSharp 1.0:2891
+ //test15b()
+ LotsOfMessages.test()
#if TESTS_AS_APP
-let aa = if not failures.IsEmpty then exit 1 else stdout.WriteLine "Test Passed"; exit 0
+let RUN() = RunAll(); failures
#else
-let _ =
- if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
-// debug: why is the fsi test failing? is it because test.ok does not exist?
- if System.IO.File.Exists("test.ok") then
- stdout.WriteLine ("test.ok found at {0}", System.IO.FileInfo("test.ok").FullName)
- else
- stdout.WriteLine ("test.ok not found")
- exit 0)
-#endif
\ No newline at end of file
+RunAll()
+let aa =
+ if not failures.IsEmpty then
+ stdout.WriteLine "Test Failed"
+ exit 1
+ else
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+#endif
diff --git a/tests/fsharp/core/controlStackOverflow/test.fsx b/tests/fsharp/core/controlStackOverflow/test.fsx
index d2b9f2c80d..1a2da20aa4 100644
--- a/tests/fsharp/core/controlStackOverflow/test.fsx
+++ b/tests/fsharp/core/controlStackOverflow/test.fsx
@@ -262,7 +262,6 @@ module StackDiveTests =
(so8 10000 |> Async.RunSynchronously)
8
- test()
module ReturnStackoverflow =
let test () =
@@ -400,22 +399,22 @@ module ReturnStackoverflow =
| :? System.OperationCanceledException -> "success")
"success"
- test()
(*******************************************************************************)
+let RunAll() =
+ StackDiveTests.test()
+ ReturnStackoverflow.test()
+
#if TESTS_AS_APP
-let aa =
- if not failures.IsEmpty then exit 1
- else stdout.WriteLine "Test Passed"; exit 0
+let RUN() = RunAll(); failures
#else
-let _ =
- if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1)
- else (stdout.WriteLine "Test Passed";
- log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
- System.IO.File.WriteAllText("test.ok","ok");
-// debug: why is the fsi test failing? is it because test.ok does not exist?
- if System.IO.File.Exists("test.ok") then
- stdout.WriteLine ("test.ok found at {0}", System.IO.FileInfo("test.ok").FullName)
- else
- stdout.WriteLine ("test.ok not found")
- exit 0)
+RunAll()
+let aa =
+ if not failures.IsEmpty then
+ stdout.WriteLine "Test Failed"
+ exit 1
+ else
+ stdout.WriteLine "Test Passed"
+ log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
#endif
diff --git a/tests/fsharp/core/controlWebExt/test.fsx b/tests/fsharp/core/controlWebExt/test.fsx
index d79849cc65..42a43aed57 100644
--- a/tests/fsharp/core/controlWebExt/test.fsx
+++ b/tests/fsharp/core/controlWebExt/test.fsx
@@ -1,4 +1,7 @@
// #Conformance #ComputationExpressions #Async
+#if TESTS_AS_APP
+module Core_controlWebExt
+#endif
#light
let failuresFile =
@@ -90,7 +93,6 @@ module WebResponseTests =
check "WebRequest cancellation test final result" !active 0
- repeatedFetchAndCancelTest()
module WebClientTests =
@@ -218,8 +220,16 @@ module WebClientTests =
repeatedFetchDataAndCancelTest()
repeatedFetchFileAndCancelTest()
+let RunAll() =
+ WebClientTests.repeatedFetchAndCancelTest()
+ WebResponseTests.repeatedFetchAndCancelTest()
-let _ =
+#if TESTS_AS_APP
+let RUN() = RunAll(); failures
+#else
+RunAll()
+
+let aa =
if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1)
else (stdout.WriteLine "Test Passed";
log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
@@ -231,3 +241,4 @@ let _ =
stdout.WriteLine ("test.ok not found")
exit 0)
+#endif
diff --git a/tests/fsharp/core/csext/test.fsx b/tests/fsharp/core/csext/test.fsx
index a65100229f..16a8da62e7 100644
--- a/tests/fsharp/core/csext/test.fsx
+++ b/tests/fsharp/core/csext/test.fsx
@@ -6,10 +6,19 @@ module Core_csext
#light
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
open System.Linq
@@ -46,9 +55,19 @@ type Struct(i:int) =
(*--------------------*)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
+
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/forexpression/test.fsx b/tests/fsharp/core/forexpression/test.fsx
index c7e8ce7843..5ef6b494a9 100644
--- a/tests/fsharp/core/forexpression/test.fsx
+++ b/tests/fsharp/core/forexpression/test.fsx
@@ -134,6 +134,10 @@ do test "ilistSum" (expectedArraySum = ilistSum )
do test "rangeSum" (expectedRangeSum = rangeSum )
do test "stringSum" (expectedStringSum = stringSum )
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
if !failures then stdout.WriteLine "Test Failed"; exit 1
else stdout.WriteLine "Test Passed"; System.IO.File.WriteAllText("test.ok","ok"); exit 0
+#endif
diff --git a/tests/fsharp/core/fsfromfsviacs/test.fsx b/tests/fsharp/core/fsfromfsviacs/test.fsx
index f650dbdd46..5de3265076 100644
--- a/tests/fsharp/core/fsfromfsviacs/test.fsx
+++ b/tests/fsharp/core/fsfromfsviacs/test.fsx
@@ -2,10 +2,17 @@
open Lib
open FSharpOptionalTests
-let mutable failures = false
-let report_failure () =
- stderr.WriteLine " NO"; failures <- true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
let r1 = Lib2.r1
let r2 = Lib2.r2
@@ -137,8 +144,17 @@ let TestAccessibility() =
*)
-let _ =
- if failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/genericmeasures/test.fsx b/tests/fsharp/core/genericmeasures/test.fsx
index 55a36b9719..265b186582 100644
--- a/tests/fsharp/core/genericmeasures/test.fsx
+++ b/tests/fsharp/core/genericmeasures/test.fsx
@@ -52,11 +52,19 @@ module Core_genericMeasures =
let x = 0<_>
T.Foo1(x)
- foo()
- T.Bar()
- T.Baz()
-
- let aa =
- stdout.WriteLine "Test Passed"
- System.IO.File.WriteAllText("test.ok", "ok")
- exit 0
\ No newline at end of file
+ let RunAll() =
+ foo()
+ T.Bar()
+ T.Baz()
+
+
+#if TESTS_AS_APP
+ let RUN() = RunAll(); []
+#else
+ RunAll();
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+#endif
+
+
diff --git a/tests/fsharp/core/innerpoly/test.fsx b/tests/fsharp/core/innerpoly/test.fsx
index e601c2aa07..657b8c2e81 100644
--- a/tests/fsharp/core/innerpoly/test.fsx
+++ b/tests/fsharp/core/innerpoly/test.fsx
@@ -3,9 +3,19 @@
module Core_innerpoly
#endif
-let mutable failures = false
-let report_failure () = stderr.WriteLine " NO"; failures <- true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
module TestNullIsGeneralizeable = begin
@@ -380,11 +390,16 @@ module InnerGenericBindingsInComputationExpressions = begin
end
#if TESTS_AS_APP
-let aa =
- if failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed"; exit 0)
+let RUN() = !failures
#else
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
-#endif
\ No newline at end of file
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/int32/test.fsx b/tests/fsharp/core/int32/test.fsx
index f05daab973..a6dec0ea0a 100644
--- a/tests/fsharp/core/int32/test.fsx
+++ b/tests/fsharp/core/int32/test.fsx
@@ -5,17 +5,28 @@ module Core_int32
#light
-let failures = ref false
-let report_failure (s) =
- stderr.WriteLine ("NO: " + s); failures := true; failwith ""
-let test s b = if b then () else report_failure(s)
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
(* TEST SUITE FOR Int32 *)
do stdout.WriteLine "checking unchecked conversions";
+#if MONO // https://github.com/fsharp/fsharp/issues/186
+#else
do test "testb3" (try nativeint 0.0 = 0n with _ -> false)
+#endif
do test "testnr6" (try int64 0.0 = 0L with _ -> false)
do test "testn46" (try int32 0.0 = 0 with _ -> false)
do test "testqb3" (try int16 0.0 = 0s with _ -> false)
@@ -407,8 +418,17 @@ module MinMaxAbsNative = begin
end
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/lazy/test.fsx b/tests/fsharp/core/lazy/test.fsx
index 9e5f8bec44..99ae8d4c24 100644
--- a/tests/fsharp/core/lazy/test.fsx
+++ b/tests/fsharp/core/lazy/test.fsx
@@ -3,10 +3,19 @@
module Core_lazy
#endif
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
@@ -62,9 +71,17 @@ let x1 : System.IObservable = null
let x2 : System.IObserver = null
let x3 : System.Lazy = null
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/letrec/test.fsx b/tests/fsharp/core/letrec/test.fsx
index 412c2e2e6b..be8f585b62 100644
--- a/tests/fsharp/core/letrec/test.fsx
+++ b/tests/fsharp/core/letrec/test.fsx
@@ -3,14 +3,17 @@
module Core_letrec
#endif
-let failures = ref false
-let report_failure s =
- stderr.WriteLine ("FAIL: "+s); failures := true
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
let test t s1 s2 =
if s1 <> s2 then
- (stderr.WriteLine ("test "+t+" failed");
- failures := true)
+ report_failure ("test "+t+" failed")
else
stdout.WriteLine ("test "+t+" succeeded")
@@ -124,7 +127,7 @@ let WouldFailAtRuntimeTest2 () =
and a3 = (fun x -> a2 + 2) 1 in
a2 + a3
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
open System
open System.Windows.Forms
@@ -300,7 +303,7 @@ module RecursiveInterfaceObjectExpressions = begin
end
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
module RecursiveInnerConstrainedGenerics = begin
open System.Windows.Forms
@@ -624,15 +627,16 @@ module BasicPermutations =
#if TESTS_AS_APP
-let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed"; exit 0)
+let RUN() = !failures
#else
-do
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
-
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
-#endif
\ No newline at end of file
diff --git a/tests/fsharp/core/libtest/test.fsx b/tests/fsharp/core/libtest/test.fsx
index e2c6a89614..95f90948f6 100644
--- a/tests/fsharp/core/libtest/test.fsx
+++ b/tests/fsharp/core/libtest/test.fsx
@@ -7,9 +7,9 @@ module Core_libtest
#nowarn "62"
#nowarn "44"
-let mutable failures = []
+let failures = ref []
let reportFailure s =
- stdout.WriteLine "\n................TEST FAILED...............\n"; failures <- failures @ [s]
+ stdout.WriteLine "\n................TEST FAILED...............\n"; failures := !failures @ [s]
let check s e r =
if r = e then stdout.WriteLine (s^": YES")
@@ -637,6 +637,8 @@ let genericHash x =
for i = 1 to 100 do r <- r + 1; done;
(r - 400) + hash x
+#if MONO // See https://github.com/fsharp/fsharp/issues/188
+#else
type T = T of int * int
@@ -670,6 +672,7 @@ let _ = printString "type specific hash matches generic hash (string array,12):
let _ = printString "type specific hash matches generic hash (byte array,12): "; if hash "abc"B = genericHash "abc"B then stdout.WriteLine "YES" else reportFailure "basic test Q204"
let _ = printString "type specific hash matches generic hash (byte array,12): "; if hash ""B = genericHash ""B then stdout.WriteLine "YES" else reportFailure "basic test Q205"
let _ = printString "type specific hash matches generic hash (byte array,12): "; if hash [| |] = genericHash [| |] then stdout.WriteLine "YES" else reportFailure "basic test Q206"
+#endif
(*---------------------------------------------------------------------------
@@ -1447,7 +1450,10 @@ module Pow =
test "cnod90kma" (pown 0.5 exp = 0.5 ** float exp);
test "cnod90kmb" (pown 1.0 exp = 1.0 ** float exp);
test "cnod90kmc" (pown 2.0 exp = 2.0 ** float exp);
+#if MONO
+#else
test "cnod90kmd" (pown 3.0 exp = 3.0 ** float exp)
+#endif
done
do for exp in [ 5 .. -1 .. -5 ] @ [System.Int32.MinValue;System.Int32.MaxValue] do
@@ -5510,11 +5516,14 @@ module TripleQuoteStrings =
check "ckjenew-0ecwe1" """Hello world""" "Hello world"
check "ckjenew-0ecwe2" """Hello "world""" "Hello \"world"
check "ckjenew-0ecwe3" """Hello ""world""" "Hello \"\"world"
+#if UNIX
+#else
#if INTERACTIVE // FSI prints \r\n or \n depending on PIPE vs FEED so we'll just skip it
#else
if System.Environment.GetEnvironmentVariable("APPVEYOR_CI") <> "1" then
check "ckjenew-0ecwe4" """Hello
""world""" "Hello \r\n\"\"world"
+#endif
#endif
// cehcek there is no escaping...
check "ckjenew-0ecwe5" """Hello \"world""" "Hello \\\"world"
@@ -5530,6 +5539,8 @@ module TripleQuoteStrings =
check "ckjenew-0ecwe2" (* """Hello *) "world""" *) """Hello "world""" "Hello \"world"
+#if MONO
+#else
module FloatInRegisterConvertsToFloat =
let simpleTest() =
@@ -5539,6 +5550,8 @@ module FloatInRegisterConvertsToFloat =
test "vw09rwejkn" equal
simpleTest()
+#endif
+
(*---------------------------------------------------------------------------
!* Bug 122495: Bad code generation in code involving structs/property settings/slice operator
*--------------------------------------------------------------------------- *)
@@ -5596,9 +5609,17 @@ module LittleTestFor823 =
!* wrap up
*--------------------------------------------------------------------------- *)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/lift/test.fsx b/tests/fsharp/core/lift/test.fsx
index 5c410eecf5..f47e1ba597 100644
--- a/tests/fsharp/core/lift/test.fsx
+++ b/tests/fsharp/core/lift/test.fsx
@@ -2,10 +2,19 @@
#if TESTS_AS_APP
module Core_lift
#endif
+let failures = ref []
-let failures = ref false
-let report_failure s =
- stderr.WriteLine ("NO: test "^s^" failed"); failures := true
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
(* one lifted binding, one lifted expression *)
let test2924 () =
@@ -47,9 +56,18 @@ let test2947 () =
let _ = test2947()
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/longnames/test.fsx b/tests/fsharp/core/longnames/test.fsx
index 92eab2ab5f..be3521edcc 100644
--- a/tests/fsharp/core/longnames/test.fsx
+++ b/tests/fsharp/core/longnames/test.fsx
@@ -2,10 +2,19 @@
#if TESTS_AS_APP
module Core_longnames
#endif
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
(* Some test expressions *)
@@ -606,10 +615,17 @@ module rec Ok15 =
test "lkneecec09iew15" (not (typeof.FullName.Contains("AModule") ))
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
-
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/map/test.fsx b/tests/fsharp/core/map/test.fsx
index 5d3a7853cb..63f2930052 100644
--- a/tests/fsharp/core/map/test.fsx
+++ b/tests/fsharp/core/map/test.fsx
@@ -4,9 +4,17 @@ module Core_map
#endif
#light
-let failures = ref false
-let report_failure () = failures := true
-let test s b = if b then stdout.WriteLine ("OK: "+s) else (stdout.WriteLine (" FAILED: "+s); report_failure() )
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
(* TEST SUITE FOR STANDARD LIBRARY *)
@@ -151,8 +159,18 @@ module Bug_FSharp_1_0_6307 =
// below does not parse
let t = typeof
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/math/lalgebra/test.fsx b/tests/fsharp/core/math/lalgebra/test.fsx
index c6dc4c0c6d..a130304d38 100644
--- a/tests/fsharp/core/math/lalgebra/test.fsx
+++ b/tests/fsharp/core/math/lalgebra/test.fsx
@@ -1,12 +1,22 @@
// #Conformance #Regression
+#if TESTS_AS_APP
+module Core_math_lalgebra
+#endif
#light
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure();;
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
#nowarn "0049";;
@@ -295,8 +305,19 @@ RegressionTest "Netlib" maxDimension
//! Finish
//--------
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
+
diff --git a/tests/fsharp/core/math/numbers/test.fsx b/tests/fsharp/core/math/numbers/test.fsx
index 17b21fbca2..ef7a24261a 100644
--- a/tests/fsharp/core/math/numbers/test.fsx
+++ b/tests/fsharp/core/math/numbers/test.fsx
@@ -1,4 +1,7 @@
// #Regression #Conformance #Regression
+#if TESTS_AS_APP
+module Core_math_numbers
+#endif
#if NETSTANDARD1_6
open CoreClrUtilities
@@ -10,17 +13,26 @@ open CoreClrUtilities
#nowarn "62";;
#nowarn "35";;
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
(* START *)
open Microsoft.FSharp.Math
let throws f = try f() |> ignore; false with e -> true
// Test functions
-let fail() = report_failure()//failwith "Failed"
+let fail() = report_failure("Failed")
let checkEq desc a b = if a<>b then printf "Failed %s. %A <> %A\n" desc a b; fail()
#if FIXED_3481
@@ -274,8 +286,18 @@ checkEq "negative32s" negative32s
(* END *)
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/math/numbersVS2008/test.fsx b/tests/fsharp/core/math/numbersVS2008/test.fsx
index 6cc15250e3..857098de77 100644
--- a/tests/fsharp/core/math/numbersVS2008/test.fsx
+++ b/tests/fsharp/core/math/numbersVS2008/test.fsx
@@ -1,4 +1,7 @@
// #Regression #Conformance #Regression
+#if TESTS_AS_APP
+module Core_math_numbersVS2008
+#endif
#light
#nowarn "49";;
@@ -13,18 +16,28 @@
// *** DO NOT ADD TESTS THAT WORK ON BOTH DEV10 and VS2008 TO THIS FILE ***
//
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let checkEq (s:string) b1 b2 =
+ stderr.Write(s)
+ if b1 = b2 then stderr.WriteLine " OK"
+ else report_failure (s + sprintf ", expected %A, got %A" b2 b1)
(* START *)
// Misc construction.
open Microsoft.FSharp.Math
open System.Numerics
-let fail() = report_failure()//failwith "Failed"
-let checkEq desc a b = if a<>b then printf "Failed %s. %A <> %A\n" desc a b; fail()
// Regression 3481: Tables
@@ -235,7 +248,7 @@ let negative64s =
(-4611686018427387905L , -4611686018427387904L , -4611686018427387903L);
(999L , -9223372036854775808L , -9223372036854775807L); (* MinValue is -2^63 *)
(999L , 999L , 999L)]
-
+#if !FX_PORTABLE_OR_NETSTANDARD
// Regression 3481: ToInt32
let triple k n project =
let x = k * BigInteger.Pow(2I,n) in project (x - 1I),project x,project (x + 1I)
@@ -246,15 +259,28 @@ let triple64 k n = triple k n (fun x -> try int64 x with :? System.OverflowExcep
printf "Checking BigInt ToInt32 and ToInt64\n"
checkEq "BigInt.ToInt32 positives" positive32s (List.map (triple32 1I) [0 .. 32])
checkEq "BigInt.ToInt32 negatives" negative32s (List.map (triple32 -1I) [0 .. 32])
-checkEq "BigInt.ToInt64 positives" positive64s (List.map (triple64 1I) [0 .. 64])
-checkEq "BigInt.ToInt64 positives" negative64s (List.map (triple64 -1I) [0 .. 64])
+for (a,b) in List.zip positive64s (List.map (triple64 1I) [0 .. 64]) do
+ checkEq "BigInt.ToInt64 positives" a b
+for (a,b) in List.zip negative64s (List.map (triple64 -1I) [0 .. 64]) do
+ checkEq "BigInt.ToInt64 negatives" a b
;;
(* END *)
+#endif
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
diff --git a/tests/fsharp/core/measures/test.fsx b/tests/fsharp/core/measures/test.fsx
index 2315bbe5de..3ab02fc80c 100644
--- a/tests/fsharp/core/measures/test.fsx
+++ b/tests/fsharp/core/measures/test.fsx
@@ -4,10 +4,17 @@ module Core_measures
#endif
#light
-let failures = ref false
-let report_failure (s) =
- stderr.WriteLine ("NO: " + s); failures := true; failwith ""
-let test s b = if b then () else report_failure(s)
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
(* TEST SUITE FOR Operators on units-of-measure *)
@@ -599,8 +606,18 @@ module WrappedFloatTypeTest =
let c31 = C<1>.Mul (C<1>(0.5),C<1>(2.0))
let c32 = C.Mul (C(0.5),C(2.0))
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/members/basics-hw/test.fsx b/tests/fsharp/core/members/basics-hw/test.fsx
index e15fb181c2..2b807659d9 100644
--- a/tests/fsharp/core/members/basics-hw/test.fsx
+++ b/tests/fsharp/core/members/basics-hw/test.fsx
@@ -1,13 +1,26 @@
// #Regression #Conformance #SignatureFiles #Classes #ObjectConstructors #ObjectOrientedTypes #Fields #MemberDefinitions #MethodsAndProperties #Unions #InterfacesAndImplementations #Events #Overloading #Recursion #Regression
#light
-#if COMPILED
+
+#if TESTS_AS_APP
+module Core_members_basics
+#else
module Tests
#endif
-let mutable failures = []
-let report_failure s =
- stderr.WriteLine " NO"; failures <- s :: failures
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure s
+
+
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
let check s v1 v2 = test s (v1 = v2)
//--------------------------------------------------------------
@@ -45,13 +58,17 @@ test "fweoew093" ((f(1)).b = 2)
open System
open System.Collections
+#if !FX_PORTABLE_OR_NETSTANDARD
open System.Windows.Forms
+#endif
//-----------------------------------------
// Some simple object-expression tests
let x0 = { new System.Object() with member __.GetHashCode() = 3 }
+#if !FX_PORTABLE_OR_NETSTANDARD
let x1 = { new System.Windows.Forms.Form() with member __.GetHashCode() = 3 }
+#endif
//-----------------------------------------
// Test defining an F# class
@@ -964,6 +981,7 @@ let [] button () = 1
// Test we can use base calls
+#if !FX_PORTABLE_OR_NETSTANDARD
open System.Windows.Forms
type MyCanvas2 =
@@ -975,6 +993,7 @@ type MyCanvas2 =
end
let form2 = new MyCanvas2()
+#endif
//---------------------------------------------------------------------
@@ -1762,12 +1781,16 @@ module DefaultConstructorConstraints = begin
let x1 = (f1() : obj)
let x2 = (f1() : int)
let x3 = (f1() : DateTime)
+#if !FX_PORTABLE_OR_NETSTANDARD
let x4 = (f1() : System.Windows.Forms.Form)
+#endif
let f2 () = f1()
let y1 = (f2() : obj)
let y2 = (f2() : int)
let y3 = (f2() : DateTime)
+#if !FX_PORTABLE_OR_NETSTANDARD
let y4 = (f2() : System.Windows.Forms.Form)
+#endif
end
@@ -2008,6 +2031,7 @@ module T1 =
Vector2D(1.0,1.0) = Vector2D(1.0,1.0)
+#if !FX_PORTABLE_OR_NETSTANDARD
module Ex5 =
open System.Drawing
type Label(?text,?font) =
@@ -2019,6 +2043,7 @@ module Ex5 =
Label(text="Hello World")
Label(font=new Font(FontFamily.GenericMonospace,36.0f),
text="Hello World")
+#endif
module Ex6 =
type IShape =
@@ -2320,11 +2345,16 @@ module MemoizeSample =
lookasideTable.Clear() }
+ do printfn "MemoizeSample - #0"
let rec fibFast = memoize (fun n -> if n <= 2 then 1 else fibFast.[n-1] + fibFast.[n-2])
+ do printfn "Memoize #1"
fibFast.[3]
+ do printfn "Memoize #2"
fibFast.[30]
+ do printfn "Memoize #3"
fibFast.Clear()
+ do printfn "Memoize #4"
(*
module NameLookupServiceExample =
@@ -2374,6 +2404,7 @@ module NameLookupServiceExample =
module ConstraintsInMembers = begin
+ do printfn "ConstraintsInMembers"
type IDuplex =
interface
end
@@ -2401,6 +2432,7 @@ end
module InterfaceCastingTests = begin
+ do printfn "InterfaceCastingTests"
type IBar =
interface
end
@@ -3129,7 +3161,8 @@ module UnitArgs =
// Finish up
-
+#if MONO // bug repro1
+#else
module SingleArgumentFunctions =
type C() =
@@ -3151,6 +3184,7 @@ module SingleArgumentFunctions =
let c = C()
printfn "c.Result = %d" c.Result
test "vrewiorvw09j" (c.Result = 18)
+#endif
module MultiArgumentFunctions =
type C() =
@@ -3202,6 +3236,8 @@ module GenericFunctions =
printfn "c.Result = %d" c.Result
test "vrewiorvw09d" (c.Result = 14)
+#if MONO // bug repro1 (uncomfirmed)
+#else
module GenericFunctionInGenericClass =
type C<'a>() =
let f1 x1 = x1
@@ -3226,6 +3262,7 @@ module GenericFunctionInGenericClass =
printfn "c2.Result = %d" c2.Result
test "vrewiorvw09s" (c.Result = 42)
test "vrewiorvw09a" (c2.Result = 50)
+#endif
module TailCallLoop =
type C<'a>() =
@@ -3523,16 +3560,16 @@ module SlicingTests =
type Foo() =
member this.GetSlice(lb1:int option, ub1:int option) = [1]
member this.SetSlice(lb1:int option, ub1:int option, v2D: int list) = ()
-
+
let f = new Foo()
-
+
let vs = f.[1 .. 3]
f.[1..3] <- [3]
f.[..3] <- [3]
f.[1..] <- [3]
f.[*] <- [3]
-
-module Bug_FSharp_1_0_3246 =
+
+ module Bug_FSharp_1_0_3246 =
type r1 =
{ x : int }
static member Empty = { x = 3 }
@@ -5454,8 +5491,8 @@ module CheckGeneralizationOfMembersInRecursiveGroupsWhichIncludeImplicitConstruc
static let fact = new FooFunc2<'a>()
static member factory() = fact
- type BerFunc<'a,'b>() =
- static let fact() = new BerFunc<'a,'b>()
+ type BarFunc<'a,'b>() =
+ static let fact() = new BarFunc<'a,'b>()
static member factory() = fact()
// Equi-recursive type defs
@@ -5582,9 +5619,18 @@ module Devdiv2_5385_repro2 =
printfn "test passed ok without NullReferenceException"
-let _ =
- if not failures.IsEmpty then (eprintfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/basics/test.fs b/tests/fsharp/core/members/basics/test.fs
index 76cda39b38..3f6bdd6269 100644
--- a/tests/fsharp/core/members/basics/test.fs
+++ b/tests/fsharp/core/members/basics/test.fs
@@ -3,11 +3,19 @@ module Global
#nowarn "62"
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
-let check s b1 b2 = if b1 = b2 then eprintfn "%s: OK, b1 = %A, b2 = %A" s b1 b2 else (eprintfn "FAIL %s: b1 = %A, b2 = %A" s b1 b2; report_failure())
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
//--------------------------------------------------------------
// Test defining a record using object-expression syntax
@@ -3444,9 +3452,18 @@ module AutoProps_2 = begin
check "autoprops_262" c61.Property 44
end
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/console/test.fsx b/tests/fsharp/core/members/console/test.fsx
index fc6f43fe22..0511c01b7e 100644
--- a/tests/fsharp/core/members/console/test.fsx
+++ b/tests/fsharp/core/members/console/test.fsx
@@ -1,4 +1,7 @@
// #Conformance #Interop #Events #MemberDefinitions
+#if TESTS_AS_APP
+module Core_members_console
+#endif
type ControlEvent = CTRL_C | CTRL_BREAK | CTRL_CLOSE |CTRL_LOGOFF | CTRL_SHUTDOWN
with
@@ -16,7 +19,7 @@ type ControlEvent = CTRL_C | CTRL_BREAK | CTRL_CLOSE |CTRL_LOGOFF | CTRL_SHUTDOW
| 2 -> CTRL_CLOSE
| 3 -> CTRL_LOGOFF
| 4 -> CTRL_SHUTDOWN
- | _ -> invalid_arg "ControlEvent.ToInt"
+ | _ -> invalidArg "ControlEvent.ToInt"
end
diff --git a/tests/fsharp/core/members/ctree/test.fsx b/tests/fsharp/core/members/ctree/test.fsx
index 8b802cdf18..376e5b1a70 100644
--- a/tests/fsharp/core/members/ctree/test.fsx
+++ b/tests/fsharp/core/members/ctree/test.fsx
@@ -1,9 +1,21 @@
// #Conformance #MemberDefinitions
+#if TESTS_AS_APP
+module Core_members_ctree
+#endif
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
module CTree1 = begin
@@ -44,9 +56,18 @@ type 'a ctree =
end
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/factors/test.fsx b/tests/fsharp/core/members/factors/test.fsx
index b06e58937e..b1714dcb2a 100644
--- a/tests/fsharp/core/members/factors/test.fsx
+++ b/tests/fsharp/core/members/factors/test.fsx
@@ -6,10 +6,23 @@
// Microsoft Research Ltd.
//---------------------------------------------------------------
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+#if TESTS_AS_APP
+module Core_members_factors
+#endif
+
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
open System.Collections.Generic
@@ -255,9 +268,18 @@ let Gaussian1DPriorFactorNode((var: VariableNode), mean, variance) =
// Finish up
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/incremental-hw/test.fsx b/tests/fsharp/core/members/incremental-hw/test.fsx
index e29e7f08c5..d65718a15f 100644
--- a/tests/fsharp/core/members/incremental-hw/test.fsx
+++ b/tests/fsharp/core/members/incremental-hw/test.fsx
@@ -2,12 +2,25 @@
#light
+#if TESTS_AS_APP
+module Core_members_incremental_testhw
+#endif
//! Setup
-let failures = ref false
-let report_failure () = stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
//! Address of incremental local mutable
@@ -214,6 +227,7 @@ module WireVariations =
//! Area variations
+#if !FX_PORTABLE_OR_NETSTANDARD
module AreaVariations =
(* Accepted *)
open System.Drawing
@@ -361,7 +375,7 @@ module AreaVariations =
val f : 'a -> 'a
new (x:int) = { f = fun x -> x}
-
+#endif
//! Person
@@ -390,6 +404,7 @@ module ScalaPersonExample =
//! Forms
+#if !FX_PORTABLE_OR_NETSTANDARD
module Forms1 =
open System.Drawing
open System.Windows.Forms
@@ -436,6 +451,7 @@ module Forms2 =
//do dp.GC.DrawLine(Pens.White,10,20,30,40)
//do dp.Redraw()
+#endif
module Regression1 =
(* Regression test: local vals of unit type are not given field storage (even if mutable) *)
@@ -716,9 +732,18 @@ module ExceptionsWithAugmentations =
//! Finish
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/incremental/test.fsx b/tests/fsharp/core/members/incremental/test.fsx
index bf38716f5b..bb27690f28 100644
--- a/tests/fsharp/core/members/incremental/test.fsx
+++ b/tests/fsharp/core/members/incremental/test.fsx
@@ -1,11 +1,24 @@
// #Conformance #MemberDefinitions #Mutable #ObjectOrientedTypes #Classes #InterfacesAndImplementations #Recursion
+#if TESTS_AS_APP
+module Core_members_incremental
+#endif
//! Setup
-let failures = ref false
-let report_failure () = stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
//! Address of incremental class local mutable
@@ -212,6 +225,7 @@ end
//! Area variations
+#if !MONO && !FX_PORTABLE_OR_NETSTANDARD
module AreaVariations = begin
(* Accepted *)
open System.Drawing
@@ -361,7 +375,7 @@ module AreaVariations = begin
end
end
-
+#endif
//! Person
(* Scala person example *)
@@ -388,6 +402,7 @@ end
//! Forms
+#if !MONO && !FX_PORTABLE_OR_NETSTANDARD
module Forms1 = begin
open System.Drawing
open System.Windows.Forms
@@ -434,6 +449,7 @@ module Forms2 = begin
do dp.GC.DrawLine(Pens.White,10,20,30,40)
do dp.Redraw()
end
+#endif
module Regression1 = begin
(* Regression test: local vals of unit type are not given field storage (even if mutable) *)
@@ -693,9 +709,18 @@ end
//! Finish
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/members/ops/test.fsx b/tests/fsharp/core/members/ops/test.fsx
index 280ac3c917..d4756db423 100644
--- a/tests/fsharp/core/members/ops/test.fsx
+++ b/tests/fsharp/core/members/ops/test.fsx
@@ -1,11 +1,21 @@
// #Conformance #MemberDefinitions #Overloading #ComputationExpressions
+#if TESTS_AS_APP
+module Core_members_ops
+#endif
+
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
-open Microsoft.FSharp.Math
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let check s b1 b2 = test s (b1 = b2)
module FuncTest =
@@ -380,7 +390,6 @@ module TraitCallsAndConstructors =
let _ : Inherited = -aInherited
-
module CodeGenTraitCallWitnessesNotBeingInlined =
// From: http://stackoverflow.com/questions/28243963/how-to-write-a-variadic-function-in-f-emulating-a-similar-haskell-solution/28244413#28244413
type T = T with
@@ -399,9 +408,18 @@ module CodeGenTraitCallWitnessesNotBeingInlined =
let y:int = sum 2 3 4 // this line was throwing TypeInitializationException in Debug build
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
diff --git a/tests/fsharp/core/namespaces/test.fs b/tests/fsharp/core/namespaces/test.fs
index 5cfea5bf1e..39ab9b066b 100644
--- a/tests/fsharp/core/namespaces/test.fs
+++ b/tests/fsharp/core/namespaces/test.fs
@@ -1,13 +1,24 @@
// #Conformance #Namespaces #SignatureFiles
-namespace Hello.Goodbye
- type A = A | B | C
+
+namespace Hello.Goodbye
module Utils =
- let failures = ref false
- let report_failure () =
- stderr.WriteLine " NO"; failures := true
- let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+ let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+ let check s b1 b2 = test s (b1 = b2)
+
+ type A = A | B | C
module X =
let x = 1
diff --git a/tests/fsharp/core/namespaces/test.fsi b/tests/fsharp/core/namespaces/test.fsi
index 753d98ec6f..b5c691f5b9 100644
--- a/tests/fsharp/core/namespaces/test.fsi
+++ b/tests/fsharp/core/namespaces/test.fsi
@@ -5,8 +5,8 @@ namespace Hello.Goodbye
type A = A | B | C
module Utils = begin
- val failures : bool ref
- val report_failure : unit -> unit
+ val failures : string list ref
+ val report_failure : string -> unit
val test : string -> bool -> unit
end
diff --git a/tests/fsharp/core/namespaces/test2.fs b/tests/fsharp/core/namespaces/test2.fs
index 16f711afef..19d215d4a0 100644
--- a/tests/fsharp/core/namespaces/test2.fs
+++ b/tests/fsharp/core/namespaces/test2.fs
@@ -12,10 +12,16 @@ module M =
member x.P = C()
-let _ =
- if !Hello.Goodbye.Utils.failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
-
+#if TESTS_AS_APP
+ let RUN() = !failures
+#else
+ let aa =
+ if not (!Hello.Goodbye.Utils.failures).IsEmpty then
+ stdout.WriteLine "Test Failed"
+ exit 1
+ else
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+#endif
diff --git a/tests/fsharp/core/nested/test.fsx b/tests/fsharp/core/nested/test.fsx
index 61048e1ebd..388db9ecc2 100644
--- a/tests/fsharp/core/nested/test.fsx
+++ b/tests/fsharp/core/nested/test.fsx
@@ -2,11 +2,19 @@
#if TESTS_AS_APP
module Core_nested
#endif
+let failures = ref []
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+let check s b1 b2 = test s (b1 = b2)
let f () = 3
@@ -48,10 +56,18 @@ do test "uyf78" (!wher = [ "Initialized before X1 OK";
"Initialized X3 OK";
"Initialized after X3 OK" ])
-let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/patterns/test.fsx b/tests/fsharp/core/patterns/test.fsx
index e9c4c5534a..a0823af578 100644
--- a/tests/fsharp/core/patterns/test.fsx
+++ b/tests/fsharp/core/patterns/test.fsx
@@ -12,10 +12,18 @@ open System.Reflection
#light
-let failures = ref false
-let report_failure s =
- stderr.WriteLine ("NO: test "+s+" failed"); failures := true
-let test s b = if b then () else report_failure(s)
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
let check s x1 x2 =
if (x1 = x2) then
stderr.WriteLine ("test "+s+": ok")
@@ -857,7 +865,7 @@ module ActivePatternsFromTheHub =
// The intention of the example appears to be that additional calling plans are given semantics
// by new rules that resolve how they interact in a fairly adhoc way with the call data.
// It's hard to see how you would permit "arbitrary" extensions in a modular way for
- // this example, since the hardest part is always in the resolution of potential conflicts and
+ // this example, since the devil is always in the resolution of potential conflicts and
// ambiguities with other rules. If I've misunderstood the kind of extensibility you require
// then please let me know. In any case it's a great example of adhoc matching.
type userData =
@@ -1212,9 +1220,18 @@ module StructUnionMultiCaseLibDefns =
(* check for failure else sign off "ok" *)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
diff --git a/tests/fsharp/core/printf/test.fsx b/tests/fsharp/core/printf/test.fsx
index 8ec18c4dec..97bd8b9818 100644
--- a/tests/fsharp/core/printf/test.fsx
+++ b/tests/fsharp/core/printf/test.fsx
@@ -8,9 +8,12 @@ module Core_printf
open Printf
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
// change this to true to run every test case
// leave as false to randomly execute a subset of cases (this is a very expensive test area)
@@ -24,8 +27,7 @@ let test t (s1:Lazy) s2 =
if runEveryTest || (rnd.Next() % 10) = 0 then
let s1 = s1.Force()
if s1 <> s2 then
- (stderr.WriteLine ("test "+t+": expected \n\t'"+s2+"' but produced \n\t'"+s1+"'");
- failures := true)
+ report_failure ("test "+t+": expected \n\t'"+s2+"' but produced \n\t'"+s1+"'")
else
stdout.WriteLine ("test "+t+": correctly produced '"+s1+"'")
@@ -33,6 +35,7 @@ let verify actual expected = test expected actual expected
let adjust1 obj n1 = unbox ((unbox obj) n1)
+(*
let _ = test "percent00" (lazy(sprintf "%%")) "%"
let _ = test "percent01" (lazy(sprintf " %%%% ")) " %% "
let _ = test "percent02" (lazy(sprintf "%.2f%.2%" 2.)) "2.00%"
@@ -43,6 +46,7 @@ let _ = test "percent06" (lazy(sprintf "%*% %*d" 20 8 5)) "% 5"
let _ = test "percent07" (lazy(sprintf "%-+.*%%*d%*.*%" 55 0 8 77 88)) "%8%"
let _ = test "percent08" (lazy(sprintf "%%d")) "%d"
let _ = test "percent09" (lazy(sprintf "% *% %d" 10 6)) "% 6"
+*)
let _ = test "cewoui2a" (lazy(sprintf "%o" 0)) "0"
let _ = test "cewoui2b" (lazy(sprintf "%o" 0)) "0"
@@ -284,9 +288,6 @@ let bug600c = sprintf "%x"
let _ = test "bug600a3" (lazy(bug600c 2)) "2"
let _ = test "bug600b3" (lazy(bug600c 2)) "2" (* not 22! *)
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
-
let _ = test "ckwoih" (lazy(sprintf "%x" 0xFFy)) ("ff")
let _ = test "ckwoih" (lazy(sprintf "%x" 0xFFFFs)) ("ffff")
let _ = test "ckwoih" (lazy(sprintf "%x" 0xFFFFFFFF)) ("ffffffff")
@@ -9292,15 +9293,18 @@ func6000()
func7000()
func8000()
+
#if TESTS_AS_APP
-let aa =
- if !failures then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed"; exit 0)
+let RUN() = !failures
#else
-let _ =
- if !failures then (printf "Test Failed"; exit 1)
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
#endif
-
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+
diff --git a/tests/fsharp/core/queriesCustomQueryOps/test.fsx b/tests/fsharp/core/queriesCustomQueryOps/test.fsx
index 9af699b0ce..d542e5d0f4 100644
--- a/tests/fsharp/core/queriesCustomQueryOps/test.fsx
+++ b/tests/fsharp/core/queriesCustomQueryOps/test.fsx
@@ -15,17 +15,20 @@ open Microsoft.FSharp.Linq.RuntimeHelpers
[]
module Infrastructure =
- let mutable failures = []
- let reportFailure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
let check s v1 v2 =
if v1 = v2 then
printfn "test %s...passed " s
else
- failures <- failures @ [(s, box v1, box v2)]
- printfn "test %s...failed, expected %A got %A" s v2 v1
+ report_failure (sprintf "test %s...failed, expected %A got %A" s v2 v1)
let test s b = check s b true
@@ -448,9 +451,18 @@ module ProbabilityWorkflow =
printfn "sample #%d = %A" i (v1,v2)
// Every sample should be identical on left and right because of the condition
check "cwnew0" v1 v2
-
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
index 772d831897..2a0cec078b 100644
--- a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
+++ b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
@@ -12,16 +12,18 @@ open Microsoft.FSharp.Linq.RuntimeHelpers
[]
module Infrastructure =
- let mutable failures = []
- let reportFailure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
let check s v1 v2 =
if v1 = v2 then
printfn "test %s...passed " s
else
- failures <- failures @ [(s, box v1, box v2)]
- printfn "test %s...failed, expected %A got %A" s v2 v1
+ report_failure (sprintf "test %s...failed, expected %A got %A" s v2 v1)
let test s b = check s b true
@@ -969,8 +971,18 @@ module LeafExpressionEvaluationTests =
checkText "p2oin209v33x" <@ Nullable 2 ?% 3 @> "(Convert(2) % Convert(3))"
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+
+#endif
+
diff --git a/tests/fsharp/core/queriesNullableOperators/test.fsx b/tests/fsharp/core/queriesNullableOperators/test.fsx
index f1f8900601..1cb230749b 100644
--- a/tests/fsharp/core/queriesNullableOperators/test.fsx
+++ b/tests/fsharp/core/queriesNullableOperators/test.fsx
@@ -13,16 +13,18 @@ open Microsoft.FSharp.Linq.RuntimeHelpers
[]
module Infrastructure =
- let mutable failures = []
- let reportFailure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
let check s v1 v2 =
if v1 = v2 then
printfn "test %s...passed " s
else
- failures <- failures @ [(s, box v1, box v2)]
- printfn "test %s...failed, expected %A got %A" s v2 v1
+ report_failure (sprintf "test %s...failed, expected %A got %A" s v2 v1)
let test s b = check s b true
@@ -301,8 +303,18 @@ module NullableConversions =
check "opp2oin209v304i" (Nullable.float32 (Nullable 2)) (Nullable 2.0f)
check "opp2oin209v304i" (Nullable.single (Nullable 2)) (Nullable 2.0f)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/queriesOverIEnumerable/test.fsx b/tests/fsharp/core/queriesOverIEnumerable/test.fsx
index c1fa0227c3..555e544e0d 100644
--- a/tests/fsharp/core/queriesOverIEnumerable/test.fsx
+++ b/tests/fsharp/core/queriesOverIEnumerable/test.fsx
@@ -11,16 +11,19 @@ open Microsoft.FSharp.Linq.RuntimeHelpers
[]
module Infrastructure =
- let mutable failures = []
- let reportFailure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
let check s v1 v2 =
if v1 = v2 then
printfn "test %s...passed " s
else
- failures <- failures @ [(s, box v1, box v2)]
- printfn "test %s...failed, expected %A got %A" s v2 v1
+ report_failure (sprintf "test %s...failed, expected %A got %A" s v2 v1)
let test s b = check s b true
@@ -991,8 +994,18 @@ module MiscTestsForImplicitExpressionConversion =
pageRank ( Queryable.AsQueryable [ for i in 0 .. 100 -> Edge(source = i, target = i % 7) ],
Queryable.AsQueryable [ for i in 0 .. 100 -> Rank(source = i, value = i+100) ])
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/queriesOverIQueryable/test.fsx b/tests/fsharp/core/queriesOverIQueryable/test.fsx
index 812b124c16..245c32bb46 100644
--- a/tests/fsharp/core/queriesOverIQueryable/test.fsx
+++ b/tests/fsharp/core/queriesOverIQueryable/test.fsx
@@ -12,16 +12,18 @@ open Microsoft.FSharp.Linq.RuntimeHelpers
[]
module Infrastructure =
- let mutable failures = []
- let reportFailure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+ let failures = ref []
+
+ let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
let check s v1 v2 =
if v1 = v2 then
printfn "test %s...passed " s
else
- failures <- failures @ [(s, box v1, box v2)]
- printfn "test %s...failed, expected \n\t%A\ngot\n\t%A" s v2 v1
+ report_failure (sprintf "test %s...failed, expected \n\t%A\ngot\n\t%A" s v2 v1)
let test s b = check s b true
let qmap f (x:System.Linq.IQueryable<_>) = x |> Seq.map f |> System.Linq.Queryable.AsQueryable
@@ -2457,8 +2459,18 @@ module Problem2 =
select (item :?> Item) })
[item]
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx
index 5f589f5735..f6f92576f4 100644
--- a/tests/fsharp/core/quotes/test.fsx
+++ b/tests/fsharp/core/quotes/test.fsx
@@ -10,10 +10,15 @@ module Core_quotes
#nowarn "57"
-let mutable failures = []
-let report_failure s =
- stderr.WriteLine " NO"; failures <- s :: failures
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure s
+
let check s v1 v2 =
stderr.Write(s:string);
if (v1 = v2) then
@@ -1594,6 +1599,93 @@ module MoreQuotationsTests =
let _ = <@@ v2.Int32ExtensionMethod5 @@> |> printfn "quote = %A"
+module QuotationConstructionTests =
+ let arr = [| 1;2;3;4;5 |]
+ let f : int -> int = printfn "hello"; (fun x -> x)
+ let f2 : int * int -> int -> int = printfn "hello"; (fun (x,y) z -> x + y + z)
+ let F (x:int) = x
+ let F2 (x:int,y:int) (z:int) = x + y + z
+
+ type Foo () =
+ member t.Item with get (index:int) = 1
+ and set (index:int) (value:int) = ()
+
+ let ctorof q = match q with Patterns.NewObject(cinfo,_) -> cinfo | _ -> failwith "ctorof"
+ let methodof q = match q with DerivedPatterns.Lambdas(_,Patterns.Call(_,minfo,_)) -> minfo | _ -> failwith "methodof"
+ let fieldof q = match q with Patterns.FieldGet(_,finfo) -> finfo | _ -> failwith "fieldof"
+ let ucaseof q = match q with Patterns.NewUnionCase(ucinfo,_) -> ucinfo | _ -> failwith "ucaseof"
+ let getof q = match q with Patterns.PropertyGet(_,pinfo,_) -> pinfo | _ -> failwith "getof"
+ let setof q = match q with Patterns.PropertySet(_,pinfo,_,_) -> pinfo | _ -> failwith "setof"
+ check "vcknwwe01" (match Expr.AddressOf <@@ arr.[3] @@> with AddressOf(expr) -> expr = <@@ arr.[3] @@> | _ -> false) true
+ check "vcknwwe02" (match Expr.AddressSet (Expr.AddressOf <@@ arr.[3] @@>, <@@ 4 @@>) with AddressSet(AddressOf(expr),v) -> expr = <@@ arr.[3] @@> && v = <@@ 4 @@> | _ -> false) true
+ check "vcknwwe03" (match Expr.Application(<@@ f @@>,<@@ 5 @@>) with Application(f1,x) -> f1 = <@@ f @@> && x = <@@ 5 @@> | _ -> false) true
+ check "vcknwwe04" (match Expr.Applications(<@@ f @@>,[[ <@@ 5 @@> ]]) with Applications(f1,[[x]]) -> f1 = <@@ f @@> && x = <@@ 5 @@> | _ -> false) true
+ check "vcknwwe05" (match Expr.Applications(<@@ f2 @@>,[[ <@@ 5 @@>;<@@ 6 @@> ]; [ <@@ 7 @@> ]]) with Applications(f1,[[x;y];[z]]) -> f1 = <@@ f2 @@> && x = <@@ 5 @@> && y = <@@ 6 @@> && z = <@@ 7 @@> | _ -> false) true
+ check "vcknwwe06" (match Expr.Call(methodof <@@ F2 @@>,[ <@@ 5 @@>;<@@ 6 @@>; <@@ 7 @@> ]) with Call(None,minfo,[x;y;z]) -> minfo = methodof <@@ F2 @@> && x = <@@ 5 @@> && y = <@@ 6 @@> && z = <@@ 7 @@> | _ -> false) true
+ check "vcknwwe07" (Expr.Cast(<@@ 5 @@>) : Expr) (<@ 5 @>)
+ check "vcknwwe08" (try let _ = Expr.Cast(<@@ 5 @@>) : Expr in false with :? System.ArgumentException -> true) true
+ check "vcknwwe09" (match Expr.Coerce(<@@ 5 @@>, typeof) with Coerce(q,ty) -> ty = typeof && q = <@@ 5 @@> | _ -> false) true
+ check "vcknwwe0q" (match Expr.DefaultValue(typeof) with DefaultValue(ty) -> ty = typeof | _ -> false) true
+ check "vcknwwe0w" (match Expr.FieldGet(typeof.GetField("MaxValue")) with FieldGet(None,finfo) -> finfo = typeof.GetField("MaxValue") | _ -> false) true
+ check "vcknwwe0e" (match Expr.FieldSet(typeof.GetField("MaxValue"),<@@ 1 @@>) with FieldSet(None,finfo,v) -> finfo = typeof.GetField("MaxValue") && v = <@@ 1 @@> | _ -> false) true
+ check "vcknwwe0r" (match Expr.ForIntegerRangeLoop(Var.Global("i",typeof),<@@ 1 @@>,<@@ 10 @@>,<@@ () @@>) with ForIntegerRangeLoop(v,start,finish,body) -> v = Var.Global("i",typeof) && start = <@@ 1 @@> && finish = <@@ 10 @@> && body = <@@ () @@> | _ -> false) true
+ check "vcknwwe0t" (match Expr.GlobalVar("i") : Expr with Var(v) -> v = Var.Global("i",typeof) | _ -> false) true
+ check "vcknwwe0y" (match Expr.IfThenElse(<@@ true @@>,<@@ 1 @@>,<@@ 2 @@>) with IfThenElse(gd,t,e) -> gd = <@@ true @@> && t = <@@ 1 @@> && e = <@@ 2 @@> | _ -> false) true
+ check "vcknwwe0u" (match Expr.Lambda(Var.Global("i",typeof), <@@ 2 @@>) with Lambda(v,b) -> v = Var.Global("i",typeof) && b = <@@ 2 @@> | _ -> false) true
+ check "vcknwwe0i" (match Expr.Let(Var.Global("i",typeof), <@@ 2 @@>, <@@ 3 @@>) with Let(v,e,b) -> v = Var.Global("i",typeof) && e = <@@ 2 @@> && b = <@@ 3 @@> | _ -> false) true
+ check "vcknwwe0o" (match Expr.LetRecursive([(Var.Global("i",typeof), <@@ 2 @@>)], <@@ 3 @@>) with LetRecursive([(v,e)],b) -> v = Var.Global("i",typeof) && e = <@@ 2 @@> && b = <@@ 3 @@> | _ -> false) true
+ check "vcknwwe0p" (match Expr.LetRecursive([(Var.Global("i",typeof), <@@ 2 @@>);(Var.Global("j",typeof), <@@ 3 @@>)], <@@ 3 @@>) with LetRecursive([(v1,e1);(v2,e2)],b) -> v1 = Var.Global("i",typeof) && v2 = Var.Global("j",typeof) && e1 = <@@ 2 @@> && e2 = <@@ 3 @@> && b = <@@ 3 @@> | _ -> false) true
+ check "vcknwwe0a" (Expr.NewArray(typeof,[ <@@ 1 @@>; <@@ 2 @@> ])) <@@ [| 1;2 |] @@>
+ check "vcknwwe0s" (match Expr.NewDelegate(typeof>,[ Var.Global("i",typeof) ], <@@ () @@>) with NewDelegate(ty,[v],e) -> ty = typeof> && v = Var.Global("i",typeof) && e = <@@ () @@> | _ -> false) true
+ check "vcknwwe0d" (match Expr.NewObject(ctorof <@@ new obj() @@> ,[ ]) with NewObject(ty,[]) -> ty = ctorof <@@ new obj() @@> | _ -> false) true
+ check "vcknwwe0f" (match Expr.NewObject(ctorof <@@ new System.String('a',3) @@> ,[ <@@ 'b' @@>; <@@ 4 @@>]) with NewObject(ty,[x;y]) -> ty = ctorof <@@ new string('a',3) @@> && x = <@@ 'b' @@> && y = <@@ 4 @@> | _ -> false) true
+ check "vcknwwe0g" (Expr.NewRecord(typeof ,[ <@@ 4 @@> ])) <@@ { contents = 4 } @@>
+ check "vcknwwe0h" (try let _ = Expr.NewTuple([]) in false with :? System.ArgumentException -> true) true
+ check "vcknwwe0j" (try let _ = Expr.NewTuple([ <@@ 1 @@> ]) in true with :? System.ArgumentException -> false) true
+ check "vcknwwe0k" (match Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>]) with NewTuple([x;y]) -> x = <@@ 'b' @@> && y = <@@ 4 @@> | _ -> false) true
+ check "vcknwwe0l" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>])) <@@ ('b',4) @@>
+ check "vcknwwe0z" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>])) <@@ ('b',4,5) @@>
+ check "vcknwwe0x" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>])) <@@ ('b',4,5,6) @@>
+ check "vcknwwe0c" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>; <@@ 7 @@>])) <@@ ('b',4,5,6,7) @@>
+ check "vcknwwe0v" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>; <@@ 7 @@>; <@@ 8 @@>])) <@@ ('b',4,5,6,7,8) @@>
+ check "vcknwwe0b" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>; <@@ 7 @@>; <@@ 8 @@>; <@@ 9 @@>])) <@@ ('b',4,5,6,7,8,9) @@>
+ check "vcknwwe0n" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>; <@@ 7 @@>; <@@ 8 @@>; <@@ 9 @@>; <@@ 10 @@>])) <@@ ('b',4,5,6,7,8,9,10) @@>
+ check "vcknwwe0m" (Expr.NewTuple([ <@@ 'b' @@>; <@@ 4 @@>; <@@ 5 @@>; <@@ 6 @@>; <@@ 7 @@>; <@@ 8 @@>; <@@ 9 @@>; <@@ 10 @@>])) <@@ ('b',4,5,6,7,8,9,10) @@>
+ check "vcknwwe011" (Expr.NewUnionCase(ucaseof <@@ Some(3) @@>,[ <@@ 4 @@> ])) <@@ Some(4) @@>
+ check "vcknwwe022" (Expr.NewUnionCase(ucaseof <@@ None @@>,[ ])) <@@ None @@>
+ check "vcknwwe033" (try let _ = Expr.NewUnionCase(ucaseof <@@ Some(3) @@>,[ ]) in false with :? ArgumentException -> true) true
+ check "vcknwwe044" (try let _ = Expr.NewUnionCase(ucaseof <@@ None @@>,[ <@@ 1 @@> ]) in false with :? ArgumentException -> true) true
+ check "vcknwwe055" (Expr.PropertyGet(getof <@@ System.DateTime.Now @@>,[ ])) <@@ System.DateTime.Now @@>
+ check "vcknwwe066" (try let _ = Expr.PropertyGet(getof <@@ System.DateTime.Now @@>,[ <@@ 1 @@> ]) in false with :? ArgumentException -> true) true
+ check "vcknwwe077" (Expr.PropertyGet(<@@ "3" @@>, getof <@@ "1".Length @@>)) <@@ "3".Length @@>
+ check "vcknwwe088" (Expr.PropertyGet(<@@ "3" @@>, getof <@@ "1".Length @@>,[ ])) <@@ "3".Length @@>
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
+ check "vcknwwe099" (Expr.PropertySet(<@@ (new System.Windows.Forms.Form()) @@>, setof <@@ (new System.Windows.Forms.Form()).Text <- "2" @@>, <@@ "3" @@> )) <@@ (new System.Windows.Forms.Form()).Text <- "3" @@>
+#endif
+ check "vcknwwe099" (Expr.PropertySet(<@@ (new Foo()) @@>, setof <@@ (new Foo()).[3] <- 1 @@>, <@@ 2 @@> , [ <@@ 3 @@> ] )) <@@ (new Foo()).[3] <- 2 @@>
+#if FSHARP_CORE_31
+#else
+ check "vcknwwe0qq1" (Expr.QuoteRaw(<@ "1" @>)) <@@ <@@ "1" @@> @@>
+ check "vcknwwe0qq2" (Expr.QuoteRaw(<@@ "1" @@>)) <@@ <@@ "1" @@> @@>
+ check "vcknwwe0qq3" (Expr.QuoteTyped(<@ "1" @>)) <@@ <@ "1" @> @@>
+ check "vcknwwe0qq4" (Expr.QuoteTyped(<@@ "1" @@>)) <@@ <@ "1" @> @@>
+#endif
+ check "vcknwwe0ww" (Expr.Sequential(<@@ () @@>, <@@ 1 @@>)) <@@ (); 1 @@>
+ check "vcknwwe0ee" (Expr.TryFinally(<@@ 1 @@>, <@@ () @@>)) <@@ try 1 finally () @@>
+ check "vcknwwe0rr" (match Expr.TryWith(<@@ 1 @@>, Var.Global("e1",typeof), <@@ 1 @@>, Var.Global("e2",typeof), <@@ 2 @@>) with TryWith(b,v1,ef,v2,eh) -> b = <@@ 1 @@> && eh = <@@ 2 @@> && ef = <@@ 1 @@> && v1 = Var.Global("e1",typeof) && v2 = Var.Global("e2",typeof)| _ -> false) true
+ check "vcknwwe0tt" (match Expr.TupleGet(<@@ (1,2) @@>, 0) with TupleGet(b,n) -> b = <@@ (1,2) @@> && n = 0 | _ -> false) true
+ check "vcknwwe0yy" (match Expr.TupleGet(<@@ (1,2) @@>, 1) with TupleGet(b,n) -> b = <@@ (1,2) @@> && n = 1 | _ -> false) true
+ check "vcknwwe0uu" (try let _ = Expr.TupleGet(<@@ (1,2) @@>, 2) in false with :? ArgumentException -> true) true
+ check "vcknwwe0ii" (try let _ = Expr.TupleGet(<@@ (1,2) @@>, -1) in false with :? ArgumentException -> true) true
+ for i = 0 to 7 do
+ check "vcknwwe0oo" (match Expr.TupleGet(<@@ (1,2,3,4,5,6,7,8) @@>, i) with TupleGet(b,n) -> b = <@@ (1,2,3,4,5,6,7,8) @@> && n = i | _ -> false) true
+ check "vcknwwe0pp" (match Expr.TypeTest(<@@ new obj() @@>, typeof) with TypeTest(e,ty) -> e = <@@ new obj() @@> && ty = typeof | _ -> false) true
+ check "vcknwwe0aa" (match Expr.UnionCaseTest(<@@ [] : int list @@>, ucaseof <@@ [] : int list @@> ) with UnionCaseTest(e,uc) -> e = <@@ [] : int list @@> && uc = ucaseof <@@ [] : int list @@> | _ -> false) true
+ check "vcknwwe0ss" (Expr.Value(3)) <@@ 3 @@>
+ check "vcknwwe0dd" (match Expr.Var(Var.Global("i",typeof)) with Var(v) -> v = Var.Global("i",typeof) | _ -> false) true
+ check "vcknwwe0ff" (match Expr.VarSet(Var.Global("i",typeof), <@@ 4 @@>) with VarSet(v,q) -> v = Var.Global("i",typeof) && q = <@@ 4 @@> | _ -> false) true
+ check "vcknwwe0gg" (match Expr.WhileLoop(<@@ true @@>, <@@ () @@>) with WhileLoop(g,b) -> g = <@@ true @@> && b = <@@ () @@> | _ -> false) true
+
module QuotationStructUnionTests =
[]
@@ -2950,12 +3042,14 @@ module ReflectionOverTypeInstantiations =
check (nm + "-falihksec4 - expect IsValueType to give accurate results on typical F# type provider implementation of TypeBuilderInstantiation") (try ty.IsValueType |> Some with e -> None) (Some false)
check (nm + "-falihksec5 - expect IsTuple to give accurate results on typical F# type provider implementation of TypeBuilderInstantiation") (try Reflection.FSharpType.IsTuple(ty) |> Some with _ -> None) (Some isTup)
+#if !MONO
check (nm + "-falihksec3a - currently expect IsEnum to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try ty.IsEnum |> ignore; 100 with e -> 200) 200
check (nm + "-falihksec4a - currently expect FullName to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try ty.FullName |> ignore; 100 with e -> 200) 200
check (nm + "-falihksec5a - currently expect IsFunction to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try Reflection.FSharpType.IsFunction(ty) |> ignore; 100 with _ -> 200) 200
check (nm + "-falihksec6a - currently expect IsUnion to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try Reflection.FSharpType.IsUnion(ty) |> ignore; 100 with :? System.NotSupportedException -> 200) 200
check (nm + "-falihksec7a - currently expect IsRecord to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try Reflection.FSharpType.IsRecord (ty) |> ignore; 100 with :? System.NotSupportedException -> 200) 200
check (nm + "-falihksec8a - currently expect IsModule to throw on typical F# type provider implementation of TypeBuilderInstantiation") (try Reflection.FSharpType.IsModule (ty) |> ignore; 100 with :? System.NotSupportedException -> 200) 200
+#endif
// This makes a TypeBuilderInstantiation type, because a real type has been instantiated with a non-real type
let t0 = ProvidedTypeBuilder.MakeGenericType(typedefof>, [ typeof ])
@@ -2971,8 +3065,17 @@ module TestAssemblyAttributes =
let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false)
#endif
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/quotesDebugInfo/test.fsx b/tests/fsharp/core/quotesDebugInfo/test.fsx
index 4f61d45325..f7e2f86810 100644
--- a/tests/fsharp/core/quotesDebugInfo/test.fsx
+++ b/tests/fsharp/core/quotesDebugInfo/test.fsx
@@ -638,10 +638,18 @@ do
}>"""
test "test17" baseLine q
-if !failures > 0 then
- printfn "Test Failed"
- exit 1
-else
- printfn "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0
\ No newline at end of file
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | 0 ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/reflect/test2.fs b/tests/fsharp/core/reflect/test2.fs
index 2be9a38383..6b299c21b0 100644
--- a/tests/fsharp/core/reflect/test2.fs
+++ b/tests/fsharp/core/reflect/test2.fs
@@ -2,12 +2,19 @@
module Test2
#nowarn "44"
-open System.Reflection
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
-let failures = ref false
-let report_failure () =
- stderr.WriteLine " NO"; failures := true
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure()
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
+open System.Reflection
(* TEST SUITE FOR Microsoft.FSharp.Reflection *)
@@ -292,10 +299,19 @@ module TEst =
let _ = printany (1,true,2.4,"a tuple",("nested",(fun () -> ()),[2;3],rrv))
let _ = printany printany (* =) *)
-let _ =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
+let aa =
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/seq/test.fsx b/tests/fsharp/core/seq/test.fsx
index d5e5135c7b..cce6c3cb64 100644
--- a/tests/fsharp/core/seq/test.fsx
+++ b/tests/fsharp/core/seq/test.fsx
@@ -6,9 +6,13 @@ module Core_seq
#nowarn "62"
#nowarn "44"
-let mutable failures = []
-let reportFailure s =
- stdout.WriteLine "\n................TEST FAILED...............\n"; failures <- failures @ [s]
+let failures = ref []
+
+let reportFailure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
(* TEST SUITE FOR STANDARD LIBRARY *)
@@ -503,9 +507,18 @@ module Repro2 =
!* wrap up
*--------------------------------------------------------------------------- *)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/subtype/test.fsx b/tests/fsharp/core/subtype/test.fsx
index b692d7de72..d99fa6311a 100644
--- a/tests/fsharp/core/subtype/test.fsx
+++ b/tests/fsharp/core/subtype/test.fsx
@@ -5,10 +5,18 @@ module Core_subtype
#light
-let mutable failures = []
-let report_failure s =
- stderr.WriteLine " NO"; failures <- s :: failures
-let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure s
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
+
let check s v1 v2 = test s (v1 = v2)
(* TEST SUITE FOR SUBTYPE CONSTRAINTS *)
@@ -98,13 +106,13 @@ let testUpcastToEnum1 (x: System.AttributeTargets) = (x :> System.Enum)
let testUpcastToEnum6 (x: System.Enum) = (x :> System.Enum)
// these delegates don't exist in portable
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !UNIX && !FX_PORTABLE_OR_NETSTANDARD
let testUpcastToDelegate1 (x: System.Threading.ThreadStart) = (x :> System.Delegate)
let testUpcastToMulticastDelegate1 (x: System.Threading.ThreadStart) = (x :> System.MulticastDelegate)
-#endif
do for name in Directory.GetFiles("c:\\") do stdout.WriteLine name done
+#endif
let f (x : #System.IComparable<'a>) = 1
@@ -236,7 +244,9 @@ module SomeRandomOperatorConstraints = begin
let sum64 seq : int64 = Seq.reduce (+) seq
let sum32 seq : int64 = Seq.reduce (+) seq
+#if !FX_PORTABLE_OR_NETSTANDARD
let sumBigInt seq : BigInteger = Seq.reduce (+) seq
+#endif
let sumDateTime (dt : DateTime) (seq : #seq) : DateTime = Seq.fold (+) dt seq
end
@@ -1705,7 +1715,6 @@ module GenericPropertyConstraintSolvedByRecord =
let v = print_foo_memb { foo=1 }
-
module SRTPFix =
open System
@@ -1752,9 +1761,18 @@ module SRTPFix =
printfn "%A" <| fmap ((+) 1) (Some 2);
printfn "%A" <| replace 'q' (test("HI"))
*)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
diff --git a/tests/fsharp/core/syntax/test.fsx b/tests/fsharp/core/syntax/test.fsx
index 32bd9a28ab..60fd6c66d2 100644
--- a/tests/fsharp/core/syntax/test.fsx
+++ b/tests/fsharp/core/syntax/test.fsx
@@ -54,6 +54,10 @@ module CheckDynamicOperatorsOnTypes =
let hw : string = foo ? world
let hw2 : unit = foo ? world <- "3"
+
+// Copyright (c) Microsoft Corporation 2005-2006. .
+
+
open System
//--------------------------------------------------------
@@ -782,7 +786,7 @@ let testTryFinallySyntaxOnOneLine () =
try () finally ()
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
type SampleForm =
class
inherit System.Windows.Forms.Form
@@ -980,7 +984,9 @@ do test "vliwe94" (f -2L = - 2L)
do test "vliwe95" (f -2n = - 2n)
do test "vliwe96" (f -2.0 = - 2.0)
do test "vliwe97" (f -2.0f = - 2.0f)
+#if !FX_PORTABLE_OR_NETSTANDARD
do test "vliwe99" (f -2I = - 2I)
+#endif
do test "vliwe9q" ((function -2y -> true | _ -> false) (- 2y))
do test "vliwe9w" ((function -2s -> true | _ -> false) (- 2s))
@@ -1777,9 +1783,17 @@ module AdHocTests =
let (b, _, _) = (1,2,3)
[b]
-let _ = stdout.WriteLine "Test FInishing"
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
- else (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
+ match !failures with
+ | false ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
+
diff --git a/tests/fsharp/core/tlr/test.fsx b/tests/fsharp/core/tlr/test.fsx
index 08674e24cb..cbc5fa5e4a 100644
--- a/tests/fsharp/core/tlr/test.fsx
+++ b/tests/fsharp/core/tlr/test.fsx
@@ -3,9 +3,17 @@
module Core_tlr
#endif
-let failures = ref false
-let report_failure s =
- stderr.WriteLine ("NO: test "+s+" failed"); failures := true
+let failures = ref []
+
+let report_failure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else report_failure (s)
@@ -364,9 +372,18 @@ end
(*-------------------------------------------------------------------------
*INDEX: wrap up
*-------------------------------------------------------------------------*)
+
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharp/core/unicode/test.fsx b/tests/fsharp/core/unicode/test.fsx
index bed67a5a92..1e78bb2ed2 100644
--- a/tests/fsharp/core/unicode/test.fsx
+++ b/tests/fsharp/core/unicode/test.fsx
@@ -4,15 +4,22 @@ module Core_unicode
#endif
open System.IO
+let failures = ref []
-let failures = ref false
-let reportFailure s =
- stderr.WriteLine ("NO: "+s); failures := true
+let reportFailure (s : string) =
+ stderr.Write" NO: "
+ stderr.WriteLine s
+ failures := !failures @ [s]
+
+let test (s : string) b =
+ stderr.Write(s)
+ if b then stderr.WriteLine " OK"
+ else reportFailure (s)
(* TEST SUITE FOR UNICODE CHARS *)
-#if !FX_PORTABLE_OR_NETSTANDARD
+#if !TESTS_AS_APP && !FX_PORTABLE_OR_NETSTANDARD
let input_byte (x : System.IO.FileStream) =
let b = x.ReadByte()
if b = -1 then raise (System.IO.EndOfStreamException()) else b
@@ -123,9 +130,17 @@ let αβΛΘΩΨΧΣδζȚŶǺ = 22/7
let π = 3.1415
+#if TESTS_AS_APP
+let RUN() = !failures
+#else
let aa =
- if !failures then (stdout.WriteLine "Test Failed"; exit 1)
+ match !failures with
+ | [] ->
+ stdout.WriteLine "Test Passed"
+ System.IO.File.WriteAllText("test.ok","ok")
+ exit 0
+ | _ ->
+ stdout.WriteLine "Test Failed"
+ exit 1
+#endif
-do (stdout.WriteLine "Test Passed";
- System.IO.File.WriteAllText("test.ok","ok");
- exit 0)
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/bin/System.ValueTuple.dll b/tests/fsharpqa/testenv/bin/System.ValueTuple.dll
index e64e5d413e..78a185143e 100644
Binary files a/tests/fsharpqa/testenv/bin/System.ValueTuple.dll and b/tests/fsharpqa/testenv/bin/System.ValueTuple.dll differ
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
index 3886281602..cd4b049514 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
@@ -241,7 +241,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
member this.ListAvailableFSharpCoreVersions(_) = Array.empty }
let service =
- match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with
+ match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with
| None -> nullService
| Some path ->
try
diff --git a/vsintegration/src/FSharp.VS.FSI/sessions.fs b/vsintegration/src/FSharp.VS.FSI/sessions.fs
index 552b1baeba..2bbde1d176 100644
--- a/vsintegration/src/FSharp.VS.FSI/sessions.fs
+++ b/vsintegration/src/FSharp.VS.FSI/sessions.fs
@@ -179,7 +179,7 @@ let determineFsiPath () =
if File.Exists fsiRelativePath2 then fsiRelativePath2 else
// Try the registry key
- let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with Some(s) -> s | None -> ""
+ let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with Some(s) -> s | None -> ""
let fsiRegistryPath = Path.Combine(fsbin, fsiExeName() )
if File.Exists(fsiRegistryPath) then fsiRegistryPath else
diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs
index 98273c0d0d..6821debd39 100644
--- a/vsintegration/tests/Salsa/salsa.fs
+++ b/vsintegration/tests/Salsa/salsa.fs
@@ -629,7 +629,7 @@ module internal Salsa =
// we look in the same directory as the Unit Tests assembly.
let targetsFileFolder =
if useInstalledTargets
- then Option.get Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler
+ then Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None).Value
else System.AppDomain.CurrentDomain.BaseDirectory
let sb = new System.Text.StringBuilder()
diff --git a/vsintegration/tests/unittests/TestLib.LanguageService.fs b/vsintegration/tests/unittests/TestLib.LanguageService.fs
index 3df1526617..fb45b72109 100644
--- a/vsintegration/tests/unittests/TestLib.LanguageService.fs
+++ b/vsintegration/tests/unittests/TestLib.LanguageService.fs
@@ -360,7 +360,7 @@ type LanguageServiceBaseTests() =
[]
member this.Init() =
#endif
- match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with
+ match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with
| Some(folder) ->
let fscPath = Path.Combine(folder,"fsc.exe")
System.Diagnostics.Debug.Assert(File.Exists(fscPath), sprintf "Path to fsc.exe (%s) does not exist. Unittests will surely fail. Is Unittest.exe.config stale?" fscPath)
diff --git a/vsintegration/tests/unittests/Tests.LanguageService.Script.fs b/vsintegration/tests/unittests/Tests.LanguageService.Script.fs
index 5c466bfdc3..8b10aa6fa3 100644
--- a/vsintegration/tests/unittests/Tests.LanguageService.Script.fs
+++ b/vsintegration/tests/unittests/Tests.LanguageService.Script.fs
@@ -1344,7 +1344,7 @@ type UsingMSBuild() as this =
#if VS_VERSION_DEV15
"4.4.1.0"
#endif
- let binariesFolder = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with
+ let binariesFolder = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with
| Some(x) -> x
| None -> failwith "Location of binaries folder cannot be found"