From fe833ddbebd8783cf61ae411486f4009deebb6a8 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 15 Feb 2017 15:56:14 +0000 Subject: [PATCH 01/18] integrate all from fsharp/fsharp --- .nuget/NuGet.targets | 4 +- before_install.sh | 6 +- build.cmd | 6 +- packages.config | 4 +- src/FSharpSource.Settings.targets | 28 +-- src/FSharpSource.targets | 96 ++++++++-- ...Sharp.Compiler.Interactive.Settings.dll.fs | 4 + .../assemblyinfo.FSharp.Compiler.dll.fs | 17 +- src/fsharp/CompileOps.fs | 31 +++- .../FSharp.Build-proto.fsproj | 27 ++- .../CreateFSharpManifestResourceName.fs | 22 +++ src/fsharp/FSharp.Build/FSharp.Build.fsproj | 39 ++-- src/fsharp/FSharp.Build/Fsc.fs | 5 +- .../FSharp.Build/Microsoft.FSharp.targets | 3 +- .../Microsoft.Portable.FSharp.targets | 13 +- .../FSharp.Compiler-proto.fsproj | 37 +++- .../AssemblyInfo.fs | 2 + .../FSharp.Compiler.Server.Shared.fsproj | 5 +- .../FSharp.Compiler/FSharp.Compiler.fsproj | 37 +++- .../FSharp.Core.Unittests.fsproj | 4 - .../ArrayModule.fs | 2 +- .../ListModule.fs | 29 ++- .../ListModule2.fs | 8 +- .../Microsoft.FSharp.Collections/ListType.fs | 20 +-- .../SeqModule2.fs | 10 +- .../Microsoft.FSharp.Core/BigIntType.fs | 102 ++++++++++- .../FSharp.Core.Unittests/StructTuples.fs | 2 + .../SurfaceArea.net40.fs | 5 + .../SurfaceArea.portable47.fs | 2 +- src/fsharp/FSharp.Core/FSharp.Core.fsproj | 29 +++ src/fsharp/FSharp.Core/prim-types.fs | 3 + .../FSharp.LanguageService.Compiler.fsproj | 43 +++-- src/fsharp/MSBuildReferenceResolver.fs | 12 +- src/fsharp/ast.fs | 7 +- src/fsharp/fsi/console.fs | 44 +++++ src/fsharp/fsi/fsi.fs | 5 + src/fsharp/vs/IncrementalBuild.fs | 2 +- src/scripts/fssrgen.targets | 3 +- src/scripts/scriptlib.fsx | 2 +- src/utils/CompilerLocationUtils.fs | 17 +- tests/fsharp/core/access/test.fsx | 30 +++- tests/fsharp/core/apporder/test.fsx | 27 ++- tests/fsharp/core/array/test.fsx | 21 ++- tests/fsharp/core/attributes/test.fsx | 85 ++++++--- tests/fsharp/core/comprehensions-hw/test.fsx | 35 +++- tests/fsharp/core/comprehensions/test.fsx | 41 +++-- tests/fsharp/core/control/test.fsx | 94 ++++++---- tests/fsharp/core/controlChamenos/test.fsx | 28 ++- tests/fsharp/core/controlMailbox/test.fsx | 63 +++---- .../fsharp/core/controlStackOverflow/test.fsx | 31 ++-- tests/fsharp/core/controlWebExt/test.fsx | 15 +- tests/fsharp/core/csext/test.fsx | 35 +++- tests/fsharp/core/forexpression/test.fsx | 4 + tests/fsharp/core/fsfromfsviacs/test.fsx | 34 +++- tests/fsharp/core/genericmeasures/test.fsx | 24 ++- tests/fsharp/core/innerpoly/test.fsx | 35 ++-- tests/fsharp/core/int32/test.fsx | 36 +++- tests/fsharp/core/lazy/test.fsx | 33 +++- tests/fsharp/core/letrec/test.fsx | 38 ++-- tests/fsharp/core/libtest/test.fsx | 33 +++- tests/fsharp/core/lift/test.fsx | 32 +++- tests/fsharp/core/longnames/test.fsx | 34 +++- tests/fsharp/core/map/test.fsx | 32 +++- tests/fsharp/core/math/lalgebra/test.fsx | 39 +++- tests/fsharp/core/math/numbers/test.fsx | 42 +++-- tests/fsharp/core/math/numbersVS2008/test.fsx | 54 ++++-- tests/fsharp/core/measures/test.fsx | 35 +++- tests/fsharp/core/members/basics-hw/test.fsx | 84 ++++++--- tests/fsharp/core/members/basics/test.fs | 37 ++-- tests/fsharp/core/members/console/test.fsx | 5 +- tests/fsharp/core/members/ctree/test.fsx | 39 +++- tests/fsharp/core/members/factors/test.fsx | 40 ++++- .../core/members/incremental-hw/test.fsx | 43 ++++- .../fsharp/core/members/incremental/test.fsx | 43 ++++- tests/fsharp/core/members/ops/test.fsx | 40 +++-- tests/fsharp/core/namespaces/test.fs | 33 +++- tests/fsharp/core/namespaces/test.fsi | 4 +- tests/fsharp/core/nested/test.fsx | 34 +++- tests/fsharp/core/patterns/test.fsx | 35 +++- tests/fsharp/core/printf/test.fsx | 38 ++-- .../core/queriesCustomQueryOps/test.fsx | 32 ++-- .../queriesLeafExpressionConvert/test.fsx | 36 ++-- .../core/queriesNullableOperators/test.fsx | 30 +++- .../core/queriesOverIEnumerable/test.fsx | 31 +++- .../core/queriesOverIQueryable/test.fsx | 30 +++- tests/fsharp/core/quotes/test.fsx | 168 +++++++++++++++--- tests/fsharp/core/quotesDebugInfo/test.fsx | 22 ++- tests/fsharp/core/reflect/test2.fs | 31 +++- tests/fsharp/core/seq/test.fsx | 27 ++- tests/fsharp/core/subtype/test.fsx | 40 +++-- tests/fsharp/core/syntax/test.fsx | 26 ++- tests/fsharp/core/tlr/test.fsx | 31 +++- tests/fsharp/core/unicode/test.fsx | 31 +++- 93 files changed, 2061 insertions(+), 696 deletions(-) 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 be63fd9478..394dd4a125 100755 --- a/before_install.sh +++ b/before_install.sh @@ -54,9 +54,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/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..a18f89b550 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -29,18 +29,20 @@ true true + false - false + false Microsoft.VSSDK.BuildTools.15.0.26124-RC3 - + obj\$(Configuration)\$(TargetFramework)\ obj\$(Configuration)\$(TargetFramework)\$(PortableProfileBeingReferenced)\ - - - - true + false + + + + true true true @@ -50,7 +52,7 @@ $(MSBuildThisFileDirectory)..\packages\$(VSSDK_BUILDTOOLS_VERSION)\tools\vssdk\schemas\VSIXManifestSchema.xsd - + $(OtherFlags) --times $(NoWarn);69;65;54;61;75 @@ -117,19 +119,21 @@ - $(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 + $(VisualStudioVersion).0.0 + 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..0f76216acf 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -8,6 +8,13 @@ 3.47.41.0 3.78.41.0 3.259.41.0 + 3.98.41.0 + 3.98.41.0 + 3.98.41.0 + 3.98.41.0 + 3.99.41.0 + 3.100.41.0 + @@ -18,6 +25,16 @@ + + + + $(OtherFlags) --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk" + STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY;$(DefineConstants) + true + $(FSCoreVersion) + fs + + true @@ -88,10 +105,19 @@ + + $(OtherFlags) --version:"$(MicroBuildAssemblyVersion)" + + NO_STRONG_NAMES;$(DefineConstants) + + + MSBUILD_AT_LEAST_14;$(DefineConstants) + + false @@ -108,6 +134,7 @@ + $(DefineConstants);CROSS_PLATFORM_COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT $(DefineConstants);BE_SECURITY_TRANSPARENT $(DefineConstants);FX_LCIDFROMCODEPAGE @@ -118,7 +145,55 @@ - + + + + + + $(DefineConstants);FX_NO_REFLECTION_EMIT + $(DefineConstants);FX_NO_BIGINT + $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinWatchOS;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\MonoAndroid;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\MonoTouch;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinWatchOS;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinTVOS;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinMac;$(AssemblySearchPaths) + + + + + + $(FSharpSourcesRoot)\..\dependencies\mono\4.5\XamarinMac;$(AssemblySearchPaths) + + + + $(DefineConstants);FX_PORTABLE_OR_NETSTANDARD $(DefineConstants);NETSTANDARD1_6 $(DefineConstants);PREFERRED_UI_LANG @@ -348,9 +423,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,14 +437,14 @@ $(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 - $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFrameworkOutputDirectory)\bin $(FSharpSourcesRoot)\..\Proto\$(ProtoFlavour)\bin fsc-proto.exe ..\Proto\$(ProtoFlavour)\bin\Microsoft.Portable.FSharp-proto.targets @@ -378,7 +453,7 @@ - $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFrameworkOutputDirectory)\bin $(FSharpSourcesRoot)\..\Proto\$(ProtoFlavour)\bin fsc-proto.exe ..\Proto\$(ProtoFlavour)\bin\Microsoft.FSharp-proto.targets @@ -393,7 +468,6 @@ - @@ -402,7 +476,6 @@ - @@ -451,7 +524,8 @@ Name="CopyAndSubstituteTextFiles" Inputs="@(CopyAndSubstituteText)" Outputs="@(CopyAndSubstituteText->'$(OutDir)%(TargetFilename)')" > - + + @@ -505,7 +579,7 @@ - + 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 4333ec0972..a7a28c2f5a 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..b362f4da9d 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -52,18 +52,37 @@ + + $(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 + diff --git a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs index 0ed3ee1737..240fcf6c19 100644 --- a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs +++ b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs @@ -16,10 +16,32 @@ type CreateFSharpManifestResourceName public () = (rootNamespace:string), (* may be null *) (dependentUponFileName:string), (* may be null *) (binaryStream:System.IO.Stream) (* may be null *)) : string = + + // 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 fileName = if fileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then fileName else Path.GetFileName(fileName) + let linkFileName = if linkFileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then linkFileName else Path.GetFileName(linkFileName) + 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..2bdd52f033 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.Portable.FSharp.targets + Microsoft.FSharp.Targets + {BuildSuffix} + + + + Microsoft.Portable.FSharp.Targets {BuildSuffix} @@ -63,18 +63,37 @@ + + $(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 + 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..0f79e0f36b 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -220,7 +220,8 @@ this file. Prefer32Bit="$(Actual32Bit)" References="@(ReferencePath)" ReferencePath="$(ReferencePath)" - Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" + + Resources="@(_CoreCompileResourceInputs);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" SourceLink="$(SourceLink)" Sources="@(CompileBefore);@(Compile);@(CompileAfter)" Tailcalls="$(Tailcalls)" diff --git a/src/fsharp/FSharp.Build/Microsoft.Portable.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.Portable.FSharp.targets index ea23d36140..b81706d326 100644 --- a/src/fsharp/FSharp.Build/Microsoft.Portable.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.Portable.FSharp.targets @@ -1,12 +1,19 @@ - - + + + + + + + + - + + diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index a3ae8dea56..3b9197217e 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -452,23 +452,42 @@ + ..\..\..\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 - + $(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 - - ..\..\..\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..6b3c7007a6 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -509,23 +509,42 @@ + ..\..\..\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 - + $(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 - - ..\..\..\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..235041b7b2 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -17,7 +17,13 @@ true true $(OtherFlags) --warnon:1182 --compiling-fslib --maxerrors:20 --extraoptimizationloops:1 + $(OtherFlags) --compiling-fslib-20:"$(SystemRoot)\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" + $(OtherFlags) --compiling-fslib-20:"$(MonoLibDir40)/mscorlib.dll" $(OtherFlags) --compiling-fslib-40 + $(OtherFlags) --targetprofile:netcore + $(OtherFlags) --targetprofile:netcore + $(OtherFlags) --targetprofile:netcore + $(OtherFlags) --targetprofile:netcore $(OtherFlags) --compiling-fslib-40 $(OtherFlags) --compiling-fslib-40 $(OtherFlags) --compiling-fslib-40 --compiling-fslib-nobigint @@ -228,6 +234,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..224f3db379 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/vs/IncrementalBuild.fs b/src/fsharp/vs/IncrementalBuild.fs index 2a36d0dbba..27ee282b48 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..47d962b9c5 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -188,15 +188,14 @@ 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 = #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 +204,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 +258,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..0f0db52faf 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,20 @@ 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" +#if !FX_PORTABLE_OR_NETSTANDARD + System.IO.File.WriteAllText("test.ok","ok") +#endif + 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..66d529939b 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>() = @@ -3520,18 +3557,6 @@ module SlicingTests = (3).[..4,*] (3).[*,*] - 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 = type r1 = { x : int } @@ -5454,8 +5479,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 +5607,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..cd98e759a8 100644 --- a/tests/fsharp/core/namespaces/test.fs +++ b/tests/fsharp/core/namespaces/test.fs @@ -3,11 +3,21 @@ namespace Hello.Goodbye type A = A | B | C - 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() +module Utils = + 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 X = let x = 1 @@ -169,3 +179,16 @@ namespace rec global do Hello.Goodbye.Utils.test "test292jwf" (N.x.V = 4) +#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/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/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..c38756287a 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 @@ -451,9 +453,11 @@ module LeafExpressionEvaluationTests = checkEval "vrewoinrv091" (<@ farr.[0] @>) 0.0 - checkEval "vrewoinrv092" (<@ flist.[0] @>) 0.0 + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // checkEval "vrewoinrv092" (<@ flist.[0] @>) 0.0 checkEval "vrewoinrv093" (<@ iarr.[0] @>) 0 - checkEval "vrewoinrv094" (<@ ilist.[0] @>) 0 + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // checkEval "vrewoinrv094" (<@ ilist.[0] @>) 0 checkEval "vrewoinrv09r" (<@ Array.average farr @>) (Array.average farr) @@ -969,8 +973,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..2902657ce4 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 @@ -1120,24 +1125,28 @@ module MoreTests = test "test3932g" (isMeth <@ ClassOneArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932qA" (isPropGet <@ ClassOneArg(3).TestInstanceProp @>) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + (* test "test3932qB" (isPropGet <@ ClassOneArg(3).TestInstanceIndexProp(4) @>) test "test3932qC" (isPropSet <@ ClassOneArg(3).TestInstanceSettableIndexProp(4) <- 5 @>) test "test3932qD" (isPropSet <@ ClassOneArg(3).TestInstanceSettableIndexProp2(4,5) <- 6 @>) test "test3932q77" (match <@ ClassOneArg(3).TestInstanceSettableIndexProp2(4,5) <- 6 @> with | PropertySet(Some _, _, [Int32(4); Int32(5)], Int32(6)) -> true | _ -> false) + *) test "test3932wA" (isMeth <@ ClassOneArg(3).TestInstanceMethodNoArgs() @>) test "test3932wB" (isMeth <@ ClassOneArg(3).TestInstanceMethodOneArg(3) @>) test "test3932e" (isMeth <@ ClassOneArg(3).TestInstanceMethodTwoArgs(3,4) @>) test "test3932q1" (isPropSet <@ ClassOneArg(3).Setter <- 3 @>) - test "test3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) - test "test3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) - test "test3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) - test "test3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) - test "test3932q61" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) - test "test3932q62" (match <@ ClassOneArg(3).[4] <- 5 @> with PropertySet(Some _,_, [Int32(4)], Int32(5)) -> true | _ -> false) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // test "test3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) + // test "test3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) + // test "test3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) + // test "test3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) + // test "test3932q61" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) + // test "test3932q62" (match <@ ClassOneArg(3).[4] <- 5 @> with PropertySet(Some _,_, [Int32(4)], Int32(5)) -> true | _ -> false) test "test3932q7" (isPropSet <@ ClassOneArg(3).TupleSetter <- (3,4) @>) @@ -1146,7 +1155,8 @@ module MoreTests = printfn "res = %A" <@ ClassNoArg.TestStaticSettableProp <- 5 @> test "test3932q63" (match <@ ClassNoArg.TestStaticSettableProp <- 5 @> with PropertySet(None, _, [], Int32(5)) -> true | _ -> false) - test "test3932q64" (match <@ ClassNoArg.TestStaticSettableIndexProp(4) <- 5 @> with PropertySet(None, _, [Int32(4)], Int32(5)) -> true | _ -> false) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // test "test3932q64" (match <@ ClassNoArg.TestStaticSettableIndexProp(4) <- 5 @> with PropertySet(None, _, [Int32(4)], Int32(5)) -> true | _ -> false) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneArg(3) @>) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneTupledArg((3,2)) @>) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneTupledArg(p) @>) @@ -1154,10 +1164,13 @@ module MoreTests = test "test3932y" (isMeth <@ ClassNoArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932u" (isPropGet <@ ClassNoArg().TestInstanceProp @>) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + (* test "test3932u" (isPropGet <@ ClassNoArg().TestInstanceIndexProp(4) @>) test "test3932q65" (match <@ ClassNoArg().TestInstanceIndexProp(4) @> with PropertyGet(Some _, _, [(Int32(4))]) -> true | _ -> false) test "test3932u" (isPropSet <@ ClassNoArg().TestInstanceSettableIndexProp(4) <- 5 @>) test "test3932q66" (match <@ ClassNoArg().TestInstanceSettableIndexProp(4) <- 5 @> with PropertySet(Some _, _, [(Int32(4))], Int32(5)) -> true | _ -> false) + *) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodNoArgs() @>) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodOneArg(3) @>) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodOneTupledArg((3,4)) @>) @@ -1172,8 +1185,11 @@ module MoreTests = test "test3932yg" (isMeth <@ GenericClassNoArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932ug" (isPropGet <@ (GenericClassNoArg()).TestInstanceProp @>) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + (* test "test3932ug" (isPropGet <@ (GenericClassNoArg()).TestInstanceIndexProp(4) @>) test "test3932ug" (match <@ (GenericClassNoArg()).TestInstanceIndexProp(4) @> with PropertyGet(Some _, _, [Int32(4)]) -> true | _ -> false) + *) test "test3932ig" (isMeth <@ (GenericClassNoArg()).TestInstanceMethodNoArgs() @>) test "test3932ig" (isMeth <@ (GenericClassNoArg()).TestInstanceMethodOneArg(3) @>) @@ -1367,19 +1383,21 @@ module CheckRlectedMembers = test "testReflect3932o" (isMeth <@ ClassNoArg().TestInstanceMethodTwoArgs(3,4) @>) test "testReflect3932q1" (isPropSet <@ ClassOneArg(3).Setter <- 3 @>) - test "testReflect3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) - test "testReflect3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) - test "testReflect3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) - test "testReflect3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) - test "testReflect3932q6" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // test "testReflect3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) + // test "testReflect3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) + // test "testReflect3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) + // test "testReflect3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) + // test "testReflect3932q6" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) test "testReflect3932q7" (isPropSet <@ ClassOneArg(3).TupleSetter <- (3,4) @>) test "testReflect3932q1x" (isPropSet <@ ClassOneArgOuterAttribute(3).Setter <- 3 @>) - test "testReflect3932q2x" (isPropGet <@ ClassOneArgOuterAttribute(3).GetterIndexer(3) @>) - test "testReflect3932q3x" (isPropGet <@ ClassOneArgOuterAttribute(3).[3] @>) - test "testReflect3932q4x" (isPropGet <@ ClassOneArgOuterAttribute(3).TupleGetterIndexer((3,4)) @>) - test "testReflect3932q5x" (isPropSet <@ ClassOneArgOuterAttribute(3).SetterIndexer(3) <- 3 @>) - test "testReflect3932q6x" (isPropSet <@ ClassOneArgOuterAttribute(3).[3] <- 3 @>) + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // test "testReflect3932q2x" (isPropGet <@ ClassOneArgOuterAttribute(3).GetterIndexer(3) @>) + // test "testReflect3932q3x" (isPropGet <@ ClassOneArgOuterAttribute(3).[3] @>) + // test "testReflect3932q4x" (isPropGet <@ ClassOneArgOuterAttribute(3).TupleGetterIndexer((3,4)) @>) + // test "testReflect3932q5x" (isPropSet <@ ClassOneArgOuterAttribute(3).SetterIndexer(3) <- 3 @>) + // test "testReflect3932q6x" (isPropSet <@ ClassOneArgOuterAttribute(3).[3] <- 3 @>) test "testReflect3932q7x" (isPropSet <@ ClassOneArgOuterAttribute(3).TupleSetter <- (3,4) @>) test "testReflect3932rg" (isMeth <@ GenericClassNoArg.TestStaticMethodOneArg(3) @>) @@ -1594,6 +1612,94 @@ 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 + // Disabled, see https://github.com/fsharp/fsharp/issues/517 + // 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 = [] @@ -1926,6 +2032,8 @@ module TestQuotationOfCOnstructors = | _ -> false) +// Disabled, see https://github.com/fsharp/fsharp/issues/517 +(* module IndexedPropertySetTest = open System open Microsoft.FSharp.Quotations @@ -1960,6 +2068,7 @@ module IndexedPropertySetTest = else printfn "Test KO." do testExprPropertySet () +*) @@ -2950,12 +3059,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 +3082,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..598560ecb1 100644 --- a/tests/fsharp/core/reflect/test2.fs +++ b/tests/fsharp/core/reflect/test2.fs @@ -2,6 +2,18 @@ module Test2 #nowarn "44" +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) + open System.Reflection let failures = ref false @@ -292,10 +304,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 From e3721c08894c3eade36759c15d2e0f3e0b7aa704 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 15 Feb 2017 15:58:11 +0000 Subject: [PATCH 02/18] integrate all from fsharp/fsharp --- src/fsharp/test.snk | Bin 0 -> 596 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/fsharp/test.snk diff --git a/src/fsharp/test.snk b/src/fsharp/test.snk new file mode 100644 index 0000000000000000000000000000000000000000..c16543bdc485c87204265be7cdb36b9e04f769a2 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097Z(=G%(7)~F0J6@jCsIiOQd z98SABxJRb8V`-2gN(9eK(XPcF&csac$dWF#yDsKl!~2`6hv7j4ESAnePnfSWP>g;g z+O@D~s(>$MlZX{J?hgF5)A7lw_#s-vE|R*MS^`&1Xpqo!WXmrziv&9yPyU$i;A!qF zarRTR&+82LmEk+&s6JGD4YW8k^p;aj@0EH@$-2i<35?*NiXgU%>3c|8|J6s>t-_72 z$AKmHe;`zoX*Bxf$o6Byt`-DDJoNdFH7R+VhwI`VL~7 z>`TMSZslV~Io8Ltfl-4!k+xBs6r(%B#*{jL=5e-@)>)R9^8L% Date: Wed, 15 Feb 2017 17:02:11 +0000 Subject: [PATCH 03/18] fix build --- src/fsharp/FSharp.Build/Microsoft.FSharp.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets index 0f79e0f36b..849176bb33 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -198,6 +198,7 @@ this file. /> + Resources="@(_CoreCompileResourceInputs);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" SourceLink="$(SourceLink)" Sources="@(CompileBefore);@(Compile);@(CompileAfter)" From ad9ef944a5a3f9c057ed9b0690185e1f404ba910 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 15 Feb 2017 17:32:28 +0000 Subject: [PATCH 04/18] fix build --- vsintegration/src/FSharp.VS.FSI/sessions.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From a0dd5b202b92c5e3ba4db01beffe1c539017956b Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 13:26:03 +0100 Subject: [PATCH 05/18] fix build --- vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 57722834e5f840aab4f348eb98a7e055552baf34 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 14:07:40 +0100 Subject: [PATCH 06/18] fix build 3 --- vsintegration/tests/Salsa/salsa.fs | 2 +- vsintegration/tests/unittests/TestLib.LanguageService.fs | 2 +- vsintegration/tests/unittests/Tests.LanguageService.Script.fs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs index 98273c0d0d..548106eb64 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 Option.get Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) 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" From 1c98b65b20b7659b5b98f878d189fcfb0a9bd50b Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 14:43:05 +0100 Subject: [PATCH 07/18] fix build --- vsintegration/tests/Salsa/salsa.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs index 548106eb64..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(None) + then Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None).Value else System.AppDomain.CurrentDomain.BaseDirectory let sb = new System.Text.StringBuilder() From 515ff201de7e6c17d04377897341a4226f064467 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 14:49:44 +0100 Subject: [PATCH 08/18] fix build --- build.sh | 6 ++++-- src/FSharpSource.Settings.targets | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) 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/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index a18f89b550..462e59dd1d 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -31,18 +31,21 @@ false - false + false Microsoft.VSSDK.BuildTools.15.0.26124-RC3 obj\$(Configuration)\$(TargetFramework)\ obj\$(Configuration)\$(TargetFramework)\$(PortableProfileBeingReferenced)\ - true - false - + - + + false + + + + true true true true @@ -52,7 +55,7 @@ $(MSBuildThisFileDirectory)..\packages\$(VSSDK_BUILDTOOLS_VERSION)\tools\vssdk\schemas\VSIXManifestSchema.xsd - + $(OtherFlags) --times $(NoWarn);69;65;54;61;75 @@ -128,7 +131,7 @@ 14.0 14.3.25407 v12.0 - $(VisualStudioVersion).0.0 + $(VisualStudioVersion).0.0 v12.0" 12.0.0.0 From 9c248bd19ad799edd40e173b6d1b038b8de11bb0 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 14:52:35 +0100 Subject: [PATCH 09/18] fix build --- src/FSharpSource.Settings.targets | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index 462e59dd1d..d1a01c89ca 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -29,7 +29,6 @@ true true - false false Microsoft.VSSDK.BuildTools.15.0.26124-RC3 @@ -40,11 +39,7 @@ - - false - - - + true true true From 27b41da8f59c7b8385885d4fea9f521b1b8a7f35 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:04:14 +0100 Subject: [PATCH 10/18] revert chagnes to tests --- src/FSharpSource.targets | 60 +------------------ .../FSharp.Build-proto.fsproj | 38 ++++++------ src/fsharp/FSharp.Build/FSharp.Build.fsproj | 50 ++++++++-------- .../FSharp.Compiler-proto.fsproj | 38 ++++++------ .../FSharp.Compiler/FSharp.Compiler.fsproj | 38 ++++++------ src/fsharp/FSharp.Core/FSharp.Core.fsproj | 6 -- .../FSharp.LanguageService.Compiler.fsproj | 38 ++++++------ tests/fsharp/core/members/basics-hw/test.fsx | 14 ++++- .../queriesLeafExpressionConvert/test.fsx | 6 +- tests/fsharp/core/quotes/test.fsx | 53 ++++++---------- 10 files changed, 137 insertions(+), 204 deletions(-) diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 0f76216acf..3b0486f83d 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -8,12 +8,6 @@ 3.47.41.0 3.78.41.0 3.259.41.0 - 3.98.41.0 - 3.98.41.0 - 3.98.41.0 - 3.98.41.0 - 3.99.41.0 - 3.100.41.0 @@ -134,7 +128,7 @@ - $(DefineConstants);CROSS_PLATFORM_COMPILER + $(DefineConstants);CROSS_PLATFORM_COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT $(DefineConstants);BE_SECURITY_TRANSPARENT $(DefineConstants);FX_LCIDFROMCODEPAGE @@ -145,55 +139,7 @@ - - - - - - $(DefineConstants);FX_NO_REFLECTION_EMIT - $(DefineConstants);FX_NO_BIGINT - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinWatchOS;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\MonoAndroid;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\MonoTouch;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinWatchOS;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinTVOS;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\2.1\XamarinMac;$(AssemblySearchPaths) - - - - - - $(FSharpSourcesRoot)\..\dependencies\mono\4.5\XamarinMac;$(AssemblySearchPaths) - - - - + $(DefineConstants);FX_PORTABLE_OR_NETSTANDARD $(DefineConstants);NETSTANDARD1_6 $(DefineConstants);PREFERRED_UI_LANG @@ -579,7 +525,7 @@ - + diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index b362f4da9d..6065507db1 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -56,33 +56,33 @@ $(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 - + + True + + + True + + + True + + + True + + + True + diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 2bdd52f033..13ca47047f 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.Portable.FSharp.Targets + Microsoft.FSharp.Targets + {BuildSuffix} + + + + Microsoft.Portable.FSharp.Targets {BuildSuffix} @@ -67,33 +67,33 @@ $(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 - + + True + + + True + + + True + + + True + + + True + diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index 3b9197217e..04e4109f44 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -461,33 +461,33 @@ $(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 - + + True + + + True + + + True + + + True + + + True + diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 6b3c7007a6..81ee5c76fd 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -518,33 +518,33 @@ $(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 - + + True + + + True + + + True + + + True + + + True + diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 235041b7b2..8ad25ce16c 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -17,13 +17,7 @@ true true $(OtherFlags) --warnon:1182 --compiling-fslib --maxerrors:20 --extraoptimizationloops:1 - $(OtherFlags) --compiling-fslib-20:"$(SystemRoot)\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" - $(OtherFlags) --compiling-fslib-20:"$(MonoLibDir40)/mscorlib.dll" $(OtherFlags) --compiling-fslib-40 - $(OtherFlags) --targetprofile:netcore - $(OtherFlags) --targetprofile:netcore - $(OtherFlags) --targetprofile:netcore - $(OtherFlags) --targetprofile:netcore $(OtherFlags) --compiling-fslib-40 $(OtherFlags) --compiling-fslib-40 $(OtherFlags) --compiling-fslib-40 --compiling-fslib-nobigint diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 224f3db379..f458973d68 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -620,32 +620,32 @@ $(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 - + + True + + + True + + + True + + + True + + + True + \ No newline at end of file diff --git a/tests/fsharp/core/members/basics-hw/test.fsx b/tests/fsharp/core/members/basics-hw/test.fsx index 66d529939b..2b807659d9 100644 --- a/tests/fsharp/core/members/basics-hw/test.fsx +++ b/tests/fsharp/core/members/basics-hw/test.fsx @@ -3557,7 +3557,19 @@ module SlicingTests = (3).[..4,*] (3).[*,*] -module Bug_FSharp_1_0_3246 = + 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 = type r1 = { x : int } static member Empty = { x = 3 } diff --git a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx index c38756287a..2a0cec078b 100644 --- a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx +++ b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx @@ -453,11 +453,9 @@ module LeafExpressionEvaluationTests = checkEval "vrewoinrv091" (<@ farr.[0] @>) 0.0 - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // checkEval "vrewoinrv092" (<@ flist.[0] @>) 0.0 + checkEval "vrewoinrv092" (<@ flist.[0] @>) 0.0 checkEval "vrewoinrv093" (<@ iarr.[0] @>) 0 - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // checkEval "vrewoinrv094" (<@ ilist.[0] @>) 0 + checkEval "vrewoinrv094" (<@ ilist.[0] @>) 0 checkEval "vrewoinrv09r" (<@ Array.average farr @>) (Array.average farr) diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx index 2902657ce4..f6f92576f4 100644 --- a/tests/fsharp/core/quotes/test.fsx +++ b/tests/fsharp/core/quotes/test.fsx @@ -1125,28 +1125,24 @@ module MoreTests = test "test3932g" (isMeth <@ ClassOneArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932qA" (isPropGet <@ ClassOneArg(3).TestInstanceProp @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - (* test "test3932qB" (isPropGet <@ ClassOneArg(3).TestInstanceIndexProp(4) @>) test "test3932qC" (isPropSet <@ ClassOneArg(3).TestInstanceSettableIndexProp(4) <- 5 @>) test "test3932qD" (isPropSet <@ ClassOneArg(3).TestInstanceSettableIndexProp2(4,5) <- 6 @>) test "test3932q77" (match <@ ClassOneArg(3).TestInstanceSettableIndexProp2(4,5) <- 6 @> with | PropertySet(Some _, _, [Int32(4); Int32(5)], Int32(6)) -> true | _ -> false) - *) test "test3932wA" (isMeth <@ ClassOneArg(3).TestInstanceMethodNoArgs() @>) test "test3932wB" (isMeth <@ ClassOneArg(3).TestInstanceMethodOneArg(3) @>) test "test3932e" (isMeth <@ ClassOneArg(3).TestInstanceMethodTwoArgs(3,4) @>) test "test3932q1" (isPropSet <@ ClassOneArg(3).Setter <- 3 @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // test "test3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) - // test "test3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) - // test "test3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) - // test "test3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) - // test "test3932q61" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) - // test "test3932q62" (match <@ ClassOneArg(3).[4] <- 5 @> with PropertySet(Some _,_, [Int32(4)], Int32(5)) -> true | _ -> false) + test "test3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) + test "test3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) + test "test3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) + test "test3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) + test "test3932q61" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) + test "test3932q62" (match <@ ClassOneArg(3).[4] <- 5 @> with PropertySet(Some _,_, [Int32(4)], Int32(5)) -> true | _ -> false) test "test3932q7" (isPropSet <@ ClassOneArg(3).TupleSetter <- (3,4) @>) @@ -1155,8 +1151,7 @@ module MoreTests = printfn "res = %A" <@ ClassNoArg.TestStaticSettableProp <- 5 @> test "test3932q63" (match <@ ClassNoArg.TestStaticSettableProp <- 5 @> with PropertySet(None, _, [], Int32(5)) -> true | _ -> false) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // test "test3932q64" (match <@ ClassNoArg.TestStaticSettableIndexProp(4) <- 5 @> with PropertySet(None, _, [Int32(4)], Int32(5)) -> true | _ -> false) + test "test3932q64" (match <@ ClassNoArg.TestStaticSettableIndexProp(4) <- 5 @> with PropertySet(None, _, [Int32(4)], Int32(5)) -> true | _ -> false) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneArg(3) @>) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneTupledArg((3,2)) @>) test "test3932r" (isMeth <@ ClassNoArg.TestStaticMethodOneTupledArg(p) @>) @@ -1164,13 +1159,10 @@ module MoreTests = test "test3932y" (isMeth <@ ClassNoArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932u" (isPropGet <@ ClassNoArg().TestInstanceProp @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - (* test "test3932u" (isPropGet <@ ClassNoArg().TestInstanceIndexProp(4) @>) test "test3932q65" (match <@ ClassNoArg().TestInstanceIndexProp(4) @> with PropertyGet(Some _, _, [(Int32(4))]) -> true | _ -> false) test "test3932u" (isPropSet <@ ClassNoArg().TestInstanceSettableIndexProp(4) <- 5 @>) test "test3932q66" (match <@ ClassNoArg().TestInstanceSettableIndexProp(4) <- 5 @> with PropertySet(Some _, _, [(Int32(4))], Int32(5)) -> true | _ -> false) - *) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodNoArgs() @>) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodOneArg(3) @>) test "test3932i" (isMeth <@ ClassNoArg().TestInstanceMethodOneTupledArg((3,4)) @>) @@ -1185,11 +1177,8 @@ module MoreTests = test "test3932yg" (isMeth <@ GenericClassNoArg.TestStaticMethodTwoArgs(3,4) @>) test "test3932ug" (isPropGet <@ (GenericClassNoArg()).TestInstanceProp @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - (* test "test3932ug" (isPropGet <@ (GenericClassNoArg()).TestInstanceIndexProp(4) @>) test "test3932ug" (match <@ (GenericClassNoArg()).TestInstanceIndexProp(4) @> with PropertyGet(Some _, _, [Int32(4)]) -> true | _ -> false) - *) test "test3932ig" (isMeth <@ (GenericClassNoArg()).TestInstanceMethodNoArgs() @>) test "test3932ig" (isMeth <@ (GenericClassNoArg()).TestInstanceMethodOneArg(3) @>) @@ -1383,21 +1372,19 @@ module CheckRlectedMembers = test "testReflect3932o" (isMeth <@ ClassNoArg().TestInstanceMethodTwoArgs(3,4) @>) test "testReflect3932q1" (isPropSet <@ ClassOneArg(3).Setter <- 3 @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // test "testReflect3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) - // test "testReflect3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) - // test "testReflect3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) - // test "testReflect3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) - // test "testReflect3932q6" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) + test "testReflect3932q2" (isPropGet <@ ClassOneArg(3).GetterIndexer(3) @>) + test "testReflect3932q3" (isPropGet <@ ClassOneArg(3).[3] @>) + test "testReflect3932q4" (isPropGet <@ ClassOneArg(3).TupleGetterIndexer((3,4)) @>) + test "testReflect3932q5" (isPropSet <@ ClassOneArg(3).SetterIndexer(3) <- 3 @>) + test "testReflect3932q6" (isPropSet <@ ClassOneArg(3).[3] <- 3 @>) test "testReflect3932q7" (isPropSet <@ ClassOneArg(3).TupleSetter <- (3,4) @>) test "testReflect3932q1x" (isPropSet <@ ClassOneArgOuterAttribute(3).Setter <- 3 @>) - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // test "testReflect3932q2x" (isPropGet <@ ClassOneArgOuterAttribute(3).GetterIndexer(3) @>) - // test "testReflect3932q3x" (isPropGet <@ ClassOneArgOuterAttribute(3).[3] @>) - // test "testReflect3932q4x" (isPropGet <@ ClassOneArgOuterAttribute(3).TupleGetterIndexer((3,4)) @>) - // test "testReflect3932q5x" (isPropSet <@ ClassOneArgOuterAttribute(3).SetterIndexer(3) <- 3 @>) - // test "testReflect3932q6x" (isPropSet <@ ClassOneArgOuterAttribute(3).[3] <- 3 @>) + test "testReflect3932q2x" (isPropGet <@ ClassOneArgOuterAttribute(3).GetterIndexer(3) @>) + test "testReflect3932q3x" (isPropGet <@ ClassOneArgOuterAttribute(3).[3] @>) + test "testReflect3932q4x" (isPropGet <@ ClassOneArgOuterAttribute(3).TupleGetterIndexer((3,4)) @>) + test "testReflect3932q5x" (isPropSet <@ ClassOneArgOuterAttribute(3).SetterIndexer(3) <- 3 @>) + test "testReflect3932q6x" (isPropSet <@ ClassOneArgOuterAttribute(3).[3] <- 3 @>) test "testReflect3932q7x" (isPropSet <@ ClassOneArgOuterAttribute(3).TupleSetter <- (3,4) @>) test "testReflect3932rg" (isMeth <@ GenericClassNoArg.TestStaticMethodOneArg(3) @>) @@ -1675,8 +1662,7 @@ module QuotationConstructionTests = #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 - // Disabled, see https://github.com/fsharp/fsharp/issues/517 - // check "vcknwwe099" (Expr.PropertySet(<@@ (new Foo()) @@>, setof <@@ (new Foo()).[3] <- 1 @@>, <@@ 2 @@> , [ <@@ 3 @@> ] )) <@@ (new Foo()).[3] <- 2 @@> + 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" @@> @@> @@ -2032,8 +2018,6 @@ module TestQuotationOfCOnstructors = | _ -> false) -// Disabled, see https://github.com/fsharp/fsharp/issues/517 -(* module IndexedPropertySetTest = open System open Microsoft.FSharp.Quotations @@ -2068,7 +2052,6 @@ module IndexedPropertySetTest = else printfn "Test KO." do testExprPropertySet () -*) From b3c64474d3adfcb279785eae978f5e18227f9859 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:07:31 +0100 Subject: [PATCH 11/18] fix build --- src/FSharpSource.Settings.targets | 2 +- src/FSharpSource.targets | 2 +- src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj | 2 +- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 2 +- src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj | 2 +- src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj | 2 +- .../FSharp.LanguageService.Compiler.fsproj | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index d1a01c89ca..16d3aca82b 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -39,7 +39,7 @@ - + true true true diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 3b0486f83d..207278f52a 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -108,7 +108,7 @@ - + MSBUILD_AT_LEAST_14;$(DefineConstants) diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index 6065507db1..a9159d9440 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -53,7 +53,7 @@ - + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 13ca47047f..1dd4578412 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -64,7 +64,7 @@ - + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index 04e4109f44..788a5cc0b7 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -458,7 +458,7 @@ ..\..\..\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 diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 81ee5c76fd..fd896a232f 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -515,7 +515,7 @@ ..\..\..\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 diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index f458973d68..3adad14042 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -617,7 +617,7 @@ FSharp.Core - + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll From fd201cb8e89ce2d6f378dcb1d426f3f2bc06e013 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:14:54 +0100 Subject: [PATCH 12/18] simplify variables --- src/FSharpSource.Settings.targets | 11 ++++++----- .../testenv/bin/System.ValueTuple.dll | Bin 78024 -> 77672 bytes 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index 16d3aca82b..d03a65f2e8 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -33,7 +33,7 @@ false Microsoft.VSSDK.BuildTools.15.0.26124-RC3 - + obj\$(Configuration)\$(TargetFramework)\ obj\$(Configuration)\$(TargetFramework)\$(PortableProfileBeingReferenced)\ @@ -125,10 +125,11 @@ 2.0.0-rc3-61324-01 14.0 14.3.25407 - v12.0 - $(VisualStudioVersion).0.0 - v12.0" - 12.0.0.0 + + + v12.0" + 12.0.0.0 + $(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.0.1.21\tools diff --git a/tests/fsharpqa/testenv/bin/System.ValueTuple.dll b/tests/fsharpqa/testenv/bin/System.ValueTuple.dll index e64e5d413e78da9ad4da9e657be91928444a20d4..78a185143e6ab00b3c0dd181de0b9ffc972a2375 100644 GIT binary patch literal 77672 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 IGX}>00S3L+2LJ#7 literal 78024 zcmeFa34D~*^*4T>XVz@PB$E&zVF-knAqgQs*c4>n1Vl)1jY5C{B1s0ah;c{>i`E5q z>PjtI+_7rG)>>-asvZb|U1(@s`d{kZ#?>eQpuclPCL>preBwxvAih=r|hupM8j#4uy zu6U7ey7H(CH!1bgElQ;^7kph)LFhUY?e7xa7k!L%>9M{_rEktvs-SEYsC<)h>#=@> zqqv~#29)%7lngLSJbJ8vaEKO^{RmQsx}gpA2Rfv}rc?k0gNT5Rg0iEiQsk&I*imJO zvr4g9B>6_tfK^f^i%hp>?1){ftaM3%Qa8qw35vJY|M3{OpKMcJApB@`YL=hQ*ezLRH zwlj*##Lj5K#ZEQhrkycFn0CezVcHo-1o=;P#uGty0)9O<0YvOX;vkl=Om;hMyC+eJ z*qunY*qubUX%|z>wmX>!)9w@^OuJKwFzsRxr^lufhwKK@^cZty5CB}iZn7+&-!t@2>Bt5o(IHoVmIh8o%OCVj3F$YN|eKQ7z z#OZe1x6`OZ;-C&KjY3=pw1iDUZ491KC*H|Cs8 z9P%xYp~skW4skFjtyu20{jH-i@%LQ9#ozM?H~n2ogz4`xB20hli7@?LPK4?23J|fC z#4-J4PLw!iESa;4IHteMSxp@BH;}1Q8cdI^Ar2;t#QO)f{|!_k{+~~{_>U=L``<`} z>3rvJ=oCl2`^$Pzsl z5C@al>XTRPHf^9XY14&-OPe|fH~ZuwBFr|$i7?x=kqEO*n8J3Oz62tMHNkEZbGnFQ zwuw2LiDR~jIa`Qhwuw1giDR~jIopUsZ3+bR7;`Qr4ziK-+xvDKFQF1?vyMfq9s?@=hOFf#=c&tG;QjxU%Cc>rdHxq8Q z{T3q3w%oJ@CU1CqAP|?^KZO3Up6-b=EN4Ui4 zal*|weV+(3PEQbF#_35S%s4$ogc+x&LByURju|KBAl2G&V$QR~G3O0)o+FMKC+0j) z95YVL`5|%4I5Fo(#4+QbII#GXmv<*;&G>+QJymWm{Im!i?*?M3`}X zj|elahd{*sL>x1&%z2+UW?Y%`XX2P~WzGl0si0P1AHkdtiDSl@{*_p&P<88CEh;7E(W(SCE#@lB1 zA+{NBn;j%J#XFFv$82^su@_M{j502VBj|?mvQvz!VdFYDq7!SmaT%<~5OZ8A6aYqC zRB(}TM;Z!#e=BWO~uz4SGjs@Fc%DAi10&bC<%E;=sx4()wpamE?A8#RpS!X zxHgS=N%Sc_R?f967!GGx$q=0ZtyK(10!DmPLD3$?ucqLWUV02Y1hLT!s~Mt)z!}SM z9K-Pp(M85}W5f?lku*{ls!CJy3{}u|63b0wh@OL%lNnBCIE5j)4*Y3=d@bm>2#lnY z+6?wGRF$qyxAdZ4QD+vz*$n3}M8|@E3PX4Sd_Evw*9m&6&0PpIl1V1A*aYH`q3SIg zr?DhDA6gbOtYKKoa0x?rgwitr`T9)Ivuy6!HhK=wNPx`sG0eeUrfRh8)v@Tg49{b@ zl;JXl@C%lfGh6}4*H?0h6t%glY;?7at^pbelId(R9jeMw8!WpGEO$P`wG81CY&9`# zW*B3*4v?>l92Z1_w%P)1Hrj5Z7XXdqkP9JheW)s+wpc#E8(6%MVF$yD7{(cHWZ22@ zOMrYGBbOOnHg~g)LNoNS>{c7yW}_DajUb1XNAlPm^hF3~yn0E5n@(zsm47K)yDR9r-Ssd%KO^VWVHS(cLzBr;XkPl(+iHd;Ca$au+$U zJW?P&XRB{pKHtkK?qhgA!#xZiVE7G&4>EiRkoWGgHU6f}-D{)!Z1fQu{g#cwG=jv+ z9tFxr)rS3C<$DYtXZU@FPcVFv;ZqEs2IPIU>`#AS zbDyyko`?2+g3_i>P}=PYO4~d^X@4guZR`Z49i5=oR?bP&9?nVA=FLgd zuFXl)cFjrCKFvwf1}zey<_{xKMll$r$8(5XPQ)pCJeTUk^N3YJtmS$Gi2Wie3}aZv zupBT_MWRpX@!`y>WH^Fh6~mDXM=`_+Kzd{(RY=&U#m8{zScc;mj%PT5;fV}SVmJ{n zJ_#T)3Th&w4PB0XTKr^|o6HbjI>F_s45u-i&Tt09nSk+GHaZ(RJCEUfh6@;;%5WiI{4^U~WTT6LM#hqfaclxM9Q(9*4NKNCT*B~lhG#H5 zli^tm&jyU2W21F8dajM02Q)IC%uO)N!JcEE7GKJu%NW)(T+VO>!<7u93|9fhSKH_s z8*Q-B^KEo3(8!5o`Xn-)uuqFOvRo6xW`;3_>lm(Q*utLSUY> z$+1t1zsyw*GJJ*M&l$eT@HK|7GkgOu{tFxJw$WeO=&x+_O&fj7M&Gv4UjvQ*CW(G0 ziT-U8{ktUk_n;&5sd)Gd(k%iRU(+Dh*Haqrd@uOVjGlsZ* z1KCw$s55jibTjk-#=SP`vr)f|rrBt^jb_+rrj2F+jR%tGK1p;iiOx=0#Oh0|GFQ6?$5OdRU1jO{WnXd)*YkxnJQ%^% zh_^*kYF%qSWH0Jlmfp8)KuZ=F_z2NQs0u;FZWuz@IqGO0>GGC^_11o*e2DI9?N7)F z@TGMC+as@93kV%$IM`Z9#EGW2tpkaiW|9GKYnT}4*^GdX55!sr5g#TZxH9sRg2>rG z+ziW3hJ554&>n-HMfD?fU<5?sR6}FrT;hq;>86#)dBpV^bse@NONs9@_^{ns#Ll_e zzl2lFiY(oACn1r+#O+&lUStRm>}vsC3}eMqLT7?5g-s_0qsn$w_>KC*^}c0>f^@f0 zX?qv6dATN|v7ttFu8&QOQQzn@GTgJzL|>%Da>P&ra(k`+^ZYF( zE3+J7h~YdJ1JUJZUu+n$jF@1xR4&A%B_E?p-$;R@VZ~wK2n^3%PXxGLgLa>gTb^;W zFEL|f5a)3jDK}K29lDyL44ucJu7cEINOcYeqPsgQi9XNOz6Dmf*9nP?Aa38XXQjC$ z>xvWPUa!cHz!{7Ns_bGI8wnIOjJ6|l(fxVGcp!zwcp!|%11Xa6V4*x7Dh8sIly2V! zQLl{}qor@zeKMv<+Yz%Z*6E!lH{JR6=&JG@p zJ20%!@jx_cgsMDh2ioC7I|{DErKeWXm&fECCHeYBQt@vN%R5T?wG?1X-%-+E-$)j7 zw4-^{Uq0?N3~M4Xax|f3SQC?n^&KTf#=Rpljv5lGa;uBPzhm-;ojE2?j0rZLyh!g? zb~Yx(1mKtyC(?(f^CT+4+_(g;^V}dLGLg7_d3<3H#xLnRs_lvsG^WW2=|fWIiWB5% zg6T5}xE?3{E{3s_f%5d>aTkMDzd3)%s4;&Cqj5$SWd2yFF@H`%DcOrcy_+w=wavVB%Q|Ww0kr*4NP9Jc}bs6E&3fMr`=UD zTP=rpwnDb9A9){u5K?e<4piYyNxG0cl^Mv`^o7Ozp~-ywp$Mcuei;FZBl;W4j8R?Mm;D zV?tNw3;FBg|RG!Hfx_?1<`AVHZfOO zf%I}G8+klIhZRgOcQ=Qabr?Bi7JR0cV|+O?8+qW&Y-G>KZ1y;coeCyjiEyS{2+GiX zilJH|r&;61OmbG!Oor7GlVLe-q(QpUDWmnqqw;WZhHJL$L1{e_A=x>eL`ZHOPa>pN z977^B66rvFBQ-k5bu^DALK^oK5-AZ`IWD0kkrGo9Y1o-?5Oa!AroI#KrXJ~PfuqpJ}D<(h4^w# zCM2?ixMoi7kZ~<@hV;4O1dW`$RB|#IaK#B4IeE6^WU}ar6Et%22+7Ihfh$gsb24)E z>A>|kdE{akI|HbltM7*&0W(*Vn?|lCjB+)3B)Qr`jeNTSrR107Y6~?=DU*|TlB+G$ zD5bq6`6#*CLXA?oawC7YUjrw+Hp->&+`MvQZ&PJ*Du|p34LsLf>dR=OBbPg3eFB6M za=9bkJ#x7t<~?$`Bkq*TMdw*S6JmchJ4JiaAHt_TcAih&7T29$*bfOg+UfwW-7SfE z-s%Le-8G34R!4a4?n#tL*)QY=LXDi^weFX4jBDpwKwdi60`keZ7LW(VT40ac*g0VG zi4?C5b)aZ%@G9(T`GvK?9-Oixw!&d91y<`#hSgY;VYSUzEa(W#ScA?+9t_f2kf-*JesT7Zl1Ek`>rP{sqUF~!%h;2cwY9ShDe#dn}ASmEOcZ(72lRZ#XA z7Oiv9S6H;pqYqE#Qu@H6wTwSKo%Q_b?OcveTD-19XYt}iNMr?Zv3ODLx>n|$%yCld ziW4-}t_`wwksVi@ps{u>m9>iuyW#|mwQIJlUF3)>PS9ApM#$Plj=ACldF{fQwi37= zCr4cjV^N^?nsxyGWt(dnd2g&~gwdKtp30hLp}e+C_zEgQfLxYk%|eZ(i55L_T$VKp zHA-pGBll%lvrway7CmZ&ENd2Ol+vO{4cd+aHY|D;%B7A)kDHTf(c@lP1r0_YeH~44 zta*+;>apfI`l-j7=jf}c(4BDo;^?m)YaX>u`i#~*ska(vLcgs6!|?Y#_?u&|hpC(C zx|8^y+lLA3q1AIq`!!L*>P4^Jw}}!~PdYo*STRFYKD7$% zrk7(bIoC^Sg>$_mpPlO^dFWg($sc3AwC6~y0ZjhxhS$&YK~c!%ey zb9J<$WiqVbm<%fxCc|nvGYk*tx&rqfD11?tJt(WkdP;sA&w5I3AJ2M9tvsIfl!9_x z>nR2C7}rx-lr!{=6!;v^(LBl}*&a?QSd@thd2&1^M;2vbn~QR$bJf5Y@hIGfV)Rv} zwI&}^A34_KW9lQvntV)s@m<6oBPE$RiL|@o1bKa* za5bf?Dv)}dEV>vPOZ)~|;>iV9oS?D9FO?;pTyn(;8cY0aS>nk>SDc`+#E+0Ao?Ldt z3Gxz;rN0%p9;YU_7{=Owir;^NW4Y$KPmMCxeZpwXpccrwZ=t-rPWTooLV#K$>%N5= z0O(r=+gDQyg>x!ZBqJvIgw z%B7Bt0k=2R#()YU?a;vIn%_rL9s2@D-}cxSI6Ak-zQEDJQ=vLxU*PEE1$LQnE$ry% z9{U1EXVbnwbY1{7p~E+TVeA>Qkel-CJwxgUxb7tW=k|ZXp26yMuRRtLS97b|y*#>8 zoRwN#@3jX+q7JM3z4o9;l(2??*B%&&64o$qjtFB{LDy1#bpiUBUb3&?*-LjBI3})h zUqS71?klJj&V2>>?A%w7hsM6bo{+H%!Q^{Ec%RV$iu%d#_+1Zs4w`!eE954_im=JB z0%|g>_?ZkVTqeVc4l@jw5DQw*aPyezOM8z#J@y_HqvP3oP*aX)??Ej;p1lVJ>bUkE z6xie5dr)T_cAZD(LBm|*$K1`%{mU_TbB4JI$~=y4&T@8h`anMC z)zulC@o=8)-+l|mM7tZeY7NhbyoQ6k){8Kr=u6Z%KCxBWNFScgPWr%B=}Y|S>DLRK?U8A!%;h( zdpK&9a}P&taO~l{^k}>{!xtXq^TsYiSy|Y3R;EAyteJjeJgdR@T!8mwc)x=8Nc2CR zGvW96Tr|j$c382Y$GDl$k*ZQUA+qPtw=j-$*Q*9dUH-b?kwT9t7@~{64U((d|5%_! zH{DiU=2#v6E1fE~=vM8r|LFlGwwICZJia)%oW>LVZbJY!Hh<2z@5H&Jy|Bo+q?HoP zy}p$JOolb#O@=kUO@=j{O@=jlnPFTn*u&rNb;YKU>&fH47-N1h-Z+$2zrlMZ#y%c3 z;`eymkxDnMB&rro#tcB|zwpEq=ScwZf43!OeVz!Yf83!l74mF=!vB2mO$$6HVBvqD zzfF@oHDL1p#F#UESY}KS<61Qf8`uFU*Mt*27+r(1dtAbj>vRd)g(cRJN||J?`P8@j#cLm!dR{7h}1H zlW#pDu34XOsb47daqAKdP`U!88 z+LQ2&v~l=N1*RK`-$)nmz378*f=&~YE50v zL|#WGX}tn#N*6JhTULO3dWJ$zA@t;?M}7(s{K_q4(tqVT;aAF4k*RwJ#I6LRLU)yU z%d{Ybm97FoWW+i;YbBQ8JFN+-5CPl?$rC{De3Pq zHJK(1O(p$Mz}iN&493nNH}VqNST?Gq-6kr3ij9~axrSN@n=ZPiQw^m4C|Ir!Dp*O7}0^I|;x+J(<+(ty{rwKO!ZZY7Bz4ocmq zUc976<(_H$O@rduOXgygQA0uR!NFDWw8q$S62=Qn)XwP@`yIJFv!Pc)9p8-SA>Rm;MgWa&K_@2}!bWmv}eGYd#9a8$+X`(7%eCzURC z`}|%t(nIihhEv^#eIeE6M_;Hx?o#lZ-EVun>K6?E&hSAGaTYN=pW#i+e}v)1o>x#h zE$tO=K)vR=7jTLDUT{uR#NWyA#|)1$tk8&mHp5F9ev4tdi})}5-h~f$>IApy#JQUB zA2R=B)=Yfu#ieCF;-AT!Wem4@i8GP; zkFmvE;1nQbeT*PyXD*)DotG>Mo|XGSye@W9nh12CApT zPx7op{gkOs{Zl}dsyA4&FZ%pWP``k)LG>rs+ul1>MEw$df06o0nhEb$e@Mc+l`lQ9 z)Zk=k6<@$VNju|TmNsaY_EP3X?fd_h?NX}`3n z@`1YMuQGKm9O%*}TGWPtZtYTwx__WYd&{DJGtjHe7-`lU6!vNRENW@kuT@Y2Mf=9N zz8+4~9YH@>_;ri>~9Ic;4xrT(aa*N6zlB>-ASh8*NO*f z2QBJ1#bNEtiDp^(&_UWCENa8hB5nI5v+O5B2WwMKHmUNGA)1>O9mHjZ>xz; zP1JnT$-?in>wQ<1PO{3*_f@EqrR-U?L4PxEicoKB!{Lif)q|RUe6nTA%_6L!? z-uI)NTQ&L(E2ZAn$m^ZjjZ7I{-=;k-Wi*y<)1G5$vwG51jXQVEGHSyv?E|StZMa># zW{#ng+HkwpcP>-hhTFCNOi|?D%D!EzV#;X4Zfy=z)P_LlPHmS_kLSZ(TEQuXPHMwF z+8m~6K2(S9)pko6wc$Q(%si4b+OS7!WXg#A9<7}zqYV#OWz>dmXb(v}YQuxtHS-O7 z)P@JOHP}5PO5BDAwY5x98{W-+P`jKdqYZnt-Aqv%nnU}v+*1uLG^ZcY9uSJ!@NMli zrl<`!g&x&TTWCm98@{8tPb11`!*{jQnKIh&U2PdtMjQ59Wz>f6X^%=hYQy7N_aZ|l zwc&B?@M5O84UcOdGevFqDEo0OTw~ayy!5m-o+)a>8=+^kCzvwE(hsx^v^mFkp*B3H z?PiMF;Lm+t8^6RTqc;3d3!ZN1q`dTk*20w0h8MJrOc`xBV3koDeyqJC^{5RmYV&a& zLiVT)FKYLm#T2*UMQsmL)CM=oe!-N{4+piwOi>#a=f0xtINQ)d{qS?G@f?GqHoT_Y z#1yq*Tkh-H9DGM&&WAU&Dd!Sp^h3AyO{R=CbZh&WGTQJh#H${mu+VH+MV3koubNYR4C{soo{%n;|8$Qq;;xeNRA8NbS z81<+hKGeQ^K2zL=54G(~Q5$Z{{!sffQ$`#9q50R6B(4eowf?XAz7=unwBGu$+7C$E59)a?yI!5?y&3iVxSCe#dUaA- zsIONaVNp*+{Cd4bJsU~acUshsBU$<%4a&dC^-3gL|467KI#I4otkb{J^*X2^Q#YtO zR}-jmrYO2^Mnd`=gYs|n|2C4VpJtUkmz}GxlCt)+t8)74%|iXoLlj-({RQ6^>8cB+ zY+T2c_robTI(}{G*PqL$zw#H-dg?K18KpX|&8GHBM#nD+#r_RR9eqRh7bLf$r*%WK zA+O`NU!FY1S~#UquN+rh9oNI2e-Te3Vm*B}tQ#71ob(j@$MonpkGb+ctPSUZ>hb@I zP93LefBr9O*70=j!2dum8+~NN)`*7TxuIXj+1I@PAuBqbrR(?~wWZ@JA^aZfG0n}M zJZbe7?pU3y8>VH}4Rm*!R z_^_ANW4-ec=0WkBbj{zY62s zj&~>C9e5AHJBXeA33#{T-HCSx-eq_PVWkr9cDy_B?!bE#-a+ie$Ku_NcPHK*c%O)O z5PR#B@ovYv6YmbZr{NvME_oK-?Ra{ zHjUv_hI1J%Vt5wAdWH=Q*E8$@%)?dZ`@R9{k2oVPQXi`8ac%q$zzT5ae0i8gR;B`8 zr0vAheV1x`1m3M~*7h^LUm5soYL9k+IR}_?KpC7g?Mbbh`Q6O#W_~xm^CSK^?KSNX zmmcEMLtJ`@OAkqDRQpgn!ZJr#<_OCiVVNT=b3_?3*K3)2rbd2dYUEX>Mm}U}WGho6 zTbUY3W@?7y>a^i{F3S%UNVSG?t)X0NDAyXwwT5!7p&HeyVEGERGLi9#f|JFGTz4YZ zoyc`3a@~nscLvMPVEGwrtCl&n%&8R)`CQ8yYFR@qYp7)nbu3@U@^vg<#}*rz-^lz% z<~ItT+TO@|8d*;x>uF>8HkNN=`8JksW4qh9bQ_m$>BC z_p#(YmfXjZ`&e=xOYRd%>cRaizn|szv;2OR-_P>YaQfT2f0=^%XhPtZkF$6`EHi)X8CTG?`HXTSpFTBKg{@H!D(C_=DLTu?qRNb znCl+qx<^?42+JQ~TSr*_2+JQ~`6DcUgyr2j%@nszZE@?QKbJYV%*hoFjl*1>#!s$J zJ)Wym@8s$f!$OuXWcfmtFVsoCkmUsY>yCCjg5`8JkmW0^LV zX=9l-mT40iihLXE+{p49S$-qSZ)Ew6EWeTEH?j{KS$-SKZ)5pwEWeHAx3T;-mfyzm zJ9N6o;VkWEu9wqxGQLx%I~|B~C~Y@$b~9(UPIosDKO=n)^Y<`+5A*lvbk_rwR;BOb z(tTXIk4yJ)={}wAeIS{0()Y8>ewNwKGW%I(Kg;ab=?(~z+@AgnOFqMr&#>e(Ecpye zKEsmF=yV?h$v>TbfaMRc`~j9f!14!J{s7A#VEF_3THFnBkmb7tQro+^RyWt`=33oc ztD9?ebFFt+{vEb*i19;$Q1$ zGgy8G%g87x18gwQ9LmE!V1J`8u{z$MSV7U&r!w zEMLd+bu7P<xkC{6?1F#++@;*(MwsSKC;_HrB9>HEd%I+gW})%Wr4-?QC&7%Wr4-?JU2Y<#(|B z4wm1+@;g|5C-ZkQe<$;I3ZKT|PS&%N_3UIlyIFoW%kO6S-7LSG?e1pz-7LSG<@d1s z9+uz3@_Sf*56kc4(tTXIk4yJ)={_l?alVhW?PG2GS$;pu?`Qe_EWe-S_p|l=EWe-S zpJDlDSpFH7e}?6sVfklR{s7AyV3`9fbAV+Iu*?CGp?PtDbsl8-gDiiL1HSB^oAWlVJI>9?bT3I;3;2Mm zJx9|XaCM?|gT57|8}w4OnZMWU&??fd%OQAkPOh7BU9OvET&|n$K`4ZV$$+FY*G=~t zRIttp)>-H#ZMkl`mw+_c_W>YmZ1VR&8+eFq@4Q+fd$-K@Wx^>?%WZa3xXZfI`Edxx#O!&bUs zWmn!IwsMHAZ05U^y4gy9SotKczt-yY_U*v;!x@0x-Vh*tvpP~cpbzLf7c!cR zz;o0cfGgCifNRws0bA85=zP~Zo?&g-6xKh5Z7pMb8RIJ$?-EF!>|%Tump;Mx6O6yb z_*;xCjXYNx$rmwR#P}4(r!c;Z@nwv6G2X@aF2;8;{siMsF#Zd4^LME@Rlma2LZT7{0|2Po~p&U^s>0GKO6Y zcQJf|;ad!qkL4LoVYrN87sFi)pJ4bF!*`~9oq7#tVsuCSkFyu$T$Zyx=jS=U&Urs) zXy}yCnW0NU4~3ox9S#l2t5cfFH;P4Gv@cufPm48G{N?>h_dPWYs&z3@v{Ph!UD z>L>WlOUJ$1`GBwD^h?JXPyyiUxX)i#-FPBJSHHq}n2u)xilO@|;2w1i<2!Jdw+HjN z6z~?c4e&N~Dc~-331ad*B)#fKko2k-A?Z~wLDGxAS+WiAHAs4KSNJ9H^w*H|sdpgh z!x>}=;2}u*)CZ9Csl$-;sgEG(S4Sb~M>iG&y0sEOzg7yEsci!cYL^1$XqTYf1GK?_ zg^)~BMUYHWLm`=_B9Kf|6_89*m5@wVVJ&(3 zsKt=XP_>ZEP-j9iL)AetLoI`3hFS^947Cc9nW`C*nQ9#*GgTWTGu4HV%v2j8nTh-2 zF9qBJ$t-m_B(v0ZNM_;tjS|2ekjzpyK{5;X@?8pe8zfJ}8RjYKbhTWqQ(rDF z{q{ds?;;v~wMuQ4woKcsU8!B8-KO2HJ*@51p4EP+{Ze~N`$+qTmW^|TQThaZqJDEF|TrT0QdGM0u>POl6p&yeyADbGMTwIl;$ndCAdN3SfA$Jk*zSt6e$ z@>!6lwq{`jlYBtr1CXazAEEn5{XSB^kJRrY_4}YczGQ%W7wZX1y`aa|4ULh$DNqI=hL!v(<`a_~WB>F?p zPhA#LFR`6m(UU8Baz#(B=*fj1vX>`vc_No5a(N<`C-(BhUY^*?6MK2Em&STn9ljMY z#zkMz*H`rQ6@7h0Utj1W`}rcDFY@^!pD*(HBA+kz^TmF?*v}XH`52w)tS_I`;@5o) zKl+K@exkRZ==%puVzFN=_KU@SvDhyb`^93vSnL;z{bI3S4EwZyD^~67M~V1R zB7T&JA0^^PiTF_>ew2tGCE`bk_)#K$l!zZC;zx=2Q6henh#w{5M+yAMhCd|=f7ctY zQt_u${3#WGO2wa2@uyV$DHVT8#h+5~r&RnY6@N;_pHlIsRQxFwe@exlQt_u0{^YPf z&#_;_#IIrE*D&#GnD{kJ{2C^H4HLhHiC@FSFI;AEz8WTe4HLhHiC@FSuVLcXF!5`c z_%%%Y8isq^L-21H&t9d<#lLd#uUz~q7yrt|zjE=fT>L8+|H{R`a`CTR{3{p#%EiBO z@vmI`D;NLD#lLd#uUz~qhkv>7vmD=t(`z{X(QAbGI|BaFYoyR4#s87;pI)PdKU(;s zrCp=ZE_#iT@-b3AM#{%XyT_p2BsWgv#);fGksBv+<0L-g5Fe7CAo3GLeuBtP5cvrr zKSAO-0r8}ICrQ1Nq~1wV?rlGHm%>YXJ0a1#1~>Q9pTlcfG6sXs~TPm=nRr2ZtS zKS}y=68e$!Ocp(pMbBi>Gg zRM9t8^i36gQ$-&=-%IQDRE#frO&7h>MelUcJ6-fn7roO(?{v{SUGz>Dz0*bSbQ!nP zF>dKKQ}oXi{WC@XOwm76^v@LiGe!SQ(LYo4&lLSLMgL5h7c((0=rvpH%oaPd#m;Q8 zGh6J;7CW=W&TO$WTkOmhJF~^kY_T(2=HG10KYGm-dvnF!T(LJ-?9CN>bH(0Vu{T%j z%@uod#ok=8H&^V<6?=1KzR$&cC%f~+?mV$OPwdVUyYs~EJh3}Z?9LOr^Th5vu{%%f z&J(-y#O^$?J5Tb=JmeX&zd-CS5c>@N`e3&j2cvA;m< zFA)0+#Qp-wa|@8?$d85M$3pRAq4=>-{8%V{EEGQ$iXRKbkA>pLLh)mv__0v@SSWrh z6h9V<9}C5gg_3U<%DTBo{8=RaEE0bfi9d_PpGD%&BJpRD__Ij-StR}}5`PwnKa0el zMdHsQ@n@0vvq=0|B>8_4@;}9?M*OM~ziPy<8u6<}{HhVZYQ(P^@vBDssu90x#IG9h zt492)5x;80uNv{IM*OM~ziMP%s*!bbiTJlf{97XaEfN2gh<{7Oza`?|67g?|__sv- zTO$4~5&xEme@n!_CF0)_@o$Ovw?zC~BK|Frb#sZVn`gjJdYvWyo&|sDb&k;Ii2vun ze|nuO{BwnWuC(i1w2NL#rF^NBFO~A8((a{bH_6qDT)oKEi(I|P)k}Qp5g(FYA@VCk zeuc=d5cw4%ze3`<0`a7JQK=V|dQqttm3mRB7nOQZ>4zx#f$Fc8`m3e>YN@|k>aUji ztEK*GslQtKaW(pp^fZW`2GP?XdKyGegXn1xJq@C#LG(1pcxb?Qpx0W_w^sD66@6<( z-&)bPR`jhEeQQPETG6*w#@AYmFM2hJ-X_u8Bzl`fZ5v9n(6tQR}$#m;)M zvtI117dz|4&U&%4UhJ$FJL|>HdYOOgG5_e*D)w5%UaQz^6??5>uT|`|ioI5`*DCf} z#a^q}YZZH~Vy{)^dn@KU*=-lQ?P9lG?6!;DcCp(ocH6~nyVz|PyX|7PUF^1t-FC6t zE_T}`&$J`Yko^r}e}mZHAoe$i{S9J&gV^67_BV+A4Pt+T*xw-bH;DZWVt<3!-yrrk zNS@n(JV$)A%1j-A06UHhxpMUesqW*9pXoa_|YMLbci1v;zx)0(II|x zNWSfmbu%vh#KoVu_!Ad@;^I$S{E3S{aq%ZE{=~(fxcCznf8yd#T>OcPKXLIVF8;(N z|HozB>=eH`#jj5Bt5f{y6u&yfuTJr+Q~c@_zdFUQPVuW#{OT0HI>oO}@vBq(>J+~^ z#jj3Tm+0_m#J^4A-zM>IllZqu{M#h{Z4&=BiGQ2KzfI!bCh>2R__s;? z+a&&N68|=df1AX=O|ouol67;l__7C$$OpPR+c&Fp7CwOP*Hwo3i2Qh%$| z-zxRDO8u=;f2*`}tJJ>}_33rD=(!tu=yk8q_ln+op_g9w3;%xM-!Jy=hdp{dAmtB8 z`2$k^fcWzO{2{pqMeae7dr;&a6uAe*?+4*G$v-Ue4~zW6BLA?+KP>VOOFJJ%JE`7Y zskc|^?Uj0arQTktw^!=zmH6z%IM}Up?_J90y+;MS_o;mE9yP@K4K>31kUH7BTP^f< zsalk;#b*m-uE6IG$UTV9#~}MEKHq`7%h#oHd=IJ7_?+R}tybf+5$~biHh z?(>e(1K!DczIUEJ#Cw)L!rP#q>@C$7dbg;IjN$rPe9p=kqhEo~FK0~FAH?U28T0g4 z@mY|0mhSRxQO%hR`e=MUmszT>#^;!l3dyA^gZo#hLZM})QrFLYMYG{i# z;iGnxf#RcfgP&3!J*S86AdVOPiw6=X6mry}t zLtBR-9&I7v`3tTCJ(JDi|^l89By~9;0f1(yn#HQAbw#YDv0=HY>1ajVE2qaA8>1`Q8e+|@ zm9wMG(Uyi4X3<>k!nw_D(U#`=#>(25@oRfCn^&3=&dPI9+Ppp>XtEwLuy%(`%K zv^Cb=vLf1ADJ{2076*E2%j))~Xmi`l3s*$fQ9PE~0`u!z+syJ)V{KFI5>*>ZAUI^I zb!m%f?bQ0Fs6q>tH#A4tj_C(ED1As6O$5_KDi`K9qu*N4Q(R9blNrew?Rg%^{RDEo&Ms`n)1i!NtY^ zn;&aly*Rqc)N?8(5pqatC5=V=HYd$RbI=(115-v26bZJ{2)G(-)I zHKSXQ+@g&p*Pe`(D;rI&IwjW7Y)ZgaNqA~OLu)HsTu|TKuqxVWxoJ&5WlqRb+Z!8u za&3;`H;25Xp*3dNawIe)T3RlnwK3C?&q`aN0~y>Zi< zr$QCsm~<*iR^ybQ2{O%)ovALwSy~i#Mz!HgDhA$C+$mL$U(Rg@w-#_6@F>0qXog%2 zwOc@~fOIXcvDX1tO~{7?fC1=MRs%~kAAlR6bNwTGUt$2TN3 zmpt~yjcev!_S;VuKGOHH66GpVn!8BT{2qYpJVFBmbf#x|i*&s(XFWLnLSK>YFU;xM zj1qs&dS6~n*Tq_PE`45x&kUyXvisp1QNl0N3_MHtg?b3TwLlb=7*roAD{@g;NGF;~ zO*&i3hq{gOkc&7ZVRJ$v6Y-cbAvf_z%E`+UxeBjC&O=<1OyuT^Y!!Y%nEVR4pwkob z5}%}#`Ta${+Mg&N@=*!Z=vm^Wcz1o(o0qdd3oCaK-86}(m-BKK;UkPbfn`0crRU`= zaSWd>0#f1RC4g%7xo*?0HTNeg{j2QCX|NLjOH<_ zhttBTMA23*52qUq7eWuG7o`$M6htDNVFbk@^>D_JR8pD&m_U$MFpqflpCj#5|yf0~Ni~hF%DS`xqURq|YcaItVg)xKCy8 zbfU{39}XJ*nWWV$H2Ra}^l-4Mcbd_|TqB%q41grvcCj%4L{<-HkLsO%3<*F=NT=;hgH;S-~i>YK23_KufZdC}IpWM;$#J8rwTt7UCRs}sGR9{@ zJw2T3PDlFjrgPHqr%S3yPqz|GX1XJ-1kw|dNiaP*g+Q6FZ+dd}z@iZLkqvm*uV-nY zkuzYNTQH!fM3I>;;Fq+ru&2~etB{P%r8 zFkCB~O&yb@5*;IjmAz4Fi&H;J&2Ub*r(*P@Rb15@)y@jk@mB3{h&n#WZ*;svU{r4m zBvzrZ;?NMzrLmG^1Y;#Zq`Eg|k}G+6EGZW@HyJ@qGd2~poxo0umU0wmeS*4fZZC+J zP8%&_oky`A3c6hOX2alT(oV}j!!8K9@`G--bNgYI1!%Kn5@9z)-3399Cvj6^mj`Lb zWs_kKDtHD3y;$fHw<}JW9NKs}8DTG~d5eQS>_L+^Gl_EjXa|q?sfO^admW0|ysy0SSibPH$B}F2qeRQH47Od!J%`ttN4>@A*7jU757{S zQ#kCbP~AJ16PGq){wFz|C}L!J%db>REX{w1K+h#Mh3kn`#`eznYq0b`_O2acu1_pz4 zz@z*=oOaL|5GZ)17Z#H2cPv@L=pcz?QSL7+q~oNJg6|<@gbB)X@P+OJZ4LV0-UUjC}*)1^YlsV z=$T~4Wa=RuQm|w)#Ezatc1)(To7 z?Ixb5iDgd?Sxzj{xdv<}vc_hS?op|BRB`=Z-^$^v9 zAISyci8qftNiOtb@0n;?rx}{!xG$ew>Uj((PWk$hQ$34O4L5rH10E*Di%SP3Z6c0f1gyGj$|AK&s*2yi1;W;lkQms~`K;fRp;EU!QdJ zk-di|s5W=r*t>u8!t0xsx_{E=;`K}Jx$dg_hQ0S`_D{b1z)5!pj^6#fuMcTF|H^Uc z^Ivv-oI7W2^Zp@cU3}O0+2Q8Dtv_(x?)r)9(SJsNUiji$FZ}keE2@6DYtYoKOTJd{ z=b;CNqC1;RF0u{Lo_!j^yb;J&NP- z%9O|FB(qq#y*XW1>fV6MJ1~$H)O5L+3WilqP@QDYiDsV>^>pr#dt`%7D|!{hCSs$pC4k$*FHT3 zgJExV(4Pj`)F-xGi7!A zdghB21jFfbf|*$AmER0YGCi-UnaDYYeEvGh`3Fr0Nx zuum|h%GB2%y;mFz2bKkc*}c?lTuA&|+JoUf(O`B?FAbO%1OKjxU^sYwFelVYEB0Rg z80_G;1!BQaZZAzacj3ooEEvvd3+Cqa(q7`$`Is#R!=a8~Uf*6CP2TDrkJ(^27egIO zB~DJU^`x)PLP4ZxIp#8xGtx46=INH5p9_M>*4RIpiPxE-2L+L_6Hc)bQ*?0l&WWj9vwv9#=33#AqOmc4)u9CdR!3sJ4GGiEGktkBT1hWL<&z)&pd`o zRntt;lY>a&DeBtiPpN9#IeK~!Sv*C3=dn{N4bBWbJBTcvLPz3RQz|Wq>3LodNj!y~ z}*zUgHF)cbbj7yp-~IuXLNoIK9(uCgl}D zr14(qw@+buXTeU$tAj}5y|UpvKIxqmXD(hFLWVs=cWB{9Qt{!F1KIX9-#l$>KZf2PotIxD8qm^#yP{_K@rBPaGw zvyp2#fA&hZnGt)Z-ORR}KYOL$&WF9TVCP%TpS`l-%!a+Q;>@_5KYL{-F&FmEQew{K z{Mjp8$(gWs){?VsDb7`T*2MQb*2O%1Sr+!OTo1o`%Hi-ur$bPk&u;zMxj0C{?R3^I zH>~)JTiM}~75=8y+T9v<`HNY{&ersXzlBZM)tV(?H-F)pw4=34!yf)-wa0g^PKmI$ zJY_U^W$6(Soay@g_@nkNKtGOO>BEm-Iy64fY zbzSMg53BJpaUq`>Pl?oO^se6ko5ohhnqN1sdjYWLRdutJHp2a=I(Up}LKbp#{t{huAs(M`2n93^r zIq^A~n(pLOLQhjuLt7EusC!~j^~#a;t0s&cwW7XiRdi)^WYzNM@~V+5M@|?wdhECr zqgG9*icT1{V!}AwDoa681!xd?YB_4&f{$?IX(~hRZl;^A-L);aDW0Or&#I9Eyg+U* zC*%Z!uOrY|XiRLw0z5O&fG3^s3;t#>- zC{btNy&cXkPQIo0KX98dR5u>0+GDxXcq$BPlWW&Ri|C29rYN3hDr#L5Yj0dxv^-i= zUt~WuP}GKpaf)KAit5*`Yl*FEX~5GmMfK>^j!JD3Dd4-f4Jq6n&QA=HxUFH?_@buv z*0yBDm7m_Kzk2sCUb^Ow*`J*9Sm2unFTU}&tDf}lEggQx{rz2cy>su7b0$tK{lk$A zf2`{Vmv4IH5#L|V>HEg>({m5jjsNlG4fnVI?fg5Y_PuvY_lK2}S51EL)&1|>yQKS- zUqw%R_2*}m9~_aj_^C~=Ty%Qo)!X;~^yur~|3g9h{=d!HxIE)K)t5eeOTUVod)6QX z>c-^*`7aPtw-=&s4b(PCso4hH+!GzBO9cBazf0ZSW(3!<(aR)m7!Kjn(BF z8k)zKZ&)|Jr*!4ImCMP;|Jz>U=})`KYcb(PCYAU(!y$*?%0Skf(b%}49uJ=IypBfs zffTCqSqXH|532p|>;L))Xxvf#lGeJLpO4aaQ(k;UrK!!!mnRUFX{$b<6nP?rPO@Y*Q&dYp9bl$o&q7?7QmYo@F|9`!(w<&qz#jY zEVbZ?6@t!|%x6E$2+ZKG)u?WR?F~%s3N8 z&+Pnr?W)D^lxp~$ZtB^U`0A6ML$V{3s^7l>|0*Ff6aEyzI`uu--N54jn@_bz&FG;s zx#vEw-zX~P2yWm}HV67!5#bY2QVkzRf?kDR`5TKqUje)d6vZftk}AxED9?tGEI9#V zVl*VjL2?w=szUh$u1RJ1)nshj@we|_f#ThSx{c`7BFy5%kw*Sj;XRT+QSpCY|K$ka zY6KQmj{Ps2`Cs+_S4QCZli`-GtEw$0f5)3vcFCMeKF-p7`mQY}-v`!Rx~7fHs7mvC z$^$NafJar$_okP7HMh29oUXZdom@4sD&N8BQ9zTFd!r}q+LE`mYK!~nsx7Yjce!*8cd3nrI|p8PH1yuNEyHJW#12$t zS&nJ=Yot{h*dx~xH|~pHQZq7CmF)%L52c@BJcHd9YaSV_3J}v5@-2?8Y>G9n92u@E zBu;uL^|k)U!BvB(+!g9)U(MIzcNT`@Cj^?-6`eMHYE?KtYvkCf3031pjvF(6%-FL* zj(3n%oA>@#Jj<%eAkQ*F?ga}^TRgI~s>C3}&C?s!;S#)PM$OEknKh@LII?>D^x@O1 zr%f0>s%q@mktJ2dMvDqlwn$C^sZ?{!nx$?nl7XP5^<&t0J zzrE^vO+&h}5AJ^Vj8MhwiysJ%8~ejsU;AcS+c!R4wd0$w72bcq=UOx3(Qn7*;Ex8p z+12G4^wQODzSdpxi);V1WAvg+uUxqK@U$&QyH%`0tC-?Cf8d&V^SJk&Gx48Q6uP>gpF8xnaKDpqNz2y%*J!Ws8 zs#>Z)$i1LyUe(-Pvvm$~!Z6NLlT$$4^DzuKU zx{<~u4@->7N{CdQ>Gfk)dOSW&bI-3jrD~2zSLv5b6ayPJY)EAw+VTaO+p0q3Z;3mz zD&17+@;iqMCM1Rn{#x_q;g=VDe0SkhpVZB|v*fd{e(AEn^-C|lXXpt9{~Y)6LoY0w z^6d+++51QTppQ1a@Qvti-u&48)$Qfqn)6}P!6O&#-?`_!1)JaBcV7L#Cq8J(`R2tV zj;{Oa|5x2v2Sl~K>z{$4Q&Q>ffju-5(kVzc(j}!xqr`w5KoF!;T0#T?10@wuN=lFx z>5!5TLE^UuMLC}Q-FweH_v;_%+QaM__pJ52&-;1bwTJwym*?v~_`J)@JZVlnXjk2Ck;|p!KP-jBfOJxqCzU=l1Z#$KlO!DwxQQ{ zuyX-7_MZ?k5x58+00+ekDP+QMIKcO92m}THBk%1eA^WDtXn&x{e<@5Osy7$VE}6AZ znc|>}PWKbUb~jDjoX^8YKV#4!KEN>+{>0uzHPgQ)wN@uowCJOVAo(m!$(K^cQEXtf zigw)Tvr4LNl2Qv(c%>nmKy3nCF`ckeN{~WhQrl(dS%&z#`lDzg+%KsPxkL+1>va#tl*e_@2RjbwOB8S_b3vr}& z-dO1eB35ju?mWSw=J1cJUB52lDZ<$2cWtxk>6JT;@tcTHLBw76T2%gBozNS(EOo`< z7biu{Sf!IG-#wjGxZz!`$%m@AG`&Mt3)S?PB~J7Fa3cxasFqE#ZE-A27T}dK{k?^X zc0#SvXXc#|`lZ6m?-nl>HJQcGbPo9eTFAwH3JOY5o+2O*|LOA)0Qito37v$Ck55zt z;ODXx77?_BTLCaZYf)R606$y^CSomQ0TULmun`jAvj)+$)vpw={nUJ0??Z9}NUJap zKRNl+^Qky=fFANi>7W+?Py@3-4Gfk4|58A3GJ{hY6h1RR1jY{sLmeDA(mMX^ZO*n4xTA5yI9C7SeaPpyX z7x#Nj^Xg>fDd=+Ql*-E7B|aAm9kz%CF6(Vz{4^FBwChzLiNV z;cMt&y*iwGBZQ9_74?#}7v!#Ja^*@6yRuUWGatKT;Z0laFQ|jTyiBpTxAkof^ZFMw zvEo0y-EZh`pqJm5RleY}VtppSTz#^sO^7 z>)h6mGvsJsbc3Hk8pjg{vA+jDI1J$Ws$tCEBObk$t1DQW0fUu;tpj*75*vDH4|jW4 zB&j~KWdI<;59i|p3j%zgn(=)b@*#)+rqKSCx2kY6G&uuU*VCk$)6>hOcxpRIQoVKU zX#cqAc#uR+^nU!Tdobk_-YmYQ!*?%a)S3F-P(}pxal+e5>6JIv>`T;Cqw;HgRIj8d zVh-=KjAwX+broNg3m6C**{EF?%4;=|A1%8t@t)m2iLxNy?W*2Kiumb$!Fac7iRfUUSh5U3+0nS_MIN%NLKB6 z-(r<@g)U)nkvk8)O!6u2M75ua))RkTf^CNO=2*fmf)Zu~5F(X<1OhpPq628)Unk`2 zca;Qbi)jdr$w^{lUy*`MelxK=wZFLHhy>p3Bs6O(Qvw!L&qz z_x!V*LcR2<%hgp6Kl?mVcH5R*ln!W{z@uAi+csr1%do-4%9LCe>B zUlpOMzn&nI{&8b4e7&=fYoIrlhAJ<|YqmLD+K1qC*~?2H znf~A~SCqqD*TO|aU~?;FWGiQvm=)VbB>tl>ol14jgx-9&cj9T2RzY&Ju{av#Td=zO z0&>(VL}ZjGrelJ}44uiZuvcynL|$+vAW@gN#-Wt%*0bT%_I&Abu70fk_4uePDkU_d z?XFxq9QS;oWf(6-%dDF)@uq9JxE*3gt0Ib@+=iAQVvOjW^`>j5Lf;#T1)nD9!#7{J z$LS*Ol;C_JVUxN)y)#i1piqrzu4rQ}rT#!>NqxD}(`OJz0Na^55KcEqpffg;{bfdx z=)QIGp$0k6wR&_0-^m1NHiyQz=!Dj&!8C?ae3SIGoYGMHV7yDPYEMTLn#B9-e8V@TH+*8A<;u&4Xn3~ z5&!}N6V&h3WBn!v?*)ncL;Y{)Hy{iM0HA;i@&lqs{e~Y6`2pnc-^=&^O1(3)oyx~Y zlwvurIr5yDsGXc@PSIr2xZgQ;TAi72rKh0h{C#(T{?rG|ew_p|<#;NY*wSPZfOQzf zao(?XDIAkZy#`>lmHTRz1To}#boO*8db0+P!s9pIk?Cy(Y-4A4- zIXicq;_L?4M-{Xmgm%xcEAX(DgkI3q!kb3p{&FcM25|Xh!w|^W^?#dGInR*f|GAfB z1M7*lv(`iTm`o)U6-C=qY#g?QNz-pIf>d&LLJCePl42t=LzZ>D4P25d)sLhkWNNbox>gU#uxOs$Lf6#RPTa6 zQ}5r+gny;pMBhaiRBuqvQGlRiq_#3agJOW7s6f)+lizHsJd1zaULc5k?vrP$WaZyK zf7M_UlZ40SKSuTcR_+d7YoerxMiVqSp|ORB_q|3seKge|VXrzq!N=@olml>o|PtZU@ORBxsZ+0(4!_i@MYw_?%Mr&dp(Xa*jOtCjGfdOiI3;4!DXZT!PCDw`K9N#NiDblJOTf7Pr<0swh6F-wbFL$ zC!hM_)4rA*t2t>L0vKMDmaP)B&UA=1+*jPyU9y!kJ4@FeP30B33s$K&UtuC<^~4p| zio9Z^AWK?PS@}TCt|e3EFwln~@D3SZJ1;|gk+S6uBSW|B0@p(IrcwuY-ymP$c~(v( zW;3Hjz16$#QZm}ky4D7n+u978Ux=+yC17QS(N)t7Gmjp$Sv~aDLGP31(I|<3kner3GAq%8awzr} z5)VdRzCtXQEaOO)`mEKEHiow!XfL#;t|-6XhS<1<<6duZXqk0cEJ*5va~u*h8=DNO zQDqPA^4>Yeqf74CN|L(|N3hod2==ES>;=H(_V0m-BmDatZt{aZX9Yb*+O=<#8XFCc zcY-}bLBRWiP2<7|fRm4sAM!~yOaPEYrmRq3MQvNPJssp z4OkX;Am`sGpnfZ0W`o%8n@Rg_?~p9-WK0DCD-;1iVQ%S`FR^__u-ENw;gOP8h+3oX z&Hjp6dBs7lNFeQzpTJPqsQbBE8LhaDfXVJWQJpekxb=AD9@7!yhS$hs5 z>3*!Vvl)eL*9<;}y7LKz(^|XL4hKGBm(UBby!`@|MhY4&!Bf;o68J&Ov_N{h@L_%? znPL%nD&c)`l{VQzR z7+!wmgS%XOQZ1GN$y>!Zcjz| zfD1^7iw#%0u@UdDdS0?CI5mMUY-Ocpqb0kcVpn{1dq_ll5pPSOg5$J@nE^kggDgFM zH4%pVgv$(*j#hoz6vkwEh;+x0e;|NhKC!l;5IBMv4?KqT{aPanR!lnpf@uq!J8(ke zB{UCJg4m!zQNiT~n4DPE&@3bz`op5t5xzL_Tqr$?ofuXrxeHoIkU@&n(8B%8m2qb) zp~6z^TP#>YFWYn{QK}f1OdnK3=hsqCJ#{&TAQgA z8mN(qZTp7oiJyX>T@8Ps0+Y^HG94qnvwF{#U7-Iur>@_5wTShGj}>pU$ZkHa#HzZf zfjbuPU?93-EXk#_g5vQjYPkaDHvgd6S@=`(Aydg7 z`<1%aO5LH{rK1E4&l@5dSE%9)Nj|+43v@djrv2q!Js_FoRjUjjEAntxPRb-$4 zT_O#lx``HQ>)l^?zBDP?k~f6-36+^WyCLUiGj2GJF7)bXEWpv7$6J-M2;wm#qk9I zDT*$j4gSx*)yF`Ja*Uh*_yvwjVt?`y?x49ihE=Fwf7poYMWcc)3r)$q{XhV0mtCJ zmjyn1Z&;`l+B{Li_)0Z&cF}eakmj3}R;N|0X37sp#qb*6tOr(!vn-fbtm!@-6;wfo zeQ>d}su8TKVcuyNn`>G{W7Hr;f7Frru$3M1$@p9I;(6GXbo{t)_q!9?FFYIOe;TtLnME*Rn^2gt z1C3Yo=zo?ZcL!(I79BDxxHZ}pon+&>w9%}6%_i4_A=(7?EKX)azbN-qHk+zu)f2f( zz@a;Ou@L2}}+kp&w8l zcCh2qoO*8@kkGJC!F{hv%&f*{qQYJvXZ%V*r$dEB0mUfkA^;#TeL+ZWc??(xVtS84 z0oqTK1qcfJM`8g8!N0}=jvuk$k16_(r~n6H3>XyzMZcmLp`#%j>~jE7%)cGA5U9WH zRX|1dDxiYB3gDW%x3=p>M9p)5(4`nbq$coe{jmWiN0X#InSrXO3XWV4@;w~QtpZAU=t6T$36RvcIS<=CfVeh3eVn)SeLk1 z3wqzpvLb}Nk&62~^$rui-^3?hnPU#WE{nvgE?#2w%M_Op5uKVIdycQ$d*ZWClrIi0 zFU#Hz9`dX33#A&8ERQsu55EvXxt`5yI2|JfE9Ez6ej<6m_ofm}qP(IkR>Z$IBanMb zUGFx7AWNgDi*+v<_?Pr?0Y)Yu9;8pn< zWum486=62gKvr2x)u*dECz?&Tz@%Jrx=QYv{PgoiH{bVebIjxQ3MtL2FR1lLf}@ty zl!1bKx5k%@Gt2hI9@tJkPYUu|e!HwXr_516!hW~lx?SLGgr&Dx1#ifJe!5A$7d!jM zW#>lrXzpk!;S0|vZpei`iaLO=4=EkSckBKVYIrV zY80}Zl6&934U7Cvq`*=t3Pf7v5qE){sR3KZ2j@v%mU}sU`F|tod z(bXpw3tqu{n8F1BBjhj8LBU7_T*y+(QVmu9`-K8<`GV^fWcgsp>wB;>1NhDO_>O|z z#pB=x20JZ415iI6gTYSb@0ASxC zd5<7u3pBEY^y}9E@X*uzB&bKx*KR#DKl#0m4<*l=L3caGG~C2f6IQV)GKtrFeehzQ z+nDiiOMY&2>v0Y~s5>{0(J4$3 zn_Aru_8q4rF?l%BW+kZd`ySDF#fwfZShvbac>6MKkX*kT;~pHf+0Kfp!1*GAs5-9* z9WQO!e%GESA&c`Ir=x+g6&<#Ni&1jobns?F^o9c0yFIb)TESHpmeQFrw&m`z4T7>1 z_M~Jr0twu8tnjyVjeMsk*P3CS#&;eni{iY*dGYdo=}g7Y2w9k>ynzVc6*kI%@=dnS z@3_y>J0w>ahTFTi7CdopltRb23*ls!M4Tg0v&C(wRNI<}4xn}=yDnegIU~hsliO&j zWf|H?VnYi1IdDq1JFCDIZ%^i6|wIt{a7;xjZfZoV*vU;LF~eoJ?O| z#$BZZx_e&~nF6=&e6DwVqM9`M!NZ$!X;C=E=d|kK+e#*TkJ+-_y_+9!0~Z~{%JzU| z==odY;~vgdw%5Eidv=Tsg)>6w1EU(RFD5YUoidQNqmP4{YHk=!ZKx{{&cW<-ha%;z z{}3*zAUqiputO^j7#4_KqEfku;3d z2f8IrlVMp}o2|i#3Lce88TV-Xf(cS>G$pwrpArhDX@8vS`Cx;A%HyQJL2h}qQsl)c zrOWlDU!LMGxtaU(UcScsB5p$sL7kA zc+v)0cj6wkQg~!8OsLYvICA2@=V2CXZ;9o}oD*X)C6``qS-wvDZYte0|Al1z&)NUL|`v2 z0>TZlB6cwHF@y8w+o?kganK-Ohs>{m2$ViUZdE*bmpS8&VeSJ?uba29^wm>*?@kMA zeP%PMCadd4#n3;v3K>6lngonEClD5opde@iF~JuIM1^c-1wG9Jk?g?u5FqhYoqcB5p7C{wi#*RU)%-S?uCSkw0? zsg00PlhW)VOvjM43)r%4KueVKU+q@icbQ3TD=%F4<-~!n4Xb0^ejJ7+IPXpUU?JtT z_#Cg?vx3c0>)JfXb9(GJ@7H@Z4Xtvf7s=Bh=oc8(j)BcAc%>%))S&iToi&Mo$85;@ zT~nZH=C?Px;jH^-y()j-p!R>#Ymc7KF|oAok%*5m9_UOx-Spq>%KL60kt7Cy0YV@Z zIx?sK16_H4aBk3;W*r$*WW!KU0uU4n1V#VKn+5?A->oGC?8yAuX#HF6qoJz&)tJg^ zX!CyiZnnSSOf|rbSU;R8ax3BAa;BKGVVd}pFW)Dh3%Y_Pk&&Ct;9B|NZpRk9t_yv# z=wMgh`3z9`qS?0f()iZgns@E1!aFQeJ2lIWI{H{#ng}`KFHf~2J2uUUBRo5#q@>eE zO(+gcb}mu~CNt})y06L*wUpHdybM?uzHW4mdOgKQ<+c_|nFt}p7Ozi`%}~)J$LUv{ zpW1v;TvY)%W=8R@WwiXnXhV*g$NSKU%b9#CZ2P)pya$hGZt+)Jnx&5DOD%ltOtFoL zJiKHXFxISsdz*Dqbm@%B6{`$C2It1~+#K=Ufa{5uV!ZD<_fDkm(Cmo}#&5pN$4Ly$ ztGz>63Y7`2dK8$(C_?{;WyX4Gd$Zo(%8-T7mq%3JGv`V%Mg(Cv`7?`xQ|+mP1d6GF z&E2mHx>v6UuT6+u!5%ktPiDlj7=EBZ>stG90%d#-j+qyCcH2hLd;W8w(!K3>ZvGaI zu3kk!?FHB+qSZ?;+XoR3-ComdR^5Qm27aLm=hP9cFdlBf*G=*L<*FFgY%**y>ODUX zF~?Q|uMQi-c1wx+Fnd*b(MV!NflN+o*BNQG_n|wSskx_Yfj8Cee5&JCep@LKyi~6k z$_yWsj>?HAXlxT4Z-16 zY&PotN`FCGtY^bQBX7*2-?@h=6N3R~7_1e%I8iIepikHH((PkUJ&HaVKS!T`SJF@J zdI7^LvRV9i*9&s^pBerCGEnu(C8wV<;-us$&eS$_Hm!MV=y|(=)fjEI#mOv}^TT-* z1$PnBdQNZC2TbReT+Ef0l&6h7?q1&C=quHAxm63Lvy(Wp4|hYvXJ0Mnsad1$8(C$j zdRg@F&*BgU#J&4_2g3ItB>WW7ZqJPDrj?u6TO30)-aO;HS3ZOZH+#N8rvYwvLH2xqjV>VPhyPDSmp?f7&w&50dTEZRKe!Jj;2kqVt>Nm!w>Ph} z8Q!krDO5mIM~_?6T%YB{tzoxQJ=pQ8f3&Hdw?D5!C~3!7sTb~?gk`kEM7rg}NunPa zOOb)Wu((mUNF_Ep5|XOA?MC(~Gn%dNFn{tbeRzVJR1ul^#ivP-0RZ<<=8~h{(2|jf z5L#ddIqcH&r~K9zMlL!A47xUy2IY$^pY1etql`RH)@~LTSus|O0-M^mW-ltLBceGV z8)b{8yOoEwcuRN$%A!p-!RNaz#u(Ev%8CE{VkmaMq~7X1mMq_PJ}HAwwb;gwTMzvd zecVIyLo)^$@%1lG6ym>RRY(1_fA$lkWIL(m>1_gwk&HL1cZD3X5oq2Zjx|5ZyQi}M zgA;@t7924B{!#WvBSSfjUs4%q4^)13KU3k|8OSBbi?y2-^a2Q~&kL#nf}Z{(*88Vj z8Nc2Br>>)YwEa&|SV0IT3zrA?X9x<&!npvBua=$h*Or}L`{;|I>D9n*c?LHR$~w7P zIi8F-V9x<~=cbWY;(7q%X~J*mp8#A)P)Ja~==%Y|ZwCNRK>SCp36|!;`}Y7i-%bD$ zc>o*y0e=4hD%j2qrj6iM)6<(@A8(0zi+o(@#IsT1U;+Dk+s;w$nuP;kA)kguK4qSL z{BO)``k&tM(UuHGyW-dJ_nQtUp9sCVzgS0;q=aaK4D{D;!MYZG{hNtIjhbAhMuY}0 z582Nw-Swe)-xO)-9O3ECI6`uLzMtJ1L$Om#oXaW8OyI2zeyKldkf4S#JTI)cJ5iEc z%&QWY5)eIjvey@c>vSve)eR%laTYiI2Lo*ecN7r|x~%A1Tq9JaTn-ot80#CU*th8W zB46g#zwaV*#g(z$D_3u_wQzcUy0Z67@L#C3jyH+D8B;_u%8S6S4ac+8DRnV zI+XYFilT2&4B@5`7iwN}?w3WUB|BVasVbwviQ@%=CQqCI6%QWN3j}omK^;I)Ih6GG zRxj9Q3Iqk_`Tt+MSYVGDb!n^;#ZC0jSC+H|6Yt=?rr=t0I63pdr~@(|6bv&?SUlTc z;zJ#jc}v!+%hyIn$=?(OyBZn=dbYdC(`=cOl1#wNx;Y(bmTzPE%J;fw2QCpXr9_8S zTd(^mW<+LNO8MdQ5NQ&Tr8Ey~h#Jr^zL)ef% zbM>hVZLG#B7uR}W!%v?((;Y@AI0&|a;W~{54yVt55=*R~9xZ1eaKY$m^KR&@)6H>A yJm41I)(#_;M6YDV6j6WndWl+C(2c)mfJHsONV}_h@rj)y#61`N5+u= From db4c1a02f4510d1f6ad846db5be1c5f017402949 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:17:59 +0100 Subject: [PATCH 13/18] fix build --- .../FSharp.Build-proto/FSharp.Build-proto.fsproj | 10 +++++----- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 10 +++++----- .../FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj | 10 +++++----- src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj | 10 +++++----- .../FSharp.LanguageService.Compiler.fsproj | 10 +++++----- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index a9159d9440..900b6d239f 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -68,19 +68,19 @@ - + True - + True - + True - + True - + True diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 1dd4578412..5d696c416b 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -79,19 +79,19 @@ - + True - + True - + True - + True - + True diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index 788a5cc0b7..e2fd82d83f 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -473,19 +473,19 @@ - + True - + True - + True - + True - + True diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index fd896a232f..8ce4ec3e6a 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -530,19 +530,19 @@ - + True - + True - + True - + True - + True diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 3adad14042..b1f17a6ea2 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -632,19 +632,19 @@ - + True - + True - + True - + True - + True From dc6fac4a771f830147a6646bd9ace8be58b3e7ac Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:22:18 +0100 Subject: [PATCH 14/18] fix build --- src/FSharpSource.targets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 207278f52a..111dc990e4 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -390,7 +390,7 @@ - $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFrameworkOutputDirectory)\bin + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin $(FSharpSourcesRoot)\..\Proto\$(ProtoFlavour)\bin fsc-proto.exe ..\Proto\$(ProtoFlavour)\bin\Microsoft.Portable.FSharp-proto.targets @@ -399,7 +399,7 @@ - $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFrameworkOutputDirectory)\bin + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin $(FSharpSourcesRoot)\..\Proto\$(ProtoFlavour)\bin fsc-proto.exe ..\Proto\$(ProtoFlavour)\bin\Microsoft.FSharp-proto.targets From 3f997a300a68afa91ca65ac56decce905cd39860 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 15:53:22 +0100 Subject: [PATCH 15/18] fix build --- src/utils/CompilerLocationUtils.fs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 47d962b9c5..58df295e4f 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -190,6 +190,7 @@ module internal FSharpEnvironment = // - default F# binaries directory in (project system) Project.fs let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = #if FX_NO_WIN_REGISTRY + ignore probePoint #if FX_NO_APP_DOMAINS Some System.AppContext.BaseDirectory #else From f33cc5140fcdf93c3e0687b346eee3f14adfc3c1 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 16:42:25 +0100 Subject: [PATCH 16/18] fix resources --- .../FSharp.Build/CreateFSharpManifestResourceName.fs | 11 +++++++++-- src/fsharp/FSharp.Build/Microsoft.FSharp.targets | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs index 240fcf6c19..b08ecbd794 100644 --- a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs +++ b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs @@ -17,6 +17,7 @@ type CreateFSharpManifestResourceName public () = (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 @@ -34,8 +35,14 @@ type CreateFSharpManifestResourceName public () = // 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 fileName = if fileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then fileName else Path.GetFileName(fileName) - let linkFileName = if linkFileName.EndsWith(".resources", StringComparison.OrdinalIgnoreCase) then linkFileName else Path.GetFileName(linkFileName) + 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 diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets index 849176bb33..83d1b15be1 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -221,7 +221,7 @@ this file. Prefer32Bit="$(Actual32Bit)" References="@(ReferencePath)" ReferencePath="$(ReferencePath)" - Resources="@(_CoreCompileResourceInputs);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" + Resources="@(_CoreCompileResourceInputs);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" SourceLink="$(SourceLink)" Sources="@(CompileBefore);@(Compile);@(CompileAfter)" Tailcalls="$(Tailcalls)" From dd0504e600f97498bce4092008fa51489281cf93 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Feb 2017 17:19:10 +0100 Subject: [PATCH 17/18] fix resources (2) --- src/fsharp/FSharp.Build/Microsoft.FSharp.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets index 83d1b15be1..0360705841 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -221,7 +221,7 @@ this file. Prefer32Bit="$(Actual32Bit)" References="@(ReferencePath)" ReferencePath="$(ReferencePath)" - Resources="@(_CoreCompileResourceInputs);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" + Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile);@(AdditionalEmbeddedResource)" SourceLink="$(SourceLink)" Sources="@(CompileBefore);@(Compile);@(CompileAfter)" Tailcalls="$(Tailcalls)" From 155f275bc6e4c54f04681cdf5d7e317397a49c71 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 20 Feb 2017 13:40:39 +0000 Subject: [PATCH 18/18] fix tests --- tests/fsharp/core/measures/test.fsx | 2 -- tests/fsharp/core/namespaces/test.fs | 40 ++++++++++----------------- tests/fsharp/core/namespaces/test2.fs | 18 ++++++++---- tests/fsharp/core/reflect/test2.fs | 5 ---- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/tests/fsharp/core/measures/test.fsx b/tests/fsharp/core/measures/test.fsx index 0f0db52faf..3ab02fc80c 100644 --- a/tests/fsharp/core/measures/test.fsx +++ b/tests/fsharp/core/measures/test.fsx @@ -614,9 +614,7 @@ let aa = match !failures with | [] -> stdout.WriteLine "Test Passed" -#if !FX_PORTABLE_OR_NETSTANDARD System.IO.File.WriteAllText("test.ok","ok") -#endif exit 0 | _ -> stdout.WriteLine "Test Failed" diff --git a/tests/fsharp/core/namespaces/test.fs b/tests/fsharp/core/namespaces/test.fs index cd98e759a8..39ab9b066b 100644 --- a/tests/fsharp/core/namespaces/test.fs +++ b/tests/fsharp/core/namespaces/test.fs @@ -1,23 +1,24 @@ // #Conformance #Namespaces #SignatureFiles -namespace Hello.Goodbye - type A = A | B | C -module Utils = - let failures = ref [] +namespace Hello.Goodbye + + module Utils = + let failures = ref [] - let report_failure (s : string) = - stderr.Write" NO: " - stderr.WriteLine s - failures := !failures @ [s] + 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 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 check s b1 b2 = test s (b1 = b2) + type A = A | B | C module X = let x = 1 @@ -179,16 +180,3 @@ namespace rec global do Hello.Goodbye.Utils.test "test292jwf" (N.x.V = 4) -#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/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/reflect/test2.fs b/tests/fsharp/core/reflect/test2.fs index 598560ecb1..6b299c21b0 100644 --- a/tests/fsharp/core/reflect/test2.fs +++ b/tests/fsharp/core/reflect/test2.fs @@ -16,11 +16,6 @@ let test (s : string) b = open System.Reflection -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() - (* TEST SUITE FOR Microsoft.FSharp.Reflection *) open Test