diff --git a/global.json b/global.json index 846f502..60a2620 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.402", + "version": "11.0.100-rc.2.26504.105", "rollForward": "latestPatch" }, "test": { diff --git a/src/DimensionalQuantities.IntegrationTests/DimensionalQuantities.IntegrationTests.csproj b/src/DimensionalQuantities.IntegrationTests/DimensionalQuantities.IntegrationTests.csproj index 7e67257..7a377ac 100644 --- a/src/DimensionalQuantities.IntegrationTests/DimensionalQuantities.IntegrationTests.csproj +++ b/src/DimensionalQuantities.IntegrationTests/DimensionalQuantities.IntegrationTests.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 false true Exe @@ -16,7 +16,7 @@ - + diff --git a/src/DimensionalQuantities.IntegrationTests/GeneratedQuantityTests/PackagedGeneratorTests.cs b/src/DimensionalQuantities.IntegrationTests/GeneratedQuantityTests/PackagedGeneratorTests.cs index 8be9df6..db31c7c 100644 --- a/src/DimensionalQuantities.IntegrationTests/GeneratedQuantityTests/PackagedGeneratorTests.cs +++ b/src/DimensionalQuantities.IntegrationTests/GeneratedQuantityTests/PackagedGeneratorTests.cs @@ -50,7 +50,7 @@ public static double MultiplyVoltageCurrent(double volts, double amps) } """); ProjectCreator creator = ProjectCreator.Templates.SdkCsproj(path: consumerProject, targetFramework: "netstandard2.0") - .Property("LangVersion", "14.0") + .Property("LangVersion", "preview") .ItemPackageReference(package) .Save(); @@ -174,7 +174,7 @@ private ProjectCreator CreateProject(string name, string source, params Package[ Directory.CreateDirectory(directory); File.WriteAllText(Path.Combine(directory, name + ".cs"), source); ProjectCreator creator = ProjectCreator.Templates.SdkCsproj(path: Path.Combine(directory, name + ".csproj"), targetFramework: "netstandard2.0") - .Property("LangVersion", "14.0") + .Property("LangVersion", "preview") .Property("Version", "1.0.0") .Property("PackageOutputPath", Path.Combine(directory, "packages")) .Property("CopyLocalLockFileAssemblies", "true"); diff --git a/src/DimensionalQuantities.Roslyn.Tests/DimensionalQuantities.Roslyn.Tests.csproj b/src/DimensionalQuantities.Roslyn.Tests/DimensionalQuantities.Roslyn.Tests.csproj index ec701d6..bf1de2b 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/DimensionalQuantities.Roslyn.Tests.csproj +++ b/src/DimensionalQuantities.Roslyn.Tests/DimensionalQuantities.Roslyn.Tests.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 false true Exe diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/ArithmeticDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/ArithmeticDiscoveryTests.cs index e757cb2..1cfa05d 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/ArithmeticDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/ArithmeticDiscoveryTests.cs @@ -11,7 +11,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Discovery; public sealed class ArithmeticDiscoveryTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Theory] [InlineData("length * time", true)] diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/EnglishExponentDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/EnglishExponentDiscoveryTests.cs index 225d32f..4c6ef49 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/EnglishExponentDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/EnglishExponentDiscoveryTests.cs @@ -93,7 +93,7 @@ private static CSharpCompilation Compile(string source) string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); - return CSharpCompilation.Create("EnglishExponentConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp14))], + return CSharpCompilation.Create("EnglishExponentConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview))], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); } } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/MetadataQuantityDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/MetadataQuantityDiscoveryTests.cs index 24537ea..b49900f 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/MetadataQuantityDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/MetadataQuantityDiscoveryTests.cs @@ -71,7 +71,7 @@ public static class Library string[] platformAssemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); MetadataReference[] references = platformAssemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)).ToArray(); - CSharpParseOptions options = new(LanguageVersion.CSharp14); + CSharpParseOptions options = new(LanguageVersion.Preview); CSharpCompilation library = CSharpCompilation.Create("MetadataLibrary", [CSharpSyntaxTree.ParseText(librarySource, options)], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); using MemoryStream stream = new(); diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerDiscoveryTests.cs index f920e2f..83fa21c 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerDiscoveryTests.cs @@ -102,7 +102,7 @@ private static CSharpCompilation Compile(string source) string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); - return CSharpCompilation.Create("PowerDiscoveryConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp14))], + return CSharpCompilation.Create("PowerDiscoveryConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview))], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); } } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerMethodDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerMethodDiscoveryTests.cs index 7d79f65..3705e69 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerMethodDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/PowerMethodDiscoveryTests.cs @@ -103,7 +103,7 @@ private static CSharpCompilation Compile(string source) IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); return CSharpCompilation.Create("PowerMethodConsumer", - [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp14), cancellationToken: TestContext.Current.CancellationToken)], + [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview), cancellationToken: TestContext.Current.CancellationToken)], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); } } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityDiscoveryCoordinatorTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityDiscoveryCoordinatorTests.cs index 25d8360..1280e2c 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityDiscoveryCoordinatorTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityDiscoveryCoordinatorTests.cs @@ -11,7 +11,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Discovery; public sealed class QuantityDiscoveryCoordinatorTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Theory] [InlineData("var make = () => length * current; return make() * time;")] @@ -71,6 +71,345 @@ public static LengthTimeCurrent Calculate(IEnumerable values) Assert.Equal(20, result); } + [Fact] + public void ConstrainedProviderResultsComposeWithArithmetic() + { + const string source = """ + public interface IProvider { T Get(); } + public sealed class Provider : IProvider + { + LengthCurrent IProvider.Get() => Length.FromMetres(2) * Current.FromAmps(3); + } + public static class Consumer + { + private static LengthTimeCurrent Calculate(TProvider provider) where TProvider : IProvider + { + var value = provider.Get(); + return value * Time.FromSeconds(4); + } + public static double Value() => Calculate(new Provider()).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void OutVariablesComposeWithArithmetic() + { + const string source = """ + public static class Consumer + { + private static bool TryGet(out LengthCurrent value) + { + value = LengthCurrent.FromSiBaseUnit(6); + return true; + } + private static LengthTimeCurrent Calculate() + { + if (TryGet(out var value)) return value * Time.FromSeconds(4); + throw new System.Exception(); + } + public static double Value() => Calculate().AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Theory] + [InlineData("ref", "return Get() * Time.FromSeconds(4);")] + [InlineData("ref", "ref var value = ref Get(); return value * Time.FromSeconds(4);")] + [InlineData("ref readonly", "ref readonly var value = ref Get(); return value * Time.FromSeconds(4);")] + public void RefReturnsComposeWithArithmetic(string returnModifier, string body) + { + string source = $$""" + public static class Consumer + { + private static LengthCurrent stored = LengthCurrent.FromSiBaseUnit(6); + private static {{returnModifier}} LengthCurrent Get() => ref stored; + private static LengthTimeCurrent Calculate() + { + {{body}} + } + public static double Value() => Calculate().AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Theory] + [InlineData("Span")] + [InlineData("ReadOnlySpan")] + public void SpanElementsComposeWithArithmetic(string spanType) + { + string source = $$""" + using System; + public static class Consumer + { + private static LengthTimeCurrent Calculate({{spanType}} values) => values[0] * Time.FromSeconds(4); + public static double Value() => Calculate(new[] { LengthCurrent.FromSiBaseUnit(6) }).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void PropertyPatternVariablesComposeWithArithmetic() + { + const string source = """ + public sealed class Measurement + { + public LengthCurrent Value => LengthCurrent.FromSiBaseUnit(6); + } + public static class Consumer + { + private static LengthTimeCurrent Calculate(Measurement input) + { + if (input is { Value: var value }) return value * Time.FromSeconds(4); + throw new System.Exception(); + } + public static double Value() => Calculate(new Measurement()).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void ListPatternVariablesComposeWithArithmetic() + { + const string source = """ + public static class Consumer + { + private static LengthTimeCurrent Calculate(LengthCurrent[] input) + { + if (input is [var value]) return value * Time.FromSeconds(4); + throw new System.Exception(); + } + public static double Value() => Calculate(new[] { LengthCurrent.FromSiBaseUnit(6) }).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void CustomDeconstructionResultsComposeWithArithmetic() + { + const string source = """ + public sealed class Measurement + { + public void Deconstruct(out LengthCurrent value, out Time duration) + { + value = LengthCurrent.FromSiBaseUnit(6); + duration = Time.FromSeconds(4); + } + } + public static class Consumer + { + private static LengthTimeCurrent Calculate(Measurement input) + { + var (value, duration) = input; + return value * duration; + } + public static double Value() => Calculate(new Measurement()).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Theory] + [InlineData("public LengthCurrent Get() => Length.FromMetres(2) * Current.FromAmps(3);")] + [InlineData("LengthCurrent IProvider.Get() => Length.FromMetres(2) * Current.FromAmps(3);")] + public void GenericInterfaceResultsComposeWithArithmetic(string implementation) + { + string source = $$""" + public interface IProvider { T Get(); } + public sealed class Provider : IProvider + { + {{implementation}} + } + public static class Consumer + { + private static LengthTimeCurrent Calculate(IProvider provider) + { + var value = provider.Get(); + return value * Time.FromSeconds(4); + } + public static double Value() => Calculate(new Provider()).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Theory] + [InlineData("if (input is LengthCurrent value) return value * Time.FromSeconds(4); throw new System.Exception();")] + [InlineData("switch (input) { case LengthCurrent value: return value * Time.FromSeconds(4); default: throw new System.Exception(); }")] + [InlineData("return input switch { LengthCurrent value => value * Time.FromSeconds(4), _ => throw new System.Exception() };")] + public void PatternVariablesComposeWithArithmetic(string body) + { + string source = $$""" + public static class Consumer + { + private static LengthTimeCurrent Calculate(object input) + { + {{body}} + } + public static double Value() => Calculate(Length.FromMetres(2) * Current.FromAmps(3)).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void IteratorResultsComposeWithArithmetic() + { + const string source = """ + using System.Collections.Generic; + public static class Consumer + { + private static IEnumerable Values() + { + yield return Length.FromMetres(2) * Current.FromAmps(3); + yield return Length.FromMetres(3) * Current.FromAmps(3); + } + private static LengthTimeCurrent Calculate() + { + LengthTimeCurrent total = default; + foreach (var value in Values()) + { + total += value * Time.FromSeconds(4); + } + return total; + } + public static double Value() => Calculate().AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 60; + + Assert.Equal(expected, result); + } + + [Theory] + [InlineData("if (input is LengthCurrent value) return value * Time.FromSeconds(4); throw new System.Exception();")] + [InlineData("return input switch { LengthCurrent value => value * Time.FromSeconds(4), _ => throw new System.Exception() };")] + public void UnionCaseVariablesComposeWithArithmetic(string body) + { + string source = $$""" + public union Measurement(LengthCurrent, Time); + public static class Consumer + { + private static LengthTimeCurrent Calculate(Measurement input) + { + {{body}} + } + public static double Value() => Calculate(Length.FromMetres(2) * Current.FromAmps(3)).AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 24; + + Assert.Equal(expected, result); + } + + [Fact] + public void IncompatibleUnionCasesDoNotSupplyDimensionsToArithmetic() + { + const string source = """ + public union Measurement(LengthCurrent, Time); + public static class Consumer + { + public static object Calculate(Measurement input, Current current) + { + var value = input switch + { + LengthCurrent product => product, + Time duration => duration, + _ => throw new System.Exception() + }; + return value * current; + } + } + """; + QuantityDiscoveryResult result = Discover(source); + Diagnostic[] errors = result.Compilation.GetDiagnostics(TestContext.Current.CancellationToken) + .Where(diagnostic => diagnostic.Severity == DiagnosticSeverity.Error).ToArray(); + + Assert.Multiple( + () => Assert.Contains(errors, diagnostic => diagnostic.Id == "CS8506"), + () => Assert.DoesNotContain(result.Sources, source => source.HintName == "Arithmetic.g.cs")); + } + + [Fact] + public void AsyncIteratorResultsComposeWithArithmetic() + { + const string source = """ + using System.Collections.Generic; + using System.Threading.Tasks; + public static class Consumer + { + private static async IAsyncEnumerable Values() + { + await Task.Yield(); + yield return Length.FromMetres(2) * Current.FromAmps(3); + await Task.Yield(); + yield return Length.FromMetres(3) * Current.FromAmps(3); + } + private static async Task Calculate() + { + LengthTimeCurrent total = default; + await foreach (var value in Values()) + { + total += value * Time.FromSeconds(4); + } + return total; + } + public static double Value() => Calculate().GetAwaiter().GetResult().AsSiBaseUnit(); + } + """; + QuantityDiscoveryResult discovery = Discover(source); + double result = Evaluate(discovery.Compilation); + double expected = 60; + + Assert.Equal(expected, result); + } + [Fact] public void AwaitedIntermediateResultsComposeWithArithmetic() { diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityNameDiscoveryTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityNameDiscoveryTests.cs index 29d28ee..7a55c38 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityNameDiscoveryTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityNameDiscoveryTests.cs @@ -54,7 +54,7 @@ private static CSharpCompilation Compile(string source) string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)); return CSharpCompilation.Create("TypeNameConsumer", - [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp14), cancellationToken: TestContext.Current.CancellationToken)], + [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview), cancellationToken: TestContext.Current.CancellationToken)], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); } } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityTypeReaderTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityTypeReaderTests.cs index dbbabf6..dba7079 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityTypeReaderTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/QuantityTypeReaderTests.cs @@ -10,7 +10,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Discovery; public sealed class QuantityTypeReaderTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Fact] public void MissingRuntimeReferenceThrowsWithTheRequiredTypeName() diff --git a/src/DimensionalQuantities.Roslyn.Tests/Discovery/TypeSystemNumberReaderTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Discovery/TypeSystemNumberReaderTests.cs index f19c74d..f1d12f3 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Discovery/TypeSystemNumberReaderTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Discovery/TypeSystemNumberReaderTests.cs @@ -59,7 +59,7 @@ private static CSharpCompilation Compile(string source) string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); - return CSharpCompilation.Create("PowerDiscoveryConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp14))], + return CSharpCompilation.Create("PowerDiscoveryConsumer", [CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview))], references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); } } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/ArithmeticSourceEmitterTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/ArithmeticSourceEmitterTests.cs index ef8a100..9bb3903 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/ArithmeticSourceEmitterTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/ArithmeticSourceEmitterTests.cs @@ -12,7 +12,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Generators; public sealed class ArithmeticSourceEmitterTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Fact] public void ExplicitPlanEmitsUsableArithmetic() diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/EnglishExponentAliasEmitterTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/EnglishExponentAliasEmitterTests.cs index f1c032a..5bcf85c 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/EnglishExponentAliasEmitterTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/EnglishExponentAliasEmitterTests.cs @@ -21,7 +21,7 @@ public void EmitsOnlyRequestedAliasesWithoutDuplicates() ]; string result = EnglishExponentAliasEmitter.Emit(aliases); - SyntaxTree tree = CSharpSyntaxTree.ParseText(result, new CSharpParseOptions(LanguageVersion.CSharp14), cancellationToken: TestContext.Current.CancellationToken); + SyntaxTree tree = CSharpSyntaxTree.ParseText(result, new CSharpParseOptions(LanguageVersion.Preview), cancellationToken: TestContext.Current.CancellationToken); string[] names = tree.GetCompilationUnitRoot(TestContext.Current.CancellationToken).Usings.Select(directive => directive.Alias!.Name.Identifier.ValueText).OrderBy(name => name).ToArray(); string[] expected = ["NumberHalf", "NumberTwo"]; @@ -37,7 +37,7 @@ public void AliasesResolveToTheirEncodedTypesInAnotherFile() new("NumberHalf", new Rational(1, 2), "global::DimensionalQuantities.TypeSystem.Fraction") ]; const string source = "class Consumer { public NumberTwo Integer; public NumberHalf Fraction; }"; - CSharpParseOptions options = new(LanguageVersion.CSharp14); + CSharpParseOptions options = new(LanguageVersion.Preview); string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); @@ -64,7 +64,7 @@ public void AliasesResolveToTheirEncodedTypesInAnotherFile() public void NoRequestedNamesProducesNoAliases() { string result = EnglishExponentAliasEmitter.Emit([]); - SyntaxTree tree = CSharpSyntaxTree.ParseText(result, new CSharpParseOptions(LanguageVersion.CSharp14), cancellationToken: TestContext.Current.CancellationToken); + SyntaxTree tree = CSharpSyntaxTree.ParseText(result, new CSharpParseOptions(LanguageVersion.Preview), cancellationToken: TestContext.Current.CancellationToken); Assert.Empty(tree.GetCompilationUnitRoot(TestContext.Current.CancellationToken).Usings); } diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerMethodSourceEmitterTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerMethodSourceEmitterTests.cs index b0d4e73..f465fd7 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerMethodSourceEmitterTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerMethodSourceEmitterTests.cs @@ -38,7 +38,7 @@ public static class Consumer public static double Value() => Length.FromMetres(9).{{method}}().AsSiBaseUnit(); } """; - CSharpParseOptions options = new(LanguageVersion.CSharp14); + CSharpParseOptions options = new(LanguageVersion.Preview); string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); @@ -79,7 +79,7 @@ public static class Consumer public static double Value() => Length.FromMetres({{value.ToString(System.Globalization.CultureInfo.InvariantCulture)}}).{{method}}().AsSiBaseUnit(); } """; - CSharpParseOptions options = new(LanguageVersion.CSharp14); + CSharpParseOptions options = new(LanguageVersion.Preview); string[] assemblies = ((string)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")!).Split(Path.PathSeparator); IEnumerable references = assemblies.Select(path => MetadataReference.CreateFromFile(path)) .Append(MetadataReference.CreateFromFile(typeof(Quantity<>).Assembly.Location)); diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerSourceEmitterTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerSourceEmitterTests.cs index a3e586d..8e1c06d 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerSourceEmitterTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/PowerSourceEmitterTests.cs @@ -13,7 +13,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Generators; public sealed class PowerSourceEmitterTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Fact] public void DifferentPowersReturnTheExpectedQuantityTypes() diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantityGeneratorTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantityGeneratorTests.cs index eefd1b4..6f2c6a7 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantityGeneratorTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantityGeneratorTests.cs @@ -16,7 +16,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Generators; public sealed class QuantityGeneratorTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); [Fact] public void BaseAliasesHaveUnprefixedFactoriesAndAccessors() diff --git a/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantitySourceEmitterTests.cs b/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantitySourceEmitterTests.cs index 6931e64..74c3f0b 100644 --- a/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantitySourceEmitterTests.cs +++ b/src/DimensionalQuantities.Roslyn.Tests/Generators/QuantitySourceEmitterTests.cs @@ -12,7 +12,7 @@ namespace DimensionalQuantities.Roslyn.Tests.Generators; public sealed class QuantitySourceEmitterTests { - private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.CSharp14); + private static readonly CSharpParseOptions _parseOptions = new(LanguageVersion.Preview); private static readonly string[] _prefixes = [ "Quetta", "Ronna", "Yotta", "Zetta", "Exa", "Peta", "Tera", "Giga", "Mega", "Kilo", "Hecto", "Deca", diff --git a/src/DimensionalQuantities.Tests/DimensionalQuantities.Tests.csproj b/src/DimensionalQuantities.Tests/DimensionalQuantities.Tests.csproj index 3f1f0f2..dc48fca 100644 --- a/src/DimensionalQuantities.Tests/DimensionalQuantities.Tests.csproj +++ b/src/DimensionalQuantities.Tests/DimensionalQuantities.Tests.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 false true Exe diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 6cee88f..e72dff1 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - 14.0 + preview enable enable