Merge branch 'master' into coreclr

This commit is contained in:
KevinRansom 2016-02-09 15:10:01 -08:00
Родитель 71cee91763 27271f1170
Коммит 8a57057473
140 изменённых файлов: 1915 добавлений и 3273 удалений

Просмотреть файл

@ -28,6 +28,9 @@ EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler", "src\fsharp\FSharp.Compiler\FSharp.Compiler.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.VS.FSI", "vsintegration\src\vs\FsPkgs\FSharp.VS.FSI\FSharp.VS.FSI.fsproj", "{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}"
ProjectSection(ProjectDependencies) = postProject
{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}
EndProjectSection
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}"
EndProject

Просмотреть файл

@ -2,7 +2,8 @@ os: Visual Studio 2015
environment:
matrix:
- BUILD_PROFILE: ci
- BUILD_PROFILE: ci_part1
- BUILD_PROFILE: ci_part2
init:
build_script:

192
build.cmd
Просмотреть файл

@ -13,7 +13,7 @@ echo Build and run a subset of test suites
echo.
echo Usage:
echo.
echo build.cmd ^<all^|build^|debug^|release^|compiler^|coreclr^|pcls^|vs^|ci^|ci_part1^|ci_part2^|ci_part3^>
echo build.cmd ^<all^|build^|debug^|release^|compiler^|coreclr^|pcls^|vs^|ci^|ci_part1^|ci_part2^>
echo.
echo No arguments default to 'build'
echo.
@ -33,6 +33,9 @@ set BUILD_PROTO=0
set BUILD_NET40=1
set BUILD_PORTABLE=0
set BUILD_VS=0
set BUILD_FSHARP_DATA_TYPEPROVIDERS=0
set BUILD_CONFIG=Release
set BUILD_CONFIG_LOWERCASE=release
set TEST_COMPILERUNIT=0
set TEST_NET40_COREUNIT=0
@ -78,6 +81,7 @@ if /i '%ARG%' == 'all' (
set BUILD_PROTO=1
set BUILD_PORTABLE=1
set BUILD_VS=1
set BUILD_FSHARP_DATA_TYPEPROVIDERS=1
set TEST_COMPILERUNIT=1
set TEST_PORTABLE_COREUNIT=1
set TEST_VS=1
@ -89,9 +93,11 @@ REM Same as 'all' but smoke testing only
if /i '%ARG%' == 'ci' (
set BUILD_PORTABLE=1
set BUILD_VS=1
set BUILD_FSHARP_DATA_TYPEPROVIDERS=1
set TEST_COMPILERUNIT=1
set TEST_NET40_COREUNIT=1
set TEST_CORECLR=1
set TEST_PORTABLE_COREUNIT=1
set TEST_FSHARP_SUITE=1
set TEST_FSHARPQA_SUITE=1
set TEST_VS=0
@ -104,6 +110,8 @@ REM These divide 'ci' into three chunks which can be done in parallel
if /i '%ARG%' == 'ci_part1' (
set BUILD_PORTABLE=1
set BUILD_VS=1
set BUILD_FSHARP_DATA_TYPEPROVIDERS=1
set TEST_COMPILERUNIT=1
set TEST_NET40_COREUNIT=1
set TEST_PORTABLE_COREUNIT=1
@ -113,15 +121,13 @@ if /i '%ARG%' == 'ci_part1' (
)
if /i '%ARG%' == 'ci_part2' (
set BUILD_PORTABLE=1
set BUILD_FSHARP_DATA_TYPEPROVIDERS=1
set TEST_FSHARPQA_SUITE=1
set TEST_FSHARP_SUITE=1
set TEST_TAGS=
)
if /i '%ARG%' == 'ci_part3' (
set TEST_PORTABLE_COREUNIT=1
set TEST_FSHARPQA_SUITE=1
set TEST_TAGS=
)
if /i '%ARG%' == 'smoke' (
REM Smoke tests are a very small quick subset of tests
@ -134,16 +140,12 @@ if /i '%ARG%' == 'smoke' (
if /i '%ARG%' == 'debug' (
set BUILD_CONFIG=Debug
set BUILD_CONFIG_LOWER=debug
set BUILD_CONFIG_LOWERCASE=debug
)
if /i '%ARG%' == 'build' (
set BUILD_PORTABLE47=1
set BUILD_PORTABLE7=1
set BUILD_PORTABLE78=1
set BUILD_PORTABLE259=1
set BUILD_PORTABLE=1
set BUILD_VS=1
)
goto :EOF
@ -158,6 +160,7 @@ echo BUILD_NET40=%BUILD_NET40%
echo BUILD_CORECLR=%BUILD_CORECLR%
echo BUILD_PORTABLE=%BUILD_PORTABLE%
echo BUILD_VS=%BUILD_VS%
echo BUILD_FSHARP_DATA_TYPEPROVIDERS=%BUILD_FSHARP_DATA_TYPEPROVIDERS%
echo.
echo TEST_COMPILERUNIT=%TEST_COMPILERUNIT%
echo TEST_PORTABLE_COREUNIT=%TEST_PORTABLE_COREUNIT%
@ -166,7 +169,7 @@ echo TEST_FSHARP_SUITE=%TEST_FSHARP_SUITE%
echo TEST_FSHARPQA_SUITE=%TEST_FSHARPQA_SUITE%
echo TEST_TAGS=%TEST_TAGS%
echo BUILD_CONFIG=%BUILD_CONFIG%
echo BUILD_CONFIG_LOWER=%BUILD_CONFIG_LOWER%
echo BUILD_CONFIG_LOWERCASE=%BUILD_CONFIG_LOWERCASE%
echo.
if "%RestorePackages%"=="" (
@ -202,7 +205,7 @@ if defined APPVEYOR (
set _msbuildexe=%_msbuildexe% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
)
)
set msbuildflags=/maxcpucount
set _ngenexe="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\ngen.exe"
if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure
@ -237,128 +240,153 @@ rem rename fsi and coreconsole to allow fsi.exe to to start interative
pushd .\packages\lkg & ren fsi.exe fsi.dll & popd
copy .\packages\lkg\coreconsole.exe .\packages\lkg\fsi.exe
:: Build Proto
if NOT EXIST Proto\net40\bin\fsc-proto.exe ( set BUILD_PROTO=1 )
:: Build
%_msbuildexe% src\fsharp-proto-build.proj
@if ERRORLEVEL 1 echo Error: compiler proto build failed && goto :failure
if '%BUILD_PROTO%' == '1' (
%_msbuildexe% %msbuildflags% src\fsharp-proto-build.proj
@if ERRORLEVEL 1 echo Error: compiler proto build failed && goto :failure
%_ngenexe% install Proto\net40\bin\fsc-proto.exe
@if ERRORLEVEL 1 echo Error: NGen of proto failed && goto :failure
)
%_ngenexe% install Proto\net40\bin\fsc-proto.exe
@if ERRORLEVEL 1 echo Error: NGen of proto failed && goto :failure
%_msbuildexe% src/fsharp-library-build.proj /p:Configuration=%BUILD_CONFIG%
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library build failed && goto :failure
%_msbuildexe% src/fsharp-compiler-build.proj /p:Configuration=Release
%_msbuildexe% %msbuildflags% src/fsharp-compiler-build.proj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: compiler build failed && goto :failure
if '%BUILD_FSHARP_DATA_TYPEPROVIDERS%' == '1' (
%_msbuildexe% %msbuildflags% src/fsharp-typeproviders-build.proj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: type provider build failed && goto :failure
if '%BUILD_CORECLR%' == '1' (
%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=coreclr /p:Configuration=%BUILD_CONFIG% /p:RestorePackages=%RestorePackages%
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:TargetFramework=coreclr /p:Configuration=%BUILD_CONFIG% /p:RestorePackages=%RestorePackages%
@if ERRORLEVEL 1 echo Error: library coreclr build failed && goto :failure
%_msbuildexe% src/fsharp-compiler-build.proj /p:TargetFramework=coreclr /p:Configuration=%BUILD_CONFIG% /p:RestorePackages=%RestorePackages%
%_msbuildexe% %msbuildflags% src/fsharp-compiler-build.proj /p:TargetFramework=coreclr /p:Configuration=%BUILD_CONFIG% /p:RestorePackages=%RestorePackages%
@if ERRORLEVEL 1 echo Error: compiler coreclr build failed && goto :failure
)
if '%BUILD_PORTABLE%' == '1' (
%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable7 build failed && goto :failure
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable7 build failed && goto :failure
%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable47 build failed && goto :failure
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable47 build failed && goto :failure
%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable78 build failed && goto :failure
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable78 build failed && goto :failure
%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable259 build failed && goto :failure
%_msbuildexe% %msbuildflags% src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library portable259 build failed && goto :failure
)
if '%TEST_COMPILERUNIT%' == '1' (
%_msbuildexe% src/fsharp-compiler-unittests-build.proj /p:Configuration=%BUILD_CONFIG%
%_msbuildexe% %msbuildflags% src/fsharp-compiler-unittests-build.proj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: compiler unittests build failed && goto :failure
)
if '%TEST_COREUNIT%' == '1' (
%_msbuildexe% src/fsharp-library-unittests-build.proj /p:Configuration=%BUILD_CONFIG%
%_msbuildexe% %msbuildflags% src/fsharp-library-unittests-build.proj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library unittests build failed && goto :failure
)
if '%TEST_PORTABLE_COREUNIT%' == '1' (
%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library unittests build failed portable7 && goto :failure
%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library unittests build failed portable47 && goto :failure
%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library unittests build failed portable78 && goto :failure
%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: library unittests build failed portable259 && goto :failure
)
if '%BUILD_VS%' == '1' (
%_msbuildexe% VisualFSharp.sln /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: VS integration build failed && goto :failure
%_msbuildexe% %msbuildflags% VisualFSharp.sln /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: VS integration build failed && goto :failure
)
@echo on
call src\update.cmd %BUILD_CONFIG_LOWER% -ngen
call src\update.cmd %BUILD_CONFIG_LOWERCASE% -ngen
REM Remove lingering copies of the OSS FSharp.Core from the GAC
gacutil /u "FSharp.Core, Version=4.4.1.9055, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
REM This clobbers the installed F# SDK on the machine
REM call vsintegration\update-vsintegration.cmd %BUILD_CONFIG_LOWER%
REM call vsintegration\update-vsintegration.cmd %BUILD_CONFIG_LOWERCASE%
pushd tests
@echo on
call BuildTestTools.cmd %BUILD_CONFIG_LOWER%
@if ERRORLEVEL 1 echo Error: 'BuildTestTools.cmd %BUILD_CONFIG_LOWER%' failed && goto :failure
call BuildTestTools.cmd %BUILD_CONFIG_LOWERCASE%
@if ERRORLEVEL 1 echo Error: 'BuildTestTools.cmd %BUILD_CONFIG_LOWERCASE%' failed && goto :failure
@echo on
if '%TEST_FSHARP_SUITE%' == '1' (
set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER=true
set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER=true
%_msbuildexe% fsharp\fsharp.tests.fsproj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: fsharp cambridge tests for nunit failed && goto :failure
%_msbuildexe% %msbuildflags% fsharp\fsharp.tests.fsproj /p:Configuration=%BUILD_CONFIG%
@if ERRORLEVEL 1 echo Error: fsharp cambridge tests for nunit failed && goto :failure
call RunTests.cmd %BUILD_CONFIG_LOWER% fsharp %TEST_TAGS%
@if ERRORLEVEL 1 type testresults\fsharp_failures.log && echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% fsharp %CONF_CAMBRIDGE_SUITE%' failed && goto :failure
set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER=
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% fsharp %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\FSharpNunit_Error.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% fsharp %TEST_TAGS%' failed
goto :failure
)
set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER=
)
if '%TEST_FSHARPQA_SUITE%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% fsharpqa %TEST_TAGS%
@if ERRORLEVEL 1 type testresults\fsharpqa_failures.log && echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% fsharpqa %CONF_FSHARPQA_SUITE%' failed && goto :failure
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% fsharpqa %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\fsharpqa_failures.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% fsharpqa %TEST_TAGS%' failed
goto :failure
)
)
if '%TEST_COMPILERUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% compilerunit %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% compilerunit' failed && goto :failure
)
if '%TEST_COREUNITUNIT%' == '1' (
if '%TEST_PORTABLE%' == '1' (
call RunTests.cmd release coreunitall
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitall' failed && goto :failure
)
if '%TEST_PORTABLE%' == '0' (
call RunTests.cmd %BUILD_CONFIG_LOWER% coreunit
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunit' failed && goto :failure
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% compilerunit %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\CompilerUnit_net40_Error.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% compilerunit' failed
goto :failure
)
)
if '%TEST_CORECLR%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% fsharp coreclr
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreclr' failed && goto :failure
call RunTests.cmd %BUILD_CONFIG_LOWER% fsharp coreunitclr
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitclr' failed && goto :failure
if '%TEST_NET40_COREUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunit %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\CoreUnit_net40_Error.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunit' failed
goto :failure
)
)
if '%TEST_PORTABLE_COREUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunitportable47 %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\CoreUnit_portable47_Error.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunitportable47 %TEST_TAGS%' failed
goto :failure
)
call RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunitportable7 %TEST_TAGS%
@if ERRORLEVEL 1 (
type testresults\CoreUnit_portable7_Error.log
echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWERCASE% coreunitportable7 %TEST_TAGS%' failed
goto :failure
)
if '%TEST_PORTABLE78_COREUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable78 %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable78' failed && goto :failure
)
if '%TEST_PORTABLE259_COREUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable259 %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable259' failed && goto :failure
)
if '%TEST_PORTABLE259_COREUNIT%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable259 %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable259' failed && goto :failure
)
if '%TEST_VS%' == '1' (
call RunTests.cmd %BUILD_CONFIG_LOWER% ideunit %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% ideunit' failed && goto :failure
call RunTests.cmd %BUILD_CONFIG_LOWER% ideunit %TEST_TAGS%
@if ERRORLEVEL 1 echo Error: 'RunTests.cmd %BUILD_CONFIG_LOWER% coreunitportable259' failed && goto :failure
)
popd

Просмотреть файл

@ -1157,6 +1157,10 @@ let unfold<'a,'b when 'b : equality> f (start:'a) =
[<Test>]
let ``unfold is consistent`` () =
Check.QuickThrowOnFailure unfold<int,int>
[<Test; Category("Expensive")>]
let ``unfold is consistent full`` () =
Check.QuickThrowOnFailure unfold<int,int>
Check.QuickThrowOnFailure unfold<string,string>
Check.QuickThrowOnFailure unfold<float,int>
Check.QuickThrowOnFailure unfold<float,string>

Просмотреть файл

@ -24,10 +24,10 @@ let private regQuery = WindowsPlatform.regQuery
let private checkResult result =
match result with
| CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
| CmdResult.ErrorLevel (msg, err) -> Failure (RunError.ProcessExecError (msg, err, sprintf "ERRORLEVEL %d" err))
| CmdResult.Success -> Success ()
let updateCmd envVars args = processor {
let updateCmd envVars args = attempt {
// @echo off
// setlocal
ignore "useless"
@ -91,12 +91,12 @@ let updateCmd envVars args = processor {
// set NGEN64=%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe
let NGEN64 = windir/"Microsoft.NET"/"Framework64"/"v4.0.30319"/"ngen.exe"
let checkResult = function CmdResult.ErrorLevel err -> Failure (sprintf "ERRORLEVEL %d" err) | CmdResult.Success -> Success ()
let checkResult = function CmdResult.ErrorLevel (msg, err) -> Failure (sprintf "%s. ERRORLEVEL %d" msg err) | CmdResult.Success -> Success ()
let ngen32 = Commands.ngen exec NGEN32 >> checkResult
let ngen64 = Commands.ngen exec NGEN64 >> checkResult
let sn32 = exec SN32 >> checkResult
let sn64 = exec SN32 >> checkResult
let sn64 = exec SN64 >> checkResult
// rem Disable strong-name validation for F# binaries built from open source that are signed with the microsoft key
// %SN32% -Vr FSharp.Core,b03f5f7f11d50a3a
@ -116,7 +116,7 @@ let updateCmd envVars args = processor {
// %SN32% -Vr Unittests,b03f5f7f11d50a3a
// %SN32% -Vr Salsa,b03f5f7f11d50a3a
let strongName (snExe: string -> Result<_,_>) = processor {
let strongName (snExe: string -> Result<_,_>) = attempt {
let all =
[ "FSharp.Core";
"FSharp.Build";
@ -129,7 +129,8 @@ let updateCmd envVars args = processor {
"VisualFSharp.Unittests";
"VisualFSharp.Salsa" ]
for a in all do
do! snExe (sprintf " -Vr %s,b03f5f7f11d50a3a" a)
snExe (sprintf " -Vr %s,b03f5f7f11d50a3a" a) |> ignore // ignore result - SN is not needed for tests to pass, and this fails without admin rights
}
do! strongName sn32
@ -165,14 +166,15 @@ let updateCmd envVars args = processor {
// "%NGEN32%" install "%BINDIR%\fsi.exe" /queue:1
// "%NGEN32%" install "%BINDIR%\FSharp.Build.dll" /queue:1
// "%NGEN32%" executeQueuedItems 1
do! ngen32 [binDir/"fsc.exe"; binDir/"fsi.exe"; binDir/"FSharp.Build.dll"]
ngen32 [binDir/"fsc.exe"; binDir/"fsi.exe"; binDir/"FSharp.Build.dll"] |> ignore // Ignore because may fail without admin rights
// if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
if processorArchitecture = AMD64 then
// "%NGEN64%" install "%BINDIR%\fsiAnyCpu.exe" /queue:1
// "%NGEN64%" install "%BINDIR%\FSharp.Build.dll" /queue:1
// "%NGEN64%" executeQueuedItems 1
do! ngen64 [binDir/"fsiAnyCpu.exe"; binDir/"FSharp.Build.dll"]
ngen64 [binDir/"fsiAnyCpu.exe"; binDir/"FSharp.Build.dll"] |> ignore // Ignore because may fail without admin rights
// )
//:donengen

Просмотреть файл

@ -2,15 +2,11 @@
if /i "%1" == "debug" goto :ok
if /i "%1" == "release" goto :ok
if /i "%1" == "vsdebug" goto :ok
if /i "%1" == "vsrelease" goto :ok
echo Builds a few test tools using latest compiler and runtime
echo Usage:
echo BuildTestTools.cmd debug
echo BuildTestTools.cmd release
echo BuildTestTools.cmd vsdebug
echo BuildTestTools.cmd vsrelease
exit /b 1
:ok
@ -88,10 +84,10 @@ rem deploy osx version of built compiler
%_fsiexe% --exec %~dp0fsharpqa\testenv\src\DeployProj\DeployProj.fsx --TargetPlatformName:DNXCore,Version=v5.0/osx.10.10-x64 --projectJson:%~dp0fsharp\project.json --projectJsonLock:%~dp0fsharp\project.lock.json --packagesDir:%~dp0..\packages --targetPlatformName:DNXCore,Version=v5.0/ubuntu.14.04-x64 --fsharpCore:%~dp0..\%1\coreclr\bin\fsharp.core.dll --output:%~dp0testbin\%1\coreclr\fsc\osx.10.10-x64 --nugetPath:%~dp0..\.nuget\nuget.exe --nugetConfig:%~dp0..\.nuget\nuget.config --copyCompiler:yes --v:quiet
%_fsiexe% --exec %~dp0fsharpqa\testenv\src\DeployProj\DeployProj.fsx --TargetPlatformName:DNXCore,Version=v5.0/osx.10.10-x64 --projectJson:%~dp0fsharp\project.json --projectJsonLock:%~dp0fsharp\project.lock.json --packagesDir:%~dp0..\packages --targetPlatformName:DNXCore,Version=v5.0/win7-x64 --fsharpCore:%~dp0..\%1\coreclr\bin\fsharp.core.dll --output:%~dp0testbin\%1\coreclr\osx.10.10-x64 --nugetPath:%~dp0..\.nuget\nuget.exe --nugetConfig:%~dp0..\.nuget\nuget.config --copyCompiler:no --v:quiet
echo "%NUNITPATH%*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
xcopy "%NUNITPATH%*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
echo "%~dp0\fsharpqa\testenv\src\nunit*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
xcopy "%~dp0\fsharpqa\testenv\src\nunit*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
echo "%NUNITPATH%*.*" "%~dp0fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
xcopy "%NUNITPATH%*.*" "%~dp0fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
echo "%~dp0fsharpqa\testenv\src\nunit*.*" "%~dp0fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
xcopy "%~dp0fsharpqa\testenv\src\nunit*.*" "%~dp0fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
goto :EOF
:error

Просмотреть файл

@ -6,9 +6,9 @@ if /I "%FLAVOR%" == "debug" (goto :FLAVOR_OK)
if /I "%FLAVOR%" == "release" (goto :FLAVOR_OK)
goto :USAGE
:flavor_ok
:FLAVOR_OK
set NUNITPATH=%~dp0\fsharpqa\testenv\bin\nunit\
set NUNITPATH=%~dp0fsharpqa\testenv\bin\nunit\
if not exist "%~dp0%..\packages\NUnit.Console.3.0.0\tools\" (
pushd %~dp0
..\.nuget\nuget.exe restore ..\packages.config -PackagesDirectory ..\packages
@ -48,12 +48,12 @@ if /I '%_tmp%' == 'coreclr' (
)
rem "nottags" indicates which test areas/test cases will NOT be run, based on the tags in the test.lst and env.lst files
set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN
set NO_TTAGS=ReqPP,NOOPEN
set NO_TTAGS_ARG=-nottags:NOOPEN
set NO_TTAGS=NOOPEN
set _tmp=%4
if not '%_tmp%' == '' (
set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN,%_tmp:"=%
set NO_TTAGS=ReqPP,NOOPEN,%_tmp:"=%
set NO_TTAGS_ARG=-nottags:NOOPEN,%_tmp:"=%
set NO_TTAGS=NOOPEN,%_tmp:"=%
)
if /I "%APPVEYOR_CI%" == "1" (
@ -80,12 +80,12 @@ set FSCBINPATH=%~dp0..\%FLAVOR%\net40\bin
ECHO FSCBINPATH%
rem folder where test logs/results will be dropped
set RESULTSDIR=%~dp0\TestResults
set RESULTSDIR=%~dp0TestResults
if not exist "%RESULTSDIR%" (mkdir "%RESULTSDIR%")
setlocal EnableDelayedExpansion
SET CONV_V2_TO_V3_CMD=%FSI% --exec --nologo "%~dp0%\Convert-NUnit2Args-to-NUnit3Where.fsx" -- "!TTAGS!" "!NO_TTAGS!"
SET CONV_V2_TO_V3_CMD="%LKG_FSI%" --exec --nologo "%~dp0%Convert-NUnit2Args-to-NUnit3Where.fsx" -- "!TTAGS!" "!NO_TTAGS!"
echo %CONV_V2_TO_V3_CMD%
SET CONV_V2_TO_V3_CMD_TEMPFILE=%~dp0%nunit3args.txt
@ -149,6 +149,8 @@ if /I "%2" == "coreunitcoreclr" (
)
if /I "%2" == "ideunit" (goto :IDEUNIT)
REM ----------------------------------------------------------------------------
:USAGE
echo Usage:
@ -157,6 +159,8 @@ echo RunTests.cmd ^<debug^|release^> ^<fsharp^|fsharpqa^|coreunit^|coreunitporta
echo.
exit /b 1
REM ----------------------------------------------------------------------------
:FSHARP
if not '%FSHARP_TEST_SUITE_USE_NUNIT_RUNNER%' == '' (
@ -185,21 +189,23 @@ if errorlevel 1 (
)
goto :EOF
REM ----------------------------------------------------------------------------
:FSHARP_NUNIT
set FSHARP_TEST_SUITE_CONFIGURATION=%FLAVOR%
set XMLFILE=FSharpNunit_Xml.xml
set OUTPUTFILE=FSharpNunit_Output.log
set ERRORFILE=FSharpNunit_Error.log
set XMLFILE=%RESULTSDIR%\FSharpNunit_Xml.xml
set OUTPUTFILE=%RESULTSDIR%\FSharpNunit_Output.log
set ERRORFILE=%RESULTSDIR%\FSharpNunit_Error.log
echo "%NUNIT3_CONSOLE%" --verbose "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work:"%FSCBINPATH%" --output:"%OUTPUTFILE%;format=nunit2" --err:"%ERRORFILE%" --result:"%XMLFILE%"
"%NUNIT3_CONSOLE%" --verbose "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work:"%FSCBINPATH%" --output:"%OUTPUTFILE%;format=nunit2" --err:"%ERRORFILE%" --result:"%XMLFILE%"
echo "%NUNIT3_CONSOLE%" --verbose "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work:"%FSCBINPATH%" --output:"%OUTPUTFILE%" --err:"%ERRORFILE%" --result:"%XMLFILE%;format=nunit2"
"%NUNIT3_CONSOLE%" --verbose "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work:"%FSCBINPATH%" --output:"%OUTPUTFILE%" --err:"%ERRORFILE%" --result:"%XMLFILE%;format=nunit2"
call :UPLOAD_XML "%XMLFILE%"
goto :EOF
REM ----------------------------------------------------------------------------
:FSHARPQA
set OSARCH=%PROCESSOR_ARCHITECTURE%
@ -274,7 +280,7 @@ if /I "%2" == "fsharpqadowntarget" (
if /I "%2" == "fsharpqaredirect" (
set ISCFLAGS=--noframework -r "%FSCOREDLLVPREVPATH%" -r "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r System.dll -r System.Runtime.dll -r System.Xml.dll -r System.Data.dll -r System.Web.dll -r System.Core.dll -r System.Numerics.dll
set PLATFORM=%OSARCH%
set SIMULATOR_PIPE="%~dp0\fsharpqa\testenv\bin\$PLATFORM\ExecAssembly.exe"
set SIMULATOR_PIPE="%~dp0fsharpqa\testenv\bin\$PLATFORM\ExecAssembly.exe"
set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NoCrossVer,FSI
set RESULTFILE=FSharpQARedirect_Results.log
set FAILFILE=FSharpQARedirect_Failures.log
@ -287,13 +293,15 @@ if errorlevel 1 (
exit /b 1
)
pushd %~dp0\fsharpqa\source
echo perl %~dp0\fsharpqa\testenv\bin\runall.pl -resultsroot %RESULTSDIR% -results %RESULTFILE% -log %FAILFILE% -fail %FAILENV% -cleanup:yes %TTAGS_ARG% %NO_TTAGS_ARG% %PARALLEL_ARG%
perl %~dp0\fsharpqa\testenv\bin\runall.pl -resultsroot %RESULTSDIR% -results %RESULTFILE% -log %FAILFILE% -fail %FAILENV% -cleanup:yes %TTAGS_ARG% %NO_TTAGS_ARG% %PARALLEL_ARG%
pushd %~dp0fsharpqa\source
echo perl %~dp0fsharpqa\testenv\bin\runall.pl -resultsroot %RESULTSDIR% -results %RESULTFILE% -log %FAILFILE% -fail %FAILENV% -cleanup:yes %TTAGS_ARG% %NO_TTAGS_ARG% %PARALLEL_ARG%
perl %~dp0fsharpqa\testenv\bin\runall.pl -resultsroot %RESULTSDIR% -results %RESULTFILE% -log %FAILFILE% -fail %FAILENV% -cleanup:yes %TTAGS_ARG% %NO_TTAGS_ARG% %PARALLEL_ARG%
popd
goto :EOF
REM ----------------------------------------------------------------------------
:COREUNIT
set XMLFILE=%RESULTSDIR%\CoreUnit_%coreunitsuffix%_Xml.xml
@ -345,6 +353,8 @@ echo "%CORERUNPATH%\corerun.exe" "%testbinpath%%flavor%\coreclr\fsharp.core.unit
goto :EOF
REM ----------------------------------------------------------------------------
:COMPILERUNIT
set XMLFILE=%RESULTSDIR%\CompilerUnit_%compilerunitsuffix%_Xml.xml
@ -357,6 +367,8 @@ echo "%NUNIT3_CONSOLE%" --verbose --framework:V4.0 %TTAGS_NUNIT_WHERE% --result:
call :UPLOAD_XML "%XMLFILE%"
goto :EOF
REM ----------------------------------------------------------------------------
:IDEUNIT
set XMLFILE=%RESULTSDIR%\IDEUnit_Xml.xml
@ -378,6 +390,8 @@ powershell -File Upload-Results.ps1 %RESULTSDIR%\%XMLFILE%
goto :EOF
REM ----------------------------------------------------------------------------
:UPLOAD_XML
rem See <http://www.appveyor.com/docs/environment-variables>
@ -386,7 +400,7 @@ if not defined APPVEYOR goto :EOF
set saved_errorlevel=%errorlevel%
echo Saved errorlevel %saved_errorlevel%
powershell -File Upload-Results.ps1 "%~1"
if %saved_errorlevel% neq 0 exit /b %saved_errorlevel%
if NOT %saved_errorlevel% == 0 exit /b %saved_errorlevel%
goto :EOF
:: Note: "goto :EOF" returns from an in-batchfile "call" command

Просмотреть файл

@ -11,7 +11,7 @@ Write-Verbose ""
# See <http://www.appveyor.com/docs/running-tests>
# and <http://www.appveyor.com/docs/environment-variables>
$url = "$env:APPVEYOR_URL/api/testresults/$format/$($env:APPVEYOR_JOB_ID)"
Write-Output "Uploading results to $url"
Write-Output "Uploading results $path to $url"
$wc = New-Object 'System.Net.WebClient'
$wc.UploadFile($url, (Resolve-Path $path))

Просмотреть файл

@ -23,12 +23,6 @@ type private FSLibPaths =
FSDATATPPATH : string
FSCOREDLLVPREVPATH : string }
let private checkResult result =
match result with
| CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
| CmdResult.Success -> Success ()
// REM ===
// REM === Find paths to shipped F# libraries referenced by clients
// REM ===

Просмотреть файл

@ -79,8 +79,9 @@ let ngen exec (ngenExe: FilePath) assemblies =
List.concat [ queue; ["executeQueuedItems 1"] ]
|> Seq.ofList
|> Seq.map (fun args -> exec ngenExe args)
|> Seq.takeWhile (function ErrorLevel _ -> false | Ok -> true)
|> Seq.last
|> Seq.skipWhile (function ErrorLevel _ -> false | CmdResult.Success -> true)
|> Seq.tryHead
|> function None -> CmdResult.Success | Some res -> res
let fsc exec (fscExe: FilePath) flags srcFiles =
// "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe tmptest2.mli tmptest2.ml

Просмотреть файл

@ -4,7 +4,7 @@ open PlatformHelpers
type RunError =
| GenericError of string
| ProcessExecError of (int * string)
| ProcessExecError of (string * int * string)
| Skipped of string
type Permutation =
@ -14,18 +14,11 @@ type Permutation =
| FSI_STDIN_GUI
| FSC_BASIC
| FSC_BASIC_64
| FSC_HW
| FSC_O3
| GENERATED_SIGNATURE
| EMPTY_SIGNATURE
| EMPTY_SIGNATURE_OPT
| FSC_OPT_MINUS_DEBUG
| FSC_OPT_PLUS_DEBUG
| FRENCH
| SPANISH
| AS_DLL
| WRAPPER_NAMESPACE
| WRAPPER_NAMESPACE_OPT
override this.ToString() = (sprintf "%A" this)
type TestConfig =

Просмотреть файл

@ -18,7 +18,7 @@ type FilePath = string
type CmdResult =
| Success
| ErrorLevel of int
| ErrorLevel of string * int
type CmdArguments =
{ RedirectOutput : (string -> unit) option
@ -51,50 +51,41 @@ module Process =
p.EnableRaisingEvents <- true
p.StartInfo <- processInfo
cmdArgs.RedirectOutput
|> Option.map (fun f -> (fun (ea: DataReceivedEventArgs) -> ea.Data |> f))
|> Option.iter (fun newOut ->
cmdArgs.RedirectOutput|> Option.iter (fun f ->
processInfo.RedirectStandardOutput <- true
p.OutputDataReceived.Add newOut
p.OutputDataReceived.Add (fun ea -> if ea.Data <> null then f ea.Data)
)
cmdArgs.RedirectError
|> Option.map (fun f -> (fun (ea: DataReceivedEventArgs) -> ea.Data |> f))
|> Option.iter (fun newErr ->
cmdArgs.RedirectError |> Option.iter (fun f ->
processInfo.RedirectStandardError <- true
p.ErrorDataReceived.Add newErr
p.ErrorDataReceived.Add (fun ea -> if ea.Data <> null then f ea.Data)
)
cmdArgs.RedirectInput
|> Option.iter (fun _ -> p.StartInfo.RedirectStandardInput <- true)
let exitedAsync (proc: Process) =
let tcs = new System.Threading.Tasks.TaskCompletionSource<int>();
p.Exited.Add (fun s ->
tcs.TrySetResult(proc.ExitCode) |> ignore
proc.Dispose())
tcs.Task
p.Start() |> ignore
cmdArgs.RedirectOutput |> Option.iter (fun _ -> p.BeginOutputReadLine())
cmdArgs.RedirectError |> Option.iter (fun _ -> p.BeginErrorReadLine())
cmdArgs.RedirectInput
|> Option.map (fun input -> async {
cmdArgs.RedirectInput |> Option.iter (fun input ->
async {
let inputWriter = p.StandardInput
do! inputWriter.FlushAsync () |> Async.AwaitIAsyncResult |> Async.Ignore
input inputWriter
do! inputWriter.FlushAsync () |> Async.AwaitIAsyncResult |> Async.Ignore
inputWriter.Close ()
})
|> Option.iter Async.Start
}
|> Async.Start)
let exitCode = p |> exitedAsync |> Async.AwaitTask |> Async.RunSynchronously
p.WaitForExit()
match exitCode with
match p.ExitCode with
| 0 -> Success
| err -> ErrorLevel err
| err ->
let msg = sprintf "Error running command '%s' with args '%s' in directory '%s'" exePath arguments workDir
ErrorLevel (msg, err)
@ -176,28 +167,16 @@ type AttemptBuilder() =
this.Delay(fun () -> body enum.Current)))
let attempt = new AttemptBuilder()
let processor = attempt //TODO deprecated
let log format = Printf.ksprintf (printfn "%s") format
type OutPipe (mailbox: MailboxProcessor<_>) =
member x.Post msg = mailbox.Post(msg)
interface System.IDisposable with
member x.Dispose () =
async {
while mailbox.CurrentQueueLength > 0 do
let timeout = System.TimeSpan.FromMilliseconds(50.0)
do! Async.Sleep (timeout.TotalMilliseconds |> int)
} |> Async.RunSynchronously
let redirectTo (writer: TextWriter) =
let mailbox = MailboxProcessor.Start(fun inbox ->
let rec loop () = async {
let! (msg : string) = inbox.Receive ()
do! writer.WriteLineAsync(msg) |> (Async.AwaitIAsyncResult >> Async.Ignore)
return! loop () }
loop ())
new OutPipe (mailbox)
type OutPipe (writer: TextWriter) =
member x.Post (msg:string) = lock writer (fun () -> writer.WriteLine(msg))
interface System.IDisposable with
member __.Dispose() = writer.Flush()
let redirectTo (writer: TextWriter) = new OutPipe (writer)
let redirectToLog () = redirectTo System.Console.Out

Просмотреть файл

@ -1,7 +1,7 @@
// #Conformance #Sequences #Regression #ControlFlow #SyntacticSugar #ComputationExpressions
//#nowarn "57"
module Test
open System.Text.RegularExpressions
open System.IO

Просмотреть файл

@ -1,4 +1,5 @@
// #Conformance #FSI
module FlagCheck
#nowarn "22"
#if INTERACTIVE
printfn "INTERACTIVE is defined"

Просмотреть файл

@ -0,0 +1,2 @@
usesfsi.fsx(2,1): error FS0039: The namespace or module 'fsi' is not defined

Просмотреть файл

@ -32,10 +32,9 @@ namespace FSI_0002
namespace FSI_0002
>
Test 4=================================================
Test 5=================================================
usesfsi.fsx(2,1): error FS0039: The namespace or module 'fsi' is not defined
Test 6=================================================
Test 7=================================================
Hello

Просмотреть файл

@ -5,9 +5,9 @@ open coreclrutilities
#endif
#light
#if COMPILED
module Tests
#endif
let mutable failures = []
let report_failure s =
stderr.WriteLine " NO"; failures <- s :: failures

Двоичные данные
tests/fsharp/core/members/incremental-hw/dont.run.peverify Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1 @@
foo

Просмотреть файл

@ -1,14 +1,3 @@
[Building 2 4...done]
[Building 2 6...done]
[Building 2 8...done]
[Building 2 10...done]
[Building 2 12...done]
[Building 2 14...done]
[Building 3 8...done]
[Building 4 8...done]
[Building 5 8...done]
[Building 6 8...done]
[Building 5 3...done]
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
@ -234,8 +223,6 @@ stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expe
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
Expect ABC = ABC
Expect ABC = ABC
member this.M() = "string"
----------------^

Просмотреть файл

@ -1783,286 +1783,66 @@ type Regression4319_T2 =
static member ( +-+-+ ) : x:'a * y:'b -> string
end
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T0 =
class
static member ( +-+-+ ) : string
end
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1 =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1b =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1c =
class
static member ( +-+-+ ) : x:('a * 'b) -> string
end
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1d =
class
static member ( +-+-+ ) : x:(int * int) -> string
end
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> string
end
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1 =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1b =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U2 =
class
static member ( +-+-+ ) : x:'a * y:'b -> moreArgs:'c -> string
end
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> moreArgs:'d -> string
end
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_check =
class
@ -2092,11 +1872,6 @@ type Regression4319_check =
static member ( - ) : string
end
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
> Expect ABC = ABC
type Regression4469 =
@ -2750,32 +2525,12 @@ val fff : x:'a -> 'a
val note_ExpectDupMethod : string =
"Regression4927: Expect error due to duplicate methods in the "+[20 chars]
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
> >
val note_ExpectDupProperty : string =
"Regression4927: Expect error due to duplicate properties in t"+[23 chars]
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
> > > val it : string = "NOTE: Expect IAPrivate less accessible IBPublic"
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
> > val it : string = "NOTE: Expect IAPrivate less accessible IBInternal"
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
> >
module Regression5265_PriPri = begin
type private IAPrivate =
@ -2790,11 +2545,6 @@ module Regression5265_PriPri = begin
end
> val it : string = "NOTE: Expect IAInternal less accessible IBPublic"
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
> >
module Regression5265_IntInt = begin
type internal IAInternal =
@ -2862,11 +2612,6 @@ end
> val it : string =
"Regression4232: Expect an error about duplicate virtual methods from parent type"
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
> > val it : string =
"** Expect AnAxHostSubClass to be accepted. AxHost has a newslot virtual RightToLeft property outscope RightToLeft on Control"
>
@ -2878,36 +2623,16 @@ type AnAxHostSubClass =
> val it : string =
"** Expect error because the active pattern result contains free type variables"
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (match value generic)"
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (when active pattern also has parameters)"
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect OK, since error message says constraint should work!"
>
val ( |A|B| ) : x:int -> Choice<int,unit>
> val it : string = "** Expect error since active pattern is not a function!"
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function
> > val it : string =
"** Expect OK since active pattern result is not too generic, typars depend on match val"
>

Просмотреть файл

@ -0,0 +1,275 @@
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function

Просмотреть файл

@ -1032,93 +1032,43 @@ type Regression4319_T2 =
static member ( +-+-+ ) : x:'a * y:'b -> string
end
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T0 =
class
static member ( +-+-+ ) : string
end
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1 =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1b =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1c =
class
static member ( +-+-+ ) : x:('a * 'b) -> string
end
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1d =
class
static member ( +-+-+ ) : x:(int * int) -> string
end
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> string
end
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
@ -1130,188 +1080,18 @@ type Regression4319_U1b =
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U2 =
class
static member ( +-+-+ ) : x:'a * y:'b -> moreArgs:'c -> string
end
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> moreArgs:'d -> string
end
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_check =
class
@ -1341,11 +1121,6 @@ type Regression4319_check =
static member ( - ) : string
end
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
> Expect ABC = ABC
type Regression4469 =
@ -1999,32 +1774,12 @@ val fff : x:'a -> 'a
val note_ExpectDupMethod : string =
"Regression4927: Expect error due to duplicate methods in the "+[20 chars]
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
> >
val note_ExpectDupProperty : string =
"Regression4927: Expect error due to duplicate properties in t"+[23 chars]
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
> > > val it : string = "NOTE: Expect IAPrivate less accessible IBPublic"
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
> > val it : string = "NOTE: Expect IAPrivate less accessible IBInternal"
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
> >
module Regression5265_PriPri = begin
type private IAPrivate =
@ -2039,11 +1794,6 @@ module Regression5265_PriPri = begin
end
> val it : string = "NOTE: Expect IAInternal less accessible IBPublic"
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
> >
module Regression5265_IntInt = begin
type internal IAInternal =
@ -2111,11 +1861,6 @@ end
> val it : string =
"Regression4232: Expect an error about duplicate virtual methods from parent type"
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
> > val it : string =
"** Expect AnAxHostSubClass to be accepted. AxHost has a newslot virtual RightToLeft property outscope RightToLeft on Control"
>
@ -2127,21 +1872,6 @@ type AnAxHostSubClass =
> val it : string =
"** Expect error because the active pattern result contains free type variables"
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (match value generic)"
> > val it : string =
@ -2152,11 +1882,6 @@ stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing
val ( |A|B| ) : x:int -> Choice<int,unit>
> val it : string = "** Expect error since active pattern is not a function!"
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function
> > val it : string =
"** Expect OK since active pattern result is not too generic, typars depend on match val"
>

Просмотреть файл

@ -0,0 +1,275 @@
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function

Просмотреть файл

@ -5310,286 +5310,66 @@ type Regression4319_T2 =
static member ( +-+-+ ) : x:'a * y:'b -> string
end
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T0 =
class
static member ( +-+-+ ) : string
end
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1 =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1b =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1c =
class
static member ( +-+-+ ) : x:('a * 'b) -> string
end
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1d =
class
static member ( +-+-+ ) : x:(int * int) -> string
end
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> string
end
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1 =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1b =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U2 =
class
static member ( +-+-+ ) : x:'a * y:'b -> moreArgs:'c -> string
end
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> moreArgs:'d -> string
end
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_check =
class
@ -5619,11 +5399,6 @@ type Regression4319_check =
static member ( - ) : string
end
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
> Expect ABC = ABC
type Regression4469 =
@ -6277,32 +6052,12 @@ val fff : x:'a -> 'a
val note_ExpectDupMethod : string =
"Regression4927: Expect error due to duplicate methods in the "+[20 chars]
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
> >
val note_ExpectDupProperty : string =
"Regression4927: Expect error due to duplicate properties in t"+[23 chars]
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
> > > val it : string = "NOTE: Expect IAPrivate less accessible IBPublic"
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
> > val it : string = "NOTE: Expect IAPrivate less accessible IBInternal"
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
> >
module Regression5265_PriPri = begin
type private IAPrivate =
@ -6317,11 +6072,6 @@ module Regression5265_PriPri = begin
end
> val it : string = "NOTE: Expect IAInternal less accessible IBPublic"
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
> >
module Regression5265_IntInt = begin
type internal IAInternal =
@ -6389,11 +6139,6 @@ end
> val it : string =
"Regression4232: Expect an error about duplicate virtual methods from parent type"
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
> > val it : string =
"** Expect AnAxHostSubClass to be accepted. AxHost has a newslot virtual RightToLeft property outscope RightToLeft on Control"
>
@ -6405,36 +6150,16 @@ type AnAxHostSubClass =
> val it : string =
"** Expect error because the active pattern result contains free type variables"
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (match value generic)"
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (when active pattern also has parameters)"
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect OK, since error message says constraint should work!"
>
val ( |A|B| ) : x:int -> Choice<int,unit>
> val it : string = "** Expect error since active pattern is not a function!"
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function
> > val it : string =
"** Expect OK since active pattern result is not too generic, typars depend on match val"
>

Просмотреть файл

@ -0,0 +1,275 @@
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function

Просмотреть файл

@ -808,286 +808,66 @@ type Regression4319_T2 =
static member ( +-+-+ ) : x:'a * y:'b -> string
end
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T0 =
class
static member ( +-+-+ ) : string
end
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1 =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1b =
class
static member ( +-+-+ ) : x:'a -> string
end
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1c =
class
static member ( +-+-+ ) : x:('a * 'b) -> string
end
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T1d =
class
static member ( +-+-+ ) : x:(int * int) -> string
end
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_T3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> string
end
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1 =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U1b =
class
static member ( +-+-+ ) : x:'a -> moreArgs:'b -> string
end
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U2 =
class
static member ( +-+-+ ) : x:'a * y:'b -> moreArgs:'c -> string
end
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_U3 =
class
static member ( +-+-+ ) : x:'a * y:'b * z:'c -> moreArgs:'d -> string
end
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
>
type Regression4319_check =
class
@ -1117,11 +897,6 @@ type Regression4319_check =
static member ( - ) : string
end
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
> Expect ABC = ABC
type Regression4469 =
@ -1774,31 +1549,11 @@ val fff : x:'a -> 'a
>
val note_ExpectDupMethod : string
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
> >
val note_ExpectDupProperty : string
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
> > > val it : string = "NOTE: Expect IAPrivate less accessible IBPublic"
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
> > val it : string = "NOTE: Expect IAPrivate less accessible IBInternal"
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
> >
module Regression5265_PriPri = begin
type private IAPrivate =
@ -1813,11 +1568,6 @@ module Regression5265_PriPri = begin
end
> val it : string = "NOTE: Expect IAInternal less accessible IBPublic"
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
> >
module Regression5265_IntInt = begin
type internal IAInternal =
@ -1885,11 +1635,6 @@ end
> val it : string =
"Regression4232: Expect an error about duplicate virtual methods from parent type"
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
> > val it : string =
"** Expect AnAxHostSubClass to be accepted. AxHost has a newslot virtual RightToLeft property outscope RightToLeft on Control"
>
@ -1901,36 +1646,16 @@ type AnAxHostSubClass =
> val it : string =
"** Expect error because the active pattern result contains free type variables"
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (match value generic)"
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect error because the active pattern result contains free type variables (when active pattern also has parameters)"
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
> > val it : string =
"** Expect OK, since error message says constraint should work!"
>
val ( |A|B| ) : x:int -> Choice<int,unit>
> val it : string = "** Expect error since active pattern is not a function!"
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function
> > val it : string =
"** Expect OK since active pattern result is not too generic, typars depend on match val"
>

Просмотреть файл

@ -0,0 +1,275 @@
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
stdin(572,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
stdin(585,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
stdin(589,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
stdin(590,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
stdin(591,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
stdin(593,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(597,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
stdin(598,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(599,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
stdin(600,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
stdin(602,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
stdin(603,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
stdin(604,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
stdin(605,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
stdin(606,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(607,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
stdin(608,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
stdin(609,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
stdin(611,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
stdin(612,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
stdin(614,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(616,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(617,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
stdin(618,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
stdin(619,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
stdin(624,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
member this.M() = "string"
----------------^
stdin(765,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in this type.
member this.P = "string"
----------------^
stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in this type.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in
override x.M(a:string) = 1
-------------------^
stdin(825,20): error FS0361: The override 'M : string -> int' implements more than one abstract slot, e.g. 'abstract member Regression4232.D.M : 'U -> int' and 'abstract member Regression4232.D.M : 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
stdin(833,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
stdin(836,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
stdin(839,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
let (|A|B|) = failwith "" : Choice<int,int>;;
-----^^^^^
stdin(845,6): error FS1209: Active pattern '|A|B|' is not a function

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -15,7 +15,7 @@ open System.Reflection
module FileVersionInfoTest =
[<Test; FSharpSuiteTest()>]
let ``should set file version info on generated file`` () = check (processor {
let ``should set file version info on generated file`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let fscToLibrary = Printf.ksprintf (FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC)
@ -59,7 +59,7 @@ open System.Runtime.InteropServices
fv.LegalCopyright |> Assert.areEqual "Copyright \u00A9 Compressed Space Transport 2380"
fv.LegalTrademarks |> Assert.areEqual "CST \u2122"
result.OutText
result.StderrText
|> FscCommand.parseFscOut
|> List.choose (function FscCommand.FscOutputLine.Warning(w,e) -> Some w | _ -> None)
|> Assert.areEqual []

Просмотреть файл

@ -27,7 +27,7 @@ module ProductVersionTest =
|> List.map (fun (a,f,i,e) -> FSharpSuiteTestCaseData(Commands.createTempDir(), a, f, i, e))
[<TestCaseSource("fallbackTestData")>]
let ``should use correct fallback`` assemblyVersion fileVersion infoVersion expected = check (processor {
let ``should use correct fallback`` assemblyVersion fileVersion infoVersion expected = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let fscToLibrary = Printf.ksprintf (fun flags -> FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC flags)

Просмотреть файл

@ -15,7 +15,7 @@ open System.Reflection
module FS2003 =
[<Test; FSharpSuiteTest()>]
let ``should be raised if AssemblyInformationalVersion has invalid version`` () = check (processor {
let ``should be raised if AssemblyInformationalVersion has invalid version`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let fscToLibrary = Printf.ksprintf (FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC)
@ -43,7 +43,7 @@ open System.Reflection
|> Assert.areEqual (45,2048,0,0)
let w =
result.OutText
result.StderrText
|> FscCommand.parseFscOut
|> List.tryFind (function FscCommand.FscOutputLine.Warning ("FS2003", desc) -> true | _ -> false)

Просмотреть файл

@ -13,17 +13,16 @@ let checkTestResult result =
match result with
| Success () -> ()
| Failure (GenericError msg) -> Assert.Fail (msg)
| Failure (ProcessExecError (err, msg)) -> Assert.Fail (sprintf "ERRORLEVEL %i %s" err msg)
| Failure (ProcessExecError (msg1, err, msg2)) -> Assert.Fail (sprintf "%s. ERRORLEVEL %i %s" msg1 err msg2)
| Failure (Skipped msg) -> Assert.Ignore(sprintf "skipped. Reason: %s" msg)
let checkResult result =
match result with
| CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
| CmdResult.ErrorLevel (msg1, err) -> Failure (RunError.ProcessExecError (msg1, err, sprintf "ERRORLEVEL %d" err))
| CmdResult.Success -> Success ()
let skip msg () = Failure (Skipped msg)
let genericError msg () = Failure (GenericError msg)
let errorLevel exitCode msg () = Failure (ProcessExecError (exitCode,msg))
let envVars () =
System.Environment.GetEnvironmentVariables ()
@ -32,7 +31,7 @@ let envVars () =
|> Map.ofSeq
let defaultConfigurationName =
#if !DEBUG
#if DEBUG
DEBUG
#else
RELEASE
@ -65,7 +64,7 @@ let initializeSuite () =
| Some confName -> confName
| None -> configurationName
processor {
attempt {
do! updateCmd env { Configuration = configurationName; Ngen = doNgen; }
|> Attempt.Run
|> function Success () -> Success () | Failure msg -> genericError msg ()
@ -81,7 +80,7 @@ let initializeSuite () =
let directoryExists = Commands.directoryExists (Path.GetTempPath()) >> Option.isSome
let checkfscBinPath () = processor {
let checkfscBinPath () = attempt {
let fscBinPath = cfg.EnvironmentVariables |> Map.tryFind "FSCBINPATH"
return!
@ -91,7 +90,7 @@ let initializeSuite () =
| Some dir -> genericError (sprintf "environment variable 'FSCBinPath' is required to be a valid directory, but is '%s'" dir)
}
let smokeTest () = processor {
let smokeTest () = attempt {
let tempFile ext =
let p = Path.ChangeExtension( Path.GetTempFileName(), ext)
File.AppendAllText (p, """printfn "ciao"; exit 0""")
@ -242,26 +241,65 @@ type FSharpSuiteTestCaseAttribute =
this.Properties |> FSharpTestSuite.setProps dir
type FSharpSuitePermutationsAttribute(dir: string) =
let allPermutations =
[ FSI_FILE;
FSI_STDIN;
FSI_STDIN_OPT;
FSI_STDIN_GUI;
FSC_BASIC;
GENERATED_SIGNATURE;
FSC_OPT_MINUS_DEBUG;
FSC_OPT_PLUS_DEBUG;
SPANISH;
AS_DLL]
let codeAndInferencePermutations =
[ GENERATED_SIGNATURE;
FSI_FILE;
FSC_OPT_PLUS_DEBUG;
AS_DLL ]
let codePermutations =
[ FSI_FILE;
FSC_OPT_PLUS_DEBUG; ]
let slowLibCodePermutations =
[ FSC_OPT_PLUS_DEBUG; ]
let BuildFrom(dir, builder:NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder, methodInfo, suite, permutations: Permutation list) =
permutations
|> List.map (fun p -> (new FSharpSuiteTestCaseData (dir, p)))
|> List.map (fun tc -> builder.BuildTestMethod(methodInfo, suite, tc))
|> Seq.ofList
type FSharpSuiteAllPermutationsAttribute(dir: string) =
inherit NUnitAttribute()
let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
interface NUnit.Framework.Interfaces.ITestBuilder with
member x.BuildFrom(methodInfo, suite) =
let allPermutations =
[ FSI_FILE; FSI_STDIN; FSI_STDIN_OPT; FSI_STDIN_GUI;
FSC_BASIC; FSC_HW; FSC_O3;
GENERATED_SIGNATURE; EMPTY_SIGNATURE; EMPTY_SIGNATURE_OPT;
FSC_OPT_MINUS_DEBUG; FSC_OPT_PLUS_DEBUG;
FRENCH; SPANISH;
AS_DLL;
WRAPPER_NAMESPACE; WRAPPER_NAMESPACE_OPT
]
|> List.map (fun p -> (new FSharpSuiteTestCaseData (dir, p)))
member x.BuildFrom(methodInfo, suite) = BuildFrom(dir, _builder, methodInfo, suite, allPermutations)
type FSharpSuiteCodeAndSignaturePermutationsAttribute(dir: string) =
inherit NUnitAttribute()
let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
interface NUnit.Framework.Interfaces.ITestBuilder with
member x.BuildFrom(methodInfo, suite) = BuildFrom(dir, _builder, methodInfo, suite, codeAndInferencePermutations)
type FSharpSuiteScriptPermutationsAttribute(dir: string) =
inherit NUnitAttribute()
let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
interface NUnit.Framework.Interfaces.ITestBuilder with
member x.BuildFrom(methodInfo, suite) = BuildFrom(dir, _builder, methodInfo, suite, codePermutations)
type FSharpSuiteFscCodePermutationAttribute(dir: string) =
inherit NUnitAttribute()
let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
interface NUnit.Framework.Interfaces.ITestBuilder with
member x.BuildFrom(methodInfo, suite) = BuildFrom(dir, _builder, methodInfo, suite, slowLibCodePermutations)
allPermutations
|> List.map (fun tc -> _builder.BuildTestMethod(methodInfo, suite, tc))
|> Seq.ofList
module FileGuard =
let private remove path = if File.Exists(path) then Commands.rm (Path.GetTempPath()) path
@ -280,7 +318,7 @@ module FileGuard =
let exists (guard: T) = guard.Path |> File.Exists
let checkGuardExists guard = processor {
let checkGuardExists guard = attempt {
if not <| (guard |> FileGuard.exists)
then return! genericError (sprintf "exit code 0 but %s file doesn't exists" (guard.Path |> Path.GetFileName))
}
@ -297,7 +335,8 @@ type RedirectInfo =
and RedirectTo =
| Inherit
| Output of RedirectToType
| OutputAndError of RedirectToType
| OutputAndError of RedirectToType * RedirectToType
| OutputAndErrorToSameFile of RedirectToType
| Error of RedirectToType
and RedirectToType =
@ -320,7 +359,8 @@ module Command =
function
| Inherit -> ""
| Output r-> sprintf " 1%s" (redirectType r)
| OutputAndError r -> sprintf " 1%s 2>&1" (redirectType r)
| OutputAndError (r1, r2) -> sprintf " 1%s 2%s" (redirectType r1) (redirectType r2)
| OutputAndErrorToSameFile r -> sprintf " 1%s 2>1" (redirectType r)
| Error r -> sprintf " 2%s" (redirectType r)
sprintf "%s%s%s%s" path (match args with "" -> "" | x -> " " + x) (inF redirect.Input) (outF redirect.Output)
@ -364,7 +404,13 @@ module Command =
use outFile = redirectTo writer
use toLog = redirectToLog ()
fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (toLog.Post) }
| OutputAndError r ->
| OutputAndError (r1,r2) ->
use writer1 = openWrite r1
use writer2 = openWrite r2
use outFile1 = redirectTo writer1
use outFile2 = redirectTo writer2
fCont { cmdArgs with RedirectOutput = Some (outFile1.Post); RedirectError = Some (outFile2.Post) }
| OutputAndErrorToSameFile r ->
use writer = openWrite r
use outFile = redirectTo writer
fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (outFile.Post) }
@ -402,7 +448,7 @@ module FscCommand =
type FscToLibraryResult = {
OutLibraryFullPath: FilePath
OutText: string list
StderrText: string list
}
let private parseFscOutLine line =
@ -419,11 +465,11 @@ module FscCommand =
let parseFscOut = List.map parseFscOutLine
let fscToLibrary dir exec (fscExe: FilePath) flags (args: FscToLibraryArgs) = processor {
let ``exec >a`` a p = exec { RedirectInfo.Output = OutputAndError(a); Input = None; } p >> checkResult
let fscToLibrary dir exec (fscExe: FilePath) flags (args: FscToLibraryArgs) = attempt {
let ``exec 2>a`` a p = exec { RedirectInfo.Output = RedirectTo.Error(a); Input = None; } p >> checkResult
let outStream = Path.GetTempFileName ()
let fsc = Printf.ksprintf (Commands.fsc (``exec >a`` (Overwrite(outStream))) fscExe)
let fsc = Printf.ksprintf (Commands.fsc (``exec 2>a`` (Overwrite(outStream))) fscExe)
let sourceFiles =
args.SourceFiles
@ -450,5 +496,5 @@ module FscCommand =
let outText = File.ReadAllLines(outStream) |> List.ofArray
return { FscToLibraryResult.OutLibraryFullPath = (Commands.getfullpath dir outDll)
OutText = outText }
StderrText = outText }
}

Просмотреть файл

@ -14,22 +14,22 @@ module Analyses =
let ``fsc >a 2>&1`` cfg dir =
let ``exec >a 2>&1`` outFile p =
Command.exec dir cfg.EnvironmentVariables { Output = OutputAndError(Overwrite(outFile)); Input = None; } p
Command.exec dir cfg.EnvironmentVariables { Output = OutputAndErrorToSameFile(Overwrite(outFile)); Input = None; } p
>> checkResult
Printf.ksprintf (fun flags sources out -> Commands.fsc (``exec >a 2>&1`` out) cfg.FSC flags sources)
let fsdiff cfg dir a b = processor {
let fsdiff cfg dir a b = attempt {
let out = new ResizeArray<string>()
let redirectOutputToFile path args =
log "%s %s" path args
let toLog = redirectToLog ()
use toLog = redirectToLog ()
Process.exec { RedirectOutput = Some (function null -> () | s -> out.Add(s)); RedirectError = Some toLog.Post; RedirectInput = None; } dir cfg.EnvironmentVariables path args
do! (Commands.fsdiff redirectOutputToFile cfg.FSDIFF a b) |> (fun _ -> Success ())
return out.ToArray() |> List.ofArray
}
[<Test; FSharpSuiteTest("optimize/analyses")>]
let functionSizes () = check (processor {
let functionSizes () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let getfullpath = Commands.getfullpath dir
@ -55,7 +55,7 @@ module Analyses =
})
[<Test; FSharpSuiteTest("optimize/analyses")>]
let totalSizes () = check (processor {
let totalSizes () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir
@ -81,7 +81,7 @@ module Analyses =
})
[<Test; FSharpSuiteTest("optimize/analyses")>]
let hasEffect () = check (processor {
let hasEffect () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir
@ -107,7 +107,7 @@ module Analyses =
})
[<Test; FSharpSuiteTest("optimize/analyses")>]
let noNeedToTailcall () = check (processor {
let noNeedToTailcall () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir
@ -137,7 +137,7 @@ module Analyses =
module Inline =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
@ -163,7 +163,7 @@ module Inline =
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let ildasm = Printf.ksprintf (Commands.ildasm exec cfg.ILDASM)
@ -211,7 +211,7 @@ module Inline =
}
[<Test; FSharpSuiteTest("optimize/inline")>]
let ``inline`` () = check (processor {
let ``inline`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -223,7 +223,7 @@ module Inline =
module Stats =
[<Test; FSharpSuiteTest("optimize/stats")>]
let stats () = check (processor {
let stats () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult

Просмотреть файл

@ -13,8 +13,8 @@ let testContext = FSharpTestSuite.testContext
module Graph =
[<Test; FSharpSuitePermutations("perf/graph")>]
let graph p = check (processor {
[<Test; FSharpSuiteScriptPermutations("perf/graph")>]
let graph p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -25,8 +25,8 @@ module Graph =
module Nbody =
[<Test; FSharpSuitePermutations("perf/nbody")>]
let nbody p = check (processor {
[<Test; FSharpSuiteScriptPermutations("perf/nbody")>]
let nbody p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p

Просмотреть файл

@ -13,8 +13,8 @@ let testContext = FSharpTestSuite.testContext
module ``26`` =
[<Test; FSharpSuitePermutations("regression/26")>]
let ``26`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/26")>]
let ``26`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -25,8 +25,8 @@ module ``26`` =
module ``321`` =
[<Test; FSharpSuitePermutations("regression/321")>]
let ``321`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/321")>]
let ``321`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -37,11 +37,11 @@ module ``321`` =
module ``655`` =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// "%FSC%" %fsc_flags% -a -o:pack.dll xlibC.ml
do! fsc "%s -a -o:pack.dll" cfg.fsc_flags ["xlibC.ml"]
@ -57,7 +57,7 @@ module ``655`` =
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fileguard = (Commands.getfullpath dir) >> FileGuard.create
@ -73,7 +73,7 @@ module ``655`` =
}
[<Test; FSharpSuiteTest("regression/655")>]
let ``655`` () = check (processor {
let ``655`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -85,11 +85,11 @@ module ``655`` =
module ``656`` =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// "%FSC%" %fsc_flags% -o:pack.exe misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs
do! fsc "%s -o:pack.exe" cfg.fsc_flags ["misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs"]
@ -98,7 +98,7 @@ module ``656`` =
do! peverify "pack.exe"
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fileguard = (Commands.getfullpath dir) >> FileGuard.create
@ -114,7 +114,7 @@ module ``656`` =
}
[<Test; FSharpSuiteTest("regression/656")>]
let ``656`` () = check (processor {
let ``656`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -127,8 +127,8 @@ module ``656`` =
module ``83`` =
[<Test; FSharpSuitePermutations("regression/83")>]
let ``83`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/83")>]
let ``83`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
// if "%CLR_SUPPORTS_WINFORMS%"=="false" ( goto Skip)
@ -155,8 +155,8 @@ module ``83`` =
module ``84`` =
[<Test; FSharpSuitePermutations("regression/84")>]
let ``84`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/84")>]
let ``84`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -167,11 +167,11 @@ module ``84`` =
module ``85`` =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// if "%CLR_SUPPORTS_GENERICS%"=="false" ( goto Skip)
do! match cfg.EnvironmentVariables |> Map.tryFind "CLR_SUPPORTS_GENERICS" |> Option.map (fun s -> s.ToLower()) with
@ -192,7 +192,7 @@ module ``85`` =
}
[<Test; FSharpSuiteTest("regression/85")>]
let ``85`` () = check (processor {
let ``85`` () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -204,8 +204,8 @@ module ``85`` =
module ``86`` =
[<Test; FSharpSuitePermutations("regression/86")>]
let ``86`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/86")>]
let ``86`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -216,8 +216,8 @@ module ``86`` =
module ``Tuple-bug-1`` =
[<Test; FSharpSuitePermutations("regression/tuple-bug-1")>]
let ``tuple-bug-1`` p = check (processor {
[<Test; FSharpSuiteFscCodePermutation("regression/tuple-bug-1")>]
let ``tuple-bug-1`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p

Просмотреть файл

@ -8,7 +8,7 @@ open PlatformHelpers
open NUnitConf
open FSharpTestSuiteTypes
let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
let private singleNegTestAux (cfg: TestConfig) workDir testname = attempt {
// call %~d0%~p0..\config.bat
ignore "from arguments"
@ -40,22 +40,13 @@ let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
ignore "from arguments"
// REM == Set baseline (fsc vs vs, in case the vs baseline exists)
let BSLFILE =
let VSBSLFILE =
// IF EXIST %testname%.vsbsl (set BSLFILE=%testname%.vsbsl)
// IF NOT EXIST %testname%.vsbsl (set BSLFILE=%testname%.bsl)
if (sprintf "%s.vsbsl" testname) |> fileExists
then sprintf "%s.vsbsl" testname
else sprintf "%s.bsl" testname
// %FSDIFF% %~f0 %~f0
// @if ERRORLEVEL 1 (
// set ERRORMSG=%ERRORMSG% FSDIFF likely not found;
// goto Error
// )
//REVIEW move to suite smoke tests like fsc/fsi?
do! fsdiff BSLFILE BSLFILE
// set sources=
// if exist "%testname%.mli" (set sources=%sources% %testname%.mli)
// if exist "%testname%.fsi" (set sources=%sources% %testname%.fsi)
@ -71,22 +62,21 @@ let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
// if exist "%testname%b.ml" (set sources=%sources% %testname%b.ml)
// if exist "%testname%b.fs" (set sources=%sources% %testname%b.fs)
let sources = [
let src =
[ testname + ".mli"; testname + ".fsi"; testname + ".ml"; testname + ".fs"; testname + ".fsx";
let src = [ testname + ".mli"; testname + ".fsi"; testname + ".ml"; testname + ".fs"; testname + ".fsx";
testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs";
testname + "b.mli"; testname + "b.fsi"; testname + "b.ml"; testname + "b.fs" ]
testname + "b.mli"; testname + "b.fsi"; testname + "b.ml"; testname + "b.fs"; ]
yield! src |> List.filter fileExists
// if exist "helloWorldProvider.dll" (set sources=%sources% -r:helloWorldProvider.dll)
if fileExists "helloWorldProvider.dll"
then yield "-r:helloWorldProvider.dll"
if fileExists "helloWorldProvider.dll" then
yield "-r:helloWorldProvider.dll"
// if exist "%testname%-pre.fs" (
// set sources=%sources% -r:%testname%-pre.dll
// )
if fileExists (testname + "-pre.fs")
then yield (sprintf "-r:%s-pre.dll" testname)
if fileExists (testname + "-pre.fs") then
yield (sprintf "-r:%s-pre.dll" testname)
]
@ -118,16 +108,16 @@ let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
// )
let ``exec 2>`` errPath = Command.exec workDir cfg.EnvironmentVariables { Output = Error(Overwrite(errPath)); Input = None }
let checkErrorLevel1 = function
| CmdResult.ErrorLevel 1 -> Success
| CmdResult.ErrorLevel (_,1) -> Success
| CmdResult.Success | CmdResult.ErrorLevel _ -> NUnitConf.genericError (sprintf "FSC passed unexpectedly for %A" sources)
Printf.ksprintf (fun flags sources errPath -> Commands.fsc (``exec 2>`` errPath) cfg.FSC flags sources |> checkErrorLevel1)
let fsdiff a b = processor {
let fsdiff a b = attempt {
let out = new ResizeArray<string>()
let redirectOutputToFile path args =
log "%s %s" path args
let toLog = redirectToLog ()
use toLog = redirectToLog ()
Process.exec { RedirectOutput = Some (function null -> () | s -> out.Add(s)); RedirectError = Some toLog.Post; RedirectInput = None; } workDir cfg.EnvironmentVariables path args
do! (Commands.fsdiff redirectOutputToFile cfg.FSDIFF a b) |> checkResult
return out.ToArray() |> List.ofArray
@ -159,19 +149,19 @@ let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
// )
// %FSDIFF% %testname%.vserr %BSLFILE% > %testname%.vsdiff
let! testnameDiff = fsdiff (sprintf "%s.vserr" testname) BSLFILE
let! testnameDiff = fsdiff (sprintf "%s.vserr" testname) VSBSLFILE
// for /f %%c IN (%testname%.vsdiff) do (
do! match testnameDiff with
| [] -> Success
| l ->
// echo ***** %testname%.vserr %BSLFILE% differed: a bug or baseline may neeed updating
log "***** %s.vserr %s differed: a bug or baseline may neeed updating" testname BSLFILE
log "***** %s.vserr %s differed: a bug or baseline may neeed updating" testname VSBSLFILE
// set ERRORMSG=%ERRORMSG% %testname%.vserr %BSLFILE% differ;
NUnitConf.genericError (sprintf "%s.vserr %s differ; %A" testname BSLFILE l)
NUnitConf.genericError (sprintf "%s.vserr %s differ; %A" testname VSBSLFILE l)
// echo Good, output %testname%.vserr matched %BSLFILE%
log "Good, output %s.vserr matched %s" testname BSLFILE
log "Good, output %s.vserr matched %s" testname VSBSLFILE
// )
}
@ -209,11 +199,11 @@ let singleNegTest =
// goto :EOF
let flow cfg workDir testname () =
singleNegTest' cfg workDir testname
singleNegTestAux cfg workDir testname
|> Attempt.Run
|> function
| Success () -> doneOK ()
| Failure (Skipped msg) -> doneSkipped workDir msg ()
| Failure (GenericError msg) -> doneError (GenericError msg) msg
| Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
| Failure (ProcessExecError (_,_,msg) as err) -> doneError err msg
flow

Просмотреть файл

@ -42,29 +42,17 @@ let singleTestBuild cfg testDir =
//if exist test.ml (set sources=%sources% test.ml)
//if exist test.fsi (set sources=%sources% test.fsi)
//if exist test.fs (set sources=%sources% test.fs)
//if exist test2.mli (set sources=%sources% test2.mli)
//if exist test2.ml (set sources=%sources% test2.ml)
//if exist test2.fsi (set sources=%sources% test2.fsi)
//if exist test2.fs (set sources=%sources% test2.fs)
//if exist test.fsx (set sources=%sources% test.fsx)
//if exist test2.fsx (set sources=%sources% test2.fsx)
let sources =
["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.mli";"test2.ml";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
|> List.filter fileExists
//set sourceshw=
//if exist test-hw.mli (set sourceshw=%sourceshw% test-hw.mli)
//if exist test-hw.ml (set sourceshw=%sourceshw% test-hw.ml)
//if exist test-hw.fsx (set sourceshw=%sourceshw% test-hw.fsx)
//if exist test2-hw.mli (set sourceshw=%sourceshw% test2-hw.mli)
//if exist test2-hw.ml (set sourceshw=%sourceshw% test2-hw.ml)
//if exist test2-hw.fsx (set sourceshw=%sourceshw% test2-hw.fsx)
let sourceshw =
["test-hw.mli";"test-hw.ml";"test-hw.fsx";"test2-hw.mli";"test2-hw.ml";"test2-hw.fsx"]
|> List.filter fileExists
//rem to run the 64 bit version of the code set FSC_BASIC_64=FSC_BASIC_64
//set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% FSC_HW FSC_O3 GENERATED_SIGNATURE EMPTY_SIGNATURE EMPTY_SIGNATURE_OPT FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG FRENCH SPANISH AS_DLL WRAPPER_NAMESPACE WRAPPER_NAMESPACE_OPT
//set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% GENERATED_SIGNATURE FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG SPANISH AS_DLL
//if "%REDUCED_RUNTIME%"=="1" (
// echo REDUCED_RUNTIME set
@ -103,7 +91,7 @@ let singleTestBuild cfg testDir =
let type_append_tofile = Commands.type_append_tofile testDir
let fsc = Printf.ksprintf (fun flags -> Commands.fsc exec cfg.FSC flags)
let fsc_flags = cfg.fsc_flags
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
let ``echo._tofile`` = Commands.``echo._tofile`` testDir
//:Ok
@ -139,12 +127,12 @@ let singleTestBuild cfg testDir =
//set NonexistentErrorLevel 2> nul
//goto Error
let skipIfExists file = processor {
let skipIfExists file = attempt {
if fileExists file
then return! NUnitConf.skip (sprintf "file '%s' found" file)
}
let skipIfNotExists file = processor {
let skipIfNotExists file = attempt {
if not (fileExists file)
then return! NUnitConf.skip (sprintf "file '%s' not found" file)
}
@ -155,18 +143,18 @@ let singleTestBuild cfg testDir =
/// @if ERRORLEVEL 1 goto Error <para/>
/// ) <para/>
/// </summary>
let doPeverify cmd = processor {
let doPeverify cmd = attempt {
do! skipIfExists "dont.run.peverify"
do! peverify cmd
}
let doNOOP () = processor {
let doNOOP () = attempt {
//@echo No build action to take for this permutation
log "No build action to take for this permutation"
}
let doBasic () = processor {
let doBasic () = attempt {
// FSC %fsc_flags% --define:BASIC_TEST -o:test.exe -g %sources%
//if ERRORLEVEL 1 goto Error
do! fsc "%s --define:BASIC_TEST -o:test.exe -g" fsc_flags sources
@ -178,7 +166,7 @@ let singleTestBuild cfg testDir =
do! doPeverify "test.exe"
}
let doBasic64 () = processor {
let doBasic64 () = attempt {
// "%FSC%" %fsc_flags% --define:BASIC_TEST --platform:x64 -o:testX64.exe -g %sources%
do! fsc "%s --define:BASIC_TEST --platform:x64 -o:testX64.exe -g" fsc_flags sources
@ -188,112 +176,77 @@ let singleTestBuild cfg testDir =
do! doPeverify "testX64.exe"
}
let doFscHW () = processor {
// if exist test-hw.* (
if Directory.EnumerateFiles(testDir, "test-hw.*") |> Seq.exists fileExists then
// "%FSC%" %fsc_flags% -o:test-hw.exe -g %sourceshw%
do! fsc "%s -o:test-hw.exe -g" fsc_flags sourceshw
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" test-hw.exe
// )
do! doPeverify "test-hw.exe"
//)
else
do! NUnitConf.skip (sprintf "file '%s' not found" "test-hw.*")
}
let doFscO3 () = processor {
//"%FSC%" %fsc_flags% --optimize --define:PERF -o:test--optimize.exe -g %sources%
do! fsc "%s --optimize --define:PERF -o:test--optimize.exe -g" fsc_flags sources
//if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" test--optimize.exe
//)
do! doPeverify "test--optimize.exe"
}
let doGeneratedSignature () = processor {
let doGeneratedSignature () = attempt {
//if NOT EXIST dont.use.generated.signature (
do! skipIfExists "dont.use.generated.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
do! skipIfNotExists "test.fs"
// echo Generating interface file...
log "Generating interface file..."
// copy /y %source1% tmptest.ml
do! source1 |> Option.map (fun from -> copy_y from "tmptest.ml")
do! source1 |> Option.map (fun from -> copy_y from "tmptest.fs")
// REM NOTE: use --generate-interface-file since results may be in Unicode
// "%FSC%" %fsc_flags% --sig:tmptest.mli tmptest.ml
do! fsc "%s --sig:tmptest.mli" fsc_flags ["tmptest.ml"]
do! fsc "%s --sig:tmptest.fsi" fsc_flags ["tmptest.fs"]
// echo Compiling against generated interface file...
log "Compiling against generated interface file..."
// "%FSC%" %fsc_flags% -o:tmptest1.exe tmptest.mli tmptest.ml
do! fsc "%s -o:tmptest1.exe" fsc_flags ["tmptest.mli";"tmptest.ml"]
// "%FSC%" %fsc_flags% -o:tmptest1.exe tmptest.fsi tmptest.fs
do! fsc "%s -o:tmptest1.exe" fsc_flags ["tmptest.fsi";"tmptest.fs"]
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" tmptest1.exe
// )
do! doPeverify "tmptest1.exe"
}
let doEmptySignature () = processor {
let doEmptySignature () = attempt {
//if NOT EXIST dont.use.empty.signature (
do! skipIfExists "dont.use.empty.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.fs (
do! skipIfNotExists "test.fs"
// echo Compiling against empty interface file...
log "Compiling against empty interface file..."
// echo // empty file > tmptest2.mli
echo_tofile "// empty file " "tmptest2.mli"
// copy /y %source1% tmptest2.ml
do! source1 |> Option.map (fun from -> copy_y from "tmptest2.ml")
// "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe tmptest2.mli tmptest2.ml
do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe" fsc_flags ["tmptest2.mli";"tmptest2.ml"]
// echo // empty file > tmptest2.fsi
echo_tofile "// empty file " "tmptest2.fsi"
// copy /y %source1% tmptest2.fs
do! source1 |> Option.map (fun from -> copy_y from "tmptest2.fs")
// "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe tmptest2.fsi tmptest2.fs
do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe" fsc_flags ["tmptest2.fsi";"tmptest2.fs"]
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" tmptest2.exe
// )
do! doPeverify "tmptest2.exe"
}
let doEmptySignatureOpt () = processor {
let doEmptySignatureOpt () = attempt {
//if NOT EXIST dont.use.empty.signature (
do! skipIfExists "dont.use.empty.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.fs (
do! skipIfNotExists "test.fs"
// echo Compiling against empty interface file...
log "Compiling against empty interface file..."
// echo // empty file > tmptest2.mli
echo_tofile "// empty file " "tmptest2.mli"
// copy /y %source1% tmptest2.ml
do! source1 |> Option.map (fun from -> copy_y from "tmptest2.ml")
// "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe tmptest2.mli tmptest2.ml
do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe" fsc_flags ["tmptest2.mli";"tmptest2.ml"]
// echo // empty file > tmptest2.fsi
echo_tofile "// empty file " "tmptest2.fsi"
// copy /y %source1% tmptest2.fs
do! source1 |> Option.map (fun from -> copy_y from "tmptest2.fs")
// "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe tmptest2.fsi tmptest2.fs
do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe" fsc_flags ["tmptest2.fsi";"tmptest2.fs"]
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" tmptest2--optimize.exe
// )
do! doPeverify "tmptest2--optimize.exe"
}
let doOptFscMinusDebug () = processor {
let doOptFscMinusDebug () = attempt {
// "%FSC%" %fsc_flags% --optimize- --debug -o:test--optminus--debug.exe -g %sources%
do! fsc "%s --optimize- --debug -o:test--optminus--debug.exe -g" fsc_flags sources
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" test--optminus--debug.exe
// )
do! doPeverify "test--optminus--debug.exe"
}
let doOptFscPlusDebug () = processor {
let doOptFscPlusDebug () = attempt {
// "%FSC%" %fsc_flags% --optimize+ --debug -o:test--optplus--debug.exe -g %sources%
do! fsc "%s --optimize+ --debug -o:test--optplus--debug.exe -g" fsc_flags sources
@ -303,7 +256,7 @@ let singleTestBuild cfg testDir =
do! doPeverify "test--optplus--debug.exe"
}
let doAsDLL () = processor {
let doAsDLL () = attempt {
//REM Compile as a DLL to exercise pickling of interface data, then recompile the original source file referencing this DLL
//REM THe second compilation will not utilize the information from the first in any meaningful way, but the
//REM compiler will unpickle the interface and optimization data, so we test unpickling as well.
@ -328,47 +281,40 @@ let singleTestBuild cfg testDir =
do! doPeverify "test--optimize-client-of-lib.exe"
}
let doWrapperNamespace () = processor {
let doWrapperNamespace () = attempt {
// if NOT EXIST dont.use.wrapper.namespace (
do! skipIfExists "dont.use.wrapper.namespace"
// if exist test.ml (
do! skipIfNotExists "test.ml"
do! skipIfNotExists "test.fs"
// echo Compiling when wrapped in a namespace declaration...
log "Compiling when wrapped in a namespace declaration..."
// echo module TestNamespace.TestModule > tmptest3.ml
echo_tofile "module TestNamespace.TestModule " "tmptest3.ml"
// type %source1% >> tmptest3.ml
source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.ml")
// "%FSC%" %fsc_flags% -o:tmptest3.exe tmptest3.ml
do! fsc "%s -o:tmptest3.exe" fsc_flags ["tmptest3.ml"]
// echo module TestNamespace.TestModule > tmptest3.fs
echo_tofile "module TestNamespace.TestModule " "tmptest3.fs"
// type %source1% >> tmptest3.fs
source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.fs")
// "%FSC%" %fsc_flags% -o:tmptest3.exe tmptest3.fs
do! fsc "%s -o:tmptest3.exe" fsc_flags ["tmptest3.fs"]
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" tmptest3.exe
// )
do! doPeverify "tmptest3.exe"
}
let doWrapperNamespaceOpt () = processor {
let doWrapperNamespaceOpt () = attempt {
//if NOT EXIST dont.use.wrapper.namespace (
do! skipIfExists "dont.use.wrapper.namespace"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.fs (
do! skipIfNotExists "test.fs"
// echo Compiling when wrapped in a namespace declaration...
log "Compiling when wrapped in a namespace declaration..."
// echo module TestNamespace.TestModule > tmptest3.ml
echo_tofile "module TestNamespace.TestModule " "tmptest3.ml"
// type %source1% >> tmptest3.ml
source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.ml")
// "%FSC%" %fsc_flags% --optimize -o:tmptest3--optimize.exe tmptest3.ml
do! fsc "%s --optimize -o:tmptest3--optimize.exe" fsc_flags ["tmptest3.ml"]
// echo module TestNamespace.TestModule > tmptest3.fs
echo_tofile "module TestNamespace.TestModule " "tmptest3.fs"
// type %source1% >> tmptest3.fs
source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.fs")
// "%FSC%" %fsc_flags% --optimize -o:tmptest3--optimize.exe tmptest3.fs
do! fsc "%s --optimize -o:tmptest3--optimize.exe" fsc_flags ["tmptest3.fs"]
// if NOT EXIST dont.run.peverify (
// "%PEVERIFY%" tmptest3--optimize.exe
// )
do! doPeverify "tmptest3--optimize.exe"
}
@ -377,20 +323,13 @@ let singleTestBuild cfg testDir =
| FSI_STDIN -> doNOOP
| FSI_STDIN_OPT -> doNOOP
| FSI_STDIN_GUI -> doNOOP
| FRENCH -> doBasic
| SPANISH -> doBasic
| FSC_BASIC -> doBasic
| FSC_BASIC_64 -> doBasic64
| FSC_HW -> doFscHW
| FSC_O3 -> doFscO3
| GENERATED_SIGNATURE -> doGeneratedSignature
| EMPTY_SIGNATURE -> doEmptySignature
| EMPTY_SIGNATURE_OPT -> doEmptySignatureOpt
| FSC_OPT_MINUS_DEBUG -> doOptFscMinusDebug
| FSC_OPT_PLUS_DEBUG -> doOptFscPlusDebug
| AS_DLL -> doAsDLL
| WRAPPER_NAMESPACE -> doWrapperNamespace
| WRAPPER_NAMESPACE_OPT -> doWrapperNamespaceOpt
let flow p () =
build p ()
@ -398,7 +337,7 @@ let singleTestBuild cfg testDir =
|> function
| Success () -> doneOk ()
| Failure (Skipped msg) -> doneSkipped msg ()
| Failure (GenericError msg) -> doneError (GenericError msg) msg
| Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
| Failure (GenericError msg as err) -> doneError err msg
| Failure (ProcessExecError (_,_,msg) as err) -> doneError err msg
flow

Просмотреть файл

@ -20,34 +20,17 @@ let private singleTestRun' cfg testDir =
// if exist test.ml (set sources=%sources% test.ml)
// if exist test.fsi (set sources=%sources% test.fsi)
// if exist test.fs (set sources=%sources% test.fs)
// if exist test2.mli (set sources=%sources% test2.mli)
// if exist test2.ml (set sources=%sources% test2.ml)
// if exist test2.fsi (set sources=%sources% test2.fsi)
// if exist test2.fs (set sources=%sources% test2.fs)
// if exist test.fsx (set sources=%sources% test.fsx)
// if exist test2.fsx (set sources=%sources% test2.fsx)
let sources =
["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.mli";"test2.ml";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
|> List.filter fileExists
// set sourceshw=
// if exist test-hw.mli (set sourceshw=%sourceshw% test-hw.mli)
// if exist test-hw.ml (set sourceshw=%sourceshw% test-hw.ml)
// if exist test2-hw.mli (set sourceshw=%sourceshw% test2-hw.mli)
// if exist test2-hw.ml (set sourceshw=%sourceshw% test2-hw.ml)
// if exist test-hw.fsi (set sourceshw=%sourceshw% test-hw.fsi)
// if exist test-hw.fs (set sourceshw=%sourceshw% test-hw.fs)
// if exist test2-hw.fsi (set sourceshw=%sourceshw% test2-hw.fsi)
// if exist test2-hw.fs (set sourceshw=%sourceshw% test2-hw.fs)
// if exist test-hw.fsx (set sourceshw=%sourceshw% test-hw.fsx)
// if exist test2-hw.fsx (set sourceshw=%sourceshw% test2-hw.fsx)
let sourceshw =
["test-hw.mli";"test-hw.ml";"test2-hw.mli";"test2-hw.ml";"test-hw.fsi";"test-hw.fs";"test2-hw.fsi";"test2-hw.fs";"test-hw.fsx";"test2-hw.fsx"]
["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
|> List.filter fileExists
// :START
// set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% FSC_HW FSC_O3 GENERATED_SIGNATURE EMPTY_SIGNATURE EMPTY_SIGNATURE_OPT FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG FRENCH SPANISH AS_DLL WRAPPER_NAMESPACE WRAPPER_NAMESPACE_OPT
// set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% FSC_HW FSC_O3 GENERATED_SIGNATURE FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG SPANISH AS_DLL
//
// if "%REDUCED_RUNTIME%"=="1" (
// echo REDUCED_RUNTIME set
@ -98,12 +81,12 @@ let private singleTestRun' cfg testDir =
let createTestOkFile () = NUnitConf.FileGuard.create (getfullpath "test.ok")
let skipIfExists file = processor {
let skipIfExists file = attempt {
if fileExists file
then return! NUnitConf.skip (sprintf "file '%s' found" file)
}
let skipIfNotExists file = processor {
let skipIfNotExists file = attempt {
if not (fileExists file)
then return! NUnitConf.skip (sprintf "file '%s' not found" file)
}
@ -111,7 +94,7 @@ let private singleTestRun' cfg testDir =
// :FSI_STDIN
// @echo do :FSI_STDIN
let runFSI_STDIN () = processor {
let runFSI_STDIN () = attempt {
// if NOT EXIST dont.pipe.to.stdin (
do! skipIfExists "dont.pipe.to.stdin"
@ -129,7 +112,7 @@ let private singleTestRun' cfg testDir =
// :FSI_STDIN_OPT
// @echo do :FSI_STDIN_OPT
let runFSI_STDIN_OPT () = processor {
let runFSI_STDIN_OPT () = attempt {
// if NOT EXIST dont.pipe.to.stdin (
do! skipIfExists "dont.pipe.to.stdin"
@ -147,7 +130,7 @@ let private singleTestRun' cfg testDir =
// :FSI_STDIN_GUI
// @echo do :FSI_STDIN_GUI
let runFSI_STDIN_GUI () = processor {
let runFSI_STDIN_GUI () = attempt {
// if NOT EXIST dont.pipe.to.stdin (
do! skipIfExists "dont.pipe.to.stdin"
@ -165,7 +148,7 @@ let private singleTestRun' cfg testDir =
// :FSI_FILE
// @echo do :FSI_FILE
let runFSI_FILE () = processor {
let runFSI_FILE () = attempt {
// if NOT EXIST dont.run.as.script (
do! skipIfExists "dont.run.as.script"
@ -183,7 +166,7 @@ let private singleTestRun' cfg testDir =
// :FSC_BASIC
// @echo do :FSC_BASIC
let runFSC_BASIC () = processor {
let runFSC_BASIC () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test.exe && (
@ -197,7 +180,7 @@ let private singleTestRun' cfg testDir =
// :FSC_BASIC_64
// @echo do :FSC_BASIC_64
let runFSC_BASIC_64 () = processor {
let runFSC_BASIC_64 () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\testX64.exe && (
@ -209,28 +192,9 @@ let private singleTestRun' cfg testDir =
do! testOkFile |> NUnitConf.checkGuardExists
}
// :FSC_HW
// @echo do :FSC_HW
let runFSC_HW () = processor {
// if exist test-hw.* (
if Directory.EnumerateFiles(testDir, "test-hw.*") |> Seq.exists fileExists then
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test-hw.exe && (
do! exec ("."/"test-hw.exe") ""
// dir test.ok > NUL 2>&1 ) || (
// @echo :FSC_HW failed
// set ERRORMSG=%ERRORMSG% FSC_HW failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
//)
else
do! NUnitConf.skip (sprintf "file '%s' not found" "test-hw.*")
}
// :FSC_O3
// @echo do :FSC_O3
let runFSC_O3 () = processor {
let runFSC_O3 () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test--optimize.exe && (
@ -244,7 +208,7 @@ let private singleTestRun' cfg testDir =
// :FSC_OPT_MINUS_DEBUG
// @echo do :FSC_OPT_MINUS_DEBUG
let runFSC_OPT_MINUS_DEBUG () = processor {
let runFSC_OPT_MINUS_DEBUG () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test--optminus--debug.exe && (
@ -258,7 +222,7 @@ let private singleTestRun' cfg testDir =
// :FSC_OPT_PLUS_DEBUG
// @echo do :FSC_OPT_PLUS_DEBUG
let runFSC_OPT_PLUS_DEBUG () = processor {
let runFSC_OPT_PLUS_DEBUG () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test--optplus--debug.exe && (
@ -272,12 +236,12 @@ let private singleTestRun' cfg testDir =
// :GENERATED_SIGNATURE
// @echo do :GENERATED_SIGNATURE
let runGENERATED_SIGNATURE () = processor {
let runGENERATED_SIGNATURE () = attempt {
// if NOT EXIST dont.use.generated.signature (
do! skipIfExists "dont.use.generated.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.fs (
do! skipIfNotExists "test.fs"
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
@ -292,67 +256,9 @@ let private singleTestRun' cfg testDir =
//)
}
// :EMPTY_SIGNATURE
// @echo do :EMPTY_SIGNATURE
let runEMPTY_SIGNATURE () = processor {
// if NOT EXIST dont.use.empty.signature (
do! skipIfExists "dont.use.empty.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% tmptest2.exe && (
do! exec ("."/"tmptest2.exe") ""
// dir test.ok > NUL 2>&1 ) || (
// @echo :EMPTY_SIGNATURE failed
// set ERRORMSG=%ERRORMSG% FSC_EMPTY_SIGNATURE failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
// )
//)
}
// :EMPTY_SIGNATURE_OPT
// @echo do :EMPTY_SIGNATURE_OPT
let runEMPTY_SIGNATURE_OPT () = processor {
// if NOT EXIST dont.use.empty.signature (
do! skipIfExists "dont.use.empty.signature"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% tmptest2--optimize.exe && (
do! exec ("."/"tmptest2--optimize.exe") ""
// dir test.ok > NUL 2>&1 ) || (
// @echo :EMPTY_SIGNATURE_OPT --optimize failed
// set ERRORMSG=%ERRORMSG% EMPTY_SIGNATURE_OPT --optimize failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
// )
//)
}
// :FRENCH
// @echo do :FRENCH
let runFRENCH () = processor {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test.exe fr-FR && (
do! exec ("."/"test.exe") "fr-FR"
// dir test.ok > NUL 2>&1 ) || (
// @echo :FRENCH failed
// set ERRORMSG=%ERRORMSG% FRENCH failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
}
// :SPANISH
// @echo do :SPANISH
let runSPANISH () = processor {
let runSPANISH () = attempt {
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\test.exe es-ES && (
@ -366,7 +272,7 @@ let private singleTestRun' cfg testDir =
// :AS_DLL
// @echo do :AS_DLL
let runAS_DLL () = processor {
let runAS_DLL () = attempt {
//if NOT EXIST dont.compile.test.as.dll (
do! skipIfExists "dont.compile.test.as.dll"
@ -382,69 +288,18 @@ let private singleTestRun' cfg testDir =
//)
}
// :WRAPPER_NAMESPACE
// @echo do :WRAPPER_NAMESPACE
let runWRAPPER_NAMESPACE () = processor {
// if NOT EXIST dont.use.wrapper.namespace (
do! skipIfExists "dont.use.wrapper.namespace"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\tmptest3.exe && (
do! exec ("."/"tmptest3.exe") ""
// dir test.ok > NUL 2>&1 ) || (
// @echo :WRAPPER_NAMESPACE failed
// set ERRORMSG=%ERRORMSG% WRAPPER_NAMESPACE failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
// )
//)
}
// :WRAPPER_NAMESPACE_OPT
// @echo do :WRAPPER_NAMESPACE_OPT
let runWRAPPER_NAMESPACE_OPT () = processor {
// if NOT EXIST dont.use.wrapper.namespace (
do! skipIfExists "dont.use.wrapper.namespace"
// if exist test.ml (
do! skipIfNotExists "test.ml"
// if exist test.ok (del /f /q test.ok)
use testOkFile = createTestOkFile ()
// %CLIX% .\tmptest3--optimize.exe && (
do! exec ("."/"tmptest3--optimize.exe") ""
// dir test.ok > NUL 2>&1 ) || (
// @echo :WRAPPER_NAMESPACE_OPT failed
// set ERRORMSG=%ERRORMSG% WRAPPER_NAMESPACE_OPT failed;
// )
do! testOkFile |> NUnitConf.checkGuardExists
// )
// )
}
let run = function
| FSI_FILE -> runFSI_FILE
| FSI_STDIN -> runFSI_STDIN
| FSI_STDIN_OPT -> runFSI_STDIN_OPT
| FSI_STDIN_GUI -> runFSI_STDIN_GUI
| FRENCH -> runFRENCH
| SPANISH -> runSPANISH
| FSC_BASIC -> runFSC_BASIC
| FSC_BASIC_64 -> runFSC_BASIC_64
| FSC_HW -> runFSC_HW
| FSC_O3 -> runFSC_O3
| GENERATED_SIGNATURE -> runGENERATED_SIGNATURE
| EMPTY_SIGNATURE -> runEMPTY_SIGNATURE
| EMPTY_SIGNATURE_OPT -> runEMPTY_SIGNATURE_OPT
| FSC_OPT_MINUS_DEBUG -> runFSC_OPT_MINUS_DEBUG
| FSC_OPT_PLUS_DEBUG -> runFSC_OPT_PLUS_DEBUG
| AS_DLL -> runAS_DLL
| WRAPPER_NAMESPACE -> runWRAPPER_NAMESPACE
| WRAPPER_NAMESPACE_OPT -> runWRAPPER_NAMESPACE_OPT
run
@ -479,12 +334,12 @@ let singleTestRun config testDir =
//exit /b %ERRORLEVEL%
Failure (err)
let skipIfNotExists file = processor {
let skipIfNotExists file = attempt {
if not (fileExists file)
then return! NUnitConf.skip (sprintf "file '%s' not found" file)
}
let tests config p = processor {
let tests config p = attempt {
//dir build.ok > NUL ) || (
// @echo 'build.ok' not found.
// set ERRORMSG=%ERRORMSG% Skipped because 'build.ok' not found.
@ -521,7 +376,7 @@ let singleTestRun config testDir =
| Success () -> doneOK ()
| Failure (Skipped msg) -> doneSkipped msg
| Failure (GenericError msg) -> doneError (GenericError msg) msg
| Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
| Failure (ProcessExecError (_,_,msg) as err) -> doneError err msg
flow

Просмотреть файл

@ -14,12 +14,12 @@ let testContext = FSharpTestSuite.testContext
module Bundle =
[<Test; FSharpSuiteTest("tools/bundle")>]
let bundle () = check (processor {
let bundle () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// "%FSC%" %fsc_flags% --progress --standalone -o:test-one-fsharp-module.exe -g test-one-fsharp-module.fs
do! fsc "%s --progress --standalone -o:test-one-fsharp-module.exe -g" cfg.fsc_flags ["test-one-fsharp-module.fs"]
@ -52,8 +52,8 @@ module Bundle =
module Eval =
[<Test; FSharpSuitePermutations("tools/eval")>]
let eval p = check (processor {
[<Test; FSharpSuiteScriptPermutations("tools/eval")>]
let eval p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p

Просмотреть файл

@ -8,7 +8,7 @@ open FSharpTestSuiteTypes
open PlatformHelpers
open NUnitConf
let build (cfg: TestConfig) (dir: string) p = processor {
let build (cfg: TestConfig) (dir: string) p = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let del = Commands.rm dir

Просмотреть файл

@ -8,7 +8,7 @@ open FSharpTestSuiteTypes
open PlatformHelpers
open NUnitConf
let copy (cfg: TestConfig) (dir: string) = processor {
let copy (cfg: TestConfig) (dir: string) = attempt {
let fileExists = Commands.fileExists dir >> Option.isSome
let getfullpath = Commands.getfullpath dir

Просмотреть файл

@ -8,12 +8,16 @@ neg1.fsx(9,38,9,64): typecheck error FS3021: Unexpected exception from provided
neg1.fsx(9,38,9,64): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.IsArrayTypeRaisesException' member 'IsArray': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
neg1.fsx(9,38,9,64): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsArrayTypeRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(9,38,9,64): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsArrayTypeRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(10,38,10,60): typecheck error FS3013: Provided type 'FSharp.EvilProvider.IsArrayTypeReturnsTrue' has 'IsArray' as true, but array types are not supported.
neg1.fsx(10,38,10,60): typecheck error FS3013: Provided type 'FSharp.EvilProvider.IsArrayTypeReturnsTrue' has 'IsArray' as true, but array types are not supported.
neg1.fsx(10,38,10,60): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsArrayTypeReturnsTrue' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(10,38,10,60): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsArrayTypeReturnsTrue' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(11,38,11,66): typecheck error FS3072: The type provider 'Provider.EvilProvider' reported an error: An exception occurred when accessing the 'Name' of a provided type: deliberate error for testing purposes
@ -60,12 +64,16 @@ neg1.fsx(13,38,13,66): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(13,38,13,66): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.IsGenericTypeRaisesException' member 'IsGenericType': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
neg1.fsx(13,38,13,66): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsGenericTypeRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(13,38,13,66): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsGenericTypeRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(14,38,14,62): typecheck error FS3011: Provided type 'FSharp.EvilProvider.IsGenericTypeReturnsTrue' has 'IsGenericType' as true, but generic types are not supported.
neg1.fsx(14,38,14,62): typecheck error FS3011: Provided type 'FSharp.EvilProvider.IsGenericTypeReturnsTrue' has 'IsGenericType' as true, but generic types are not supported.
neg1.fsx(14,38,14,62): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsGenericTypeReturnsTrue' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(14,38,14,62): typecheck error FS3004: The provided type 'FSharp.EvilProvider.IsGenericTypeReturnsTrue' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(15,38,15,70): typecheck error FS3021: Unexpected exception from provided type 'TypeWhereFullNameRaisesException' member 'FullName': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -152,6 +160,8 @@ neg1.fsx(17,38,17,71): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(17,38,17,71): typecheck error FS3041: Expected provided type with path 'FSharp.EvilProvider' but provided type has path ''
neg1.fsx(17,38,17,71): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereNamespaceRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(17,38,17,71): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereNamespaceRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(17,38,17,71): typecheck error FS3033: The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -168,6 +178,8 @@ neg1.fsx(17,38,17,71): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(17,38,17,71): typecheck error FS3041: Expected provided type with path 'FSharp.EvilProvider' but provided type has path ''
neg1.fsx(17,38,17,71): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereNamespaceRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(17,38,17,71): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereNamespaceRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(17,38,17,71): typecheck error FS3033: The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -180,6 +192,8 @@ neg1.fsx(19,39,19,67): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(19,39,19,67): typecheck error FS3021: Unexpected exception from provided type 'DeclaringTypeRaisesException' member 'DeclaringType': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
neg1.fsx(19,39,19,67): typecheck error FS3004: The provided type 'FSharp.EvilProvider.DeclaringTypeRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(19,39,19,67): typecheck error FS3004: The provided type 'FSharp.EvilProvider.DeclaringTypeRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(19,39,19,67): typecheck error FS3033: The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -188,6 +202,8 @@ neg1.fsx(19,39,19,67): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(19,39,19,67): typecheck error FS3021: Unexpected exception from provided type 'DeclaringTypeRaisesException' member 'DeclaringType': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
neg1.fsx(19,39,19,67): typecheck error FS3004: The provided type 'FSharp.EvilProvider.DeclaringTypeRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(19,39,19,67): typecheck error FS3004: The provided type 'FSharp.EvilProvider.DeclaringTypeRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(19,39,19,67): typecheck error FS3033: The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -272,6 +288,8 @@ neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(23,39,23,76): typecheck error FS0039: The type 'TypeWhereGetPropertiesRaisesException' is not defined
neg1.fsx(24,39,24,77): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(24,39,24,77): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
@ -374,6 +392,8 @@ neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provide
neg1.fsx(30,39,30,72): typecheck error FS0039: The type 'TypeWhereGetPropertiesReturnsNull' is not defined
neg1.fsx(31,39,31,73): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesReturnsNull' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(31,39,31,73): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
@ -400,10 +420,16 @@ neg1.fsx(33,39,33,72): typecheck error FS3042: Unexpected 'null' return value fr
neg1.fsx(33,39,33,72): typecheck error FS3042: Unexpected 'null' return value from provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesReturnsNull' member 'GetInterfaces'
neg1.fsx(33,39,33,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesReturnsNull' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(33,39,33,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(36,38,36,81): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetGenericArgumentsRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(36,38,36,81): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetGenericArgumentsRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(37,38,37,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetMembersRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(37,38,37,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetMembersRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1.fsx(42,103,42,105): typecheck error FS3045: Invalid static argument to provided type. Expected an argument of kind 'int'.

Просмотреть файл

@ -3,4 +3,6 @@ neg1_a.fsx(7,39,7,76): typecheck error FS3021: Unexpected exception from provide
neg1_a.fsx(7,39,7,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesRaisesException' member 'GetInterfaces': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
neg1_a.fsx(7,39,7,76): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesRaisesException' has member 'Boo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
neg1_a.fsx(7,39,7,76): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.

Просмотреть файл

@ -10,7 +10,7 @@ open PlatformHelpers
let testContext = FSharpTestSuite.testContext
let requireVSUltimate cfg = processor {
let requireVSUltimate cfg = attempt {
do! match cfg.INSTALL_SKU with
| Some (Ultimate) -> Success
| x ->
@ -25,8 +25,8 @@ module Builtin =
module EdmxFile =
[<Test; FSharpSuitePermutations("typeProviders/builtin/EdmxFile")>]
let EdmxFile p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/builtin/EdmxFile")>]
let EdmxFile p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
//call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
@ -40,8 +40,8 @@ module Builtin =
module ODataService =
[<Test; FSharpSuitePermutations("typeProviders/builtin/ODataService")>]
let oDataService p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/builtin/ODataService")>]
let oDataService p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
//call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
@ -55,8 +55,9 @@ module Builtin =
module SqlDataConnection =
[<Test; FSharpSuitePermutations("typeProviders/builtin/SqlDataConnection")>]
let sqlDataConnection p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/builtin/SqlDataConnection")>]
let sqlDataConnection p = check (attempt {
let p = FSC_OPT_PLUS_DEBUG
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
@ -89,8 +90,8 @@ module Builtin =
module WsdlService =
[<Test; FSharpSuitePermutations("typeProviders/builtin/WsdlService")>]
let wsdlService p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/builtin/WsdlService")>]
let wsdlService p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
//call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
@ -105,7 +106,7 @@ module Builtin =
module DiamondAssembly =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
@ -134,10 +135,10 @@ module DiamondAssembly =
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
let fileguard = (Commands.getfullpath dir) >> FileGuard.create
@ -173,7 +174,7 @@ module DiamondAssembly =
}
[<Test; FSharpSuiteTest("typeProviders/diamondAssembly")>]
let diamondAssembly () = check (processor {
let diamondAssembly () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -187,7 +188,7 @@ module DiamondAssembly =
module GlobalNamespace =
[<Test; FSharpSuiteTest("typeProviders/globalNamespace")>]
let globalNamespace () = check (processor {
let globalNamespace () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
@ -205,11 +206,11 @@ module GlobalNamespace =
module HelloWorld =
let build cfg dir p = processor {
let build cfg dir p = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
let del = Commands.rm dir
let execIn workDir p = Command.exec workDir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc' execIn = Printf.ksprintf (Commands.fsc execIn cfg.FSC)
@ -323,8 +324,8 @@ module HelloWorld =
}
[<Test; FSharpSuitePermutations("typeProviders/helloWorld")>]
let helloWorld p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/helloWorld")>]
let helloWorld p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir p
@ -337,7 +338,7 @@ module HelloWorld =
module HelloWorldCSharp =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
@ -372,10 +373,10 @@ module HelloWorldCSharp =
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// "%PEVERIFY%" magic.dll
do! peverify "magic.dll"
@ -392,7 +393,7 @@ module HelloWorldCSharp =
}
[<Test; FSharpSuiteTest("typeProviders/helloWorldCSharp")>]
let helloWorldCSharp () = check (processor {
let helloWorldCSharp () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir
@ -451,7 +452,7 @@ module NegTests =
|> List.map (fun t -> FSharpSuiteTestCaseData("typeProviders/negTests", t))
[<Test; TestCaseSource("testData")>]
let negTests name = check (processor {
let negTests name = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
@ -511,41 +512,35 @@ module NegTests =
ignore "is a parametrized test, like --withDefine"
// :Preprocess
let preprocess bslppName pref = processor {
let tempFile = Path.GetTempFileName()
let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Output(Overwrite(tempFile)); Input = Some(RedirectInput(l)) } p >> checkResult
let ``| exec >`` out p = Command.exec dir cfg.EnvironmentVariables { Output = Output(Overwrite(out)); Input = Some(RedirectInput(tempFile)) } p >> checkResult
let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
let ``| fsi >`` = Printf.ksprintf (fun flags sources out -> Commands.fsi (``| exec >`` out) cfg.FSI flags sources)
// "%FSI%" --exec sed.fsx "<ASSEMBLY>" "%~d0%~p0provider_%1.dll" < %~1.%~2bslpp
do! ``fsi <`` """--exec sed.fsx "<ASSEMBLY>" "%s" """ (getfullpath (sprintf "provider_%s.dll" name)) (sprintf "%s.%sbslpp" bslppName pref)
// | fsi --exec sed.fsx "<URIPATH>" "file:///%CD%\\" > %~1.%~2bsl
do! ``| fsi >`` """--exec sed.fsx "<URIPATH>" "%O" """ (Uri(dir |> Commands.pathAddBackslash)) [] (sprintf "%s.%sbsl" bslppName pref)
let preprocess name pref =
attempt {
let dirp = (dir |> Commands.pathAddBackslash)
do
File.ReadAllText(sprintf "%s%s.%sbslpp" dirp name pref)
.Replace("<ASSEMBLY>", getfullpath (sprintf "provider_%s.dll" name))
.Replace("<URIPATH>",sprintf "file:///%s" dirp)
|> fun txt -> File.WriteAllText(sprintf "%s%s.%sbsl" dirp name pref,txt)
}
// :RunTestWithDefine
let runTestWithDefine = processor {
let runTestWithDefine = attempt {
// "%FSC%" --define:%1 --out:provider_%1.dll -a provider.fsx
do! fsc (sprintf "--define:%s --out:provider_%s.dll -a" name name) ["provider.fsx"]
do! if name = "ProviderAttribute_EmptyConsume" || name = "providerAttributeErrorConsume" then Success ()
else fsc (sprintf "--define:%s --out:provider_%s.dll -a" name name) ["provider.fsx"]
// :RunTest
// if EXIST %1.bslpp call :Preprocess "%1" ""
do! if fileExists (sprintf "%s.bslpp" name)
then preprocess name ""
do! if fileExists (sprintf "%s.bslpp" name) then preprocess name ""
else Success
// if EXIST %1.vsbslpp call :Preprocess "%1" "vs"
do! if fileExists (sprintf "%s.vsbslpp" name)
then preprocess name "vs"
do! if fileExists (sprintf "%s.vsbslpp" name) then preprocess name "vs"
else Success
// :DoRunTest
// call ..\..\single-neg-test.bat %1
//let cfg2 = {cfg with fsc_flags = sprintf "%s -r:provider_%s.dll" cfg.fsc_flags name }
do! SingleNegTest.singleNegTest cfg dir name
}
@ -567,8 +562,8 @@ module NegTests =
module SplitAssembly =
[<Test; FSharpSuitePermutations("typeProviders/splitAssembly")>]
let splitAssembly p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typeProviders/splitAssembly")>]
let splitAssembly p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
@ -589,7 +584,7 @@ module SplitAssembly =
module WedgeAssembly =
let build cfg dir = processor {
let build cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
@ -648,10 +643,10 @@ module WedgeAssembly =
}
let run cfg dir = processor {
let run cfg dir = attempt {
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
// "%PEVERIFY%" test2a.dll
do! peverify "test2a.dll"
@ -668,7 +663,7 @@ module WedgeAssembly =
}
[<Test; FSharpSuiteTest("typeProviders/wedgeAssembly")>]
let wedgeAssembly () = check (processor {
let wedgeAssembly () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! build cfg dir

Просмотреть файл

@ -13,8 +13,8 @@ let testContext = FSharpTestSuite.testContext
module ``Full-rank-arrays`` =
[<Test; FSharpSuitePermutations("typecheck/full-rank-arrays")>]
let ``full-rank-arrays`` p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typecheck/full-rank-arrays")>]
let ``full-rank-arrays`` p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
@ -31,8 +31,8 @@ module ``Full-rank-arrays`` =
module Misc =
[<Test; FSharpSuitePermutations("typecheck/misc")>]
let misc p = check (processor {
[<Test; FSharpSuiteScriptPermutations("typecheck/misc")>]
let misc p = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
do! SingleTestBuild.singleTestBuild cfg dir p
@ -44,12 +44,12 @@ module Misc =
module Sigs =
[<Test; FSharpSuiteTest("typecheck/sigs")>]
let sigs () = check (processor {
let sigs () = check (attempt {
let { Directory = dir; Config = cfg } = testContext ()
let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
let peverify = Commands.peverify exec cfg.PEVERIFY ""
let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo"
let fsc_flags = cfg.fsc_flags
let singleNegTest = SingleNegTest.singleNegTest cfg dir
@ -126,77 +126,18 @@ module Sigs =
// "%PEVERIFY%" pos10.dll
do! peverify "pos10.dll"
// call ..\..\single-neg-test.bat neg90
// call ..\..\single-neg-test.bat neg89
// call ..\..\single-neg-test.bat neg88
do! processor.For (["neg90"; "neg89"; "neg88"], singleNegTest)
// "%FSC%" %fsc_flags% -a -o:pos09.dll pos09.fs
do! fsc "%s -a -o:pos09.dll" fsc_flags ["pos09.fs"]
// "%PEVERIFY%" pos09.dll
do! peverify "pos09.dll"
// call ..\..\single-neg-test.bat neg87
// call ..\..\single-neg-test.bat neg86
// call ..\..\single-neg-test.bat neg85
// call ..\..\single-neg-test.bat neg84
// call ..\..\single-neg-test.bat neg83
// call ..\..\single-neg-test.bat neg82
// call ..\..\single-neg-test.bat neg81
// call ..\..\single-neg-test.bat neg80
// call ..\..\single-neg-test.bat neg79
// call ..\..\single-neg-test.bat neg78
// call ..\..\single-neg-test.bat neg77
// call ..\..\single-neg-test.bat neg76
// call ..\..\single-neg-test.bat neg75
// call ..\..\single-neg-test.bat neg74
// call ..\..\single-neg-test.bat neg73
// call ..\..\single-neg-test.bat neg72
// call ..\..\single-neg-test.bat neg71
// call ..\..\single-neg-test.bat neg70
// call ..\..\single-neg-test.bat neg69
// call ..\..\single-neg-test.bat neg68
// call ..\..\single-neg-test.bat neg67
// call ..\..\single-neg-test.bat neg66
// call ..\..\single-neg-test.bat neg65
// call ..\..\single-neg-test.bat neg64
// call ..\..\single-neg-test.bat neg61
// call ..\..\single-neg-test.bat neg63
// call ..\..\single-neg-test.bat neg62
// call ..\..\single-neg-test.bat neg20
// call ..\..\single-neg-test.bat neg24
// call ..\..\single-neg-test.bat neg32
// call ..\..\single-neg-test.bat neg37
// call ..\..\single-neg-test.bat neg37_a
// call ..\..\single-neg-test.bat neg60
// call ..\..\single-neg-test.bat neg59
// call ..\..\single-neg-test.bat neg58
// call ..\..\single-neg-test.bat neg57
// call ..\..\single-neg-test.bat neg56
// call ..\..\single-neg-test.bat neg56_a
// call ..\..\single-neg-test.bat neg56_b
// call ..\..\single-neg-test.bat neg55
// call ..\..\single-neg-test.bat neg54
// call ..\..\single-neg-test.bat neg53
// call ..\..\single-neg-test.bat neg52
// call ..\..\single-neg-test.bat neg51
// call ..\..\single-neg-test.bat neg50
// call ..\..\single-neg-test.bat neg49
// call ..\..\single-neg-test.bat neg48
// call ..\..\single-neg-test.bat neg47
// call ..\..\single-neg-test.bat neg46
// call ..\..\single-neg-test.bat neg10
// call ..\..\single-neg-test.bat neg10_a
// call ..\..\single-neg-test.bat neg45
// call ..\..\single-neg-test.bat neg44
// call ..\..\single-neg-test.bat neg43
// call ..\..\single-neg-test.bat neg38
// call ..\..\single-neg-test.bat neg39
// call ..\..\single-neg-test.bat neg40
// call ..\..\single-neg-test.bat neg41
// call ..\..\single-neg-test.bat neg42
do! processor.For (["neg87"; "neg86"; "neg85"; "neg84"; "neg83"; "neg82"; "neg81"; "neg80"; "neg79"; "neg78"; "neg77"; "neg76"; "neg75"; "neg74"; "neg73"; "neg72"; "neg71"; "neg70"; "neg69"; "neg68"; "neg67"; "neg66"; "neg65"; "neg64"; "neg61"; "neg63"; "neg62"; "neg20"; "neg24"; "neg32"; "neg37"; "neg37_a"; "neg60"; "neg59"; "neg58"; "neg57"; "neg56"; "neg56_a"; "neg56_b"; "neg55"; "neg54"; "neg53"; "neg52"; "neg51"; "neg50"; "neg49"; "neg48"; "neg47"; "neg46"; "neg10"; "neg10_a"; "neg45"; "neg44"; "neg43"; "neg38"; "neg39"; "neg40"; "neg41"; "neg42"], singleNegTest)
do! attempt.For (["neg90"; "neg89"; "neg88";
"neg87"; "neg86"; "neg85"; "neg84"; "neg83"; "neg82"; "neg81"; "neg80"; "neg79"; "neg78"; "neg77"; "neg76"; "neg75";
"neg74"; "neg73"; "neg72"; "neg71"; "neg70"; "neg69"; "neg68"; "neg67"; "neg66"; "neg65"; "neg64"; "neg61"; "neg63";
"neg62"; "neg20"; "neg24"; "neg32"; "neg37"; "neg37_a"; "neg60"; "neg59"; "neg58"; "neg57"; "neg56"; "neg56_a"; "neg56_b";
"neg55"; "neg54"; "neg53"; "neg52"; "neg51"; "neg50"; "neg49"; "neg48"; "neg47"; "neg46"; "neg10"; "neg10_a"; "neg45";
"neg44"; "neg43"; "neg38"; "neg39"; "neg40"; "neg41"; "neg42"], singleNegTest)
// "%FSC%" %fsc_flags% -a -o:pos07.dll pos07.fs
do! fsc "%s -a -o:pos07.dll" fsc_flags ["pos07.fs"]
@ -204,7 +145,6 @@ module Sigs =
// "%PEVERIFY%" pos07.dll
do! peverify "pos07.dll"
// "%FSC%" %fsc_flags% -a -o:pos08.dll pos08.fs
do! fsc "%s -a -o:pos08.dll" fsc_flags ["pos08.fs"]
@ -230,64 +170,12 @@ module Sigs =
// "%PEVERIFY%" pos03a.dll
do! peverify "pos03a.dll"
// call ..\..\single-neg-test.bat neg34
// call ..\..\single-neg-test.bat neg33
// call ..\..\single-neg-test.bat neg30
// call ..\..\single-neg-test.bat neg31
// call ..\..\single-neg-test.bat neg29
// call ..\..\single-neg-test.bat neg28
// call ..\..\single-neg-test.bat neg07
// call ..\..\single-neg-test.bat neg_byref_20
// call ..\..\single-neg-test.bat neg_byref_1
// call ..\..\single-neg-test.bat neg_byref_2
// call ..\..\single-neg-test.bat neg_byref_3
// call ..\..\single-neg-test.bat neg_byref_4
// call ..\..\single-neg-test.bat neg_byref_5
// call ..\..\single-neg-test.bat neg_byref_6
// call ..\..\single-neg-test.bat neg_byref_7
// call ..\..\single-neg-test.bat neg_byref_8
// call ..\..\single-neg-test.bat neg_byref_10
// call ..\..\single-neg-test.bat neg_byref_11
// call ..\..\single-neg-test.bat neg_byref_12
// call ..\..\single-neg-test.bat neg_byref_13
// call ..\..\single-neg-test.bat neg_byref_14
// call ..\..\single-neg-test.bat neg_byref_15
// call ..\..\single-neg-test.bat neg_byref_16
// call ..\..\single-neg-test.bat neg_byref_17
// call ..\..\single-neg-test.bat neg_byref_18
// call ..\..\single-neg-test.bat neg_byref_19
// call ..\..\single-neg-test.bat neg_byref_21
// call ..\..\single-neg-test.bat neg_byref_22
// call ..\..\single-neg-test.bat neg_byref_23
// call ..\..\single-neg-test.bat neg36
// call ..\..\single-neg-test.bat neg17
// call ..\..\single-neg-test.bat neg26
// call ..\..\single-neg-test.bat neg27
// call ..\..\single-neg-test.bat neg25
// call ..\..\single-neg-test.bat neg03
// call ..\..\single-neg-test.bat neg23
// call ..\..\single-neg-test.bat neg22
// call ..\..\single-neg-test.bat neg21
// call ..\..\single-neg-test.bat neg04
// call ..\..\single-neg-test.bat neg05
// call ..\..\single-neg-test.bat neg06
// call ..\..\single-neg-test.bat neg06_a
// call ..\..\single-neg-test.bat neg06_b
// call ..\..\single-neg-test.bat neg08
// call ..\..\single-neg-test.bat neg09
// call ..\..\single-neg-test.bat neg11
// call ..\..\single-neg-test.bat neg12
// call ..\..\single-neg-test.bat neg13
// call ..\..\single-neg-test.bat neg14
// call ..\..\single-neg-test.bat neg16
// call ..\..\single-neg-test.bat neg18
// call ..\..\single-neg-test.bat neg19
// call ..\..\single-neg-test.bat neg01
// call ..\..\single-neg-test.bat neg02
// call ..\..\single-neg-test.bat neg15
do! processor.For(["neg34"; "neg33"; "neg30"; "neg31"; "neg29"; "neg28"; "neg07"; "neg_byref_20"; "neg_byref_1"; "neg_byref_2"; "neg_byref_3"; "neg_byref_4"; "neg_byref_5"; "neg_byref_6"; "neg_byref_7"; "neg_byref_8"; "neg_byref_10"; "neg_byref_11"; "neg_byref_12"; "neg_byref_13"; "neg_byref_14"; "neg_byref_15"; "neg_byref_16"; "neg_byref_17"; "neg_byref_18"; "neg_byref_19"; "neg_byref_21"; "neg_byref_22"; "neg_byref_23"; "neg36"; "neg17"; "neg26"; "neg27"; "neg25"; "neg03"; "neg23"; "neg22"; "neg21"; "neg04"; "neg05"; "neg06"; "neg06_a"; "neg06_b"; "neg08"; "neg09"; "neg11"; "neg12"; "neg13"; "neg14"; "neg16"; "neg18"; "neg19"; "neg01"; "neg02"; "neg15" ], singleNegTest)
do! attempt.For(["neg34"; "neg33"; "neg30"; "neg31"; "neg29"; "neg28"; "neg07"; "neg_byref_20";
"neg_byref_1"; "neg_byref_2"; "neg_byref_3"; "neg_byref_4"; "neg_byref_5"; "neg_byref_6"; "neg_byref_7"; "neg_byref_8";
"neg_byref_10"; "neg_byref_11"; "neg_byref_12"; "neg_byref_13"; "neg_byref_14"; "neg_byref_15"; "neg_byref_16";
"neg_byref_17"; "neg_byref_18"; "neg_byref_19"; "neg_byref_21"; "neg_byref_22"; "neg_byref_23"; "neg36"; "neg17"; "neg26";
"neg27"; "neg25"; "neg03"; "neg23"; "neg22"; "neg21"; "neg04"; "neg05"; "neg06"; "neg06_a"; "neg06_b"; "neg08"; "neg09";
"neg11"; "neg12"; "neg13"; "neg14"; "neg16"; "neg18"; "neg19"; "neg01"; "neg02"; "neg15" ], singleNegTest)
// echo Some random positive cases found while developing the negative tests
// "%FSC%" %fsc_flags% -a -o:pos01a.dll pos01a.fsi pos01a.fs

Просмотреть файл

@ -1,8 +0,0 @@
// #Regression #NoMono #NoMT #CodeGen #EmittedIL #NETFX20Only #NETFX40Only
// Regression for Dev11:12545, we were incorrectly inlining calls to LazyExtensions::Force instead of Lazy.Value from mscorlib on 4.0
open Microsoft.FSharp.Control.LazyExtensions
let x = lazy(1)
x.Force() |> ignore

Просмотреть файл

@ -1,136 +0,0 @@
// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1
// Copyright (c) Microsoft Corporation. All rights reserved.
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern FSharp.Core
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:0:0:0
}
.assembly LazyNoInline01
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
int32,
int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 )
// --- The following custom attribute is added automatically, do not uncomment -------
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.mresource public FSharpSignatureData.LazyNoInline01
{
// Offset: 0x00000000 Length: 0x000001A8
}
.mresource public FSharpOptimizationData.LazyNoInline01
{
// Offset: 0x000001B0 Length: 0x00000074
}
.module LazyNoInline01.exe
// MVID: {4CC2216E-3328-E592-A745-03836E21C24C}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x00330000
// =============== CLASS MEMBERS DECLARATION ===================
.class public abstract auto ansi sealed LazyNoInline01
extends [mscorlib]System.Object
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 )
.class auto ansi serializable nested assembly beforefieldinit x@3
extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>
{
.method assembly specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor()
IL_0006: ret
} // end of method x@3::.ctor
.method public strict virtual instance int32
Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed
{
// Code size 3 (0x3)
.maxstack 5
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 3,3 : 14,15
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: ret
} // end of method x@3::Invoke
} // end of class x@3
.method public specialname static class [mscorlib]System.Lazy`1<int32>
get_x() cil managed
{
// Code size 6 (0x6)
.maxstack 4
IL_0000: ldsfld class [mscorlib]System.Lazy`1<int32> '<StartupCode$LazyNoInline01>'.$LazyNoInline01::x@3
IL_0005: ret
} // end of method LazyNoInline01::get_x
.property class [mscorlib]System.Lazy`1<int32>
x()
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 )
.get class [mscorlib]System.Lazy`1<int32> LazyNoInline01::get_x()
} // end of property LazyNoInline01::x
} // end of class LazyNoInline01
.class private abstract auto ansi sealed '<StartupCode$LazyNoInline01>'.$LazyNoInline01
extends [mscorlib]System.Object
{
.field static assembly class [mscorlib]System.Lazy`1<int32> x@3
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly int32 init@
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
.method public static void main@() cil managed
{
.entrypoint
// Code size 32 (0x20)
.maxstack 4
.locals init ([0] class [mscorlib]System.Lazy`1<int32> x,
[1] int32 V_1,
[2] int32 V_2)
.line 3,3 : 1,16
IL_0000: nop
IL_0001: newobj instance void LazyNoInline01/x@3::.ctor()
IL_0006: call class [mscorlib]System.Lazy`1<!!0> [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Create<int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<class [FSharp.Core]Microsoft.FSharp.Core.Unit,!!0>)
IL_000b: dup
IL_000c: stsfld class [mscorlib]System.Lazy`1<int32> '<StartupCode$LazyNoInline01>'.$LazyNoInline01::x@3
IL_0011: stloc.0
.line 5,5 : 1,20
IL_0012: call class [mscorlib]System.Lazy`1<int32> LazyNoInline01::get_x()
IL_0017: call !!0 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Force<int32>(class [mscorlib]System.Lazy`1<!!0>)
IL_001c: stloc.1
IL_001d: ldloc.1
IL_001e: stloc.2
IL_001f: ret
} // end of method $LazyNoInline01::main@
} // end of class '<StartupCode$LazyNoInline01>'.$LazyNoInline01
// =============================================================
// *********** DISASSEMBLY COMPLETE ***********************

Просмотреть файл

@ -50,7 +50,4 @@
SOURCE=GeneralizationOnUnions01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GeneralizationOnUnions01.exe" # GeneralizationOnUnions01.fs
# Note that unlike other codegen tests this requires --optimize+ since we're testing for the prescence of inlined code
ReqPP SOURCE=LazyNoInline01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LazyNoInline01.exe NetFx40" # LazyNoInline01.fs - NetFx40
SOURCE=AbstractClass.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AbstractClass.exe" # AbstractClass.fs

Просмотреть файл

@ -1,5 +0,0 @@
// #NoMT #CompilerOptions #RequiresPowerPack
namespace LibforfscArgOrder
type T =
static member Member = 1

Просмотреть файл

@ -16,5 +16,3 @@ NoCrossVer SOURCE=E_RefFSharpCore.fs SCFLAGS="-r FSharp.Core" # E_RefFSharpCo
SOURCE=MissingEXE.fsx SCFLAGS="-r:MissingEXE.exe" FSIMODE=EXEC # MissingEXE.fsx (-r:)
SOURCE=MissingEXE.fsx SCFLAGS="-r MissingEXE.exe" FSIMODE=EXEC # MissingEXE.fsx (-r )
ReqPP SOURCE="fscArgOrder.fsi fscArgOrder.fs" SCFLAGS="--define:NO_INSTALLED_ILX_CONFIGS -r:FSharp.PowerPack.dll -r:System.Core.dll -r:FSharp.PowerPack.Linq.dll --nowarn:20 --define:COMPILED --optimize -r:LibforfscArgOrder.dll --target:library -o:dbwlib2.optimize.dll" PRECMD="\$FSC_PIPE -a LibforfscArgOrder.fs" COMPILE_ONLY=1 # fscArgOrder.fs (-r:)
ReqPP SOURCE="fscArgOrder.fsi fscArgOrder.fs" SCFLAGS="--define:NO_INSTALLED_ILX_CONFIGS -r FSharp.PowerPack.dll -r:System.Core.dll -r:FSharp.PowerPack.Linq.dll --nowarn:20 --define:COMPILED --optimize -r:LibforfscArgOrder.dll --target:library -o:dbwlib2.optimize.dll" PRECMD="\$FSC_PIPE -a LibforfscArgOrder.fs" COMPILE_ONLY=1 # fscArgOrder.fs (-r )

Просмотреть файл

@ -1,8 +0,0 @@
// #Regression #NoMT #CompilerOptions #RequiresPowerPack
// Regression test for FSHARP1.0:4271
// Big mistery: compiler does not produce the expected .dll when the command line argruments are rearranged
//<Expects status="success"></Expects>
module fscArgOrder.fscArgOrder
let v1 : int = LibforfscArgOrder.T.Member

Просмотреть файл

@ -1,8 +0,0 @@
// #Regression #NoMT #CompilerOptions #RequiresPowerPack
// Regression test for FSHARP1.0:4271
// Big mistery: compiler does not produce the expected .dll when the command line argruments are rearranged
//<Expects status="success"></Expects>
module fscArgOrder.fscArgOrder
val v1 : int

Просмотреть файл

@ -1,11 +0,0 @@
// #Conformance #BasicGrammarElements #Constants #ReqNOMT #RequiresPowerPack #NETFX20Only
#light
// Verify the ability to specify basic constants - continued
// We now need a reference to FSharp.PowerPack.dll in order for this to compile!
#r "FSharp.PowerPack.dll"
let bignumConst = 1N
exit 0

Просмотреть файл

@ -1,7 +1,7 @@
// #Regression #Conformance #BasicGrammarElements #Constants #NETFX20Only
// Verify the ability to specify basic constants - continued
// We now need a reference to FSharp.PowerPack.dll in order for this to compile!
// #r "FSharp.PowerPack.dll"
//<Expects id="FS0784" span="(7,19-7,21)" status="error">This numeric literal requires that a module 'NumericLiteralN' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope</Expects>
let bignumConst = 1N

Просмотреть файл

@ -1,8 +1,8 @@
// #Regression #Conformance #BasicGrammarElements #Constants #NoMono #ReqNOMT #NETFX40Only
// Verify the ability to specify basic constants - continued
// We now need a reference to FSharp.PowerPack.dll in order for this to compile!
// #r "FSharp.PowerPack.dll"
// error FS0191: This numeric literal requires that a module 'NumericLiteralN' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope
//<Expects id="FS0784" span="(9,19-9,21)" status="error">This numeric literal requires that a module 'NumericLiteralN' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope</Expects>

Просмотреть файл

@ -1,5 +1,4 @@
SOURCE=BasicConstants.fs # BasicConstants.fs
NoMT,ReqPP SOURCE=BasicConstantsBigNum01.fsx # BasicConstantsBigNum01.fsx
NOMONO,NoMT SOURCE=E_BasicConstantsBigNum40.fsx SCFLAGS="--test:ErrorRanges" # E_BasicConstantsBigNum40.fsx

Просмотреть файл

@ -1,4 +1,4 @@
// #Conformance #DeclarationElements #Attributes #Import #RequiresPowerPack
// #Conformance #DeclarationElements #Attributes #Import
// Ignore "Uses of this construct may result in the generation of unverifiable .NET IL code..."
#nowarn "9"
@ -9,12 +9,12 @@ open Microsoft.FSharp.Math
[<StructLayout(LayoutKind.Explicit)>] // As per FSHARP1.0:5931, LayoutKind.Sequential (=default) does not allow FieldOffset
type Align16 =
[<FieldOffset(0)>]
val mutable x0 : complex
val mutable x0 : System.DateTime
[<FieldOffset(8)>]
val x1 : complex
val x1 : System.DateTime
// Verify no runtime asserts...
let mutable test1 = new Align16()
test1.x0 <- new complex()
test1.x0 <- new System.DateTime()
exit 0

Просмотреть файл

@ -1,3 +1,3 @@
ReqPP SOURCE=FieldOffset01.fs SCFLAGS="-r:FSharp.PowerPack.dll" PEVER=/MD # FieldOffset01.fs
SOURCE=FieldOffset01.fs SCFLAGS="" PEVER=/MD # FieldOffset01.fs

Просмотреть файл

@ -1,5 +1,4 @@
SOURCE=openSystem01.fs # openSystem01.fs
ReqPP SOURCE=openFsharpCompatibility01.fs SCFLAGS="-r:FSharp.PowerPack.Compatibility.dll" # openFsharpCompatibility01.fs
SOURCE=OpenNestedModule01.fs # OpenNestedModule01.fs
SOURCE=openDU.fs # openDU.fs

Просмотреть файл

@ -1,8 +0,0 @@
// #Conformance #DeclarationElements #Import #RequiresPowerPack
#light
// Open a module in FSharp.Compatibility.dll
open Microsoft.FSharp.Compatibility
let anInt = Int32.of_string "123121414"
// Looks like everything worked out OK
exit 0

Просмотреть файл

@ -1,4 +1,4 @@
// #Conformance #DeclarationElements #LetBindings #ActivePatterns #RequiresPowerPack
// #Conformance #DeclarationElements #LetBindings #ActivePatterns
#light
let (|A|B|) x = if x < 0 then A else B
@ -13,18 +13,18 @@ let _ =
| A -> exit 1
| B -> printfn "Great!"
// Example from Expert F#
open Microsoft.FSharp.Math
let (|Rect|) (x:complex) = (x.RealPart, x.ImaginaryPart)
let addViaRect a b =
let (|DT|) (x:System.DateTime) = (x.Date, x.TimeOfDay)
let maxit a b =
match a, b with
| Rect (ar, ai), Rect (br, bi) -> Complex.mkRect(ar+br, ai+bi)
| DT (ar, ai), DT (br, bi) -> max ar br
let result = maxit System.DateTime.Now System.DateTime.Now
if result.Date <> System.DateTime.Now.Date then exit 1
let result = addViaRect Complex.One Complex.OneI
if result.r.CompareTo(1.0) <> result.i.CompareTo(1.0) then exit 1
// Looks like active patterns are working OK
exit 0

Просмотреть файл

@ -1,3 +1,3 @@
ReqPP SOURCE=SanityCheck.fs SCFLAGS="-r:FSharp.PowerPack.dll" # SanityCheck.fs
SOURCE=SanityCheck.fs SCFLAGS="" # SanityCheck.fs
SOURCE=parameterizedActivePattern.fs # parameterizedActivePattern.fs
SOURCE=partialActivePattern.fs # partialActivePattern.fs

Просмотреть файл

@ -1 +0,0 @@
Need to develop way to use reflection to scan F# codes to verify built structure.

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #DeclarationElements #LetBindings #TypeInference #RequiresPowerPack
// Regression test for FSharp1.0:4472
// Title: Problem with Expr_tchoose and initialization graphs
// Compile with reference to FSharp.PowerPack
let rec all_integers_starting_from n = LazyList.consf n (fun _ -> all_integers_starting_from (n+1))
and combine x1 x2 = 1
and next_primes x = failwith ""
and primes =
let twos = all_integers_starting_from 3
LazyList.consf 2 (fun _ -> next_primes twos)
exit 0

Просмотреть файл

@ -1 +0,0 @@
ReqPP SOURCE=TopArityInfoOfValues01.fs SCFLAGS="-r:FSharp.PowerPack.dll" # TopArityInfoOfValues01.fs

Просмотреть файл

@ -1,16 +1,16 @@
// #Regression #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties #RequiresPowerPack
// #Regression #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties
// Regression test for FSHARP1.0:4163
// Setter with no arguments (curried or uncurried?)
// Used to crash the compiler!
//<Expects id="FS0001" span="(15,13-15,16)" status="error">This expression was expected to have type unit but here has type matrix</Expects>
//<Expects id="FS0001" span="(15,13-15,16)" status="error">This expression was expected to have type. unit .but here has type. int</Expects>
//See FSHARP1.0:5456
open Microsoft.FSharp.Math
type Transform (rotation : (float * float * float), position : (float * float *float)) =
let foo = Matrix.create 4 4 1.0
let foo = 1
member v.init
with set() =
let bar = foo in
Matrix.set bar 0 0 (0.5 * 0.5)
()
bar

Просмотреть файл

@ -1,4 +1,4 @@
// #Regression #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties #RequiresPowerPack
// #Regression #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties
// Verify write-only properties
// See also FSHARP1.0:4163
let mutable globalPt : obj = null

Просмотреть файл

@ -1,5 +1,5 @@
SOURCE=tupledValueProperties01.fs # tupledValueProperties01.fs
ReqPP SOURCE=tupledValueProperties02.fsx SCFLAGS="--nologo" FSIMODE=PIPE COMPILE_ONLY=1 # tupledValueProperties02.fsx
SOURCE=tupledValueProperties02.fsx SCFLAGS="--nologo" FSIMODE=PIPE COMPILE_ONLY=1 # tupledValueProperties02.fsx
SOURCE=genericGenericClass.fs # GenericGenericClass.fs
SOURCE=instMembers-class.fs # InstMembers-Class.fs
@ -30,7 +30,7 @@ ReqPP SOURCE=tupledValueProperties02.fsx SCFLAGS="--nologo" FSIMODE=PIPE COMPILE
SOURCE=Properties03.fs # Properties03.fs
SOURCE=Properties04.fs # Properties04.fs
SOURCE=Properties05.fs # Properties05.fs
ReqPP SOURCE=E_Properties06.fs SCFLAGS="--test:ErrorRanges -r:FSharp.PowerPack.dll --flaterrors" # E_Properties06.fs
SOURCE=E_Properties06.fs SCFLAGS="--test:ErrorRanges --flaterrors" # E_Properties06.fs
SOURCE=AbstractProperties01.fs # AbstractProperties01.fs
SOURCE=E_AbstractProperties02.fs SCFLAGS="--test:ErrorRanges --flaterrors # E_AbstractProperties02.fs

Просмотреть файл

@ -1,4 +1,4 @@
// #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties #RequiresPowerPack
// #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties
// Regression test for FSHARP1.0:966
// Verify that we can have properties that takes tuples for arguments
// Note: the non-curried syntax ((x:decimal, y:decimal)) is expected

Просмотреть файл

@ -1,13 +0,0 @@
// #Conformance #Constants #RequiresPowerPack
// Constant expressions
// This is the example quoted from the specs
// Verification:
// - all the different types work
// - the type we get is what we meant it to be
#light
let v1 = 99999999N // bignum (Microsoft.FSharp.Math.BigRational)
let check(x:bignum) = true
exit (if check(v1) then 0 else 1)

Просмотреть файл

@ -1,7 +1,6 @@
SOURCE=bigint.fs SCFLAGS="--warnaserror+ --test:ErrorRanges" # bigint.fs
SOURCE=bigint02.fs SCFLAGS="--warnaserror+ --test:ErrorRanges" # bigint02.fs
ReqPP SOURCE=bignum.fs SCFLAGS="-r:FSharp.PowerPack.dll" # bignum.fs
SOURCE=bool.fs # bool.fs
SOURCE=byte.fs # byte.fs
SOURCE=byteArr.fs # byteArr.fs

Просмотреть файл

@ -1,30 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression for FSHARP1.0:4791
// With optimizations on this would print wrong values (see bug for conditions causing failure)
//<Expects Status=success></Expects>
//<<Output
//GOT: 0
//GOT: 5
//GOT: 10
//GOT: 15
//GOT: 20
//Output
#nowarn "57"
open System
open System.Linq
open Microsoft.FSharp.Linq.Query
let doMul (x:int) (y:int) = x*y
let mainNet (inps:seq<int>) =
let mul = 5
let rec doPass () =
let cur = Queryable.AsQueryable<int>(inps)
let outs =
query <@ cur |> Seq.map (fun par -> doMul mul par) @>
for o in outs do printfn "GOT: %A" o
doPass()
mainNet (seq{for i in 0..4 -> i})

Просмотреть файл

@ -1,30 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression for FSHARP1.0:4791
// With optimizations on this would throw ArgumentException trying to convert quotation to expression tree
//<Expects Status=success></Expects>
//<<Output
//GOT: 0
//GOT: 5
//GOT: 10
//GOT: 15
//GOT: 20
//Output
#nowarn "57"
open System
open System.Linq
open Microsoft.FSharp.Linq.Query
let doMul (x:string) (y:int) = y * 5
let mainNet (inps:seq<int>) =
let mul = "boom"
let rec doPass () =
let cur = Queryable.AsQueryable<int>(inps)
let outs =
query <@ cur |> Seq.map (fun par -> doMul mul par) @>
for o in outs do printfn "GOT: %A" o
doPass()
mainNet (seq{for i in 0..4 -> i})

Просмотреть файл

@ -1,54 +0,0 @@
// #Regression #Conformance #Quotations
#light
// Regression test for FSHARP1.0:2546
//<Expects status=success></Expects>
let quote =
<@
let mutable x = 0
while x < 10 do
x <- x + 1 // we used to emit an error here - no more!
x
@>
let quote2 =
<@
let mutable x = 0
for i = 1 to 10 do
x <- x + 1
x
@>
let x = sprintf "%A" quote
let y = sprintf "%A" quote2
let x1 = "Let (x, Value (0),
Sequential (WhileLoop (Call (None, op_LessThan, [x, Value (10)]),
VarSet (x, Call (None, op_Addition, [x, Value (1)]))),
x))"
let y1 = "Let (x, Value (0),
Sequential (ForIntegerRangeLoop (i, Value (1), Value (10),
VarSet (x,
Call (None, op_Addition,
[x, Value (1)]))), x))"
exit <| if (x.Replace("\r\n", "\n") = x1.Replace("\r\n", "\n")) && (y.Replace("\r\n", "\n") = y1.Replace("\r\n", "\n")) then
0
else
if(x.Replace("\r\n", "\n") <> x1.Replace("\r\n", "\n")) then
printfn "Expected:"
printfn "========="
printfn "%s" x1
printfn "Actual:"
printfn "========="
printfn "%s" x
if(y.Replace("\r\n", "\n") <> y1.Replace("\r\n", "\n")) then
printfn "Expected:"
printfn "========="
printfn "%s" y1
printfn "Actual:"
printfn "========="
printfn "%s" y
1

Просмотреть файл

@ -1,34 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3498
// "Quotation expression compiler reveals bug in Linq"
// This code snipped is not supposed to throw at runtime!
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Linq.QuotationEvaluation
let q =
<@ (fun (x1:double) ->
let fwd6 =
let y3 = x1 * x1
(y3, (fun yb4 -> yb4 * 2.0 * x1))
let rev5 = snd fwd6
let w0 = fst fwd6
let fwd14 =
let y11 = w0 + 1.0
(y11, (fun yb12 -> yb12 * 1.0))
let rev13 = snd fwd14
let y8 = fst fwd14
(y8, (fun y8b10 ->
let w0b2 = 0.0
let x1b1 = 0.0
let dxs15 = rev13 y8b10
let w0b2 = w0b2 + dxs15
let dxs7 = rev5 w0b2
let x1b1 = x1b1 + dxs7
x1b1))) @>
let (res,_) = (q.Eval()) 4.0
(if (res = 17.0) then 0 else 1) |> exit

Просмотреть файл

@ -1,4 +1,4 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// #Regression #Conformance #Quotations
// Regression for FSB 4708
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Quotations.Patterns

Просмотреть файл

@ -1,11 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for an issue reported by a customer
// The following code used to give an ICE in CTP bits (1.9.6.2)
//<Expects id="FS0191" status="error">The variable 'x' is bound in a quotation but is used as part of a spliced expression\. This is not permitted since it may escape its scope</Expects>
open Microsoft.FSharp.Quotations
let quote (v:'a) = Expr.Cast<'a>(Expr.Value(v,typeof<'a>))
let g x = <@ fun x -> %(f (quote x)) @>

Просмотреть файл

@ -1,28 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression tests for FSHARP1.0:3424
// Make sure that TupleGet works
//<Expects status=success></Expects>
#light
open System
open Microsoft.FSharp
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let e1 = <@@ (1,2) @@>
let test = try
let one = Expr.TupleGet(e1, 0).EvalUntyped()
let two = Expr.TupleGet(e1, 1).EvalUntyped()
if ((unbox one : int) = 1) && ((unbox two : int) = 2) then true else false
with
| _ -> printfn "ERROR: Unexpected exception in TupleGet"
false
let test2 = try
let three = Expr.TupleGet(e1, 3)
printfn "ERROR: TupleGet did not throw!"
false
with
| _ -> true
(if (test && test2) then 0 else 1) |> exit

Просмотреть файл

@ -1,19 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// abs
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
if Eval <@ abs(-1.0) @> <> 1.0 then exit 1
if Eval <@ abs(-1y) @> <> 1y then exit 1
if Eval <@ abs(-1s) @> <> 1s then exit 1
if Eval <@ abs(-1L) @> <> 1L then exit 1
if Eval <@ abs(-1I) @> <> 1I then exit 1
if Eval <@ abs(-1M) @> <> 1M then exit 1
exit 0

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// acos
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ acos(1.0) @>) = acos(1.0) then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// asin
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ asin(1.0) @>) = asin(1.0) then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// atan
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ atan(0.0) @>) = atan(0.0) then 0 else 1) |> exit

Просмотреть файл

@ -1,12 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ (atan2 0.0 1.0) @>) = (atan2 0.0 1.0) then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// ceil
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ ceil 12.34 @>) = 13.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// cos
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ cos 0.0 @>) = 1.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// cosh
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ cosh 0.0 @>) = 1.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// exp
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ exp 0.0 @>) = 1.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// floor
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ floor -1.23 @>) = (floor -1.23) then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// log
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ log 1.0 @>) = 0.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// log10
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ log10 1.0 @>) = 0.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,19 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// max
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
if Eval <@ max -1.0 2.0 @> <> 2.0 then exit 1
if Eval <@ max -1y -2y @> <> -1y then exit 1
if Eval <@ max -1s -2s @> <> -1s then exit 1
if Eval <@ max -1L 1L @> <> 1L then exit 1
if Eval <@ max -1I 1I @> <> 1I then exit 1
if Eval <@ max 1M 2M @> <> 2M then exit 1
exit 0

Просмотреть файл

@ -1,20 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// min
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
if Eval <@ min -1.0 2.0 @> <> -1.0 then exit 1
if Eval <@ min -1y -2y @> <> -2y then exit 1
if Eval <@ min -1s -2s @> <> -2s then exit 1
if Eval <@ min -1L 1L @> <> -1L then exit 1
if Eval <@ min -1I 1I @> <> -1I then exit 1
if Eval <@ min 1M 2M @> <> 1M then exit 1
exit 0

Просмотреть файл

@ -1,19 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// pown
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
if Eval <@ pown 2.0 3 @> <> 8.0 then exit 1
if Eval <@ pown 2y 3 @> <> 8y then exit 1
if Eval <@ pown 2s 3 @> <> 8s then exit 1
if Eval <@ pown 2L 3 @> <> 8L then exit 1
if Eval <@ pown 2I 3 @> <> 8I then exit 1
if Eval <@ pown 2M 3 @> <> 8M then exit 1
exit 0

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// round
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ round 2.23 @>) = round 2.23 then 0 else 1) |> exit

Просмотреть файл

@ -1,20 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// sign
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ sign -2.23 @>) = -1 then 0 else 1) |> exit
if Eval <@ sign 2.1 @> <> 1 then exit 1
if Eval <@ sign -2y @> <> -1 then exit 1
if Eval <@ sign -2s @> <> -1 then exit 1
if Eval <@ sign -2L @> <> -1 then exit 1
if Eval <@ sign 2I @> <> 1 then exit 1
if Eval <@ sign 2M @> <> 1 then exit 1
exit 0

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// sin
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ sin 0.0 @>) = 0.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// sinh
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ sinh 0.0 @>) = 0.0 then 0 else 1) |> exit

Просмотреть файл

@ -1,13 +0,0 @@
// #Regression #Conformance #Quotations #RequiresPowerPack
// Regression test for FSHARP1.0:3239
// Make sure we can dynamically evaluate overloaded math functions
// sqrt
//<Expects status=success></Expects>
#light
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Linq.QuotationEvaluation
let Eval (q: Expr<_>) = q.Eval()
(if (Eval <@ sqrt 25.0 @>) = 5.0 then 0 else 1) |> exit

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше