diff --git a/.github/workflows/activate-unity.yml b/.github/workflows/activate-unity.yml deleted file mode 100644 index 0827bbd..0000000 --- a/.github/workflows/activate-unity.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Acquire activation file -on: - workflow_dispatch: {} -jobs: - activation: - name: Request manual activation file 🔑 - runs-on: ubuntu-latest - steps: - # Request manual activation file - - name: Request manual activation file - id: getManualLicenseFile - uses: game-ci/unity-request-activation-file@v2 - # Upload artifact (Unity_v20XX.X.XXXX.alf) - - name: Expose as artifact - uses: actions/upload-artifact@v2 - with: - name: ${{ steps.getManualLicenseFile.outputs.filePath }} - path: ${{ steps.getManualLicenseFile.outputs.filePath }} diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 7d3fc24..74520d4 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -23,9 +23,9 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: | - 3.1.x 6.0.x 7.0.x + 8.0.x - name: Add NuGet source run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" @@ -36,11 +36,11 @@ jobs: - name: Build run: dotnet build --no-restore --configuration Release - - name: Test .NET Core 3.1 - run: dotnet test --no-build --verbosity normal --configuration Release --framework netcoreapp3.1 - - name: Test .NET 6 run: dotnet test --no-build --verbosity normal --configuration Release --framework net6.0 - name: Test .NET 7 run: dotnet test --no-build --verbosity normal --configuration Release --framework net7.0 + + - name: Test .NET 8 + run: dotnet test --no-build --verbosity normal --configuration Release --framework net8.0 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 9f1a02d..05fd768 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -18,7 +18,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Add GitHub NuGet source run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" @@ -34,7 +34,6 @@ jobs: mkdir build dotnet pack X10D --configuration Debug --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='nightly' -p:BuildNumber=${{ github.run_number }} dotnet pack X10D.Hosting --configuration Debug --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='nightly' -p:BuildNumber=${{ github.run_number }} - dotnet pack X10D.Unity --configuration Debug --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='nightly' -p:BuildNumber=${{ github.run_number }} - name: Push NuGet Package to GitHub run: dotnet nuget push "build/*" --source "github" --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate @@ -47,42 +46,3 @@ jobs: with: name: build path: build/ - - - name: Checkout upm branch - uses: actions/checkout@v3 - with: - ref: upm - path: upm - - - name: Build package.json - run: | - dotnet run --project ./tools/UpmPackageGenerator/UpmPackageGenerator.csproj "./X10D/bin/Debug/netstandard2.1/X10D.dll" - cp package.json upm/package.json - - - name: Copy built artifacts to upm - run: | - cd upm - cp ../X10D/bin/Debug/netstandard2.1/X10D.dll ./X10D.dll - cp ../X10D/bin/Debug/netstandard2.1/X10D.xml ./X10D.xml - cp ../X10D.Unity/bin/Debug/netstandard2.1/X10D.Unity.dll ./X10D.Unity.dll - cp ../X10D.Unity/bin/Debug/netstandard2.1/X10D.Unity.xml ./X10D.Unity.xml - - - name: Check for changes - run: | - cd upm - git diff --quiet - continue-on-error: true - - - name: Commit update - if: ${{ success() }} - run: | - cd upm - git config user.name github-actions - git config user.email github-actions@github.com - git add X10D.dll - git add X10D.Unity.dll - git add X10D.xml - git add X10D.Unity.xml - git add package.json - git commit -m "Update upm branch ($GITHUB_SHA)" - git push diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 01af506..d62576b 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -17,7 +17,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Add GitHub NuGet source run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" @@ -33,7 +33,6 @@ jobs: mkdir build dotnet pack X10D --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='prerelease' -p:BuildNumber=${{ github.run_number }} dotnet pack X10D.Hosting --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='prerelease' -p:BuildNumber=${{ github.run_number }} - dotnet pack X10D.Unity --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build -p:VersionSuffix='prerelease' -p:BuildNumber=${{ github.run_number }} - name: Push NuGet Package to GitHub run: dotnet nuget push "build/*" --source "github" --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate @@ -52,42 +51,3 @@ jobs: with: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: true - - - name: Checkout upm branch - uses: actions/checkout@v3 - with: - ref: upm - path: upm - - - name: Build package.json - run: | - dotnet run --project ./tools/UpmPackageGenerator/UpmPackageGenerator.csproj "./X10D/bin/Release/netstandard2.1/X10D.dll" - cp package.json upm/package.json - - - name: Copy built artifacts to upm - run: | - cd upm - cp ../X10D/bin/Release/netstandard2.1/X10D.dll ./X10D.dll - cp ../X10D/bin/Release/netstandard2.1/X10D.xml ./X10D.xml - cp ../X10D.Unity/bin/Release/netstandard2.1/X10D.Unity.dll ./X10D.Unity.dll - cp ../X10D.Unity/bin/Release/netstandard2.1/X10D.Unity.xml ./X10D.Unity.xml - - - name: Check for changes - run: | - cd upm - git diff --quiet - continue-on-error: true - - - name: Commit update - if: ${{ success() }} - run: | - cd upm - git config user.name github-actions - git config user.email github-actions@github.com - git add X10D.dll - git add X10D.Unity.dll - git add X10D.xml - git add X10D.Unity.xml - git add package.json - git commit -m "Update upm branch ($GITHUB_SHA)" - git push diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5fd973..374f271 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Add GitHub NuGet source run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" @@ -33,7 +33,6 @@ jobs: mkdir build dotnet pack X10D --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build dotnet pack X10D.Hosting --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build - dotnet pack X10D.Unity --configuration Release --no-build -p:SymbolPackageFormat=snupkg --include-symbols --include-source -o build - name: Push NuGet Package to GitHub run: dotnet nuget push "build/*" --source "github" --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate @@ -52,42 +51,3 @@ jobs: with: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false - - - name: Checkout upm branch - uses: actions/checkout@v3 - with: - ref: upm - path: upm - - - name: Build package.json - run: | - dotnet run --project ./tools/UpmPackageGenerator/UpmPackageGenerator.csproj "./X10D/bin/Release/netstandard2.1/X10D.dll" - cp package.json upm/package.json - - - name: Copy built artifacts to upm - run: | - cd upm - cp ../X10D/bin/Release/netstandard2.1/X10D.dll ./X10D.dll - cp ../X10D/bin/Release/netstandard2.1/X10D.xml ./X10D.xml - cp ../X10D.Unity/bin/Release/netstandard2.1/X10D.Unity.dll ./X10D.Unity.dll - cp ../X10D.Unity/bin/Release/netstandard2.1/X10D.Unity.xml ./X10D.Unity.xml - - - name: Check for changes - run: | - cd upm - git diff --quiet - continue-on-error: true - - - name: Commit update - if: ${{ success() }} - run: | - cd upm - git config user.name github-actions - git config user.email github-actions@github.com - git add X10D.dll - git add X10D.Unity.dll - git add X10D.xml - git add X10D.Unity.xml - git add package.json - git commit -m "Update upm branch ($GITHUB_SHA)" - git push diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 7ee1360..356e513 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,50 +1,61 @@ -name: Build +name: SonarCloud on: push: branches: - main workflow_dispatch: pull_request: - types: [opened, synchronize, reopened] + types: [ opened, synchronize, reopened ] + jobs: - build: - name: Build + sonarcloud: + name: SonarCloud Analysis runs-on: windows-latest steps: - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK 17 + uses: actions/setup-java@v3 with: - java-version: 1.11 + java-version: 17 + distribution: 'zulu' + - uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Cache SonarCloud packages - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~\sonar\cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar + - name: Cache SonarCloud scanner id: cache-sonar-scanner - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: .\.sonar\scanner key: ${{ runner.os }}-sonar-scanner restore-keys: ${{ runner.os }}-sonar-scanner + - name: Install SonarCloud scanner if: steps.cache-sonar-scanner.outputs.cache-hit != 'true' shell: powershell run: | New-Item -Path .\.sonar\scanner -ItemType Directory dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner + + - name: Install dotCover + shell: powershell + run: | + dotnet tool install --global JetBrains.dotCover.GlobalTool + - name: Build and analyze env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} shell: powershell run: | - dotnet tool install JetBrains.dotCover.GlobalTool -g - .\.sonar\scanner\dotnet-sonarscanner begin /k:"oliverbooth_X10D" /o:"oliverbooth" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.dotcover.reportsPaths=dotCover.Output.html + .\.sonar\scanner\dotnet-sonarscanner begin /k:"oliverbooth_X10D" /o:"oliverbooth" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" dotnet build --no-incremental dotnet dotcover test --dcReportType=HTML - .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" + .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" diff --git a/.github/workflows/source_validator.yml b/.github/workflows/source_validator.yml index aad570f..0d7fb93 100644 --- a/.github/workflows/source_validator.yml +++ b/.github/workflows/source_validator.yml @@ -19,7 +19,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Add GitHub NuGet source run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" @@ -31,4 +31,4 @@ jobs: run: dotnet build -c Debug - name: Run Source Validation - run: dotnet run --project ./tools/SourceValidator/SourceValidator.csproj ./X10D/src ./X10D.Unity/src + run: dotnet run --project ./tools/SourceValidator/SourceValidator.csproj ./X10D/src diff --git a/.github/workflows/unity.yml b/.github/workflows/unity.yml deleted file mode 100644 index 2418e06..0000000 --- a/.github/workflows/unity.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Unity Test Runner - -on: - push: - branches: - - '*' - - '*/*' - pull_request: - branches: - - '*' - - '*/*' - -jobs: - build: - name: "Unity Test Runner" - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 7.0.x - - - name: Add GitHub NuGet source - run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build -c Release - - - name: Copy artifacts to project - run: | - mkdir -p ./X10D.Unity.Tests/Assets/Libraries - cp -r ./X10D/bin/Release/netstandard2.1/X10D.dll ./X10D.Unity.Tests/Assets/Libraries/X10D.dll - cp -r ./X10D.Unity/bin/Release/netstandard2.1/X10D.Unity.dll ./X10D.Unity.Tests/Assets/Libraries/X10D.Unity.dll - - - name: Unity - Test runner - uses: game-ci/unity-test-runner@v2.1.0 - env: - UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} - UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} - UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} - with: - projectPath: X10D.Unity.Tests - githubToken: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f31c88..00ce823 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,8 +24,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - X10D: Added `TextWriter.WriteLineNoAlloc(long[, ReadOnlySpan[, IFormatProvider]])`. - X10D: Added `TextWriter.WriteLineNoAlloc(ulong[, ReadOnlySpan[, IFormatProvider]])`. - X10D: Added `string.ConcatIf`. -- X10D.Unity: Added `RaycastHit.GetComponent` and `RaycastHit.TryGetComponent`. -- X10D.Unity: Added `DebugUtility.DrawFunction`, and `DebugUtility.DrawUnjoinedPolyhedron` on which it relies. +- X10D: Added `string.MDBold`, `string.MDCode`, `string.MDCodeBlock([string])`, `string.MDHeading(int)`, +`string.MDItalic`, `string.MDLink`, `string.MDStrikeOut`, and `string.MDUnderline` for Markdown formatting. +- X10D: Added Span overloads which complement `char.Repeat` and `string.Repeat`. ### Fixed @@ -38,12 +39,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 BigEndian/LittleEndian methods. - X10D: `Stream.GetHash<>` and `Stream.TryWriteHash<>` now throw ArgumentException in lieu of TypeInitializationException. +- X10D: `char.IsEmoji` no longer allocates for .NET 7. +- X10D: `string.Repeat` is now more efficient. ### Removed - X10D: Removed `IEnumerable.ConcatOne` - this functionality already exists with `Append`. - X10D: Removed `Endianness` enum. -- X10D.DSharpPlus: Complete sunset of library. This library will not be updated to support DSharpPlus v5.0.0. +- X10D: Removed `Span.Replace(T, T)` for .NET 8 target. +- X10D: Removed .NET Standard 2.1 target. +- X10D.Hosting: Removed .NET Standard 2.1 target. +- X10D.DSharpPlus: Complete sunset of library. This library will not be updated to support DSharpPlus v5.0.0 (#83). +- X10D.Unity: Complete sunset of library. This library will not be updated effective immediately (#86). ## [3.3.1] - 2023-08-21 diff --git a/Directory.Build.props b/Directory.Build.props index 3250f61..9f2994d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,5 @@ - net7.0;net6.0;netstandard2.1 11.0 true true @@ -21,7 +20,7 @@ dotnet extension-methods README.md - $([System.IO.File]::ReadAllText("$(SolutionDir)/CHANGELOG.md")) + See CHANGELOG.md for a full list of changes. true diff --git a/README.md b/README.md index 2f38a60..8bd1047 100644 --- a/README.md +++ b/README.md @@ -9,29 +9,115 @@ MIT License

-### About +## About X10D (pronounced *extend*), is a .NET package that provides extension methods for numerous types. The purpose of this library is to simplify a codebase by reducing the need for repeated code when performing common operations. Simplify your codebase. Take advantage of .NET. Use extension methods. *(I'm also [dogfooding](https://www.pcmag.com/encyclopedia/term/dogfooding) this library, so there's that.)* +### What are extension methods? + +Extension methods are a clever .NET feature that augment existing types with new functionality. They are defined as +static methods in a static class, and are called as if they were instance methods on the type they are extending. Take, +for example, the following code: + +```csharp +public static class Program +{ + public static void Main() + { + string str = "Hello, world!"; + Console.WriteLine(str.Reverse()); + } +} + +public static class StringExtensions +{ + public static string Reverse(this string str) + { + char[] chars = str.ToCharArray(); + Array.Reverse(chars); + return new string(chars); + } +} +``` + +This will print `!dlrow ,olleH` to the console. The `Reverse` method is defined in the `StringExtensions` class, yet is +called as if it were an instance method on the `str` variable, even though it's not. + +### Why use extension methods? + +Extension methods were introduced when LINQ was added to .NET. LINQ is a set of extension methods that provide a way to +query, filter, and transform data. If you were to access LINQ's methods statically, you would have to write code like +this: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + IEnumerable evenNumbers = Enumerable.Where(numbers, x => x % 2 == 0); + IEnumerable doubledNumbers = Enumerable.Select(evenNumbers, x => x * 2); + int sum = Enumerable.Sum(doubledNumbers); + Console.WriteLine(sum); + } +} +``` + +And if you wanted to one-line this, you'd have to write this: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + Console.WriteLine(Enumerable.Sum(Enumerable.Select(Enumerable.Where(numbers, x => x % 2 == 0), x => x * 2))); + } +} +``` + +This is a lot of code to write, and it's not very readable. The nested method calls make it incredibly difficult to +follow. However, because LINQ is implemented as extension methods, you can write the following code instead: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + Console.WriteLine(numbers.Where(x => x % 2 == 0).Select(x => x * 2).Sum()); + } +} +``` + +Because the methods are called as if they were instance methods on `IEnumerable`, they can be chained together, +making the code much more readable. + +X10D aims to provide these same benefits as LINQ, but for dozens of other types and for countless other use cases. See +the [documentation](#documentation) for a complete breakdown of what's available. + ## Installation + ### NuGet installation + ```ps Install-Package X10D -Version 4.0.0 ``` ### Manual installation + Download the [latest release](https://github.com/oliverbooth/X10D/releases/latest) from this repository and adding a direct assembly reference for your chosen platform. -### Unity installation -For the Unity installation guide, refer to the [README.md in X10D.Unity](X10D.Unity/README.md). +## Documentation -## Features -I'm planning on writing complete and extensive documentation in the near future. As of this time, feel free to browse the source or the API using your favourite IDE. -For those familiar with the 2.6.0 API, please read [CHANGELOG.md](CHANGELOG.md) for a complete list of changes. **3.0.0 is a major release and introduces many breaking changes.** +Documentation and the API reference is available at https://oliverbooth.github.io/X10D/index.html. *I'm sorry this took +so long to get up and running. DocFX will be the death of me.* ## Contributing + Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md). ## License + X10D is released under the MIT License. See [here](https://github.com/oliverbooth/X10D/blob/main/LICENSE.md) for more details. diff --git a/X10D.Hosting/X10D.Hosting.csproj b/X10D.Hosting/X10D.Hosting.csproj index 0d99bec..b54a518 100644 --- a/X10D.Hosting/X10D.Hosting.csproj +++ b/X10D.Hosting/X10D.Hosting.csproj @@ -1,5 +1,9 @@ + + net8.0;net7.0;net6.0 + + diff --git a/X10D.Tests/X10D.Tests.csproj b/X10D.Tests/X10D.Tests.csproj index 4af78b2..ca37853 100644 --- a/X10D.Tests/X10D.Tests.csproj +++ b/X10D.Tests/X10D.Tests.csproj @@ -1,8 +1,9 @@ - net7.0;net6.0;netcoreapp3.1 + net8.0;net7.0;net6.0 false + true json,cobertura true false @@ -13,14 +14,14 @@ - - - - - - - - + + + + + + + + diff --git a/X10D.Tests/src/Collections/ByteTests.cs b/X10D.Tests/src/Collections/ByteTests.cs index 4891123..304999a 100644 --- a/X10D.Tests/src/Collections/ByteTests.cs +++ b/X10D.Tests/src/Collections/ByteTests.cs @@ -47,7 +47,6 @@ internal class ByteTests }); } -#if NET5_0_OR_GREATER [Test] public void UnpackInternal_Fallback_ShouldUnpackToSpanCorrectly() { @@ -92,7 +91,6 @@ internal class ByteTests Assert.That(bits[7], Is.True); }); } -#endif [Test] public void Unpack_ShouldRepackEqually() diff --git a/X10D.Tests/src/Collections/Int16Tests.cs b/X10D.Tests/src/Collections/Int16Tests.cs index f7bfab3..c01dbe4 100644 --- a/X10D.Tests/src/Collections/Int16Tests.cs +++ b/X10D.Tests/src/Collections/Int16Tests.cs @@ -1,6 +1,4 @@ -#if NET5_0_OR_GREATER using System.Runtime.Intrinsics.X86; -#endif using NUnit.Framework; using X10D.Collections; @@ -84,7 +82,6 @@ internal class Int16Tests }); } -#if NET5_0_OR_GREATER [Test] public void UnpackInternal_Ssse3_ShouldUnpackToSpanCorrectly() { @@ -115,7 +112,6 @@ internal class Int16Tests } }); } -#endif [Test] public void Unpack_ShouldRepackEqually() diff --git a/X10D.Tests/src/Collections/Int32Tests.cs b/X10D.Tests/src/Collections/Int32Tests.cs index 39b1036..0a8ea19 100644 --- a/X10D.Tests/src/Collections/Int32Tests.cs +++ b/X10D.Tests/src/Collections/Int32Tests.cs @@ -1,6 +1,4 @@ -#if NET5_0_OR_GREATER using System.Runtime.Intrinsics.X86; -#endif using NUnit.Framework; using X10D.Collections; @@ -85,7 +83,6 @@ internal class Int32Tests }); } -#if NET5_0_OR_GREATER [Test] public void UnpackInternal_Ssse3_ShouldUnpackToSpanCorrectly() { @@ -145,7 +142,6 @@ internal class Int32Tests } }); } -#endif [Test] public void Unpack_ShouldRepackEqually() diff --git a/X10D.Tests/src/Core/IntrinsicTests.cs b/X10D.Tests/src/Core/IntrinsicTests.cs index e45f236..a37c99a 100644 --- a/X10D.Tests/src/Core/IntrinsicTests.cs +++ b/X10D.Tests/src/Core/IntrinsicTests.cs @@ -1,4 +1,3 @@ -#if NET6_0_OR_GREATER using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; using NUnit.Framework; @@ -223,4 +222,3 @@ internal class IntrinsicTests Assert.That(result, Is.EqualTo(expectedResult)); } } -#endif diff --git a/X10D.Tests/src/Core/SpanTest.cs b/X10D.Tests/src/Core/SpanTest.cs index 4755ff0..743a55e 100644 --- a/X10D.Tests/src/Core/SpanTest.cs +++ b/X10D.Tests/src/Core/SpanTest.cs @@ -1,7 +1,5 @@ -#if NET5_0_OR_GREATER using System.Runtime.Intrinsics.Arm; using System.Runtime.Intrinsics.X86; -#endif using NUnit.Framework; using X10D.Core; @@ -209,7 +207,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } -#if NET5_0_OR_GREATER [Test] public void PackByteInternal_Sse2_ShouldReturnCorrectByte_GivenReadOnlySpan_Using() { @@ -226,23 +223,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } - [Test] - public void PackByteInternal_AdvSimd_ShouldReturnCorrectByte_GivenReadOnlySpan_Using() - { - if (!AdvSimd.IsSupported) - { - return; - } - - const byte expected = 0b00110011; - ReadOnlySpan span = stackalloc bool[8] {true, true, false, false, true, true, false, false}; - - byte actual = span.PackByteInternal_AdvSimd(); - - Assert.That(actual, Is.EqualTo(expected)); - } -#endif - [Test] public void PackInt16_ShouldReturnSameAsPackByte_WhenSpanHasLength8() { @@ -268,7 +248,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } -#if NET5_0_OR_GREATER [Test] public void PackInt16Internal_Sse2_ShouldReturnCorrectInt16_GivenReadOnlySpan_Using() { @@ -287,7 +266,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } -#endif [Test] public void PackInt32Internal_Fallback_ShouldReturnCorrectInt32_GivenReadOnlySpan() @@ -304,7 +282,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } -#if NET5_0_OR_GREATER [Test] public void PackInt32Internal_Sse2_ShouldReturnCorrectInt32_GivenReadOnlySpan() { @@ -345,27 +322,6 @@ internal class SpanTest Assert.That(actual, Is.EqualTo(expected)); } - [Test] - public void PackInt32Internal_AdvSimd_ShouldReturnCorrectInt32_GivenReadOnlySpan() - { - if (!AdvSimd.IsSupported) - { - return; - } - - const int expected = 0b01010101_10101010_01010101_10101010; - ReadOnlySpan span = stackalloc bool[32] - { - false, true, false, true, false, true, false, true, true, false, true, false, true, false, true, false, false, - true, false, true, false, true, false, true, true, false, true, false, true, false, true, false, - }; - - int actual = span.PackInt32Internal_AdvSimd(); - - Assert.That(actual, Is.EqualTo(expected)); - } -#endif - [Test] public void PackInt32_ShouldReturnSameAsPackByte_WhenSpanHasLength8_UsingReadOnlySpan() { diff --git a/X10D.Tests/src/Drawing/ColorTests.cs b/X10D.Tests/src/Drawing/ColorTests.cs index cb5cc97..de95f14 100644 --- a/X10D.Tests/src/Drawing/ColorTests.cs +++ b/X10D.Tests/src/Drawing/ColorTests.cs @@ -207,9 +207,7 @@ internal class ColorTests Assert.That(Color.Plum.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkGray)); Assert.That(Color.PowderBlue.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkGray)); Assert.That(Color.Purple.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkMagenta)); -#if NET6_0_OR_GREATER Assert.That(Color.RebeccaPurple.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkMagenta)); -#endif Assert.That(Color.Red.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Red)); Assert.That(Color.RosyBrown.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkGray)); Assert.That(Color.RoyalBlue.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.DarkCyan)); diff --git a/X10D.Tests/src/IO/DoubleTests.cs b/X10D.Tests/src/IO/DoubleTests.cs index 9b8a43a..66f15fe 100644 --- a/X10D.Tests/src/IO/DoubleTests.cs +++ b/X10D.Tests/src/IO/DoubleTests.cs @@ -33,7 +33,7 @@ internal class DoubleTests var expected = new byte[] { 0x40, 0x45, 0x40, 0, 0, 0, 0, 0 }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -44,7 +44,7 @@ internal class DoubleTests var expected = new byte[] { 0, 0, 0, 0, 0, 0x40, 0x45, 0x40 }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -53,7 +53,7 @@ internal class DoubleTests { const double value = 42.5; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } [Test] @@ -61,6 +61,6 @@ internal class DoubleTests { const double value = 42.5; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/Int16Tests.cs b/X10D.Tests/src/IO/Int16Tests.cs index 8d64f97..6b03d4a 100644 --- a/X10D.Tests/src/IO/Int16Tests.cs +++ b/X10D.Tests/src/IO/Int16Tests.cs @@ -33,7 +33,7 @@ internal class Int16Tests byte[] expected = { 0x0F, 0 }; Span actual = stackalloc byte[2]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -44,7 +44,7 @@ internal class Int16Tests byte[] expected = { 0, 0x0F }; Span actual = stackalloc byte[2]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -53,7 +53,7 @@ internal class Int16Tests { const short value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } [Test] @@ -61,6 +61,6 @@ internal class Int16Tests { const short value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/Int32Tests.cs b/X10D.Tests/src/IO/Int32Tests.cs index 31898a0..01c7990 100644 --- a/X10D.Tests/src/IO/Int32Tests.cs +++ b/X10D.Tests/src/IO/Int32Tests.cs @@ -33,7 +33,7 @@ internal class Int32Tests var expected = new byte[] { 0, 0, 0, 0x0F }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -44,7 +44,7 @@ internal class Int32Tests var expected = new byte[] { 0x0F, 0, 0, 0 }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -53,7 +53,7 @@ internal class Int32Tests { const int value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } [Test] @@ -61,6 +61,6 @@ internal class Int32Tests { const int value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/Int64Tests.cs b/X10D.Tests/src/IO/Int64Tests.cs index 393b9e0..c331369 100644 --- a/X10D.Tests/src/IO/Int64Tests.cs +++ b/X10D.Tests/src/IO/Int64Tests.cs @@ -33,7 +33,7 @@ internal class Int64Tests byte[] expected = { 0x0F, 0, 0, 0, 0, 0, 0, 0 }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -44,7 +44,7 @@ internal class Int64Tests byte[] expected = { 0, 0, 0, 0, 0, 0, 0, 0x0F }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -53,7 +53,7 @@ internal class Int64Tests { const long value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } [Test] @@ -61,6 +61,6 @@ internal class Int64Tests { const long value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/SingleTests.cs b/X10D.Tests/src/IO/SingleTests.cs index e7de74d..984f8a4 100644 --- a/X10D.Tests/src/IO/SingleTests.cs +++ b/X10D.Tests/src/IO/SingleTests.cs @@ -33,7 +33,7 @@ internal class SingleTests var expected = new byte[] { 0x42, 0x2A, 0, 0 }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -44,7 +44,7 @@ internal class SingleTests var expected = new byte[] { 0, 0, 0x2A, 0x42 }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -53,7 +53,7 @@ internal class SingleTests { const float value = 42.5f; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } [Test] @@ -61,6 +61,6 @@ internal class SingleTests { const float value = 42.5f; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/UInt16Tests.cs b/X10D.Tests/src/IO/UInt16Tests.cs index 58307e4..be9360e 100644 --- a/X10D.Tests/src/IO/UInt16Tests.cs +++ b/X10D.Tests/src/IO/UInt16Tests.cs @@ -33,7 +33,7 @@ internal class UInt16Tests byte[] expected = { 0x0F, 0 }; Span actual = stackalloc byte[2]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -45,7 +45,7 @@ internal class UInt16Tests byte[] expected = { 0, 0x0F }; Span actual = stackalloc byte[2]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -55,7 +55,7 @@ internal class UInt16Tests { const ushort value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } [Test] @@ -63,6 +63,6 @@ internal class UInt16Tests { const ushort value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/UInt32Tests.cs b/X10D.Tests/src/IO/UInt32Tests.cs index cce312a..7847759 100644 --- a/X10D.Tests/src/IO/UInt32Tests.cs +++ b/X10D.Tests/src/IO/UInt32Tests.cs @@ -33,7 +33,7 @@ internal class UInt32Tests byte[] expected = { 0x0F, 0, 0, 0 }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -45,7 +45,7 @@ internal class UInt32Tests byte[] expected = { 0, 0, 0, 0x0F }; Span actual = stackalloc byte[4]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -55,7 +55,7 @@ internal class UInt32Tests { const uint value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } [Test] @@ -63,6 +63,6 @@ internal class UInt32Tests { const uint value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/IO/UInt64Tests.cs b/X10D.Tests/src/IO/UInt64Tests.cs index aeb589b..e783e2a 100644 --- a/X10D.Tests/src/IO/UInt64Tests.cs +++ b/X10D.Tests/src/IO/UInt64Tests.cs @@ -33,7 +33,7 @@ internal class UInt64Tests byte[] expected = { 0x0F, 0, 0, 0, 0, 0, 0, 0 }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteLittleEndian(actual)); + Assert.That(value.TryWriteLittleEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -45,7 +45,7 @@ internal class UInt64Tests byte[] expected = { 0, 0, 0, 0, 0, 0, 0, 0x0F }; Span actual = stackalloc byte[8]; - Assert.That(value.TryWriteBigEndian(actual)); + Assert.That(value.TryWriteBigEndianBytes(actual)); CollectionAssert.AreEqual(expected, actual.ToArray()); } @@ -55,7 +55,7 @@ internal class UInt64Tests { const ulong value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteLittleEndian(buffer), Is.False); + Assert.That(value.TryWriteLittleEndianBytes(buffer), Is.False); } [Test] @@ -63,6 +63,6 @@ internal class UInt64Tests { const ulong value = 0x0F; Span buffer = stackalloc byte[0]; - Assert.That(value.TryWriteBigEndian(buffer), Is.False); + Assert.That(value.TryWriteBigEndianBytes(buffer), Is.False); } } diff --git a/X10D.Tests/src/Linq/ReadOnlySpanTests.cs b/X10D.Tests/src/Linq/ReadOnlySpanTests.cs index 942e646..2b6ab5f 100644 --- a/X10D.Tests/src/Linq/ReadOnlySpanTests.cs +++ b/X10D.Tests/src/Linq/ReadOnlySpanTests.cs @@ -76,7 +76,7 @@ internal class ReadOnlySpanTests Assert.Throws(() => { var span = new ReadOnlySpan(); - _ = span.Count(null!); + _ = span.Count((Predicate)null!); }); } } diff --git a/X10D.Tests/src/Linq/SpanTests.cs b/X10D.Tests/src/Linq/SpanTests.cs index 313dea1..186d0e8 100644 --- a/X10D.Tests/src/Linq/SpanTests.cs +++ b/X10D.Tests/src/Linq/SpanTests.cs @@ -76,7 +76,7 @@ internal class SpanTests Assert.Throws(() => { var span = new Span(); - _ = span.Count(null!); + _ = span.Count((Predicate)null!); }); } } diff --git a/X10D.Tests/src/Text/CharSpanTests.cs b/X10D.Tests/src/Text/CharSpanTests.cs index fa02e2f..2441a58 100644 --- a/X10D.Tests/src/Text/CharSpanTests.cs +++ b/X10D.Tests/src/Text/CharSpanTests.cs @@ -60,4 +60,60 @@ internal class CharSpanTests Assert.That(string.Empty.AsSpan().CountSubstring('\0'), Is.Zero); Assert.That(string.Empty.AsSpan().CountSubstring(string.Empty.AsSpan(), StringComparison.OrdinalIgnoreCase), Is.Zero); } + + [Test] + public void Repeat_ShouldNotManipulateSpan_GivenCount0() + { + Span destination = new char[11]; + "Hello world".AsSpan().CopyTo(destination); + + "a".AsSpan().Repeat(0, destination); + Assert.That(destination.ToString(), Is.EqualTo("Hello world")); + } + + [Test] + public void Repeat_ShouldReturnItself_GivenCount1() + { + string repeated = "a".AsSpan().Repeat(1); + Assert.That(repeated, Has.Length.EqualTo(1)); + Assert.That(repeated, Is.EqualTo("a")); + } + + [Test] + public void Repeat_ShouldPopulateSpan_GivenValidSpan() + { + const string expected = "aaaaaaaaaa"; + Span destination = new char[10]; + "a".AsSpan().Repeat(10, destination); + + Assert.That(destination.ToString(), Is.EqualTo(expected)); + } + + [Test] + public void Repeat_ShouldReturnEmptyString_GivenCount0() + { + Assert.That("a".AsSpan().Repeat(0), Is.EqualTo(string.Empty)); + } + + [Test] + public void Repeat_ShouldReturnRepeatedString_GivenSpan() + { + const string expected = "aaaaaaaaaa"; + string actual = "a".AsSpan().Repeat(10); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Repeat_ShouldThrowArgumentException_GivenSmallSpan() + { + Assert.Throws(() => "a".AsSpan().Repeat(10, Span.Empty)); + } + + [Test] + public void Repeat_ShouldThrowArgumentOutOfRangeException_GivenNegativeCount() + { + Assert.Throws(() => _ = "a".AsSpan().Repeat(-1)); + Assert.Throws(() => "a".AsSpan().Repeat(-1, Span.Empty)); + } } diff --git a/X10D.Tests/src/Text/CharTests.cs b/X10D.Tests/src/Text/CharTests.cs index 5ac8840..e06d3b5 100644 --- a/X10D.Tests/src/Text/CharTests.cs +++ b/X10D.Tests/src/Text/CharTests.cs @@ -9,11 +9,14 @@ internal class CharTests [Test] public void IsEmoji_ShouldReturnTrue_GivenBasicEmoji() { - Assert.That('✂'.IsEmoji()); - Assert.That('✅'.IsEmoji()); - Assert.That('❎'.IsEmoji()); - Assert.That('➕'.IsEmoji()); - Assert.That('➖'.IsEmoji()); + Assert.Multiple(() => + { + Assert.That('✂'.IsEmoji()); + Assert.That('✅'.IsEmoji()); + Assert.That('❎'.IsEmoji()); + Assert.That('➕'.IsEmoji()); + Assert.That('➖'.IsEmoji()); + }); } [Test] @@ -26,7 +29,26 @@ internal class CharTests } [Test] - public void RepeatShouldBeCorrect() + public void Repeat_ShouldPopulateSpanWithRepeatedCharacter_GivenValidCount() + { + const string expected = "aaaaaaaaaa"; + Span destination = new char[10]; + 'a'.Repeat(10, destination); + + Assert.That(destination.ToString(), Is.EqualTo(expected)); + } + + [Test] + public void Repeat_ShouldOnlyWriteOneCharToSpan_GivenCount1() + { + Span destination = new char[10]; + 'a'.Repeat(1, destination); + + Assert.That(destination.ToString(), Is.EqualTo("a\0\0\0\0\0\0\0\0\0")); + } + + [Test] + public void Repeat_ShouldReturnRepeatedCharacter_GivenValidCount() { const string expected = "aaaaaaaaaa"; string actual = 'a'.Repeat(10); @@ -35,22 +57,47 @@ internal class CharTests } [Test] - public void RepeatOneCountShouldBeLength1String() + public void Repeat_ShouldReturnSingleCharString_GivenCount1() { string repeated = 'a'.Repeat(1); - Assert.That(repeated.Length, Is.EqualTo(1)); + Assert.That(repeated, Has.Length.EqualTo(1)); Assert.That(repeated, Is.EqualTo("a")); } [Test] - public void RepeatZeroCountShouldBeEmpty() + public void Repeat_ShouldReturnEmptyString_GivenCount0() { Assert.That('a'.Repeat(0), Is.EqualTo(string.Empty)); } [Test] - public void RepeatNegativeCountShouldThrow() + public void Repeat_ShouldNotManipulateSpan_GivenCount0() { - Assert.Throws(() => 'a'.Repeat(-1)); + Span destination = new char[10]; + destination.Fill(' '); + 'a'.Repeat(0, destination); + + const string expected = " "; + Assert.That(destination.ToString(), Is.EqualTo(expected)); + } + + [Test] + public void Repeat_ShouldThrowArgumentOutOfRangeException_GivenNegativeCount() + { + Assert.Multiple(() => + { + Assert.Throws(() => _ = 'a'.Repeat(-1)); + Assert.Throws(() => 'a'.Repeat(-1, Span.Empty)); + }); + } + + [Test] + public void Repeat_ShouldThrowArgumentException_GivenSmallSpan() + { + Assert.Throws(() => + { + var destination = Span.Empty; + 'a'.Repeat(1, destination); + }); } } diff --git a/X10D.Tests/src/Text/CoreTests.cs b/X10D.Tests/src/Text/CoreTests.cs index ca2f1dd..684fa26 100644 --- a/X10D.Tests/src/Text/CoreTests.cs +++ b/X10D.Tests/src/Text/CoreTests.cs @@ -6,7 +6,6 @@ namespace X10D.Tests.Text; [TestFixture] internal class CoreTests { -#if NET5_0_OR_GREATER [Test] public void ToJsonShouldNotBeEmpty() { @@ -24,5 +23,4 @@ internal class CoreTests CollectionAssert.AreEqual(source, target); CollectionAssert.AreEquivalent(source, target); } -#endif } diff --git a/X10D.Tests/src/Text/MarkdownTests.cs b/X10D.Tests/src/Text/MarkdownTests.cs new file mode 100644 index 0000000..28bc5eb --- /dev/null +++ b/X10D.Tests/src/Text/MarkdownTests.cs @@ -0,0 +1,171 @@ +using NUnit.Framework; +using X10D.Text; + +namespace X10D.Tests.Text; + +[TestFixture] +internal class MarkdownTests +{ + [Test] + public void MDBold_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDBold()); + } + + [Test] + public void MDBold_ShouldReturnBoldText_GivenText() + { + Assert.That("Hello, world!".MDBold(), Is.EqualTo("**Hello, world!**")); + } + + [Test] + public void MDCode_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDCode()); + } + + [Test] + public void MDCode_ShouldReturnCodeText_GivenText() + { + Assert.That("Hello, world!".MDCode(), Is.EqualTo("`Hello, world!`")); + } + + [Test] + public void MDCodeBlock_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDCodeBlock()); + } + + [Test] + public void MDCodeBlock_ShouldReturnCodeBlockText_GivenText() + { + var expected = $"```{Environment.NewLine}Hello, world!{Environment.NewLine}```"; + string actual = "Hello, world!".MDCodeBlock(); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void MDCodeBlock_ShouldReturnCodeBlockText_GivenTextAndLanguage() + { + var expected = $"```csharp{Environment.NewLine}Hello, world!{Environment.NewLine}```"; + string actual = "Hello, world!".MDCodeBlock("csharp"); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void MDHeading_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDHeading(1)); + } + + [Test] + public void MDHeading_ShouldThrowArgumentOutOfRangeException_GivenInvalidHeading() + { + Assert.Throws(() => "Hello, world!".MDHeading(0)); + Assert.Throws(() => "Hello, world!".MDHeading(7)); + } + + [Test] + public void MDHeading_ShouldReturnHeadingText_GivenText() + { + Assert.Multiple(() => + { + Assert.That("Hello, world!".MDHeading(1), Is.EqualTo("# Hello, world!")); + Assert.That("Hello, world!".MDHeading(2), Is.EqualTo("## Hello, world!")); + Assert.That("Hello, world!".MDHeading(3), Is.EqualTo("### Hello, world!")); + Assert.That("Hello, world!".MDHeading(4), Is.EqualTo("#### Hello, world!")); + Assert.That("Hello, world!".MDHeading(5), Is.EqualTo("##### Hello, world!")); + Assert.That("Hello, world!".MDHeading(6), Is.EqualTo("###### Hello, world!")); + }); + } + + [Test] + public void MDItalic_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDItalic()); + } + + [Test] + public void MDItalic_ShouldReturnItalicTextWithAsterisk_GivenText() + { + Assert.That("Hello, world!".MDItalic(), Is.EqualTo("*Hello, world!*")); + } + + [Test] + public void MDItalic_ShouldReturnItalicTextWithAsterisk_GivenText_AndFalseUnderscoreFlag() + { + Assert.That("Hello, world!".MDItalic(false), Is.EqualTo("*Hello, world!*")); + } + + [Test] + public void MDItalic_ShouldReturnItalicTextWithUnderscores_GivenText_AndTrueUnderscoreFlag() + { + Assert.That("Hello, world!".MDItalic(true), Is.EqualTo("_Hello, world!_")); + } + + [Test] + public void MDLink_ShouldThrowArgumentNullException_GivenNullUrl() + { + Assert.Multiple(() => + { + Assert.Throws(() => "".MDLink((string)null!)); + Assert.Throws(() => "".MDLink((Uri)null!)); + Assert.Throws(() => ((Uri)null!).MDLink("Hello, world!")); + }); + } + + [Test] + public void MDLink_ShouldReturnUrlOnly_GivenNullOrEmptyLabel() + { + const string url = "https://example.com/"; + Assert.Multiple(() => + { + Assert.That(((string)null!).MDLink(url), Is.EqualTo(url)); + Assert.That(string.Empty.MDLink(url), Is.EqualTo(url)); + + Assert.That(new Uri(url).MDLink(null), Is.EqualTo(url)); + Assert.That(new Uri(url).MDLink(string.Empty), Is.EqualTo(url)); + }); + } + + [Test] + public void MDLink_ShouldReturnFormattedLink_GivenValidLabelAndUrl() + { + const string url = "https://example.com/"; + const string label = "Hello, world!"; + + Assert.Multiple(() => + { + Assert.That(label.MDLink(url), Is.EqualTo($"[{label}]({url})")); + Assert.That(label.MDLink(new Uri(url)), Is.EqualTo($"[{label}]({url})")); + + Assert.That(new Uri(url).MDLink(label), Is.EqualTo($"[{label}]({url})")); + }); + } + + [Test] + public void MDStrikeOut_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDStrikeOut()); + } + + [Test] + public void MDStrikeOut_ShouldReturnStrikeOutText_GivenText() + { + Assert.That("Hello, world!".MDStrikeOut(), Is.EqualTo("~~Hello, world!~~")); + } + + [Test] + public void MDUnderline_ShouldThrowArgumentNullException_GivenNull() + { + Assert.Throws(() => ((string)null!).MDUnderline()); + } + + [Test] + public void MDUnderline_ShouldReturnUnderlineText_GivenText() + { + Assert.That("Hello, world!".MDUnderline(), Is.EqualTo("__Hello, world!__")); + } +} diff --git a/X10D.Tests/src/Text/RuneTests.cs b/X10D.Tests/src/Text/RuneTests.cs index fc196c9..0efb605 100644 --- a/X10D.Tests/src/Text/RuneTests.cs +++ b/X10D.Tests/src/Text/RuneTests.cs @@ -1,4 +1,3 @@ -#if NET5_0_OR_GREATER using System.Text; using NUnit.Framework; using X10D.Text; @@ -90,4 +89,3 @@ internal class RuneTests Assert.That(repeated, Is.EqualTo("𐀀𐀀𐀀𐀀𐀀𐀀")); } } -#endif diff --git a/X10D.Tests/src/Text/StringTests.cs b/X10D.Tests/src/Text/StringTests.cs index 44422d1..d658b72 100644 --- a/X10D.Tests/src/Text/StringTests.cs +++ b/X10D.Tests/src/Text/StringTests.cs @@ -1,7 +1,5 @@ using System.Text; -#if NET5_0_OR_GREATER using System.Text.Json.Serialization; -#endif using NUnit.Framework; using X10D.Text; @@ -164,7 +162,9 @@ internal class StringTests Assert.Multiple(() => { Assert.That("Hello World".CountSubstring('E'), Is.Zero); +#pragma warning disable CA1307 Assert.That("Hello World".CountSubstring("E"), Is.Zero); +#pragma warning restore CA1307 Assert.That("Hello World".CountSubstring("E", StringComparison.OrdinalIgnoreCase), Is.EqualTo(1)); }); } @@ -175,7 +175,9 @@ internal class StringTests Assert.Multiple(() => { Assert.That("Hello World".CountSubstring('z'), Is.Zero); +#pragma warning disable CA1307 Assert.That("Hello World".CountSubstring("z"), Is.Zero); +#pragma warning restore CA1307 Assert.That("Hello World".CountSubstring("z", StringComparison.OrdinalIgnoreCase), Is.Zero); }); } @@ -186,7 +188,9 @@ internal class StringTests Assert.Multiple(() => { Assert.That("Hello World".CountSubstring('e'), Is.EqualTo(1)); +#pragma warning disable CA1307 Assert.That("Hello World".CountSubstring("e"), Is.EqualTo(1)); +#pragma warning restore CA1307 Assert.That("Hello World".CountSubstring("e", StringComparison.OrdinalIgnoreCase), Is.EqualTo(1)); }); } @@ -197,7 +201,9 @@ internal class StringTests Assert.Multiple(() => { Assert.That(string.Empty.CountSubstring('\0'), Is.Zero); +#pragma warning disable CA1307 Assert.That(string.Empty.CountSubstring(string.Empty), Is.Zero); +#pragma warning restore CA1307 Assert.That(string.Empty.CountSubstring(string.Empty, StringComparison.OrdinalIgnoreCase), Is.Zero); }); } @@ -207,7 +213,9 @@ internal class StringTests { string value = null!; Assert.Throws(() => value.CountSubstring('\0')); +#pragma warning disable CA1307 Assert.Throws(() => value.CountSubstring(string.Empty)); +#pragma warning restore CA1307 Assert.Throws(() => value.CountSubstring(string.Empty, StringComparison.OrdinalIgnoreCase)); } @@ -217,7 +225,10 @@ internal class StringTests const string value = "Hello Worl"; const char substring = 'd'; +#pragma warning disable CA1307 Assert.That(value.EnsureEndsWith(substring), Is.EqualTo("Hello World")); +#pragma warning restore CA1307 + Assert.That(value.EnsureEndsWith(substring, StringComparison.Ordinal), Is.EqualTo("Hello World")); } [Test] @@ -226,7 +237,10 @@ internal class StringTests const string value = "A"; const char substring = 'A'; +#pragma warning disable CA1307 Assert.That(value.EnsureEndsWith(substring), Is.EqualTo(value)); +#pragma warning restore CA1307 + Assert.That(value.EnsureEndsWith(substring, StringComparison.Ordinal), Is.EqualTo(value)); } [Test] @@ -235,7 +249,10 @@ internal class StringTests const string value = "B"; const char substring = 'A'; +#pragma warning disable CA1307 Assert.That(value.EnsureStartsWith(substring), Is.EqualTo("AB")); +#pragma warning restore CA1307 + Assert.That(value.EnsureStartsWith(substring, StringComparison.Ordinal), Is.EqualTo("AB")); } [Test] @@ -244,7 +261,10 @@ internal class StringTests const string value = "A"; const char substring = 'A'; +#pragma warning disable CA1307 Assert.That(value.EnsureStartsWith(substring), Is.EqualTo(value)); +#pragma warning restore CA1307 + Assert.That(value.EnsureStartsWith(substring, StringComparison.Ordinal), Is.EqualTo(value)); } [Test] @@ -253,7 +273,10 @@ internal class StringTests const string value = "Hello "; const string substring = "World"; +#pragma warning disable CA1307 Assert.That(value.EnsureEndsWith(substring), Is.EqualTo("Hello World")); +#pragma warning restore CA1307 + Assert.That(value.EnsureEndsWith(substring, StringComparison.Ordinal), Is.EqualTo("Hello World")); } [Test] @@ -261,7 +284,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(substring.EnsureEndsWith(substring), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(substring.EnsureEndsWith(substring, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -269,7 +295,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(string.Empty.EnsureEndsWith(substring), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(string.Empty.EnsureEndsWith(substring, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -277,7 +306,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(substring.EnsureEndsWith(string.Empty), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(substring.EnsureEndsWith(string.Empty, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -286,7 +318,10 @@ internal class StringTests const string value = "World"; const string substring = "Hello "; +#pragma warning disable CA1307 Assert.That(value.EnsureStartsWith(substring), Is.EqualTo("Hello World")); +#pragma warning restore CA1307 + Assert.That(value.EnsureStartsWith(substring, StringComparison.Ordinal), Is.EqualTo("Hello World")); } [Test] @@ -294,7 +329,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(substring.EnsureStartsWith(substring), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(substring.EnsureStartsWith(substring, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -302,7 +340,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(string.Empty.EnsureStartsWith(substring), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(string.Empty.EnsureStartsWith(substring, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -310,7 +351,10 @@ internal class StringTests { const string substring = "World"; +#pragma warning disable CA1307 Assert.That(substring.EnsureStartsWith(string.Empty), Is.EqualTo(substring)); +#pragma warning restore CA1307 + Assert.That(substring.EnsureStartsWith(string.Empty, StringComparison.Ordinal), Is.EqualTo(substring)); } [Test] @@ -372,7 +416,6 @@ internal class StringTests Assert.Throws(() => _ = " ".EnumParse()); } -#if NET5_0_OR_GREATER [Test] public void FromJson_ShouldDeserializeCorrectly_GivenJsonString() { @@ -388,12 +431,11 @@ internal class StringTests Assert.That(target.Values[2], Is.EqualTo(3)); }); } -#endif [Test] public void GetBytes_ShouldReturnUtf8Bytes_GivenHelloWorld() { - var expected = new byte[] {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64}; + var expected = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 }; byte[] actual = "Hello World".GetBytes(); CollectionAssert.AreEqual(expected, actual); @@ -402,7 +444,7 @@ internal class StringTests [Test] public void GetBytes_ShouldReturnAsciiBytes_GivenHelloWorld() { - var expected = new byte[] {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64}; + var expected = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 }; byte[] actual = "Hello World".GetBytes(Encoding.ASCII); CollectionAssert.AreEqual(expected, actual); @@ -444,14 +486,16 @@ internal class StringTests public void IsEmoji_ShouldReturnTrue_GivenMultiByteEmoji() { string[] regionalIndicatorCodes = Enumerable.Range(0, 26) - .Select(i => Encoding.Unicode.GetString(new byte[] {0x3C, 0xD8, (byte)(0xE6 + i), 0xDD})) + .Select(i => Encoding.Unicode.GetString(new byte[] { 0x3C, 0xD8, (byte)(0xE6 + i), 0xDD })) .ToArray(); for (var i = 0; i < 26; i++) - for (var j = 0; j < 26; j++) { - string flag = (regionalIndicatorCodes[i] + regionalIndicatorCodes[j]); - Assert.That(flag.IsEmoji()); + for (var j = 0; j < 26; j++) + { + string flag = (regionalIndicatorCodes[i] + regionalIndicatorCodes[j]); + Assert.That(flag.IsEmoji()); + } } } @@ -696,7 +740,7 @@ internal class StringTests [Test] public void Randomize_ShouldThrow_GivenNegativeLength() { - Assert.Throws(() => string.Empty.Randomize(-1)); + Assert.Throws(() => _ = string.Empty.Randomize(-1)); } [Test] @@ -714,25 +758,62 @@ internal class StringTests Assert.That("a".Repeat(0), Is.EqualTo(string.Empty)); } + [Test] + public void Repeat_ShouldNotManipulateSpan_GivenCount0() + { + Span destination = new char[11]; + "Hello world".AsSpan().CopyTo(destination); + + "a".Repeat(0, destination); + Assert.That(destination.ToString(), Is.EqualTo("Hello world")); + } + [Test] public void Repeat_ShouldReturnItself_GivenCount1() { string repeated = "a".Repeat(1); - Assert.That(repeated.Length, Is.EqualTo(1)); + Assert.That(repeated, Has.Length.EqualTo(1)); Assert.That(repeated, Is.EqualTo("a")); } [Test] - public void Repeat_ShouldThrow_GivenNegativeCount() + public void Repeat_ShouldThrowArgumentException_GivenSmallSpan() { - Assert.Throws(() => _ = "a".Repeat(-1)); + Assert.Throws(() => "a".Repeat(10, Span.Empty)); } [Test] - public void Repeat_ShouldThrow_GivenNull() + public void Repeat_ShouldThrowArgumentOutOfRangeException_GivenNegativeCount() + { + Assert.Throws(() => _ = "a".Repeat(-1)); + Assert.Throws(() => "a".Repeat(-1, Span.Empty)); + } + + [Test] + public void Repeat_ShouldThrowArgumentNullException_GivenNull() { string value = null!; Assert.Throws(() => _ = value.Repeat(0)); + Assert.Throws(() => value.Repeat(0, Span.Empty)); + } + + [Test] + public void Repeat_ShouldPopulateSpanWithRepeatedCharacter_GivenValidCount() + { + const string expected = "aaaaaaaaaa"; + Span destination = new char[10]; + "a".Repeat(10, destination); + + Assert.That(destination.ToString(), Is.EqualTo(expected)); + } + + [Test] + public void Repeat_ShouldOnlyWriteOneCharToSpan_GivenCount1() + { + Span destination = new char[10]; + "a".Repeat(1, destination); + + Assert.That(destination.ToString(), Is.EqualTo("a\0\0\0\0\0\0\0\0\0")); } [Test] @@ -751,7 +832,7 @@ internal class StringTests } [Test] - public void Reverse_ShouldThrow_GivenNull() + public void Reverse_ShouldThrowArgumentNullException_GivenNull() { string value = null!; Assert.Throws(() => _ = value.Reverse()); @@ -769,7 +850,7 @@ internal class StringTests } [Test] - public void Shuffled_ShouldThrow_GivenNull() + public void Shuffled_ShouldThrowArgumentNullException_GivenNull() { string value = null!; Assert.Throws(() => _ = value.Shuffled()); @@ -803,7 +884,7 @@ internal class StringTests } [Test] - public void Split_ShouldThrow_GivenNullString() + public void Split_ShouldThrowArgumentNullException_GivenNullString() { string value = null!; @@ -878,7 +959,7 @@ internal class StringTests [Test] public void StartsWithAny_ShouldThrowArgumentNullException_GivenANullValue() { - var values = new[] {"Hello", null!, "World"}; + var values = new[] { "Hello", null!, "World" }; Assert.Throws(() => "Foobar".StartsWithAny(values)); Assert.Throws(() => "Foobar".StartsWithAny(StringComparison.Ordinal, values)); } @@ -921,11 +1002,9 @@ internal class StringTests }); } -#if NET5_0_OR_GREATER private struct SampleStructure { [JsonPropertyName("values")] public int[] Values { get; set; } } -#endif } diff --git a/X10D.Tests/src/Time/DateOnlyTests.cs b/X10D.Tests/src/Time/DateOnlyTests.cs index bae376b..15b10ce 100644 --- a/X10D.Tests/src/Time/DateOnlyTests.cs +++ b/X10D.Tests/src/Time/DateOnlyTests.cs @@ -1,4 +1,3 @@ -#if NET6_0_OR_GREATER using NUnit.Framework; using X10D.Time; @@ -230,4 +229,3 @@ internal class DateOnlyTests Assert.That(date.ToUnixTimeSeconds(time), Is.EqualTo(946684800)); } } -#endif diff --git a/X10D.Tests/src/Time/DoubleTests.cs b/X10D.Tests/src/Time/DoubleTests.cs index 5247837..18afb8f 100644 --- a/X10D.Tests/src/Time/DoubleTests.cs +++ b/X10D.Tests/src/Time/DoubleTests.cs @@ -1,4 +1,3 @@ -#if NET5_0_OR_GREATER using NUnit.Framework; using X10D.Time; @@ -52,4 +51,3 @@ internal class DoubleTests Assert.That((_negativeOne).Weeks() < TimeSpan.Zero); } } -#endif diff --git a/X10D.Unity.Tests/.gitignore b/X10D.Unity.Tests/.gitignore deleted file mode 100644 index 58cbc82..0000000 --- a/X10D.Unity.Tests/.gitignore +++ /dev/null @@ -1,72 +0,0 @@ -# This .gitignore file should be placed at the root of your Unity project directory -# -# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore -# -/[Ll]ibrary/ -/[Tt]emp/ -/[Oo]bj/ -/[Bb]uild/ -/[Bb]uilds/ -/[Ll]ogs/ -/[Uu]ser[Ss]ettings/ - -# MemoryCaptures can get excessive in size. -# They also could contain extremely sensitive data -/[Mm]emoryCaptures/ - -# Recordings can get excessive in size -/[Rr]ecordings/ - -# Uncomment this line if you wish to ignore the asset store tools plugin -# /[Aa]ssets/AssetStoreTools* - -# Autogenerated Jetbrains Rider plugin -/[Aa]ssets/Plugins/Editor/JetBrains* - -# Visual Studio cache directory -.vs/ - -# Gradle cache directory -.gradle/ - -# Autogenerated VS/MD/Consulo solution and project files -ExportedObj/ -.consulo/ -*.csproj -*.unityproj -*.sln -*.suo -*.tmp -*.user -*.userprefs -*.pidb -*.booproj -*.svd -*.pdb -*.mdb -*.opendb -*.VC.db - -# Unity3D generated meta files -*.pidb.meta -*.pdb.meta -*.mdb.meta - -# Unity3D generated file on crash reports -sysinfo.txt - -# Builds -*.apk -*.aab -*.unitypackage -*.app - -# Crashlytics generated file -crashlytics-build.properties - -# Packed Addressables -/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* - -# Temporary auto-generated Android Assets -/[Aa]ssets/[Ss]treamingAssets/aa.meta -/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/X10D.Unity.Tests/Assets/Scenes.meta b/X10D.Unity.Tests/Assets/Scenes.meta deleted file mode 100644 index 83c741b..0000000 --- a/X10D.Unity.Tests/Assets/Scenes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ea315d0fd7389c41b19996891e99ae3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity b/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity deleted file mode 100644 index c1a5fbe..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity +++ /dev/null @@ -1,354 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &192863441 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 192863443} - - component: {fileID: 192863442} - m_Layer: 0 - m_Name: GameObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &192863442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 192863441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0fac6b15ed0b420ba300fc1ac10ef01a, type: 3} - m_Name: - m_EditorClassIdentifier: - _hexagonPoints: - - {x: -0.5, y: 0.5} - - {x: -0.25, y: 1} - - {x: 0.25, y: 1} - - {x: 0.5, y: 0.5} - - {x: 0.25, y: 0} - - {x: -0.25, y: 0} ---- !u!4 &192863443 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 192863441} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &585803459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 585803461} - - component: {fileID: 585803460} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &585803460 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 585803459} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &585803461 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 585803459} - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &1189625736 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1189625739} - - component: {fileID: 1189625738} - - component: {fileID: 1189625737} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1189625737 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189625736} - m_Enabled: 1 ---- !u!20 &1189625738 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189625736} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1189625739 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189625736} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity.meta b/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity.meta deleted file mode 100644 index 90ba21a..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/DebugExIntegrationTests.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f2337eeeb085a25408461d996bb20a9c -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity b/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity deleted file mode 100644 index 2221b04..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity +++ /dev/null @@ -1,267 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &705507993 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 705507995} - - component: {fileID: 705507994} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &705507994 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 705507993} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &705507995 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 705507993} - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &963194225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 963194228} - - component: {fileID: 963194227} - - component: {fileID: 963194226} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &963194226 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_Enabled: 1 ---- !u!20 &963194227 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &963194228 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity.meta b/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity.meta deleted file mode 100644 index 952bd1e..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/SampleScene.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9fc0d4010bbf28b4594072e72b8655ab -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity b/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity deleted file mode 100644 index ca0f32a..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity +++ /dev/null @@ -1,347 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &736700400 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 736700402} - - component: {fileID: 736700401} - m_Layer: 0 - m_Name: GameObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &736700401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 736700400} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 67d53e2f993d4a5ba0eb34431d1846cd, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &736700402 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 736700400} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1077233431 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1077233433} - - component: {fileID: 1077233432} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1077233432 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1077233431} - m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1077233433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1077233431} - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &1698122894 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1698122897} - - component: {fileID: 1698122896} - - component: {fileID: 1698122895} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1698122895 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698122894} - m_Enabled: 1 ---- !u!20 &1698122896 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698122894} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1698122897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1698122894} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity.meta b/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity.meta deleted file mode 100644 index 3499fd2..0000000 --- a/X10D.Unity.Tests/Assets/Scenes/YieldInstructionIntegrationTests.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b95b5f3924bd65b4bb0b7703abdd4fe5 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Tests.meta b/X10D.Unity.Tests/Assets/Tests.meta deleted file mode 100644 index 01f5869..0000000 --- a/X10D.Unity.Tests/Assets/Tests.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 478095eaef020f34ea189f98c9369aab -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs b/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs deleted file mode 100644 index 126e435..0000000 --- a/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs +++ /dev/null @@ -1,31 +0,0 @@ -#nullable enable - -using System.Collections; -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools; -using Object = UnityEngine.Object; - -namespace X10D.Unity.Tests -{ - public class ComponentTests - { - [Test] - public void GetComponentsInChildrenOnly_ShouldIgnoreParent() - { - var parent = new GameObject(); - var rigidbody = parent.AddComponent(); - - var child = new GameObject(); - child.transform.SetParent(parent.transform); - child.AddComponent(); - - Rigidbody[] components = rigidbody.GetComponentsInChildrenOnly(); - Assert.That(components, Has.Length.EqualTo(1)); - Assert.That(child, Is.EqualTo(components[0].gameObject)); - - Object.Destroy(parent); - Object.Destroy(child); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs.meta deleted file mode 100644 index a5fe42b..0000000 --- a/X10D.Unity.Tests/Assets/Tests/ComponentTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0619dbb274114e4aa247ed8f4e7cff03 -timeCreated: 1652006240 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs b/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs deleted file mode 100644 index 157f6a9..0000000 --- a/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Drawing; -using Color = UnityEngine.Color; - -namespace X10D.Unity.Tests -{ - internal sealed class DebugUtilityIntegrationTests : MonoBehaviour - { - private void Update() - { - DebugUtility.DrawLine(Vector3.zero, Vector3.right, Color.red); - DebugUtility.DrawLine(Vector3.zero, Vector3.up, Color.green); - DebugUtility.DrawLine(Vector3.zero, Vector3.forward, Color.blue); - - DebugUtility.DrawWireCube(new Vector3(1.5f, 0.5f, 0), Vector3.one * 0.5f, Color.yellow); - DebugUtility.DrawRectangle(new Vector2(-1.5f, 0.5f), Vector2.one * -0.5f, Color.cyan); - - var circle = new CircleF(0.0f, 0.0f, 0.5f); - DebugUtility.DrawCircle(circle, 25, new Vector2(-3.0f, 0.5f), Color.magenta); - - var ellipse = new EllipseF(0.0f, 0.0f, 1.0f, 0.5f); - DebugUtility.DrawEllipse(ellipse, 25, new Vector2(0.0f, 1.5f), Color.white); - - var hexagon = new PolygonF(); - hexagon.AddVertex(new Vector2(-0.5f, 0.5f)); - hexagon.AddVertex(new Vector2(-0.25f, 1.0f)); - hexagon.AddVertex(new Vector2(0.25f, 1.0f)); - hexagon.AddVertex(new Vector2(0.5f, 0.5f)); - hexagon.AddVertex(new Vector2(0.25f, 0)); - hexagon.AddVertex(new Vector2(-0.25f, 0)); - DebugUtility.DrawPolygon(hexagon, new Vector2(3.0f, 0.0f), Color.white); - - var sphere = new Sphere(System.Numerics.Vector3.Zero, 0.5f); - DebugUtility.DrawSphere(sphere, 25, new Vector2(0.0f, -1.5f), Color.white); - - DebugUtility.DrawFunction(x => MathF.Sin(x + UnityEngine.Time.time % (2 * MathF.PI)), -10, 10, 0.1f, Vector3.up * 4, - Color.yellow, 0.0f, false); - - DebugUtility.Assert(true); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs.meta deleted file mode 100644 index 197dc9b..0000000 --- a/X10D.Unity.Tests/Assets/Tests/DebugUtilityIntegrationTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0fac6b15ed0b420ba300fc1ac10ef01a -timeCreated: 1654080788 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing.meta b/X10D.Unity.Tests/Assets/Tests/Drawing.meta deleted file mode 100644 index 43ccd4b..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9674f5a2171d4c7d88cbfe9f1249bb27 -timeCreated: 1652006440 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs deleted file mode 100644 index eb2e7c2..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class Color32Tests - { - private static readonly Color32 Black = new(0, 0, 0, 255); - private static readonly Color32 White = new(255, 255, 255, 255); - private static readonly Color32 Red = new(255, 0, 0, 255); - private static readonly Color32 Green = new(0, 255, 0, 255); - private static readonly Color32 Blue = new(0, 0, 255, 255); - private static readonly Color32 Cyan = new(0, 255, 255, 255); - private static readonly Color32 Magenta = new(255, 0, 255, 255); - private static readonly Color32 Yellow = new(255, 255, 0, 255); - - [Test] - public void Deconstruct_ShouldDeconstruct_ToCorrectValues() - { - byte a, r, g, b; - - (r, g, b) = White; - Assert.That(r, Is.EqualTo(255)); - Assert.That(g, Is.EqualTo(255)); - Assert.That(b, Is.EqualTo(255)); - - (a, r, g, b) = Yellow; - Assert.That(a, Is.EqualTo(255)); - Assert.That(r, Is.EqualTo(255)); - Assert.That(g, Is.EqualTo(255)); - Assert.That(b, Is.EqualTo(0)); - } - - [Test] - public void GetClosestConsoleColor_ShouldReturnClosestColor_GivenValidColor() - { - // I know it's just casting... but aim for 100% coverage babyyyy - - Assert.That(((Color32)Color.red).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Red)); - Assert.That(((Color32)Color.green).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Green)); - Assert.That(((Color32)Color.blue).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Blue)); - Assert.That(((Color32)Color.white).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.White)); - Assert.That(((Color32)Color.black).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Black)); - Assert.That(((Color32)Color.yellow).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Yellow)); - Assert.That(((Color32)Color.cyan).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Cyan)); - Assert.That(((Color32)Color.magenta).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Magenta)); - Assert.That(((Color32)Color.gray).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Gray)); - Assert.That(((Color32)Color.grey).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Gray)); - Assert.That(((Color32)Color.clear).GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Black)); - } - - [Test] - public void Inverted_ShouldReturnInvertedColor() - { - Assert.That(Black.Inverted(), Is.EqualTo(White)); - Assert.That(White.Inverted(), Is.EqualTo(Black)); - Assert.That(Cyan.Inverted(), Is.EqualTo(Red)); - Assert.That(Red.Inverted(), Is.EqualTo(Cyan)); - Assert.That(Magenta.Inverted(), Is.EqualTo(Green)); - Assert.That(Green.Inverted(), Is.EqualTo(Magenta)); - Assert.That(Blue.Inverted(), Is.EqualTo(Yellow)); - Assert.That(Yellow.Inverted(), Is.EqualTo(Blue)); - } - - [Test] - public void Inverted_ShouldIgnoreAlpha() - { - var expected = new Color32(0, 0, 0, 255); - var actual = new Color32(255, 255, 255, 255).Inverted(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void ToSystemDrawingColor_ShouldReturnEquivalentColor() - { - System.Drawing.Color expected = System.Drawing.Color.FromArgb(255, 255, 255); - System.Drawing.Color actual = White.ToSystemDrawingColor(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void ToUnityColor32_ShouldReturnEquivalentColor() - { - Color32 expected = White; - Color32 actual = System.Drawing.Color.FromArgb(255, 255, 255).ToUnityColor32(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void WithA0_ShouldReturnSameColor_GivenWhite() - { - var transparent = new Color32(255, 255, 255, 0); - Assert.That(White.WithA(0), Is.EqualTo(transparent)); - Assert.That(transparent.WithA(0), Is.EqualTo(transparent)); - } - - [Test] - public void WithB0_ShouldReturnYellow_GivenWhite() - { - Assert.That(White.WithB(0), Is.EqualTo(Yellow)); - Assert.That(Yellow.WithB(0), Is.EqualTo(Yellow)); - } - - [Test] - public void WithG0_ShouldReturnMagenta_GivenWhite() - { - Assert.That(White.WithG(0), Is.EqualTo(Magenta)); - Assert.That(Magenta.WithG(0), Is.EqualTo(Magenta)); - } - - [Test] - public void WithR0_ShouldReturnCyan_GivenWhite() - { - Assert.That(White.WithR(0), Is.EqualTo(Cyan)); - Assert.That(Cyan.WithR(0), Is.EqualTo(Cyan)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs.meta deleted file mode 100644 index 6a819da..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/Color32Tests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 877c5a68b0dd44c68aae01463ae26b26 -timeCreated: 1652035626 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs deleted file mode 100644 index c9d9182..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class ColorTests - { - private static readonly Color Black = new(0, 0, 0); - private static readonly Color White = new(1, 1, 1); - private static readonly Color Red = new(1, 0, 0); - private static readonly Color Green = new(0, 1, 0); - private static readonly Color Blue = new(0, 0, 1); - private static readonly Color Cyan = new(0, 1, 1); - private static readonly Color Magenta = new(1, 0, 1); - private static readonly Color Yellow = new(1, 1, 0); - - [Test] - public void Deconstruct_ShouldDeconstruct_ToCorrectValues() - { - float a, r, g, b; - - (r, g, b) = White; - Assert.That(r, Is.EqualTo(1.0f)); - Assert.That(g, Is.EqualTo(1.0f)); - Assert.That(b, Is.EqualTo(1.0f)); - - (a, r, g, b) = Yellow; - Assert.That(a, Is.EqualTo(1.0f)); - Assert.That(r, Is.EqualTo(1.0f)); - Assert.That(g, Is.EqualTo(1.0f)); - Assert.That(b, Is.EqualTo(0.0f)); - } - - [Test] - public void GetClosestConsoleColor_ShouldReturnClosestColor_GivenValidColor() - { - Assert.That(Color.red.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Red)); - Assert.That(Color.green.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Green)); - Assert.That(Color.blue.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Blue)); - Assert.That(Color.white.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.White)); - Assert.That(Color.black.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Black)); - Assert.That(Color.yellow.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Yellow)); - Assert.That(Color.cyan.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Cyan)); - Assert.That(Color.magenta.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Magenta)); - Assert.That(Color.gray.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Gray)); - Assert.That(Color.grey.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Gray)); - Assert.That(Color.clear.GetClosestConsoleColor(), Is.EqualTo(ConsoleColor.Black)); - } - - [Test] - public void Inverted_ShouldReturnInvertedColor() - { - Assert.That(Black.Inverted(), Is.EqualTo(White)); - Assert.That(White.Inverted(), Is.EqualTo(Black)); - Assert.That(Cyan.Inverted(), Is.EqualTo(Red)); - Assert.That(Red.Inverted(), Is.EqualTo(Cyan)); - Assert.That(Magenta.Inverted(), Is.EqualTo(Green)); - Assert.That(Green.Inverted(), Is.EqualTo(Magenta)); - Assert.That(Blue.Inverted(), Is.EqualTo(Yellow)); - Assert.That(Yellow.Inverted(), Is.EqualTo(Blue)); - } - - [Test] - public void Inverted_ShouldIgnoreAlpha() - { - var expected = new Color(0, 0, 0, 1); - var actual = new Color(1, 1, 1, 1).Inverted(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void ToSystemDrawingColor_ShouldReturnEquivalentColor() - { - System.Drawing.Color expected = System.Drawing.Color.FromArgb(255, 255, 255); - System.Drawing.Color actual = White.ToSystemDrawingColor(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void ToUnityColor_ShouldReturnEquivalentColor() - { - Color expected = White; - Color actual = System.Drawing.Color.FromArgb(255, 255, 255).ToUnityColor(); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void WithA0_ShouldReturnSameColor_GivenWhite() - { - var transparent = new Color(1, 1, 1, 0); - Assert.That(White.WithA(0), Is.EqualTo(transparent)); - Assert.That(transparent.WithA(0), Is.EqualTo(transparent)); - } - - [Test] - public void WithB0_ShouldReturnYellow_GivenWhite() - { - Assert.That(White.WithB(0), Is.EqualTo(Yellow)); - Assert.That(Yellow.WithB(0), Is.EqualTo(Yellow)); - } - - [Test] - public void WithG0_ShouldReturnMagenta_GivenWhite() - { - Assert.That(White.WithG(0), Is.EqualTo(Magenta)); - Assert.That(Magenta.WithG(0), Is.EqualTo(Magenta)); - } - - [Test] - public void WithR0_ShouldReturnCyan_GivenWhite() - { - Assert.That(White.WithR(0), Is.EqualTo(Cyan)); - Assert.That(Cyan.WithR(0), Is.EqualTo(Cyan)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs.meta deleted file mode 100644 index 8ab4670..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/ColorTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 61df0ae6778a4ab084e688f13adfc29c -timeCreated: 1652035747 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs deleted file mode 100644 index 13d0b36..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Drawing; -using NUnit.Framework; -using X10D.Core; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class PointFTests - { - [Test] - public void ToUnityVector2_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var point = new PointF(random.NextSingle(), random.NextSingle()); - var vector = point.ToUnityVector2(); - - Assert.That(vector.x, Is.EqualTo(point.X).Within(1e-6f)); - Assert.That(vector.y, Is.EqualTo(point.Y).Within(1e-6f)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs.meta deleted file mode 100644 index 751b242..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/PointFTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d90695756d1d4760aef2523486b1b41e -timeCreated: 1653743243 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs deleted file mode 100644 index ab8a428..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Drawing; -using NUnit.Framework; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class PointTests - { - [Test] - public void ToUnityVector2_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var point = new Point(random.Next(), random.Next()); - var vector = point.ToUnityVector2(); - - Assert.That(vector.x, Is.EqualTo(point.X)); - Assert.That(vector.y, Is.EqualTo(point.Y)); - } - - [Test] - public void ToUnityVector2Int_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var point = new Point(random.Next(), random.Next()); - var vector = point.ToUnityVector2Int(); - - Assert.That(vector.x, Is.EqualTo(point.X)); - Assert.That(vector.y, Is.EqualTo(point.Y)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs.meta deleted file mode 100644 index 8a5fdf4..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/PointTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f465794fdc394d05a34229f34e5199e2 -timeCreated: 1653742987 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs deleted file mode 100644 index 5f4e842..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs +++ /dev/null @@ -1,77 +0,0 @@ -#nullable enable - -using System; -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Drawing; -using Random = System.Random; - -namespace X10D.Unity.Tests.Drawing -{ - public class RandomTests - { - [Test] - public void NextColorArgb_ShouldReturn331515e5_GivenSeed1234() - { - var random = new Random(1234); - var color = random.NextColorArgb(); - Assert.That(color.r, Is.EqualTo(0.373868465f).Within(1e-6f)); - Assert.That(color.g, Is.EqualTo(0.391597569f).Within(1e-6f)); - Assert.That(color.b, Is.EqualTo(0.675019085f).Within(1e-6f)); - Assert.That(color.a, Is.EqualTo(0.234300315f).Within(1e-6f)); - } - - [Test] - public void NextColorArgb_ShouldThrow_GivenNull() - { - Random random = null!; - Assert.Throws(() => random.NextColorArgb()); - } - - [Test] - public void NextColor32Argb_ShouldReturn331515e5_GivenSeed1234() - { - var random = new Random(1234); - Assert.That(random.NextColor32Argb(), Is.EqualTo(new Color32(21, 21, 229, 51))); - } - - [Test] - public void NextColor32Argb_ShouldThrow_GivenNull() - { - Random random = null!; - Assert.Throws(() => random.NextColor32Argb()); - } - - [Test] - public void NextColorRgb_ShouldReturn1515e5_GivenSeed1234() - { - var random = new Random(1234); - var color = random.NextColorRgb(); - Assert.That(color.r, Is.EqualTo(0.234300315f).Within(1e-6f)); - Assert.That(color.g, Is.EqualTo(0.373868465f).Within(1e-6f)); - Assert.That(color.b, Is.EqualTo(0.391597569f).Within(1e-6f)); - Assert.That(color.a, Is.EqualTo(1).Within(1e-6f)); - } - - [Test] - public void NextColorRgb_ShouldThrow_GivenNull() - { - Random random = null!; - Assert.Throws(() => random.NextColorRgb()); - } - - [Test] - public void NextColor32Rgb_ShouldReturn1515e5_GivenSeed1234() - { - var random = new Random(1234); - Assert.That(random.NextColor32Rgb(), Is.EqualTo(new Color32(21, 21, 229, 255))); - } - - [Test] - public void NextColor32Rgb_ShouldThrow_GivenNull() - { - Random random = null!; - Assert.Throws(() => random.NextColor32Rgb()); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs.meta deleted file mode 100644 index d190fdb..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RandomTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 28fa03c101834cd79774d8138b9d4adb -timeCreated: 1652006445 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs deleted file mode 100644 index 2e5f759..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs +++ /dev/null @@ -1,36 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Drawing; -using Random = System.Random; - -namespace X10D.Unity.Tests.Drawing -{ - public class RectIntTests - { - [Test] - public void ToSystemRectangle_ShouldReturnRectangleF_WithEquivalentMembers() - { - var random = new Random(); - var rect = new RectInt(random.Next(), random.Next(), random.Next(), random.Next()); - var rectangle = rect.ToSystemRectangle(); - - Assert.That(rectangle.X, Is.EqualTo(rect.x)); - Assert.That(rectangle.Y, Is.EqualTo(rect.y)); - Assert.That(rectangle.Width, Is.EqualTo(rect.width)); - Assert.That(rectangle.Height, Is.EqualTo(rect.height)); - } - - [Test] - public void ToSystemRectangleF_ShouldReturnRectangleF_WithEquivalentMembers() - { - var random = new Random(); - var rect = new RectInt(random.Next(), random.Next(), random.Next(), random.Next()); - var rectangle = rect.ToSystemRectangleF(); - - Assert.That(rectangle.X, Is.EqualTo(rect.x)); - Assert.That(rectangle.Y, Is.EqualTo(rect.y)); - Assert.That(rectangle.Width, Is.EqualTo(rect.width)); - Assert.That(rectangle.Height, Is.EqualTo(rect.height)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs.meta deleted file mode 100644 index 462b6b5..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectIntTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 18f2e8fbc200475ca5fe7857a457a874 -timeCreated: 1654077768 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs deleted file mode 100644 index 9cc688e..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Core; -using X10D.Unity.Drawing; -using Random = System.Random; - -namespace X10D.Unity.Tests.Drawing -{ - public class RectTests - { - [Test] - public void ToSystemRectangleF_ShouldReturnRectangleF_WithEquivalentMembers() - { - var random = new Random(); - var rect = new Rect(random.NextSingle(), random.NextSingle(), random.NextSingle(), random.NextSingle()); - var rectangle = rect.ToSystemRectangleF(); - - Assert.That(rectangle.X, Is.EqualTo(rect.x).Within(1e-6f)); - Assert.That(rectangle.Y, Is.EqualTo(rect.y).Within(1e-6f)); - Assert.That(rectangle.Width, Is.EqualTo(rect.width).Within(1e-6f)); - Assert.That(rectangle.Height, Is.EqualTo(rect.height).Within(1e-6f)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs.meta deleted file mode 100644 index ee14568..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bb1ec5372c354f06b39e03649b9307db -timeCreated: 1653743583 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs deleted file mode 100644 index fdcbaf6..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Drawing; -using NUnit.Framework; -using X10D.Core; -using X10D.Unity.Drawing; -using Random = System.Random; - -namespace X10D.Unity.Tests.Drawing -{ - public class RectangleFTests - { - [Test] - public void ToUnityRect_ShouldReturnRect_WithEquivalentMembers() - { - var random = new Random(); - var rectangle = new RectangleF(random.NextSingle(), random.NextSingle(), random.NextSingle(), random.NextSingle()); - var rect = rectangle.ToUnityRect(); - - Assert.That(rect.x, Is.EqualTo(rectangle.X).Within(1e-6f)); - Assert.That(rect.y, Is.EqualTo(rectangle.Y).Within(1e-6f)); - Assert.That(rect.width, Is.EqualTo(rectangle.Width).Within(1e-6f)); - Assert.That(rect.height, Is.EqualTo(rectangle.Height).Within(1e-6f)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs.meta deleted file mode 100644 index 8cec772..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleFTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f38cbc892021405cad2b52de1f960a00 -timeCreated: 1653743640 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs deleted file mode 100644 index 3f0f051..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Drawing; -using NUnit.Framework; -using X10D.Unity.Drawing; -using Random = System.Random; - -namespace X10D.Unity.Tests.Drawing -{ - public class RectangleTests - { - [Test] - public void ToUnityRect_ShouldReturnRect_WithEquivalentMembers() - { - var random = new Random(); - var rectangle = new Rectangle(random.Next(), random.Next(), random.Next(), random.Next()); - var rect = rectangle.ToUnityRect(); - - Assert.That(rect.x, Is.EqualTo(rectangle.X)); - Assert.That(rect.y, Is.EqualTo(rectangle.Y)); - Assert.That(rect.width, Is.EqualTo(rectangle.Width)); - Assert.That(rect.height, Is.EqualTo(rectangle.Height)); - } - - [Test] - public void ToUnityRectInt_ShouldReturnRect_WithEquivalentMembers() - { - var random = new Random(); - var rectangle = new Rectangle(random.Next(), random.Next(), random.Next(), random.Next()); - var rect = rectangle.ToUnityRectInt(); - - Assert.That(rect.x, Is.EqualTo(rectangle.X)); - Assert.That(rect.y, Is.EqualTo(rectangle.Y)); - Assert.That(rect.width, Is.EqualTo(rectangle.Width)); - Assert.That(rect.height, Is.EqualTo(rectangle.Height)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs.meta deleted file mode 100644 index 2551e69..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/RectangleTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9c74177035d1452a8a7ca08c0a27124b -timeCreated: 1653743677 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs deleted file mode 100644 index 6d871d6..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Drawing; -using NUnit.Framework; -using X10D.Core; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class SizeFTests - { - [Test] - public void ToUnityVector2_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var size = new SizeF(random.NextSingle(), random.NextSingle()); - var vector = size.ToUnityVector2(); - - Assert.That(vector.x, Is.EqualTo(size.Width).Within(1e-6f)); - Assert.That(vector.y, Is.EqualTo(size.Height).Within(1e-6f)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs.meta deleted file mode 100644 index ac99418..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeFTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b93fe56510de4ddcb9354bde7f10c362 -timeCreated: 1653743377 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs b/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs deleted file mode 100644 index c9619c9..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Drawing; -using NUnit.Framework; -using X10D.Unity.Drawing; - -namespace X10D.Unity.Tests.Drawing -{ - public class SizeTests - { - [Test] - public void ToUnityVector2_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var size = new Size(random.Next(), random.Next()); - var vector = size.ToUnityVector2(); - - Assert.That(vector.x, Is.EqualTo(size.Width)); - Assert.That(vector.y, Is.EqualTo(size.Height)); - } - - [Test] - public void ToUnityVector2Int_ShouldReturnVector_WithEquivalentMembers() - { - var random = new Random(); - var size = new Size(random.Next(), random.Next()); - var vector = size.ToUnityVector2Int(); - - Assert.That(vector.x, Is.EqualTo(size.Width)); - Assert.That(vector.y, Is.EqualTo(size.Height)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs.meta deleted file mode 100644 index 572e5f7..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Drawing/SizeTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c748bfe02fce4b459df7ef2779c2a486 -timeCreated: 1653743400 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs b/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs deleted file mode 100644 index 565d455..0000000 --- a/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs +++ /dev/null @@ -1,116 +0,0 @@ -#nullable enable - -using System.Diagnostics.CodeAnalysis; -using NUnit.Framework; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace X10D.Unity.Tests -{ - public class GameObjectTests - { - [Test] - public void GetComponentsInChildrenOnly_ShouldIgnoreParent() - { - var parent = new GameObject(); - parent.AddComponent(); - - var child = new GameObject(); - child.transform.SetParent(parent.transform); - child.AddComponent(); - - Rigidbody[] components = parent.GetComponentsInChildrenOnly(); - Assert.That(components, Has.Length.EqualTo(1)); - Assert.That(child, Is.EqualTo(components[0].gameObject)); - - Object.Destroy(parent); - Object.Destroy(child); - } - - [Test] - [SuppressMessage("ReSharper", "Unity.InefficientPropertyAccess", Justification = "False positive.")] - public void LookAt_ShouldRotateSameAsTransform() - { - var first = new GameObject {transform = {position = Vector3.zero, rotation = Quaternion.identity}}; - var second = new GameObject {transform = {position = Vector3.right, rotation = Quaternion.identity}}; - Transform firstTransform = first.transform; - Transform secondTransform = second.transform; - - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - Assert.That(secondTransform.rotation, Is.EqualTo(Quaternion.identity)); - - firstTransform.LookAt(secondTransform); - Quaternion expected = firstTransform.rotation; - - firstTransform.rotation = Quaternion.identity; - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - - first.LookAt(second); - Assert.That(firstTransform.rotation, Is.EqualTo(expected)); - - firstTransform.rotation = Quaternion.identity; - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - - first.LookAt(second.transform); - Assert.That(firstTransform.rotation, Is.EqualTo(expected)); - - firstTransform.rotation = Quaternion.identity; - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - - first.LookAt(Vector3.right); - Assert.That(firstTransform.rotation, Is.EqualTo(expected)); - - Object.Destroy(first); - Object.Destroy(second); - } - - [Test] - public void SetLayerRecursively_ShouldSetLayerRecursively() - { - var parent = new GameObject(); - var child = new GameObject(); - var grandChild = new GameObject(); - - child.transform.SetParent(parent.transform); - grandChild.transform.SetParent(child.transform); - - int layer = LayerMask.NameToLayer("UI"); - Assert.AreNotEqual(layer, parent.layer); - Assert.AreNotEqual(layer, child.layer); - Assert.AreNotEqual(layer, grandChild.layer); - - parent.SetLayerRecursively(layer); - - Assert.That(parent.layer, Is.EqualTo(layer)); - Assert.That(child.layer, Is.EqualTo(layer)); - Assert.That(grandChild.layer, Is.EqualTo(layer)); - - Object.Destroy(parent); - Object.Destroy(child); - Object.Destroy(grandChild); - } - - [Test] - [SuppressMessage("ReSharper", "Unity.InefficientPropertyAccess", Justification = "False positive.")] - public void SetParent_ShouldSetParent() - { - var first = new GameObject {transform = {position = Vector3.zero, rotation = Quaternion.identity}}; - var second = new GameObject {transform = {position = Vector3.right, rotation = Quaternion.identity}}; - - Assert.That(first.transform.parent, Is.EqualTo(null)); - Assert.That(second.transform.parent, Is.EqualTo(null)); - - first.SetParent(second); - Assert.That(first.transform.parent, Is.EqualTo(second.transform)); - - first.transform.SetParent(null!); - Assert.That(first.transform.parent, Is.EqualTo(null)); - - second.SetParent(first); - Assert.That(second.transform.parent, Is.EqualTo(first.transform)); - - Object.Destroy(first); - Object.Destroy(second); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs.meta deleted file mode 100644 index 7cad365..0000000 --- a/X10D.Unity.Tests/Assets/Tests/GameObjectTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1fde6c311eaec944abe1e4531a2980bc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics.meta b/X10D.Unity.Tests/Assets/Tests/Numerics.meta deleted file mode 100644 index 3410bae..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c906e39e3c8d44c7a8dafe042fedf677 -timeCreated: 1652006420 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs deleted file mode 100644 index c5ec037..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs +++ /dev/null @@ -1,47 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Core; -using X10D.Unity.Numerics; -using Random = System.Random; - -namespace X10D.Unity.Tests.Numerics -{ - public class QuaternionTests - { - [Test] - public void ToSystemQuaternion_ShouldReturnQuaternion_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - float w = random.NextSingle(); - - var quaternion = new Quaternion(x, y, z, w); - var systemQuaternion = quaternion.ToSystemQuaternion(); - - Assert.That(systemQuaternion.X, Is.EqualTo(quaternion.x).Within(1e-6f)); - Assert.That(systemQuaternion.Y, Is.EqualTo(quaternion.y).Within(1e-6f)); - Assert.That(systemQuaternion.Z, Is.EqualTo(quaternion.z).Within(1e-6f)); - Assert.That(systemQuaternion.W, Is.EqualTo(quaternion.w).Within(1e-6f)); - } - - [Test] - public void ToUnityQuaternion_ShouldReturnQuaternion_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - float w = random.NextSingle(); - - var quaternion = new System.Numerics.Quaternion(x, y, z, w); - var unityQuaternion = quaternion.ToUnityQuaternion(); - - Assert.That(unityQuaternion.x, Is.EqualTo(quaternion.X).Within(1e-6f)); - Assert.That(unityQuaternion.y, Is.EqualTo(quaternion.Y).Within(1e-6f)); - Assert.That(unityQuaternion.z, Is.EqualTo(quaternion.Z).Within(1e-6f)); - Assert.That(unityQuaternion.w, Is.EqualTo(quaternion.W).Within(1e-6f)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs.meta deleted file mode 100644 index a8117be..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/QuaternionTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a395fec41c5a4e9d9ffb05324e8159b0 -timeCreated: 1652124913 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs deleted file mode 100644 index d93744a..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -#nullable enable - -using System; -using NUnit.Framework; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Tests.Numerics -{ - public class RandomTests - { - [Test] - public void NextUnitVector2_ShouldReturnVector_WithMagnitude1() - { - var random = new Random(); - var vector = random.NextUnitVector2(); - Assert.That(vector.magnitude, Is.EqualTo(1).Within(1e-6)); - } - - [Test] - public void NextUnitVector2_ShouldThrow_GivenNullRandom() - { - Random random = null!; - Assert.Throws(() => random.NextUnitVector2()); - } - - [Test] - public void NextUnitVector3_ShouldReturnVector_WithMagnitude1() - { - var random = new Random(); - var vector = random.NextUnitVector3(); - Assert.That(vector.magnitude, Is.EqualTo(1).Within(1e-6)); - } - - [Test] - public void NextUnitVector3_ShouldThrow_GivenNullRandom() - { - Random random = null!; - Assert.Throws(() => random.NextUnitVector3()); - } - - [Test] - public void NextRotation_ShouldThrow_GivenNullRandom() - { - Random random = null!; - Assert.Throws(() => random.NextRotation()); - } - - [Test] - public void NextRotationUniform_ShouldThrow_GivenNullRandom() - { - Random random = null!; - Assert.Throws(() => random.NextRotationUniform()); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs.meta deleted file mode 100644 index f143424..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/RandomTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 74577fe33f85446194c4ae2315caaace -timeCreated: 1652006301 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs deleted file mode 100644 index 6ef0909..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs +++ /dev/null @@ -1,76 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Numerics; -using Random = System.Random; - -namespace X10D.Unity.Tests.Numerics -{ - public class Vector2IntTests - { - [Test] - public void Deconstruct_ShouldReturnCorrectValues() - { - var vector = new Vector2Int(1, 2); - (int x, int y) = vector; - - Assert.That(x, Is.EqualTo(1)); - Assert.That(y, Is.EqualTo(2)); - } - - [Test] - public void ToSystemPoint_ShouldReturnPoint_WithEquivalentMembers() - { - var random = new Random(); - int x = random.Next(); - int y = random.Next(); - - var vector = new Vector2Int(x, y); - var point = vector.ToSystemPoint(); - - Assert.That(point.X, Is.EqualTo(vector.x)); - Assert.That(point.Y, Is.EqualTo(vector.y)); - } - - [Test] - public void ToSystemSize_ShouldReturnSize_WithEquivalentMembers() - { - var random = new Random(); - int x = random.Next(); - int y = random.Next(); - - var vector = new Vector2Int(x, y); - var point = vector.ToSystemSize(); - - Assert.That(point.Width, Is.EqualTo(vector.x)); - Assert.That(point.Height, Is.EqualTo(vector.y)); - } - - [Test] - public void WithX_ShouldReturnVectorWithNewX_GivenVector() - { - Assert.That(Vector2Int.one.WithX(0), Is.EqualTo(Vector2Int.up)); - Assert.That(Vector2Int.zero.WithX(0), Is.EqualTo(Vector2Int.zero)); - Assert.That(Vector2Int.right.WithX(0), Is.EqualTo(Vector2Int.zero)); - Assert.That(Vector2Int.up.WithX(0), Is.EqualTo(Vector2Int.up)); - - Assert.That(Vector2Int.one.WithX(1), Is.EqualTo(Vector2Int.one)); - Assert.That(Vector2Int.zero.WithX(1), Is.EqualTo(Vector2Int.right)); - Assert.That(Vector2Int.right.WithX(1), Is.EqualTo(Vector2Int.right)); - Assert.That(Vector2Int.up.WithX(1), Is.EqualTo(Vector2Int.one)); - } - - [Test] - public void WithY_ShouldReturnVectorWithNewY_GivenVector() - { - Assert.That(Vector2Int.one.WithY(0), Is.EqualTo(Vector2Int.right)); - Assert.That(Vector2Int.zero.WithY(0), Is.EqualTo(Vector2Int.zero)); - Assert.That(Vector2Int.right.WithY(0), Is.EqualTo(Vector2Int.right)); - Assert.That(Vector2Int.up.WithY(0), Is.EqualTo(Vector2Int.zero)); - - Assert.That(Vector2Int.one.WithY(1), Is.EqualTo(Vector2Int.one)); - Assert.That(Vector2Int.zero.WithY(1), Is.EqualTo(Vector2Int.up)); - Assert.That(Vector2Int.right.WithY(1), Is.EqualTo(Vector2Int.one)); - Assert.That(Vector2Int.up.WithY(1), Is.EqualTo(Vector2Int.up)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs.meta deleted file mode 100644 index 7a62c97..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2IntTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ad987e96afa849e6b0626ba7d7720f7b -timeCreated: 1653993201 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs deleted file mode 100644 index d6e5e0c..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs +++ /dev/null @@ -1,127 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Core; -using X10D.Unity.Numerics; -using Random = System.Random; - -namespace X10D.Unity.Tests.Numerics -{ - public class Vector2Tests - { - [Test] - public void Deconstruct_ShouldReturnCorrectValues() - { - var vector = new Vector2(1, 2); - (float x, float y) = vector; - - Assert.That(x, Is.EqualTo(1)); - Assert.That(y, Is.EqualTo(2)); - } - - [Test] - public void Round_ShouldRoundToNearestInteger_GivenNoParameters() - { - var vector = new Vector2(1.5f, 2.6f); - var rounded = vector.Round(); - - Assert.That(rounded.x, Is.EqualTo(2)); - Assert.That(rounded.y, Is.EqualTo(3)); - } - - [Test] - public void Round_ShouldRoundToNearest10_GivenPrecision10() - { - var vector = new Vector2(1.5f, 25.2f); - var rounded = vector.Round(10); - - Assert.That(rounded.x, Is.EqualTo(0)); - Assert.That(rounded.y, Is.EqualTo(30)); - } - - [Test] - public void ToSystemPointF_ShouldReturnPoint_WithEquivalentMembers() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - - var vector = new Vector2(x, y); - var point = vector.ToSystemPointF(); - - Assert.That(point.X, Is.EqualTo(vector.x).Within(1e-6f)); - Assert.That(point.Y, Is.EqualTo(vector.y).Within(1e-6f)); - } - - [Test] - public void ToSystemSizeF_ShouldReturnSize_WithEquivalentMembers() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - - var vector = new Vector2(x, y); - var point = vector.ToSystemSizeF(); - - Assert.That(point.Width, Is.EqualTo(vector.x).Within(1e-6f)); - Assert.That(point.Height, Is.EqualTo(vector.y).Within(1e-6f)); - } - - [Test] - public void ToSystemVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - - var vector = new Vector2(x, y); - var systemVector = vector.ToSystemVector(); - - Assert.That(systemVector.Length(), Is.EqualTo(vector.magnitude).Within(1e-6f)); - Assert.That(systemVector.X, Is.EqualTo(vector.x).Within(1e-6f)); - Assert.That(systemVector.Y, Is.EqualTo(vector.y).Within(1e-6f)); - } - - [Test] - public void ToUnityVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - - var vector = new System.Numerics.Vector2(x, y); - var unityVector = vector.ToUnityVector(); - - Assert.That(unityVector.magnitude, Is.EqualTo(vector.Length()).Within(1e-6f)); - Assert.That(unityVector.x, Is.EqualTo(vector.X).Within(1e-6f)); - Assert.That(unityVector.y, Is.EqualTo(vector.Y).Within(1e-6f)); - } - - [Test] - public void WithX_ShouldReturnVectorWithNewX_GivenVector() - { - Assert.That(Vector2.one.WithX(0), Is.EqualTo(Vector2.up)); - Assert.That(Vector2.zero.WithX(0), Is.EqualTo(Vector2.zero)); - Assert.That(Vector2.right.WithX(0), Is.EqualTo(Vector2.zero)); - Assert.That(Vector2.up.WithX(0), Is.EqualTo(Vector2.up)); - - Assert.That(Vector2.one.WithX(1), Is.EqualTo(Vector2.one)); - Assert.That(Vector2.zero.WithX(1), Is.EqualTo(Vector2.right)); - Assert.That(Vector2.right.WithX(1), Is.EqualTo(Vector2.right)); - Assert.That(Vector2.up.WithX(1), Is.EqualTo(Vector2.one)); - } - - [Test] - public void WithY_ShouldReturnVectorWithNewY_GivenVector() - { - Assert.That(Vector2.one.WithY(0), Is.EqualTo(Vector2.right)); - Assert.That(Vector2.zero.WithY(0), Is.EqualTo(Vector2.zero)); - Assert.That(Vector2.right.WithY(0), Is.EqualTo(Vector2.right)); - Assert.That(Vector2.up.WithY(0), Is.EqualTo(Vector2.zero)); - - Assert.That(Vector2.one.WithY(1), Is.EqualTo(Vector2.one)); - Assert.That(Vector2.zero.WithY(1), Is.EqualTo(Vector2.up)); - Assert.That(Vector2.right.WithY(1), Is.EqualTo(Vector2.one)); - Assert.That(Vector2.up.WithY(1), Is.EqualTo(Vector2.up)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs.meta deleted file mode 100644 index 54f9a75..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector2Tests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 83385270996049569380ae9769ff1381 -timeCreated: 1652088132 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs deleted file mode 100644 index acfac84..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs +++ /dev/null @@ -1,69 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Tests.Numerics -{ - public class Vector3IntTests - { - [Test] - public void Deconstruct_ShouldReturnCorrectValues() - { - var vector = new Vector3Int(1, 2, 3); - (float x, float y, float z) = vector; - - Assert.That(x, Is.EqualTo(1)); - Assert.That(y, Is.EqualTo(2)); - Assert.That(z, Is.EqualTo(3)); - } - - [Test] - public void WithX_ShouldReturnVectorWithNewX_GivenVector() - { - Assert.That(Vector3Int.one.WithX(0), Is.EqualTo(new Vector3Int(0, 1, 1))); - Assert.That(Vector3Int.zero.WithX(0), Is.EqualTo(Vector3Int.zero)); - Assert.That(Vector3Int.right.WithX(0), Is.EqualTo(Vector3Int.zero)); - Assert.That(Vector3Int.up.WithX(0), Is.EqualTo(Vector3Int.up)); - Assert.That(Vector3Int.forward.WithX(0), Is.EqualTo(Vector3Int.forward)); - - Assert.That(Vector3Int.one.WithX(1), Is.EqualTo(Vector3Int.one)); - Assert.That(Vector3Int.zero.WithX(1), Is.EqualTo(Vector3Int.right)); - Assert.That(Vector3Int.right.WithX(1), Is.EqualTo(Vector3Int.right)); - Assert.That(Vector3Int.up.WithX(1), Is.EqualTo(new Vector3Int(1, 1, 0))); - Assert.That(Vector3Int.forward.WithX(1), Is.EqualTo(new Vector3Int(1, 0, 1))); - } - - [Test] - public void WithY_ShouldReturnVectorWithNewY_GivenVector() - { - Assert.That(Vector3Int.one.WithY(0), Is.EqualTo(new Vector3Int(1, 0, 1))); - Assert.That(Vector3Int.zero.WithY(0), Is.EqualTo(Vector3Int.zero)); - Assert.That(Vector3Int.right.WithY(0), Is.EqualTo(Vector3Int.right)); - Assert.That(Vector3Int.up.WithY(0), Is.EqualTo(Vector3Int.zero)); - Assert.That(Vector3Int.forward.WithY(0), Is.EqualTo(Vector3Int.forward)); - - Assert.That(Vector3Int.one.WithY(1), Is.EqualTo(Vector3Int.one)); - Assert.That(Vector3Int.zero.WithY(1), Is.EqualTo(Vector3Int.up)); - Assert.That(Vector3Int.right.WithY(1), Is.EqualTo(new Vector3Int(1, 1, 0))); - Assert.That(Vector3Int.up.WithY(1), Is.EqualTo(Vector3Int.up)); - Assert.That(Vector3Int.forward.WithY(1), Is.EqualTo(new Vector3Int(0, 1, 1))); - ; - } - - [Test] - public void WithZ_ShouldReturnVectorWithNewZ_GivenVector() - { - Assert.That(Vector3Int.one.WithZ(0), Is.EqualTo(new Vector3Int(1, 1, 0))); - Assert.That(Vector3Int.zero.WithZ(0), Is.EqualTo(Vector3Int.zero)); - Assert.That(Vector3Int.right.WithZ(0), Is.EqualTo(Vector3Int.right)); - Assert.That(Vector3Int.up.WithZ(0), Is.EqualTo(Vector3Int.up)); - Assert.That(Vector3Int.forward.WithZ(0), Is.EqualTo(Vector3Int.zero)); - - Assert.That(Vector3Int.one.WithZ(1), Is.EqualTo(Vector3Int.one)); - Assert.That(Vector3Int.zero.WithZ(1), Is.EqualTo(Vector3Int.forward)); - Assert.That(Vector3Int.right.WithZ(1), Is.EqualTo(new Vector3Int(1, 0, 1))); - Assert.That(Vector3Int.up.WithZ(1), Is.EqualTo(new Vector3Int(0, 1, 1))); - Assert.That(Vector3Int.forward.WithZ(1), Is.EqualTo(Vector3Int.forward)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs.meta deleted file mode 100644 index 1959799..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3IntTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e474d98fd3ee48159980aaa88040cfb3 -timeCreated: 1653993371 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs deleted file mode 100644 index 9d7d64a..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs +++ /dev/null @@ -1,126 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Core; -using X10D.Unity.Numerics; -using Random = System.Random; - -namespace X10D.Unity.Tests.Numerics -{ - public class Vector3Tests - { - [Test] - public void Deconstruct_ShouldReturnCorrectValues() - { - var vector = new Vector3(1, 2, 3); - (float x, float y, float z) = vector; - - Assert.That(x, Is.EqualTo(1)); - Assert.That(y, Is.EqualTo(2)); - Assert.That(z, Is.EqualTo(3)); - } - - [Test] - public void Round_ShouldRoundToNearestInteger_GivenNoParameters() - { - var vector = new Vector3(1.5f, 2.6f, -5.2f); - var rounded = vector.Round(); - - Assert.That(rounded.x, Is.EqualTo(2)); - Assert.That(rounded.y, Is.EqualTo(3)); - Assert.That(rounded.z, Is.EqualTo(-5)); - } - - [Test] - public void Round_ShouldRoundToNearest10_GivenPrecision10() - { - var vector = new Vector3(1.5f, 25.2f, -12.5f); - var rounded = vector.Round(10); - - Assert.That(rounded.x, Is.EqualTo(0)); - Assert.That(rounded.y, Is.EqualTo(30)); - Assert.That(rounded.z, Is.EqualTo(-10)); - } - - [Test] - public void ToSystemVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - - var vector = new Vector3(x, y, z); - var systemVector = vector.ToSystemVector(); - - Assert.That(systemVector.Length(), Is.EqualTo(vector.magnitude).Within(1e-6f)); - Assert.That(systemVector.X, Is.EqualTo(vector.x).Within(1e-6f)); - Assert.That(systemVector.Y, Is.EqualTo(vector.y).Within(1e-6f)); - Assert.That(systemVector.Z, Is.EqualTo(vector.z).Within(1e-6f)); - } - - [Test] - public void ToUnityVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - - var vector = new System.Numerics.Vector3(x, y, z); - var unityVector = vector.ToUnityVector(); - - Assert.That(unityVector.magnitude, Is.EqualTo(vector.Length()).Within(1e-6f)); - Assert.That(unityVector.x, Is.EqualTo(vector.X).Within(1e-6f)); - Assert.That(unityVector.y, Is.EqualTo(vector.Y).Within(1e-6f)); - Assert.That(unityVector.z, Is.EqualTo(vector.Z).Within(1e-6f)); - } - - [Test] - public void WithX_ShouldReturnVectorWithNewX_GivenVector() - { - Assert.That(Vector3.one.WithX(0), Is.EqualTo(new Vector3(0, 1, 1))); - Assert.That(Vector3.zero.WithX(0), Is.EqualTo(Vector3.zero)); - Assert.That(Vector3.right.WithX(0), Is.EqualTo(Vector3.zero)); - Assert.That(Vector3.up.WithX(0), Is.EqualTo(Vector3.up)); - Assert.That(Vector3.forward.WithX(0), Is.EqualTo(Vector3.forward)); - - Assert.That(Vector3.one.WithX(1), Is.EqualTo(Vector3.one)); - Assert.That(Vector3.zero.WithX(1), Is.EqualTo(Vector3.right)); - Assert.That(Vector3.right.WithX(1), Is.EqualTo(Vector3.right)); - Assert.That(Vector3.up.WithX(1), Is.EqualTo(new Vector3(1, 1, 0))); - Assert.That(Vector3.forward.WithX(1), Is.EqualTo(new Vector3(1, 0, 1))); - } - - [Test] - public void WithY_ShouldReturnVectorWithNewY_GivenVector() - { - Assert.That(Vector3.one.WithY(0), Is.EqualTo(new Vector3(1, 0, 1))); - Assert.That(Vector3.zero.WithY(0), Is.EqualTo(Vector3.zero)); - Assert.That(Vector3.right.WithY(0), Is.EqualTo(Vector3.right)); - Assert.That(Vector3.up.WithY(0), Is.EqualTo(Vector3.zero)); - Assert.That(Vector3.forward.WithY(0), Is.EqualTo(Vector3.forward)); - - Assert.That(Vector3.one.WithY(1), Is.EqualTo(Vector3.one)); - Assert.That(Vector3.zero.WithY(1), Is.EqualTo(Vector3.up)); - Assert.That(Vector3.right.WithY(1), Is.EqualTo(new Vector3(1, 1, 0))); - Assert.That(Vector3.up.WithY(1), Is.EqualTo(Vector3.up)); - Assert.That(Vector3.forward.WithY(1), Is.EqualTo(new Vector3(0, 1, 1))); - } - - [Test] - public void WithZ_ShouldReturnVectorWithNewZ_GivenVector() - { - Assert.That(Vector3.one.WithZ(0), Is.EqualTo(new Vector3(1, 1, 0))); - Assert.That(Vector3.zero.WithZ(0), Is.EqualTo(Vector3.zero)); - Assert.That(Vector3.right.WithZ(0), Is.EqualTo(Vector3.right)); - Assert.That(Vector3.up.WithZ(0), Is.EqualTo(Vector3.up)); - Assert.That(Vector3.forward.WithZ(0), Is.EqualTo(Vector3.zero)); - - Assert.That(Vector3.one.WithZ(1), Is.EqualTo(Vector3.one)); - Assert.That(Vector3.zero.WithZ(1), Is.EqualTo(Vector3.forward)); - Assert.That(Vector3.right.WithZ(1), Is.EqualTo(new Vector3(1, 0, 1))); - Assert.That(Vector3.up.WithZ(1), Is.EqualTo(new Vector3(0, 1, 1))); - Assert.That(Vector3.forward.WithZ(1), Is.EqualTo(Vector3.forward)); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs.meta deleted file mode 100644 index 6255e34..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector3Tests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a00d613201bd497d91c9e98bca8dd6b1 -timeCreated: 1652088132 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs deleted file mode 100644 index 3848db7..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs +++ /dev/null @@ -1,157 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using X10D.Core; -using X10D.Unity.Numerics; -using Random = System.Random; - -namespace X10D.Unity.Tests.Numerics -{ - public class Vector4Tests - { - [Test] - public void Deconstruct_ShouldReturnCorrectValues() - { - var vector = new Vector4(1, 2, 3, 4); - (float x, float y, float z, float w) = vector; - - Assert.That(x, Is.EqualTo(1)); - Assert.That(y, Is.EqualTo(2)); - Assert.That(z, Is.EqualTo(3)); - Assert.That(w, Is.EqualTo(4)); - } - - [Test] - public void Round_ShouldRoundToNearestInteger_GivenNoParameters() - { - var vector = new Vector4(1.5f, 2.6f, -5.2f, 0.3f); - var rounded = vector.Round(); - - Assert.That(rounded.x, Is.EqualTo(2)); - Assert.That(rounded.y, Is.EqualTo(3)); - Assert.That(rounded.z, Is.EqualTo(-5)); - Assert.That(rounded.w, Is.EqualTo(0)); - } - - [Test] - public void Round_ShouldRoundToNearest10_GivenPrecision10() - { - var vector = new Vector4(1.5f, 25.2f, -12.5f, 101.2f); - var rounded = vector.Round(10); - - Assert.That(rounded.x, Is.EqualTo(0)); - Assert.That(rounded.y, Is.EqualTo(30)); - Assert.That(rounded.z, Is.EqualTo(-10)); - Assert.That(rounded.w, Is.EqualTo(100)); - } - - [Test] - public void ToSystemVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - float w = random.NextSingle(); - - var vector = new Vector4(x, y, z, w); - var systemVector = vector.ToSystemVector(); - - Assert.That(systemVector.Length(), Is.EqualTo(vector.magnitude).Within(1e-6f)); - Assert.That(systemVector.X, Is.EqualTo(vector.x).Within(1e-6f)); - Assert.That(systemVector.Y, Is.EqualTo(vector.y).Within(1e-6f)); - Assert.That(systemVector.Z, Is.EqualTo(vector.z).Within(1e-6f)); - Assert.That(systemVector.W, Is.EqualTo(vector.w).Within(1e-6f)); - } - - [Test] - public void ToUnityVector_ShouldReturnVector_WithEqualComponents() - { - var random = new Random(); - float x = random.NextSingle(); - float y = random.NextSingle(); - float z = random.NextSingle(); - float w = random.NextSingle(); - - var vector = new System.Numerics.Vector4(x, y, z, w); - var unityVector = vector.ToUnityVector(); - - Assert.That(unityVector.magnitude, Is.EqualTo(vector.Length()).Within(1e-6f)); - Assert.That(unityVector.x, Is.EqualTo(vector.X).Within(1e-6f)); - Assert.That(unityVector.y, Is.EqualTo(vector.Y).Within(1e-6f)); - Assert.That(unityVector.z, Is.EqualTo(vector.Z).Within(1e-6f)); - Assert.That(unityVector.w, Is.EqualTo(vector.W).Within(1e-6f)); - } - - [Test] - public void WithW_ShouldReturnVectorWithNewW_GivenVector() - { - Assert.That(Vector4.one.WithW(0), Is.EqualTo(new Vector4(1, 1, 1, 0))); - Assert.That(Vector4.zero.WithW(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 0, 0, 1).WithW(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(1, 0, 0, 0).WithW(0), Is.EqualTo(new Vector4(1, 0, 0, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithW(0), Is.EqualTo(new Vector4(0, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithW(0), Is.EqualTo(new Vector4(0, 0, 1, 0))); - - Assert.That(Vector4.one.WithW(1), Is.EqualTo(Vector4.one)); - Assert.That(Vector4.zero.WithW(1), Is.EqualTo(new Vector4(0, 0, 0, 1))); - Assert.That(new Vector4(0, 0, 0, 1).WithW(1), Is.EqualTo(new Vector4(0, 0, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithW(1), Is.EqualTo(new Vector4(1, 0, 0, 1))); - Assert.That(new Vector4(0, 1, 0, 0).WithW(1), Is.EqualTo(new Vector4(0, 1, 0, 1))); - Assert.That(new Vector4(0, 0, 1, 0).WithW(1), Is.EqualTo(new Vector4(0, 0, 1, 1))); - } - - [Test] - public void WithX_ShouldReturnVectorWithNewX_GivenVector() - { - Assert.That(Vector4.one.WithX(0), Is.EqualTo(new Vector4(0, 1, 1, 1))); - Assert.That(Vector4.zero.WithX(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 0, 0, 1).WithX(0), Is.EqualTo(new Vector4(0, 0, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithX(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 1, 0, 0).WithX(0), Is.EqualTo(new Vector4(0, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithX(0), Is.EqualTo(new Vector4(0, 0, 1, 0))); - - Assert.That(Vector4.one.WithX(1), Is.EqualTo(Vector4.one)); - Assert.That(Vector4.zero.WithX(1), Is.EqualTo(new Vector4(1, 0, 0, 0))); - Assert.That(new Vector4(0, 0, 0, 1).WithX(1), Is.EqualTo(new Vector4(1, 0, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithX(1), Is.EqualTo(new Vector4(1, 0, 0, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithX(1), Is.EqualTo(new Vector4(1, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithX(1), Is.EqualTo(new Vector4(1, 0, 1, 0))); - } - - [Test] - public void WithY_ShouldReturnVectorWithNewY_GivenVector() - { - Assert.That(Vector4.one.WithY(0), Is.EqualTo(new Vector4(1, 0, 1, 1))); - Assert.That(Vector4.zero.WithY(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 0, 0, 1).WithY(0), Is.EqualTo(new Vector4(0, 0, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithY(0), Is.EqualTo(new Vector4(1, 0, 0, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithY(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 0, 1, 0).WithY(0), Is.EqualTo(new Vector4(0, 0, 1, 0))); - - Assert.That(Vector4.one.WithY(1), Is.EqualTo(Vector4.one)); - Assert.That(Vector4.zero.WithY(1), Is.EqualTo(new Vector4(0, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 0, 1).WithY(1), Is.EqualTo(new Vector4(0, 1, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithY(1), Is.EqualTo(new Vector4(1, 1, 0, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithY(1), Is.EqualTo(new Vector4(0, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithY(1), Is.EqualTo(new Vector4(0, 1, 1, 0))); - } - - [Test] - public void WithZ_ShouldReturnVectorWithNewZ_GivenVector() - { - Assert.That(Vector4.one.WithZ(0), Is.EqualTo(new Vector4(1, 1, 0, 1))); - Assert.That(Vector4.zero.WithZ(0), Is.EqualTo(Vector4.zero)); - Assert.That(new Vector4(0, 0, 0, 1).WithZ(0), Is.EqualTo(new Vector4(0, 0, 0, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithZ(0), Is.EqualTo(new Vector4(1, 0, 0, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithZ(0), Is.EqualTo(new Vector4(0, 1, 0, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithZ(0), Is.EqualTo(Vector4.zero)); - - Assert.That(Vector4.one.WithZ(1), Is.EqualTo(Vector4.one)); - Assert.That(Vector4.zero.WithZ(1), Is.EqualTo(new Vector4(0, 0, 1, 0))); - Assert.That(new Vector4(0, 0, 0, 1).WithZ(1), Is.EqualTo(new Vector4(0, 0, 1, 1))); - Assert.That(new Vector4(1, 0, 0, 0).WithZ(1), Is.EqualTo(new Vector4(1, 0, 1, 0))); - Assert.That(new Vector4(0, 1, 0, 0).WithZ(1), Is.EqualTo(new Vector4(0, 1, 1, 0))); - Assert.That(new Vector4(0, 0, 1, 0).WithZ(1), Is.EqualTo(new Vector4(0, 0, 1, 0))); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs.meta b/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs.meta deleted file mode 100644 index 041ceb9..0000000 --- a/X10D.Unity.Tests/Assets/Tests/Numerics/Vector4Tests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0d487c2046a64354b199f4de01d57391 -timeCreated: 1652088132 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs b/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs deleted file mode 100644 index 9e77e11..0000000 --- a/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections; -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools; - -namespace X10D.Unity.Tests -{ - public class SingletonTests - { - [Test] - public void Singleton_ShouldReturnNewInstance_WhenNoInstanceExists() - { - TestBehaviour instance = Singleton.Instance; - Assert.That(instance, Is.Not.Null); - Assert.That(instance.Flag); - } - - [Test] - public void Singleton_ShouldReturnSameInstance_WhenAccessedTwice() - { - TestBehaviour instance = Singleton.Instance; - Assert.That(instance, Is.Not.Null); - Assert.That(Singleton.Instance, Is.EqualTo(instance)); - } - - [UnityTest] - public IEnumerator Singleton_ShouldReturnNewInstance_WhenDestroyed() - { - TestBehaviour instance = Singleton.Instance; - Assert.That(instance, Is.Not.Null); - Object.Destroy(instance); - - yield return null; - - Assert.IsFalse(instance); - - // ReSharper disable once HeuristicUnreachableCode - instance = Singleton.Instance; - Assert.That(instance, Is.Not.Null); - Assert.IsTrue(instance.Flag); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs.meta deleted file mode 100644 index 3f086ce..0000000 --- a/X10D.Unity.Tests/Assets/Tests/SingletonTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5c51198d124f40859bd9298d3241d5a6 -timeCreated: 1652428949 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs b/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs deleted file mode 100644 index a603e1d..0000000 --- a/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace X10D.Unity.Tests -{ - internal sealed class TestBehaviour : Singleton - { - public bool Flag - { - get => true; - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs.meta b/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs.meta deleted file mode 100644 index bc63104..0000000 --- a/X10D.Unity.Tests/Assets/Tests/TestBehaviour.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: df932718d20948ecbe9b0de8aa7bbaf4 -timeCreated: 1652428898 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/TransformTests.cs b/X10D.Unity.Tests/Assets/Tests/TransformTests.cs deleted file mode 100644 index 5d09176..0000000 --- a/X10D.Unity.Tests/Assets/Tests/TransformTests.cs +++ /dev/null @@ -1,59 +0,0 @@ -#nullable enable - -using System.Collections; -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools; - -namespace X10D.Unity.Tests -{ - public class TransformTests - { - [UnityTest] - public IEnumerator LookAt_ShouldRotateSameAsTransform() - { - var first = new GameObject {transform = {position = Vector3.zero, rotation = Quaternion.identity}}; - var second = new GameObject {transform = {position = Vector3.right, rotation = Quaternion.identity}}; - Transform firstTransform = first.transform; - Transform secondTransform = second.transform; - - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - Assert.That(secondTransform.rotation, Is.EqualTo(Quaternion.identity)); - - firstTransform.LookAt(secondTransform); - Quaternion expected = firstTransform.rotation; - - firstTransform.rotation = Quaternion.identity; - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - - firstTransform.LookAt(second); - Assert.That(firstTransform.rotation, Is.EqualTo(expected)); - - firstTransform.rotation = Quaternion.identity; - Assert.That(firstTransform.rotation, Is.EqualTo(Quaternion.identity)); - - yield break; - } - - [UnityTest] - public IEnumerator SetParent_ShouldSetParent() - { - var first = new GameObject {transform = {position = Vector3.zero, rotation = Quaternion.identity}}; - var second = new GameObject {transform = {position = Vector3.right, rotation = Quaternion.identity}}; - - Assert.That(first.transform.parent, Is.EqualTo(null)); - Assert.That(second.transform.parent, Is.EqualTo(null)); - - first.transform.SetParent(second); - Assert.That(first.transform.parent, Is.EqualTo(second.transform)); - - first.transform.SetParent(null!); - Assert.That(first.transform.parent, Is.EqualTo(null)); - - second.transform.SetParent(first); - Assert.That(second.transform.parent, Is.EqualTo(first.transform)); - - yield break; - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/TransformTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/TransformTests.cs.meta deleted file mode 100644 index 362c6cc..0000000 --- a/X10D.Unity.Tests/Assets/Tests/TransformTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1f1518cdf51546288b7a16369297be5e -timeCreated: 1652005981 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef b/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef deleted file mode 100644 index 3798be8..0000000 --- a/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "X10D.Unity.Tests", - "rootNamespace": "X10D.Unity", - "references": [ - "UnityEngine.TestRunner", - "UnityEditor.TestRunner" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "nunit.framework.dll", - "X10D.dll", - "X10D.Unity.dll" - ], - "autoReferenced": false, - "defineConstraints": [ - "UNITY_INCLUDE_TESTS" - ], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef.meta b/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef.meta deleted file mode 100644 index 5932295..0000000 --- a/X10D.Unity.Tests/Assets/Tests/X10D.Unity.Tests.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 34215b8a0b1faf64487ff72821603aad -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs b/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs deleted file mode 100644 index 90dc18e..0000000 --- a/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections; -using UnityEngine; - -namespace X10D.Unity.Tests -{ - public class YieldInstructionIntegrationTests : MonoBehaviour - { - private void Start() - { - StartCoroutine(CO_WaitForAnyKeyDown()); - StartCoroutine(CO_WaitForSpaceKeyDown()); - StartCoroutine(CO_WaitForSpaceKeyUp()); - } - - private IEnumerator CO_WaitForAnyKeyDown() - { - Debug.Log("Waiting for any key to be pressed..."); - yield return new WaitForKeyDown(); - Debug.Log("Key was pressed!"); - } - - private IEnumerator CO_WaitForSpaceKeyDown() - { - Debug.Log("Waiting for Space key to be pressed..."); - yield return new WaitForKeyDown(KeyCode.Space); - Debug.Log("Space key was pressed!"); - } - - private IEnumerator CO_WaitForSpaceKeyUp() - { - Debug.Log("Waiting for Space key to be released..."); - yield return new WaitForKeyUp(KeyCode.Space); - Debug.Log("Space key was released!"); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs.meta deleted file mode 100644 index ae63f4d..0000000 --- a/X10D.Unity.Tests/Assets/Tests/YieldInstructionIntegrationTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 67d53e2f993d4a5ba0eb34431d1846cd -timeCreated: 1657791682 \ No newline at end of file diff --git a/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs b/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs deleted file mode 100644 index fd109f0..0000000 --- a/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections; -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools; -using UTime = UnityEngine.Time; - -namespace X10D.Unity.Tests -{ - public class YieldInstructionTests : MonoBehaviour - { - [UnityTest] - public IEnumerator WaitForFrames_ShouldYieldCorrectNumberOfFrames() - { - int frameCount = UTime.frameCount; - yield return new WaitForFrames(10); - Assert.That(UTime.frameCount, Is.EqualTo(frameCount + 10), $"{frameCount + 10} == {UTime.frameCount}"); - } - - [UnityTest] - public IEnumerator WaitForSecondsNoAlloc_ShouldYieldForCorrectTime() - { - float time = UTime.time; - yield return new WaitForSecondsNoAlloc(2); - Assert.That(UTime.time, Is.EqualTo(time + 2).Within(1e-2), $"{time + 2} == {UTime.time}"); - } - - [UnityTest] - public IEnumerator WaitForSecondsRealtimeNoAlloc_ShouldYieldForCorrectTime() - { - float time = UTime.time; - yield return new WaitForSecondsRealtimeNoAlloc(2); - Assert.That(UTime.time, Is.EqualTo(time + 2).Within(1e-2), $"{time + 2} == {UTime.time}"); - } - - [UnityTest] - public IEnumerator WaitForTimeSpan_ShouldYieldForCorrectTime() - { - float time = UTime.time; - yield return new WaitForTimeSpan(TimeSpan.FromSeconds(2.0)); - Assert.That(UTime.time, Is.GreaterThanOrEqualTo(time + 2.0f).Or.GreaterThanOrEqualTo(time + 1.5f)); - } - - [UnityTest] - public IEnumerator WaitForTimeSpanRealtime_ShouldYieldForCorrectTime() - { - float time = UTime.time; - yield return new WaitForTimeSpanRealtime(TimeSpan.FromSeconds(2.0)); - Assert.That(UTime.time, Is.EqualTo(time + 2).Within(1e-2), $"{time + 2} == {UTime.time}"); - } - } -} diff --git a/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs.meta b/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs.meta deleted file mode 100644 index ae81ce1..0000000 --- a/X10D.Unity.Tests/Assets/Tests/YieldInstructionTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d7d35eefdf5b43278a6f6aa268a71091 -timeCreated: 1657795834 \ No newline at end of file diff --git a/X10D.Unity.Tests/Packages/manifest.json b/X10D.Unity.Tests/Packages/manifest.json deleted file mode 100644 index 97fb71f..0000000 --- a/X10D.Unity.Tests/Packages/manifest.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": "2.0.1", - "com.unity.feature.development": "1.0.1", - "com.unity.ide.rider": "3.0.18", - "com.unity.ide.visualstudio": "2.0.17", - "com.unity.ide.vscode": "1.2.5", - "com.unity.test-framework": "1.1.31", - "com.unity.textmeshpro": "3.0.6", - "com.unity.timeline": "1.6.4", - "com.unity.ugui": "1.0.0", - "com.unity.visualscripting": "1.8.0", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } -} diff --git a/X10D.Unity.Tests/Packages/packages-lock.json b/X10D.Unity.Tests/Packages/packages-lock.json deleted file mode 100644 index 3172caf..0000000 --- a/X10D.Unity.Tests/Packages/packages-lock.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": { - "version": "2.0.1", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.editorcoroutines": { - "version": "1.0.0", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.ext.nunit": { - "version": "1.0.6", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.feature.development": { - "version": "1.0.1", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.ide.visualstudio": "2.0.17", - "com.unity.ide.rider": "3.0.18", - "com.unity.ide.vscode": "1.2.5", - "com.unity.editorcoroutines": "1.0.0", - "com.unity.performance.profile-analyzer": "1.2.2", - "com.unity.test-framework": "1.1.31", - "com.unity.testtools.codecoverage": "1.2.2" - } - }, - "com.unity.ide.rider": { - "version": "3.0.18", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ext.nunit": "1.0.6" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.visualstudio": { - "version": "2.0.17", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.9" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.vscode": { - "version": "1.2.5", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.performance.profile-analyzer": { - "version": "1.2.2", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.settings-manager": { - "version": "1.0.3", - "depth": 2, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.test-framework": { - "version": "1.1.31", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ext.nunit": "1.0.6", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.testtools.codecoverage": { - "version": "1.2.2", - "depth": 1, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.0.16", - "com.unity.settings-manager": "1.0.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.textmeshpro": { - "version": "3.0.6", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.timeline": { - "version": "1.6.4", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.modules.director": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ugui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0" - } - }, - "com.unity.visualscripting": { - "version": "1.8.0", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.modules.ai": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.androidjni": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.animation": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.assetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.audio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.cloth": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.director": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.animation": "1.0.0" - } - }, - "com.unity.modules.imageconversion": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.imgui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.jsonserialize": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.particlesystem": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics2d": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.screencapture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.subsystems": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.terrain": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.terrainphysics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.terrain": "1.0.0" - } - }, - "com.unity.modules.tilemap": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics2d": "1.0.0" - } - }, - "com.unity.modules.ui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.uielements": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.uielementsnative": "1.0.0" - } - }, - "com.unity.modules.uielementsnative": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.umbra": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unityanalytics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.unitywebrequest": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unitywebrequestassetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestaudio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.audio": "1.0.0" - } - }, - "com.unity.modules.unitywebrequesttexture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestwww": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.vehicles": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.video": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.vr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } - }, - "com.unity.modules.wind": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.xr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.subsystems": "1.0.0" - } - } - } -} diff --git a/X10D.Unity.Tests/ProjectSettings/AudioManager.asset b/X10D.Unity.Tests/ProjectSettings/AudioManager.asset deleted file mode 100644 index 07ebfb0..0000000 --- a/X10D.Unity.Tests/ProjectSettings/AudioManager.asset +++ /dev/null @@ -1,19 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!11 &1 -AudioManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Volume: 1 - Rolloff Scale: 1 - Doppler Factor: 1 - Default Speaker Mode: 2 - m_SampleRate: 0 - m_DSPBufferSize: 1024 - m_VirtualVoiceCount: 512 - m_RealVoiceCount: 32 - m_SpatializerPlugin: - m_AmbisonicDecoderPlugin: - m_DisableAudio: 0 - m_VirtualizeEffects: 1 - m_RequestedDSPBufferSize: 1024 diff --git a/X10D.Unity.Tests/ProjectSettings/ClusterInputManager.asset b/X10D.Unity.Tests/ProjectSettings/ClusterInputManager.asset deleted file mode 100644 index e7886b2..0000000 --- a/X10D.Unity.Tests/ProjectSettings/ClusterInputManager.asset +++ /dev/null @@ -1,6 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!236 &1 -ClusterInputManager: - m_ObjectHideFlags: 0 - m_Inputs: [] diff --git a/X10D.Unity.Tests/ProjectSettings/DynamicsManager.asset b/X10D.Unity.Tests/ProjectSettings/DynamicsManager.asset deleted file mode 100644 index cdc1f3e..0000000 --- a/X10D.Unity.Tests/ProjectSettings/DynamicsManager.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!55 &1 -PhysicsManager: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_Gravity: {x: 0, y: -9.81, z: 0} - m_DefaultMaterial: {fileID: 0} - m_BounceThreshold: 2 - m_SleepThreshold: 0.005 - m_DefaultContactOffset: 0.01 - m_DefaultSolverIterations: 6 - m_DefaultSolverVelocityIterations: 1 - m_QueriesHitBackfaces: 0 - m_QueriesHitTriggers: 1 - m_EnableAdaptiveForce: 0 - m_ClothInterCollisionDistance: 0 - m_ClothInterCollisionStiffness: 0 - m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - m_AutoSimulation: 1 - m_AutoSyncTransforms: 0 - m_ReuseCollisionCallbacks: 1 - m_ClothInterCollisionSettingsToggle: 0 - m_ContactPairsMode: 0 - m_BroadphaseType: 0 - m_WorldBounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 250, y: 250, z: 250} - m_WorldSubdivisions: 8 - m_FrictionType: 0 - m_EnableEnhancedDeterminism: 0 - m_EnableUnifiedHeightmaps: 1 - m_DefaultMaxAngluarSpeed: 7 diff --git a/X10D.Unity.Tests/ProjectSettings/EditorBuildSettings.asset b/X10D.Unity.Tests/ProjectSettings/EditorBuildSettings.asset deleted file mode 100644 index 0147887..0000000 --- a/X10D.Unity.Tests/ProjectSettings/EditorBuildSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1045 &1 -EditorBuildSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Scenes: [] - m_configObjects: {} diff --git a/X10D.Unity.Tests/ProjectSettings/EditorSettings.asset b/X10D.Unity.Tests/ProjectSettings/EditorSettings.asset deleted file mode 100644 index 1e44a0a..0000000 --- a/X10D.Unity.Tests/ProjectSettings/EditorSettings.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!159 &1 -EditorSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_ExternalVersionControlSupport: Visible Meta Files - m_SerializationMode: 2 - m_LineEndingsForNewScripts: 0 - m_DefaultBehaviorMode: 0 - m_PrefabRegularEnvironment: {fileID: 0} - m_PrefabUIEnvironment: {fileID: 0} - m_SpritePackerMode: 0 - m_SpritePackerPaddingPower: 1 - m_EtcTextureCompressorBehavior: 1 - m_EtcTextureFastCompressor: 1 - m_EtcTextureNormalCompressor: 2 - m_EtcTextureBestCompressor: 4 - m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref - m_ProjectGenerationRootNamespace: - m_CollabEditorSettings: - inProgressEnabled: 1 - m_EnableTextureStreamingInEditMode: 1 - m_EnableTextureStreamingInPlayMode: 1 - m_AsyncShaderCompilation: 1 - m_EnterPlayModeOptionsEnabled: 0 - m_EnterPlayModeOptions: 3 - m_ShowLightmapResolutionOverlay: 1 - m_UseLegacyProbeSampleCount: 0 - m_SerializeInlineMappingsOnOneLine: 1 diff --git a/X10D.Unity.Tests/ProjectSettings/GraphicsSettings.asset b/X10D.Unity.Tests/ProjectSettings/GraphicsSettings.asset deleted file mode 100644 index 43369e3..0000000 --- a/X10D.Unity.Tests/ProjectSettings/GraphicsSettings.asset +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!30 &1 -GraphicsSettings: - m_ObjectHideFlags: 0 - serializedVersion: 13 - m_Deferred: - m_Mode: 1 - m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} - m_DeferredReflections: - m_Mode: 1 - m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} - m_ScreenSpaceShadows: - m_Mode: 1 - m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} - m_DepthNormals: - m_Mode: 1 - m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} - m_MotionVectors: - m_Mode: 1 - m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} - m_LightHalo: - m_Mode: 1 - m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} - m_LensFlare: - m_Mode: 1 - m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} - m_AlwaysIncludedShaders: - - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - m_PreloadedShaders: [] - m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, - type: 0} - m_CustomRenderPipeline: {fileID: 0} - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 0, z: 1} - m_DefaultRenderingPath: 1 - m_DefaultMobileRenderingPath: 1 - m_TierSettings: [] - m_LightmapStripping: 0 - m_FogStripping: 0 - m_InstancingStripping: 0 - m_LightmapKeepPlain: 1 - m_LightmapKeepDirCombined: 1 - m_LightmapKeepDynamicPlain: 1 - m_LightmapKeepDynamicDirCombined: 1 - m_LightmapKeepShadowMask: 1 - m_LightmapKeepSubtractive: 1 - m_FogKeepLinear: 1 - m_FogKeepExp: 1 - m_FogKeepExp2: 1 - m_AlbedoSwatchInfos: [] - m_LightsUseLinearIntensity: 0 - m_LightsUseColorTemperature: 0 - m_LogWhenShaderIsCompiled: 0 - m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/InputManager.asset b/X10D.Unity.Tests/ProjectSettings/InputManager.asset deleted file mode 100644 index 17c8f53..0000000 --- a/X10D.Unity.Tests/ProjectSettings/InputManager.asset +++ /dev/null @@ -1,295 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!13 &1 -InputManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Axes: - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: left - positiveButton: right - altNegativeButton: a - altPositiveButton: d - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: down - positiveButton: up - altNegativeButton: s - altPositiveButton: w - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left ctrl - altNegativeButton: - altPositiveButton: mouse 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left alt - altNegativeButton: - altPositiveButton: mouse 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left shift - altNegativeButton: - altPositiveButton: mouse 2 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: space - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse X - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse Y - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse ScrollWheel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 2 - joyNum: 0 - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 0 - type: 2 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 1 - type: 2 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 0 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 1 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 2 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 3 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: return - altNegativeButton: - altPositiveButton: joystick button 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: enter - altNegativeButton: - altPositiveButton: space - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Cancel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: escape - altNegativeButton: - altPositiveButton: joystick button 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/MemorySettings.asset b/X10D.Unity.Tests/ProjectSettings/MemorySettings.asset deleted file mode 100644 index 5b5face..0000000 --- a/X10D.Unity.Tests/ProjectSettings/MemorySettings.asset +++ /dev/null @@ -1,35 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!387306366 &1 -MemorySettings: - m_ObjectHideFlags: 0 - m_EditorMemorySettings: - m_MainAllocatorBlockSize: -1 - m_ThreadAllocatorBlockSize: -1 - m_MainGfxBlockSize: -1 - m_ThreadGfxBlockSize: -1 - m_CacheBlockSize: -1 - m_TypetreeBlockSize: -1 - m_ProfilerBlockSize: -1 - m_ProfilerEditorBlockSize: -1 - m_BucketAllocatorGranularity: -1 - m_BucketAllocatorBucketsCount: -1 - m_BucketAllocatorBlockSize: -1 - m_BucketAllocatorBlockCount: -1 - m_ProfilerBucketAllocatorGranularity: -1 - m_ProfilerBucketAllocatorBucketsCount: -1 - m_ProfilerBucketAllocatorBlockSize: -1 - m_ProfilerBucketAllocatorBlockCount: -1 - m_TempAllocatorSizeMain: -1 - m_JobTempAllocatorBlockSize: -1 - m_BackgroundJobTempAllocatorBlockSize: -1 - m_JobTempAllocatorReducedBlockSize: -1 - m_TempAllocatorSizeGIBakingWorker: -1 - m_TempAllocatorSizeNavMeshWorker: -1 - m_TempAllocatorSizeAudioWorker: -1 - m_TempAllocatorSizeCloudWorker: -1 - m_TempAllocatorSizeGfx: -1 - m_TempAllocatorSizeJobWorker: -1 - m_TempAllocatorSizeBackgroundWorker: -1 - m_TempAllocatorSizePreloadManager: -1 - m_PlatformMemorySettings: {} diff --git a/X10D.Unity.Tests/ProjectSettings/NavMeshAreas.asset b/X10D.Unity.Tests/ProjectSettings/NavMeshAreas.asset deleted file mode 100644 index 3b0b7c3..0000000 --- a/X10D.Unity.Tests/ProjectSettings/NavMeshAreas.asset +++ /dev/null @@ -1,91 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!126 &1 -NavMeshProjectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - areas: - - name: Walkable - cost: 1 - - name: Not Walkable - cost: 1 - - name: Jump - cost: 2 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - m_LastAgentTypeID: -887442657 - m_Settings: - - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.75 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_SettingNames: - - Humanoid diff --git a/X10D.Unity.Tests/ProjectSettings/PackageManagerSettings.asset b/X10D.Unity.Tests/ProjectSettings/PackageManagerSettings.asset deleted file mode 100644 index 112a053..0000000 --- a/X10D.Unity.Tests/ProjectSettings/PackageManagerSettings.asset +++ /dev/null @@ -1,35 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &1 -MonoBehaviour: - m_ObjectHideFlags: 61 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} - m_Name: - m_EditorClassIdentifier: - m_EnablePreReleasePackages: 0 - m_EnablePackageDependencies: 0 - m_AdvancedSettingsExpanded: 1 - m_ScopedRegistriesSettingsExpanded: 1 - m_SeeAllPackageVersions: 0 - oneTimeWarningShown: 0 - m_Registries: - - m_Id: main - m_Name: - m_Url: https://packages.unity.com - m_Scopes: [] - m_IsDefault: 1 - m_Capabilities: 7 - m_UserSelectedRegistryName: - m_UserAddingNewScopedRegistry: 0 - m_RegistryInfoDraft: - m_Modified: 0 - m_ErrorMessage: - m_UserModificationsInstanceId: -830 - m_OriginalInstanceId: -832 - m_LoadAssets: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/X10D.Unity.Tests/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json deleted file mode 100644 index ad11087..0000000 --- a/X10D.Unity.Tests/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "m_Name": "Settings", - "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", - "m_Dictionary": { - "m_DictionaryValues": [] - } -} \ No newline at end of file diff --git a/X10D.Unity.Tests/ProjectSettings/Physics2DSettings.asset b/X10D.Unity.Tests/ProjectSettings/Physics2DSettings.asset deleted file mode 100644 index 47880b1..0000000 --- a/X10D.Unity.Tests/ProjectSettings/Physics2DSettings.asset +++ /dev/null @@ -1,56 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!19 &1 -Physics2DSettings: - m_ObjectHideFlags: 0 - serializedVersion: 4 - m_Gravity: {x: 0, y: -9.81} - m_DefaultMaterial: {fileID: 0} - m_VelocityIterations: 8 - m_PositionIterations: 3 - m_VelocityThreshold: 1 - m_MaxLinearCorrection: 0.2 - m_MaxAngularCorrection: 8 - m_MaxTranslationSpeed: 100 - m_MaxRotationSpeed: 360 - m_BaumgarteScale: 0.2 - m_BaumgarteTimeOfImpactScale: 0.75 - m_TimeToSleep: 0.5 - m_LinearSleepTolerance: 0.01 - m_AngularSleepTolerance: 2 - m_DefaultContactOffset: 0.01 - m_JobOptions: - serializedVersion: 2 - useMultithreading: 0 - useConsistencySorting: 0 - m_InterpolationPosesPerJob: 100 - m_NewContactsPerJob: 30 - m_CollideContactsPerJob: 100 - m_ClearFlagsPerJob: 200 - m_ClearBodyForcesPerJob: 200 - m_SyncDiscreteFixturesPerJob: 50 - m_SyncContinuousFixturesPerJob: 50 - m_FindNearestContactsPerJob: 100 - m_UpdateTriggerContactsPerJob: 100 - m_IslandSolverCostThreshold: 100 - m_IslandSolverBodyCostScale: 1 - m_IslandSolverContactCostScale: 10 - m_IslandSolverJointCostScale: 10 - m_IslandSolverBodiesPerJob: 50 - m_IslandSolverContactsPerJob: 50 - m_AutoSimulation: 1 - m_QueriesHitTriggers: 1 - m_QueriesStartInColliders: 1 - m_CallbacksOnDisable: 1 - m_ReuseCollisionCallbacks: 1 - m_AutoSyncTransforms: 0 - m_AlwaysShowColliders: 0 - m_ShowColliderSleep: 1 - m_ShowColliderContacts: 0 - m_ShowColliderAABB: 0 - m_ContactArrowScale: 0.2 - m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} - m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} - m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} - m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/X10D.Unity.Tests/ProjectSettings/PresetManager.asset b/X10D.Unity.Tests/ProjectSettings/PresetManager.asset deleted file mode 100644 index 67a94da..0000000 --- a/X10D.Unity.Tests/ProjectSettings/PresetManager.asset +++ /dev/null @@ -1,7 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1386491679 &1 -PresetManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_DefaultPresets: {} diff --git a/X10D.Unity.Tests/ProjectSettings/ProjectSettings.asset b/X10D.Unity.Tests/ProjectSettings/ProjectSettings.asset deleted file mode 100644 index 67fd210..0000000 --- a/X10D.Unity.Tests/ProjectSettings/ProjectSettings.asset +++ /dev/null @@ -1,708 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!129 &1 -PlayerSettings: - m_ObjectHideFlags: 0 - serializedVersion: 23 - productGUID: a5313041f8a8e9240a746c81c45bc60b - AndroidProfiler: 0 - AndroidFilterTouchesWhenObscured: 0 - AndroidEnableSustainedPerformanceMode: 0 - defaultScreenOrientation: 4 - targetDevice: 2 - useOnDemandResources: 0 - accelerometerFrequency: 60 - companyName: DefaultCompany - productName: X10D.Unity.Tests - defaultCursor: {fileID: 0} - cursorHotspot: {x: 0, y: 0} - m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 - m_SplashScreenOverlayOpacity: 1 - m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 - m_SplashScreenDrawMode: 0 - m_SplashScreenBackgroundAnimationZoom: 1 - m_SplashScreenLogoAnimationZoom: 1 - m_SplashScreenBackgroundLandscapeAspect: 1 - m_SplashScreenBackgroundPortraitAspect: 1 - m_SplashScreenBackgroundLandscapeUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenBackgroundPortraitUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenLogos: [] - m_VirtualRealitySplashScreen: {fileID: 0} - m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1920 - defaultScreenHeight: 1080 - defaultScreenWidthWeb: 960 - defaultScreenHeightWeb: 600 - m_StereoRenderingPath: 0 - m_ActiveColorSpace: 0 - m_MTRendering: 1 - mipStripping: 0 - numberOfMipsStripped: 0 - m_StackTraceTypes: 010000000100000001000000010000000100000001000000 - iosShowActivityIndicatorOnLoading: -1 - androidShowActivityIndicatorOnLoading: -1 - iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 - allowedAutorotateToPortrait: 1 - allowedAutorotateToPortraitUpsideDown: 1 - allowedAutorotateToLandscapeRight: 1 - allowedAutorotateToLandscapeLeft: 1 - useOSAutorotation: 1 - use32BitDisplayBuffer: 1 - preserveFramebufferAlpha: 0 - disableDepthAndStencilBuffers: 0 - androidStartInFullscreen: 1 - androidRenderOutsideSafeArea: 1 - androidUseSwappy: 1 - androidBlitType: 0 - androidResizableWindow: 0 - androidDefaultWindowWidth: 1920 - androidDefaultWindowHeight: 1080 - androidMinimumWindowWidth: 400 - androidMinimumWindowHeight: 300 - androidFullscreenMode: 1 - defaultIsNativeResolution: 1 - macRetinaSupport: 1 - runInBackground: 1 - captureSingleScreen: 0 - muteOtherAudioSources: 0 - Prepare IOS For Recording: 0 - Force IOS Speakers When Recording: 0 - deferSystemGesturesMode: 0 - hideHomeButton: 0 - submitAnalytics: 1 - usePlayerLog: 1 - bakeCollisionMeshes: 0 - forceSingleInstance: 0 - useFlipModelSwapchain: 1 - resizableWindow: 0 - useMacAppStoreValidation: 0 - macAppStoreCategory: public.app-category.games - gpuSkinning: 1 - xboxPIXTextureCapture: 0 - xboxEnableAvatar: 0 - xboxEnableKinect: 0 - xboxEnableKinectAutoTracking: 0 - xboxEnableFitness: 0 - visibleInBackground: 1 - allowFullscreenSwitch: 1 - fullscreenMode: 1 - xboxSpeechDB: 0 - xboxEnableHeadOrientation: 0 - xboxEnableGuest: 0 - xboxEnablePIXSampling: 0 - metalFramebufferOnly: 0 - xboxOneResolution: 0 - xboxOneSResolution: 0 - xboxOneXResolution: 3 - xboxOneMonoLoggingLevel: 0 - xboxOneLoggingLevel: 1 - xboxOneDisableEsram: 0 - xboxOneEnableTypeOptimization: 0 - xboxOnePresentImmediateThreshold: 0 - switchQueueCommandMemory: 0 - switchQueueControlMemory: 16384 - switchQueueComputeMemory: 262144 - switchNVNShaderPoolsGranularity: 33554432 - switchNVNDefaultPoolsGranularity: 16777216 - switchNVNOtherPoolsGranularity: 16777216 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 - stadiaPresentMode: 0 - stadiaTargetFramerate: 0 - vulkanNumSwapchainBuffers: 3 - vulkanEnableSetSRGBWrite: 0 - vulkanEnablePreTransform: 1 - vulkanEnableLateAcquireNextImage: 0 - vulkanEnableCommandBufferRecycling: 1 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 - bundleVersion: 0.1 - preloadedAssets: [] - metroInputSource: 0 - wsaTransparentSwapchain: 0 - m_HolographicPauseOnTrackingLoss: 1 - xboxOneDisableKinectGpuReservation: 1 - xboxOneEnable7thCore: 1 - vrSettings: - enable360StereoCapture: 0 - isWsaHolographicRemotingEnabled: 0 - enableFrameTimingStats: 0 - useHDRDisplay: 0 - D3DHDRBitDepth: 0 - m_ColorGamuts: 00000000 - targetPixelDensity: 30 - resolutionScalingMode: 0 - androidSupportedAspectRatio: 1 - androidMaxAspectRatio: 2.1 - applicationIdentifier: {} - buildNumber: - Standalone: 0 - iPhone: 0 - tvOS: 0 - overrideDefaultApplicationIdentifier: 0 - AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 22 - AndroidTargetSdkVersion: 0 - AndroidPreferredInstallLocation: 1 - aotOptions: - stripEngineCode: 1 - iPhoneStrippingLevel: 0 - iPhoneScriptCallOptimization: 0 - ForceInternetPermission: 0 - ForceSDCardPermission: 0 - CreateWallpaper: 0 - APKExpansionFiles: 0 - keepLoadedShadersAlive: 0 - StripUnusedMeshComponents: 1 - VertexChannelCompressionMask: 4054 - iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 11.0 - tvOSSdkVersion: 0 - tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 11.0 - uIPrerenderedIcon: 0 - uIRequiresPersistentWiFi: 0 - uIRequiresFullScreen: 1 - uIStatusBarHidden: 1 - uIExitOnSuspend: 0 - uIStatusBarStyle: 0 - appleTVSplashScreen: {fileID: 0} - appleTVSplashScreen2x: {fileID: 0} - tvOSSmallIconLayers: [] - tvOSSmallIconLayers2x: [] - tvOSLargeIconLayers: [] - tvOSLargeIconLayers2x: [] - tvOSTopShelfImageLayers: [] - tvOSTopShelfImageLayers2x: [] - tvOSTopShelfImageWideLayers: [] - tvOSTopShelfImageWideLayers2x: [] - iOSLaunchScreenType: 0 - iOSLaunchScreenPortrait: {fileID: 0} - iOSLaunchScreenLandscape: {fileID: 0} - iOSLaunchScreenBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreenFillPct: 100 - iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: - iOSLaunchScreeniPadType: 0 - iOSLaunchScreeniPadImage: {fileID: 0} - iOSLaunchScreeniPadBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreeniPadFillPct: 100 - iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: - iOSLaunchScreenCustomStoryboardPath: - iOSLaunchScreeniPadCustomStoryboardPath: - iOSDeviceRequirements: [] - iOSURLSchemes: [] - macOSURLSchemes: [] - iOSBackgroundModes: 0 - iOSMetalForceHardShadows: 0 - metalEditorSupport: 1 - metalAPIValidation: 1 - iOSRenderExtraFrameOnPause: 0 - iosCopyPluginsCodeInsteadOfSymlink: 0 - appleDeveloperTeamID: - iOSManualSigningProvisioningProfileID: - tvOSManualSigningProvisioningProfileID: - iOSManualSigningProvisioningProfileType: 0 - tvOSManualSigningProvisioningProfileType: 0 - appleEnableAutomaticSigning: 0 - iOSRequireARKit: 0 - iOSAutomaticallyDetectAndAddCapabilities: 1 - appleEnableProMotion: 0 - shaderPrecisionModel: 0 - clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea - templatePackageId: com.unity.template.3d@8.1.0 - templateDefaultScene: Assets/Scenes/SampleScene.unity - useCustomMainManifest: 0 - useCustomLauncherManifest: 0 - useCustomMainGradleTemplate: 0 - useCustomLauncherGradleManifest: 0 - useCustomBaseGradleTemplate: 0 - useCustomGradlePropertiesTemplate: 0 - useCustomProguardFile: 0 - AndroidTargetArchitectures: 1 - AndroidTargetDevices: 0 - AndroidSplashScreenScale: 0 - androidSplashScreen: {fileID: 0} - AndroidKeystoreName: - AndroidKeyaliasName: - AndroidBuildApkPerCpuArchitecture: 0 - AndroidTVCompatibility: 0 - AndroidIsGame: 1 - AndroidEnableTango: 0 - androidEnableBanner: 1 - androidUseLowAccuracyLocation: 0 - androidUseCustomKeystore: 0 - m_AndroidBanners: - - width: 320 - height: 180 - banner: {fileID: 0} - androidGamepadSupportLevel: 0 - chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 - AndroidMinifyRelease: 0 - AndroidMinifyDebug: 0 - AndroidValidateAppBundleSize: 1 - AndroidAppBundleSizeToValidate: 150 - m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: - - m_BuildTarget: Standalone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: tvOS - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: Android - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: iPhone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: WebGL - m_StaticBatching: 0 - m_DynamicBatching: 0 - m_BuildTargetGraphicsJobs: - - m_BuildTarget: MacStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: Switch - m_GraphicsJobs: 1 - - m_BuildTarget: MetroSupport - m_GraphicsJobs: 1 - - m_BuildTarget: AppleTVSupport - m_GraphicsJobs: 0 - - m_BuildTarget: BJMSupport - m_GraphicsJobs: 1 - - m_BuildTarget: LinuxStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: PS4Player - m_GraphicsJobs: 1 - - m_BuildTarget: iOSSupport - m_GraphicsJobs: 0 - - m_BuildTarget: WindowsStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobs: 1 - - m_BuildTarget: LuminSupport - m_GraphicsJobs: 0 - - m_BuildTarget: AndroidPlayer - m_GraphicsJobs: 0 - - m_BuildTarget: WebGLSupport - m_GraphicsJobs: 0 - m_BuildTargetGraphicsJobMode: - - m_BuildTarget: PS4Player - m_GraphicsJobMode: 0 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobMode: 0 - m_BuildTargetGraphicsAPIs: - - m_BuildTarget: AndroidPlayer - m_APIs: 150000000b000000 - m_Automatic: 1 - - m_BuildTarget: iOSSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: AppleTVSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: WebGLSupport - m_APIs: 0b000000 - m_Automatic: 1 - m_BuildTargetVRSettings: - - m_BuildTarget: Standalone - m_Enabled: 0 - m_Devices: - - Oculus - - OpenVR - openGLRequireES31: 0 - openGLRequireES31AEP: 0 - openGLRequireES32: 0 - m_TemplateCustomTags: {} - mobileMTRendering: - Android: 1 - iPhone: 1 - tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: - - m_BuildTarget: Android - m_EncodingQuality: 1 - - m_BuildTarget: iPhone - m_EncodingQuality: 1 - - m_BuildTarget: tvOS - m_EncodingQuality: 1 - m_BuildTargetGroupLightmapSettings: [] - m_BuildTargetNormalMapEncoding: - - m_BuildTarget: Android - m_Encoding: 1 - - m_BuildTarget: iPhone - m_Encoding: 1 - - m_BuildTarget: tvOS - m_Encoding: 1 - m_BuildTargetDefaultTextureCompressionFormat: - - m_BuildTarget: Android - m_Format: 3 - playModeTestRunnerEnabled: 0 - runPlayModeTestAsEditModeTest: 0 - actionOnDotNetUnhandledException: 1 - enableInternalProfiler: 0 - logObjCUncaughtExceptions: 1 - enableCrashReportAPI: 0 - cameraUsageDescription: - locationUsageDescription: - microphoneUsageDescription: - bluetoothUsageDescription: - switchNMETAOverride: - switchNetLibKey: - switchSocketMemoryPoolSize: 6144 - switchSocketAllocatorPoolSize: 128 - switchSocketConcurrencyLimit: 14 - switchScreenResolutionBehavior: 2 - switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 - switchLTOSetting: 0 - switchApplicationID: 0x01004b9000490000 - switchNSODependencies: - switchTitleNames_0: - switchTitleNames_1: - switchTitleNames_2: - switchTitleNames_3: - switchTitleNames_4: - switchTitleNames_5: - switchTitleNames_6: - switchTitleNames_7: - switchTitleNames_8: - switchTitleNames_9: - switchTitleNames_10: - switchTitleNames_11: - switchTitleNames_12: - switchTitleNames_13: - switchTitleNames_14: - switchTitleNames_15: - switchPublisherNames_0: - switchPublisherNames_1: - switchPublisherNames_2: - switchPublisherNames_3: - switchPublisherNames_4: - switchPublisherNames_5: - switchPublisherNames_6: - switchPublisherNames_7: - switchPublisherNames_8: - switchPublisherNames_9: - switchPublisherNames_10: - switchPublisherNames_11: - switchPublisherNames_12: - switchPublisherNames_13: - switchPublisherNames_14: - switchPublisherNames_15: - switchIcons_0: {fileID: 0} - switchIcons_1: {fileID: 0} - switchIcons_2: {fileID: 0} - switchIcons_3: {fileID: 0} - switchIcons_4: {fileID: 0} - switchIcons_5: {fileID: 0} - switchIcons_6: {fileID: 0} - switchIcons_7: {fileID: 0} - switchIcons_8: {fileID: 0} - switchIcons_9: {fileID: 0} - switchIcons_10: {fileID: 0} - switchIcons_11: {fileID: 0} - switchIcons_12: {fileID: 0} - switchIcons_13: {fileID: 0} - switchIcons_14: {fileID: 0} - switchIcons_15: {fileID: 0} - switchSmallIcons_0: {fileID: 0} - switchSmallIcons_1: {fileID: 0} - switchSmallIcons_2: {fileID: 0} - switchSmallIcons_3: {fileID: 0} - switchSmallIcons_4: {fileID: 0} - switchSmallIcons_5: {fileID: 0} - switchSmallIcons_6: {fileID: 0} - switchSmallIcons_7: {fileID: 0} - switchSmallIcons_8: {fileID: 0} - switchSmallIcons_9: {fileID: 0} - switchSmallIcons_10: {fileID: 0} - switchSmallIcons_11: {fileID: 0} - switchSmallIcons_12: {fileID: 0} - switchSmallIcons_13: {fileID: 0} - switchSmallIcons_14: {fileID: 0} - switchSmallIcons_15: {fileID: 0} - switchManualHTML: - switchAccessibleURLs: - switchLegalInformation: - switchMainThreadStackSize: 1048576 - switchPresenceGroupId: - switchLogoHandling: 0 - switchReleaseVersion: 0 - switchDisplayVersion: 1.0.0 - switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 - switchSupportedLanguagesMask: 0 - switchLogoType: 0 - switchApplicationErrorCodeCategory: - switchUserAccountSaveDataSize: 0 - switchUserAccountSaveDataJournalSize: 0 - switchApplicationAttribute: 0 - switchCardSpecSize: -1 - switchCardSpecClock: -1 - switchRatingsMask: 0 - switchRatingsInt_0: 0 - switchRatingsInt_1: 0 - switchRatingsInt_2: 0 - switchRatingsInt_3: 0 - switchRatingsInt_4: 0 - switchRatingsInt_5: 0 - switchRatingsInt_6: 0 - switchRatingsInt_7: 0 - switchRatingsInt_8: 0 - switchRatingsInt_9: 0 - switchRatingsInt_10: 0 - switchRatingsInt_11: 0 - switchRatingsInt_12: 0 - switchLocalCommunicationIds_0: - switchLocalCommunicationIds_1: - switchLocalCommunicationIds_2: - switchLocalCommunicationIds_3: - switchLocalCommunicationIds_4: - switchLocalCommunicationIds_5: - switchLocalCommunicationIds_6: - switchLocalCommunicationIds_7: - switchParentalControl: 0 - switchAllowsScreenshot: 1 - switchAllowsVideoCapturing: 1 - switchAllowsRuntimeAddOnContentInstall: 0 - switchDataLossConfirmation: 0 - switchUserAccountLockEnabled: 0 - switchSystemResourceMemory: 16777216 - switchSupportedNpadStyles: 22 - switchNativeFsCacheSize: 32 - switchIsHoldTypeHorizontal: 0 - switchSupportedNpadCount: 8 - switchSocketConfigEnabled: 0 - switchTcpInitialSendBufferSize: 32 - switchTcpInitialReceiveBufferSize: 64 - switchTcpAutoSendBufferSizeMax: 256 - switchTcpAutoReceiveBufferSizeMax: 256 - switchUdpSendBufferSize: 9 - switchUdpReceiveBufferSize: 42 - switchSocketBufferEfficiency: 4 - switchSocketInitializeEnabled: 1 - switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 - switchUseNewStyleFilepaths: 0 - switchUseMicroSleepForYield: 1 - switchEnableRamDiskSupport: 0 - switchMicroSleepForYieldTime: 25 - switchRamDiskSpaceSize: 12 - ps4NPAgeRating: 12 - ps4NPTitleSecret: - ps4NPTrophyPackPath: - ps4ParentalLevel: 11 - ps4ContentID: ED1633-NPXX51362_00-0000000000000000 - ps4Category: 0 - ps4MasterVersion: 01.00 - ps4AppVersion: 01.00 - ps4AppType: 0 - ps4ParamSfxPath: - ps4VideoOutPixelFormat: 0 - ps4VideoOutInitialWidth: 1920 - ps4VideoOutBaseModeInitialWidth: 1920 - ps4VideoOutReprojectionRate: 60 - ps4PronunciationXMLPath: - ps4PronunciationSIGPath: - ps4BackgroundImagePath: - ps4StartupImagePath: - ps4StartupImagesFolder: - ps4IconImagesFolder: - ps4SaveDataImagePath: - ps4SdkOverride: - ps4BGMPath: - ps4ShareFilePath: - ps4ShareOverlayImagePath: - ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: - ps4NPtitleDatPath: - ps4RemotePlayKeyAssignment: -1 - ps4RemotePlayKeyMappingDir: - ps4PlayTogetherPlayerCount: 0 - ps4EnterButtonAssignment: 1 - ps4ApplicationParam1: 0 - ps4ApplicationParam2: 0 - ps4ApplicationParam3: 0 - ps4ApplicationParam4: 0 - ps4DownloadDataSize: 0 - ps4GarlicHeapSize: 2048 - ps4ProGarlicHeapSize: 2560 - playerPrefsMaxSize: 32768 - ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ - ps4pnSessions: 1 - ps4pnPresence: 1 - ps4pnFriends: 1 - ps4pnGameCustomData: 1 - playerPrefsSupport: 0 - enableApplicationExit: 0 - resetTempFolder: 1 - restrictedAudioUsageRights: 0 - ps4UseResolutionFallback: 0 - ps4ReprojectionSupport: 0 - ps4UseAudio3dBackend: 0 - ps4UseLowGarlicFragmentationMode: 1 - ps4SocialScreenEnabled: 0 - ps4ScriptOptimizationLevel: 0 - ps4Audio3dVirtualSpeakerCount: 14 - ps4attribCpuUsage: 0 - ps4PatchPkgPath: - ps4PatchLatestPkgPath: - ps4PatchChangeinfoPath: - ps4PatchDayOne: 0 - ps4attribUserManagement: 0 - ps4attribMoveSupport: 0 - ps4attrib3DSupport: 0 - ps4attribShareSupport: 0 - ps4attribExclusiveVR: 0 - ps4disableAutoHideSplash: 0 - ps4videoRecordingFeaturesUsed: 0 - ps4contentSearchFeaturesUsed: 0 - ps4CompatibilityPS5: 0 - ps4GPU800MHz: 1 - ps4attribEyeToEyeDistanceSettingVR: 0 - ps4IncludedModules: [] - ps4attribVROutputEnabled: 0 - monoEnv: - splashScreenBackgroundSourceLandscape: {fileID: 0} - splashScreenBackgroundSourcePortrait: {fileID: 0} - blurSplashScreenBackground: 1 - spritePackerPolicy: - webGLMemorySize: 16 - webGLExceptionSupport: 1 - webGLNameFilesAsHashes: 0 - webGLDataCaching: 1 - webGLDebugSymbols: 0 - webGLEmscriptenArgs: - webGLModulesDirectory: - webGLTemplate: APPLICATION:Default - webGLAnalyzeBuildSize: 0 - webGLUseEmbeddedResources: 0 - webGLCompressionFormat: 1 - webGLWasmArithmeticExceptions: 0 - webGLLinkerTarget: 1 - webGLThreadsSupport: 0 - webGLDecompressionFallback: 0 - scriptingDefineSymbols: {} - additionalCompilerArguments: {} - platformArchitecture: {} - scriptingBackend: {} - il2cppCompilerConfiguration: {} - managedStrippingLevel: {} - incrementalIl2cppBuild: {} - suppressCommonWarnings: 1 - allowUnsafeCode: 0 - useDeterministicCompilation: 1 - enableRoslynAnalyzers: 1 - additionalIl2CppArgs: - scriptingRuntimeVersion: 1 - gcIncremental: 1 - assemblyVersionValidation: 1 - gcWBarrierValidation: 0 - apiCompatibilityLevelPerPlatform: {} - m_RenderingPath: 1 - m_MobileRenderingPath: 1 - metroPackageName: Template_3D - metroPackageVersion: - metroCertificatePath: - metroCertificatePassword: - metroCertificateSubject: - metroCertificateIssuer: - metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_3D - wsaImages: {} - metroTileShortName: - metroTileShowName: 0 - metroMediumTileShowName: 0 - metroLargeTileShowName: 0 - metroWideTileShowName: 0 - metroSupportStreamingInstall: 0 - metroLastRequiredScene: 0 - metroDefaultTileSize: 1 - metroTileForegroundText: 2 - metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} - metroSplashScreenUseBackgroundColor: 0 - platformCapabilities: {} - metroTargetDeviceFamilies: {} - metroFTAName: - metroFTAFileTypes: [] - metroProtocolName: - vcxProjDefaultLanguage: - XboxOneProductId: - XboxOneUpdateKey: - XboxOneSandboxId: - XboxOneContentId: - XboxOneTitleId: - XboxOneSCId: - XboxOneGameOsOverridePath: - XboxOnePackagingOverridePath: - XboxOneAppManifestOverridePath: - XboxOneVersion: 1.0.0.0 - XboxOnePackageEncryption: 0 - XboxOnePackageUpdateGranularity: 2 - XboxOneDescription: - XboxOneLanguage: - - enus - XboxOneCapability: [] - XboxOneGameRating: {} - XboxOneIsContentPackage: 0 - XboxOneEnhancedXboxCompatibilityMode: 0 - XboxOneEnableGPUVariability: 1 - XboxOneSockets: {} - XboxOneSplashScreen: {fileID: 0} - XboxOneAllowedProductIds: [] - XboxOnePersistentLocalStorageSize: 0 - XboxOneXTitleMemory: 8 - XboxOneOverrideIdentityName: - XboxOneOverrideIdentityPublisher: - vrEditorSettings: {} - cloudServicesEnabled: - UNet: 1 - luminIcon: - m_Name: - m_ModelFolderPath: - m_PortalFolderPath: - luminCert: - m_CertPath: - m_SignPackage: 1 - luminIsChannelApp: 0 - luminVersion: - m_VersionCode: 1 - m_VersionName: - apiCompatibilityLevel: 6 - activeInputHandler: 0 - cloudProjectId: - framebufferDepthMemorylessMode: 0 - qualitySettingsNames: [] - projectName: - organizationId: - cloudEnabled: 0 - legacyClampBlendShapeWeights: 0 - playerDataPath: - forceSRGBBlit: 1 - virtualTexturingSupportEnabled: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/ProjectVersion.txt b/X10D.Unity.Tests/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index f8251a7..0000000 --- a/X10D.Unity.Tests/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -m_EditorVersion: 2021.3.22f1 -m_EditorVersionWithRevision: 2021.3.22f1 (b6c551784ba3) diff --git a/X10D.Unity.Tests/ProjectSettings/QualitySettings.asset b/X10D.Unity.Tests/ProjectSettings/QualitySettings.asset deleted file mode 100644 index 7b7658d..0000000 --- a/X10D.Unity.Tests/ProjectSettings/QualitySettings.asset +++ /dev/null @@ -1,232 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!47 &1 -QualitySettings: - m_ObjectHideFlags: 0 - serializedVersion: 5 - m_CurrentQuality: 5 - m_QualitySettings: - - serializedVersion: 2 - name: Very Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 15 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 1 - textureQuality: 1 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.3 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.4 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 16 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Medium - pixelLightCount: 1 - shadows: 1 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 1 - lodBias: 0.7 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 64 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: High - pixelLightCount: 2 - shadows: 2 - shadowResolution: 1 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 256 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Very High - pixelLightCount: 3 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 70 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1.5 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 1024 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Ultra - pixelLightCount: 4 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 4 - shadowDistance: 150 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 2 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4096 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Lumin: 5 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSP2: 2 - Stadia: 5 - Standalone: 5 - WebGL: 3 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 diff --git a/X10D.Unity.Tests/ProjectSettings/RiderScriptEditorPersistedState.asset b/X10D.Unity.Tests/ProjectSettings/RiderScriptEditorPersistedState.asset deleted file mode 100644 index 9f5ce87..0000000 --- a/X10D.Unity.Tests/ProjectSettings/RiderScriptEditorPersistedState.asset +++ /dev/null @@ -1,15 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &1 -MonoBehaviour: - m_ObjectHideFlags: 61 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 0} - m_Name: - m_EditorClassIdentifier: Unity.Rider.Editor:Packages.Rider.Editor:RiderScriptEditorPersistedState - lastWriteTicks: -8585496032972088364 diff --git a/X10D.Unity.Tests/ProjectSettings/SceneTemplateSettings.json b/X10D.Unity.Tests/ProjectSettings/SceneTemplateSettings.json deleted file mode 100644 index 6f3e60f..0000000 --- a/X10D.Unity.Tests/ProjectSettings/SceneTemplateSettings.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "templatePinStates": [], - "dependencyTypeInfos": [ - { - "userAdded": false, - "type": "UnityEngine.AnimationClip", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.Animations.AnimatorController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.AnimatorOverrideController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.Audio.AudioMixerController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.ComputeShader", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Cubemap", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.GameObject", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.LightingDataAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": false - }, - { - "userAdded": false, - "type": "UnityEngine.LightingSettings", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Material", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.MonoScript", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.PhysicMaterial", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.PhysicsMaterial2D", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.VolumeProfile", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.SceneAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": false - }, - { - "userAdded": false, - "type": "UnityEngine.Shader", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.ShaderVariantCollection", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Texture", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Texture2D", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Timeline.TimelineAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - } - ], - "defaultDependencyTypeInfo": { - "userAdded": false, - "type": "", - "ignore": false, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - "newSceneOverride": 0 -} \ No newline at end of file diff --git a/X10D.Unity.Tests/ProjectSettings/TagManager.asset b/X10D.Unity.Tests/ProjectSettings/TagManager.asset deleted file mode 100644 index 1c92a78..0000000 --- a/X10D.Unity.Tests/ProjectSettings/TagManager.asset +++ /dev/null @@ -1,43 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!78 &1 -TagManager: - serializedVersion: 2 - tags: [] - layers: - - Default - - TransparentFX - - Ignore Raycast - - - - Water - - UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m_SortingLayers: - - name: Default - uniqueID: 0 - locked: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/TimeManager.asset b/X10D.Unity.Tests/ProjectSettings/TimeManager.asset deleted file mode 100644 index 558a017..0000000 --- a/X10D.Unity.Tests/ProjectSettings/TimeManager.asset +++ /dev/null @@ -1,9 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!5 &1 -TimeManager: - m_ObjectHideFlags: 0 - Fixed Timestep: 0.02 - Maximum Allowed Timestep: 0.33333334 - m_TimeScale: 1 - Maximum Particle Timestep: 0.03 diff --git a/X10D.Unity.Tests/ProjectSettings/UnityConnectSettings.asset b/X10D.Unity.Tests/ProjectSettings/UnityConnectSettings.asset deleted file mode 100644 index 6125b30..0000000 --- a/X10D.Unity.Tests/ProjectSettings/UnityConnectSettings.asset +++ /dev/null @@ -1,35 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!310 &1 -UnityConnectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 1 - m_Enabled: 0 - m_TestMode: 0 - m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events - m_EventUrl: https://cdp.cloud.unity3d.com/v1/events - m_ConfigUrl: https://config.uca.cloud.unity3d.com - m_DashboardUrl: https://dashboard.unity3d.com - m_TestInitMode: 0 - CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com - m_Enabled: 0 - m_LogBufferSize: 10 - m_CaptureEditorExceptions: 1 - UnityPurchasingSettings: - m_Enabled: 0 - m_TestMode: 0 - UnityAnalyticsSettings: - m_Enabled: 0 - m_TestMode: 0 - m_InitializeOnStartup: 1 - UnityAdsSettings: - m_Enabled: 0 - m_InitializeOnStartup: 1 - m_TestMode: 0 - m_IosGameId: - m_AndroidGameId: - m_GameIds: {} - m_GameId: - PerformanceReportingSettings: - m_Enabled: 0 diff --git a/X10D.Unity.Tests/ProjectSettings/VFXManager.asset b/X10D.Unity.Tests/ProjectSettings/VFXManager.asset deleted file mode 100644 index 3a95c98..0000000 --- a/X10D.Unity.Tests/ProjectSettings/VFXManager.asset +++ /dev/null @@ -1,12 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!937362698 &1 -VFXManager: - m_ObjectHideFlags: 0 - m_IndirectShader: {fileID: 0} - m_CopyBufferShader: {fileID: 0} - m_SortShader: {fileID: 0} - m_StripUpdateShader: {fileID: 0} - m_RenderPipeSettingsPath: - m_FixedTimeStep: 0.016666668 - m_MaxDeltaTime: 0.05 diff --git a/X10D.Unity.Tests/ProjectSettings/VersionControlSettings.asset b/X10D.Unity.Tests/ProjectSettings/VersionControlSettings.asset deleted file mode 100644 index dca2881..0000000 --- a/X10D.Unity.Tests/ProjectSettings/VersionControlSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!890905787 &1 -VersionControlSettings: - m_ObjectHideFlags: 0 - m_Mode: Visible Meta Files - m_CollabEditorSettings: - inProgressEnabled: 1 diff --git a/X10D.Unity.Tests/ProjectSettings/XRSettings.asset b/X10D.Unity.Tests/ProjectSettings/XRSettings.asset deleted file mode 100644 index 482590c..0000000 --- a/X10D.Unity.Tests/ProjectSettings/XRSettings.asset +++ /dev/null @@ -1,10 +0,0 @@ -{ - "m_SettingKeys": [ - "VR Device Disabled", - "VR Device User Alert" - ], - "m_SettingValues": [ - "False", - "False" - ] -} \ No newline at end of file diff --git a/X10D.Unity.Tests/ProjectSettings/boot.config b/X10D.Unity.Tests/ProjectSettings/boot.config deleted file mode 100644 index e69de29..0000000 diff --git a/X10D.Unity/README.md b/X10D.Unity/README.md deleted file mode 100644 index 105de43..0000000 --- a/X10D.Unity/README.md +++ /dev/null @@ -1,36 +0,0 @@ -

-

-GitHub Workflow Status - -MIT License -

- -### About -X10D (pronounced *extend*), is a .NET package that provides extension methods for numerous types. The purpose of this library is to simplify a codebase by reducing the need for repeated code when performing common operations. Simplify your codebase. Take advantage of .NET. Use extension methods. - -*(I'm also [dogfooding](https://www.pcmag.com/encyclopedia/term/dogfooding) this library, so there's that.)* - - -### Preface -Parity with the main branch of X10D, and full .NET feature support, is planned. Unity plan to add CoreCLR and native NuGet support in the future, but no timeline is available. -For more information, see [this forum post](https://forum.unity.com/threads/unity-future-net-development-status.1092205/). - -## Installation -You must be using Unity 2021.3 LTS or later to add this package. -### Using the Unity Package Manager (UPM) -To install X10D in Unity, follow the steps blow: -1. Navigate to the [Package Manager window](https://docs.unity3d.com/Manual/upm-ui.html), under `Window > Package Manager` -2. Hit the `+` icon and select `Add package from git URL...` -3. Enter the following URL: https://github.com/oliverbooth/X10D.git#upm and hit the Add button -4. Profit! - -The [upm](https://github.com/oliverbooth/X10D/tree/upm) branch contains the latest nightly - that is the bleeding edge version of X10D. -If you'd like to remain on a stable release, specify a commit hash after the `#` instead of `upm`. -The latest current stable is 3.3.1, which is commit [0bb35bb565fff170a3848acdffbb5d53087de64b](https://github.com/oliverbooth/X10D/commit/0bb35bb565fff170a3848acdffbb5d53087de64b). -Keep in mind that referencing a specific commit rather than the `upm` branch will prevent the auto-updater in Unity from detecting new versions. - -## Contributing -Contributions are welcome. See [CONTRIBUTING.md](../CONTRIBUTING.md). - -## License -X10D is released under the MIT License. See [here](https://github.com/oliverbooth/X10D/blob/main/LICENSE.md) for more details. diff --git a/X10D.Unity/X10D.Unity.csproj b/X10D.Unity/X10D.Unity.csproj deleted file mode 100644 index e1ac766..0000000 --- a/X10D.Unity/X10D.Unity.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - netstandard2.1 - $(NoWarn);NU1701 - - - - - - - - - - - - - ResXFileCodeGenerator - ExceptionMessages.Designer.cs - - - - - - True - True - ExceptionMessages.resx - - - - diff --git a/X10D.Unity/X10D.Unity.csproj.DotSettings b/X10D.Unity/X10D.Unity.csproj.DotSettings deleted file mode 100644 index cc2d8d0..0000000 --- a/X10D.Unity/X10D.Unity.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/X10D.Unity/branding_Unity.png b/X10D.Unity/branding_Unity.png deleted file mode 100644 index c46d202..0000000 Binary files a/X10D.Unity/branding_Unity.png and /dev/null differ diff --git a/X10D.Unity/src/Assembly.cs b/X10D.Unity/src/Assembly.cs deleted file mode 100644 index 4e11466..0000000 --- a/X10D.Unity/src/Assembly.cs +++ /dev/null @@ -1 +0,0 @@ -[assembly: CLSCompliant(false)] diff --git a/X10D.Unity/src/ComponentExtensions.cs b/X10D.Unity/src/ComponentExtensions.cs deleted file mode 100644 index 01d0a27..0000000 --- a/X10D.Unity/src/ComponentExtensions.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Extension methods for . -/// -public static class ComponentExtensions -{ - /// - /// Returns an array of components of the specified type, excluding components that live on the object to which this - /// component is attached. - /// - /// The component whose child components to retrieve. - /// The type of the components to retrieve. - /// An array representing the child components. - /// is . - public static T[] GetComponentsInChildrenOnly(this Component component) - { - if (component == null) - { - throw new ArgumentNullException(nameof(component)); - } - - return component.gameObject.GetComponentsInChildrenOnly(); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Circle.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Circle.cs deleted file mode 100644 index e5c6cb4..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Circle.cs +++ /dev/null @@ -1,333 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Numerics; -using X10D.Unity.Numerics; -using Quaternion = System.Numerics.Quaternion; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a circle with the specified color. - /// - /// The center point of the circle. - /// The radius of the circle. - /// The number of segments to generate. - public static void DrawCircle(Vector2 center, float radius, int segments) - { - DrawCircle(center, radius, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The center point of the circle. - /// The radius of the circle. - /// The number of segments to generate. - /// The color of the circle. - public static void DrawCircle(Vector2 center, float radius, int segments, in Color color) - { - DrawCircle(center, radius, segments, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The center point of the circle. - /// The radius of the circle. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - public static void DrawCircle(Vector2 center, float radius, int segments, in Color color, float duration) - { - DrawCircle(center, radius, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The center point of the circle. - /// The radius of the circle. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(Vector2 center, float radius, int segments, in Color color, float duration, bool depthTest) - { - DrawCircle(center, radius, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a circle. - /// - /// The center point of the circle. - /// The radius of the circle. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(Vector2 center, float radius, int segments, in Vector3 offset, in Color color, float duration, - bool depthTest) - { - DrawCircle(new CircleF(center.ToSystemVector(), radius), segments, offset, color, duration, depthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - public static void DrawCircle(in Circle circle, int segments) - { - DrawCircle((CircleF)circle, segments, Vector2.zero, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - public static void DrawCircle(in Circle circle, int segments, in Vector3 offset) - { - DrawCircle((CircleF)circle, segments, offset, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - public static void DrawCircle(in Circle circle, int segments, in Color color) - { - DrawCircle((CircleF)circle, segments, Vector2.zero, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - public static void DrawCircle(in Circle circle, int segments, in Vector3 offset, in Color color) - { - DrawCircle((CircleF)circle, segments, offset, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - public static void DrawCircle(in Circle circle, int segments, in Color color, float duration) - { - DrawCircle((CircleF)circle, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - public static void DrawCircle(in Circle circle, int segments, in Vector3 offset, in Color color, float duration) - { - DrawCircle((CircleF)circle, segments, offset, color, duration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(in Circle circle, int segments, in Color color, float duration, bool depthTest) - { - DrawCircle((CircleF)circle, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a circle. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(in Circle circle, int segments, in Vector3 offset, in Color color, float duration, - bool depthTest) - { - DrawCircle((CircleF)circle, segments, offset, color, duration, depthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - public static void DrawCircle(in CircleF circle, int segments) - { - DrawCircle(circle, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - public static void DrawCircle(in CircleF circle, int segments, in Vector3 offset) - { - DrawCircle(circle, segments, offset, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - public static void DrawCircle(in CircleF circle, int segments, in Color color) - { - DrawCircle(circle, segments, Vector2.zero, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - public static void DrawCircle(in CircleF circle, int segments, in Vector3 offset, in Color color) - { - DrawCircle(circle, segments, offset, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - public static void DrawCircle(in CircleF circle, int segments, in Color color, float duration) - { - DrawCircle(circle, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - public static void DrawCircle(in CircleF circle, int segments, in Vector3 offset, in Color color, float duration) - { - DrawCircle(circle, segments, offset, color, duration, DefaultDepthTest); - } - - /// - /// Draws a circle with the specified color and duration. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(in CircleF circle, int segments, in Color color, float duration, bool depthTest) - { - DrawCircle(circle, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a circle. - /// - /// The circle to draw. - /// The number of segments to generate. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - public static void DrawCircle(in CircleF circle, int segments, in Vector3 offset, in Color color, float duration, - bool depthTest) - { - DrawPolyhedron(CreateCircle(circle.Radius, segments, Vector3.zero), offset, color, duration, depthTest); - } - - private static Polyhedron CreateCircle(float radius, int segments, in Vector3 axis) - { - const float max = 2.0f * MathF.PI; - float step = max / segments; - - var points = new List(); - for (var theta = 0f; theta < max; theta += step) - { - float x = radius * MathF.Cos(theta); - float y = radius * MathF.Sin(theta); - var vector = new System.Numerics.Vector3(x, y, 0); - - if (axis != Vector3.zero) - { - vector = Quaternion.CreateFromAxisAngle(axis.ToSystemVector(), MathF.PI / 2.0f).Multiply(vector); - } - - points.Add(vector); - } - - return new Polyhedron(points); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Ellipse.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Ellipse.cs deleted file mode 100644 index a4994f6..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Ellipse.cs +++ /dev/null @@ -1,406 +0,0 @@ -using UnityEngine; -using X10D.Drawing; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws an ellipse with the specified color. - /// - /// The center point of the ellipse. - /// The radius of the ellipse. - /// The number of segments to generate. - public static void DrawEllipse(Vector2 center, Vector2 radius, int segments) - { - DrawEllipse(center, radius.x, radius.y, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The center point of the ellipse. - /// The radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - public static void DrawEllipse(Vector2 center, Vector2 radius, int segments, in Color color) - { - DrawEllipse(center, radius.x, radius.y, segments, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The center point of the ellipse. - /// The radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(Vector2 center, Vector2 radius, int segments, in Color color, float duration) - { - DrawEllipse(center, radius.x, radius.y, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The center point of the ellipse. - /// The radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Vector2 center, Vector2 radius, int segments, in Color color, float duration, bool depthTest) - { - DrawEllipse(center, radius.x, radius.y, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws an ellipse. - /// - /// The center point of the ellipse. - /// The radius of the ellipse. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Vector2 center, Vector2 radius, int segments, Vector2 offset, in Color color, float duration, - bool depthTest) - { - DrawEllipse(new EllipseF(center.x, center.y, radius.x, radius.y), segments, offset, color, duration, depthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The center point of the ellipse. - /// The horizontal radius of the ellipse. - /// The vertical radius of the ellipse. - /// The number of segments to generate. - public static void DrawEllipse(Vector2 center, float radiusX, float radiusY, int segments) - { - DrawEllipse(center, radiusX, radiusY, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The center point of the ellipse. - /// The horizontal radius of the ellipse. - /// The vertical radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - public static void DrawEllipse(Vector2 center, float radiusX, float radiusY, int segments, in Color color) - { - DrawEllipse(center, radiusX, radiusY, segments, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The center point of the ellipse. - /// The horizontal radius of the ellipse. - /// The vertical radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(Vector2 center, float radiusX, float radiusY, int segments, in Color color, float duration) - { - DrawEllipse(center, radiusX, radiusY, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The center point of the ellipse. - /// The horizontal radius of the ellipse. - /// The vertical radius of the ellipse. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Vector2 center, float radiusX, float radiusY, int segments, in Color color, float duration, - bool depthTest) - { - DrawEllipse(center, radiusX, radiusY, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws an ellipse. - /// - /// The center point of the ellipse. - /// The horizontal radius of the ellipse. - /// The vertical radius of the ellipse. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Vector2 center, float radiusX, float radiusY, int segments, Vector2 offset, in Color color, - float duration, bool depthTest) - { - DrawEllipse(new EllipseF(center.x, center.y, radiusX, radiusY), segments, offset, color, duration, depthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - public static void DrawEllipse(Ellipse ellipse, int segments) - { - DrawEllipse((EllipseF)ellipse, segments, Vector2.zero, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - public static void DrawEllipse(Ellipse ellipse, int segments, Vector2 offset) - { - DrawEllipse((EllipseF)ellipse, segments, offset, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - public static void DrawEllipse(Ellipse ellipse, int segments, in Color color) - { - DrawEllipse((EllipseF)ellipse, segments, Vector2.zero, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - public static void DrawEllipse(Ellipse ellipse, int segments, Vector2 offset, in Color color) - { - DrawEllipse((EllipseF)ellipse, segments, offset, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(Ellipse ellipse, int segments, in Color color, float duration) - { - DrawEllipse((EllipseF)ellipse, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(Ellipse ellipse, int segments, Vector2 offset, in Color color, float duration) - { - DrawEllipse((EllipseF)ellipse, segments, offset, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Ellipse ellipse, int segments, in Color color, float duration, bool depthTest) - { - DrawEllipse((EllipseF)ellipse, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws an ellipse. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(Ellipse ellipse, int segments, Vector2 offset, in Color color, float duration, bool depthTest) - { - DrawEllipse((EllipseF)ellipse, segments, offset, color, duration, depthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - public static void DrawEllipse(EllipseF ellipse, int segments) - { - DrawEllipse(ellipse, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - public static void DrawEllipse(EllipseF ellipse, int segments, Vector2 offset) - { - DrawEllipse(ellipse, segments, offset, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - public static void DrawEllipse(EllipseF ellipse, int segments, in Color color) - { - DrawEllipse(ellipse, segments, Vector2.zero, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - public static void DrawEllipse(EllipseF ellipse, int segments, Vector2 offset, in Color color) - { - DrawEllipse(ellipse, segments, offset, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(EllipseF ellipse, int segments, in Color color, float duration) - { - DrawEllipse(ellipse, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - public static void DrawEllipse(EllipseF ellipse, int segments, Vector2 offset, in Color color, float duration) - { - DrawEllipse(ellipse, segments, offset, color, duration, DefaultDepthTest); - } - - /// - /// Draws an ellipse with the specified color and duration. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(EllipseF ellipse, int segments, in Color color, float duration, bool depthTest) - { - DrawEllipse(ellipse, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws an ellipse. - /// - /// The ellipse to draw. - /// The number of segments to generate. - /// The drawing offset of the ellipse. - /// The color of the ellipse. - /// - /// The duration of the ellipse's visibility, in seconds. If 0 is passed, the ellipse is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the ellipse be obscured by objects closer to the camera. - /// - public static void DrawEllipse(EllipseF ellipse, int segments, Vector2 offset, in Color color, float duration, bool depthTest) - { - DrawPolygon(CreateEllipse(ellipse.HorizontalRadius, ellipse.VerticalRadius, segments), offset, color, duration, - depthTest); - } - - private static PolygonF CreateEllipse(float radiusX, float radiusY, int segments) - { - const float max = 2.0f * MathF.PI; - float step = max / segments; - - var points = new List(); - for (var theta = 0f; theta < max; theta += step) - { - float x = radiusX * MathF.Cos(theta); - float y = radiusY * MathF.Sin(theta); - points.Add(new System.Numerics.Vector2(x, y)); - } - - return new PolygonF(points); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Function.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Function.cs deleted file mode 100644 index 4b7f33c..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Function.cs +++ /dev/null @@ -1,69 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Numerics; -using X10D.Unity.Numerics; -using Quaternion = System.Numerics.Quaternion; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a function plot. - /// - /// The function to plot. - /// The minimum X value. - /// The maximum X value. - public static void DrawFunction(Func function, float xMin, float xMax) - { - DrawFunction(function, xMin, xMax, 0.1f, Vector3.zero, Color.white, 0.0f, false); - } - - /// - /// Draws a function plot. - /// - /// The function to plot. - /// The minimum X value. - /// The maximum X value. - /// The X increment. - /// The drawing offset of the circle. - /// The color of the circle. - /// - /// The duration of the circle's visibility, in seconds. If 0 is passed, the circle is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the circle be obscured by objects closer to the camera. - /// - /// is . - public static void DrawFunction(Func function, float xMin, float xMax, float step, in Vector3 offset, - in Color color, float duration, - bool depthTest) - { - if (function is null) - { - throw new ArgumentNullException(nameof(function)); - } - - DrawUnjoinedPolyhedron(CreateFunction(function, xMin, xMax, step, Vector3.zero), offset, color, duration, depthTest); - } - - private static Polyhedron CreateFunction(Func function, float xMin, float xMax, float step, in Vector3 axis) - { - var points = new List(); - for (float x = xMin; x < xMax; x += step) - { - float y = function(x); - var vector = new System.Numerics.Vector3(x, y, 0); - - if (axis != Vector3.zero) - { - vector = Quaternion.CreateFromAxisAngle(axis.ToSystemVector(), MathF.PI / 2.0f).Multiply(vector); - } - - points.Add(vector); - } - - return new Polyhedron(points); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Line.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Line.cs deleted file mode 100644 index 1439724..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Line.cs +++ /dev/null @@ -1,209 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a line between start and end points. - /// - /// The starting point. - /// The ending point. - public static void DrawLine(Vector3 start, Vector3 end) - { - DrawLine(start, end, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The starting point. - /// The ending point. - /// The color of the line. - public static void DrawLine(Vector3 start, Vector3 end, in Color color) - { - DrawLine(start, end, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The starting point. - /// The ending point. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawLine(Vector3 start, Vector3 end, in Color color, float duration) - { - DrawLine(start, end, color, duration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The starting point. - /// The ending point. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawLine(Vector3 start, Vector3 end, in Color color, float duration, bool depthTest) - { - Debug.DrawLine(start, end, color, duration, depthTest); - } - - /// - /// Draws a line between start and end points. - /// - /// The line to draw. - public static void DrawLine(Line line) - { - DrawLine(line, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - public static void DrawLine(Line line, in Color color) - { - DrawLine(line, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawLine(Line line, in Color color, float duration) - { - DrawLine(line, color, duration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawLine(Line line, in Color color, float duration, bool depthTest) - { - Debug.DrawLine(line.Start.ToUnityVector2(), line.End.ToUnityVector2(), color, duration, depthTest); - } - - /// - /// Draws a line between start and end points. - /// - /// The line to draw. - public static void DrawLine(LineF line) - { - DrawLine(line, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - public static void DrawLine(LineF line, in Color color) - { - DrawLine(line, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawLine(LineF line, in Color color, float duration) - { - DrawLine(line, color, duration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawLine(LineF line, in Color color, float duration, bool depthTest) - { - Debug.DrawLine(line.Start.ToUnityVector2(), line.End.ToUnityVector2(), color, duration, depthTest); - } - - /// - /// Draws a line between start and end points. - /// - /// The line to draw. - public static void DrawLine(Line3D line) - { - DrawLine(line, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - public static void DrawLine(Line3D line, in Color color) - { - DrawLine(line, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawLine(Line3D line, in Color color, float duration) - { - DrawLine(line, color, duration, DefaultDepthTest); - } - - /// - /// Draws a line between start and end points, with the specified color. - /// - /// The line to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawLine(Line3D line, in Color color, float duration, bool depthTest) - { - Debug.DrawLine(line.Start.ToUnityVector(), line.End.ToUnityVector(), color, duration, depthTest); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Polygon.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Polygon.cs deleted file mode 100644 index 1e0fa9f..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Polygon.cs +++ /dev/null @@ -1,232 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Drawing; -using PointF = System.Drawing.PointF; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a polygon. - /// - /// The polygon to draw. - public static void DrawPolygon(Polygon polygon) - { - DrawPolygon((PolygonF)polygon, Vector2.zero, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - public static void DrawPolygon(Polygon polygon, in Vector3 offset) - { - DrawPolygon((PolygonF)polygon, offset, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - public static void DrawPolygon(Polygon polygon, in Color color) - { - DrawPolygon((PolygonF)polygon, Vector2.zero, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - public static void DrawPolygon(Polygon polygon, in Vector3 offset, in Color color) - { - DrawPolygon((PolygonF)polygon, offset, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - public static void DrawPolygon(Polygon polygon, in Color color, float duration) - { - DrawPolygon((PolygonF)polygon, Vector2.zero, color, duration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - public static void DrawPolygon(Polygon polygon, in Vector3 offset, in Color color, float duration) - { - DrawPolygon((PolygonF)polygon, offset, color, duration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawPolygon(Polygon polygon, in Color color, float duration, bool depthTest) - { - DrawPolygon((PolygonF)polygon, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawPolygon(Polygon polygon, in Vector3 offset, in Color color, float duration, bool depthTest) - { - DrawPolygon((PolygonF)polygon, offset, color, duration, depthTest); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - public static void DrawPolygon(PolygonF polygon) - { - DrawPolygon(polygon, Vector2.zero, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - public static void DrawPolygon(PolygonF polygon, in Vector3 offset) - { - DrawPolygon(polygon, offset, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - public static void DrawPolygon(PolygonF polygon, in Color color) - { - DrawPolygon(polygon, Vector2.zero, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - public static void DrawPolygon(PolygonF polygon, in Vector3 offset, in Color color) - { - DrawPolygon(polygon, offset, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - public static void DrawPolygon(PolygonF polygon, in Color color, float duration) - { - DrawPolygon(polygon, Vector2.zero, color, duration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - public static void DrawPolygon(PolygonF polygon, in Vector3 offset, in Color color, float duration) - { - DrawPolygon(polygon, offset, color, duration, true); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawPolygon(PolygonF polygon, in Color color, float duration, bool depthTest) - { - DrawPolygon(polygon, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a polygon. - /// - /// The polygon to draw. - /// The drawing offset of the polygon. - /// The color to use for drawing. - /// - /// The duration of the polygon's visibility, in seconds. If 0 is passed, the polygon is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - /// is . - public static void DrawPolygon(PolygonF polygon, in Vector3 offset, in Color color, float duration, bool depthTest) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - IReadOnlyList points = polygon.Vertices; - if (points.Count < 2) - { - return; - } - - for (var i = 0; i < points.Count; i++) - { - int j = (i + 1) % points.Count; - Vector3 start = (Vector3)points[i].ToUnityVector2() + offset; - Vector3 end = (Vector3)points[j].ToUnityVector2() + offset; - - DrawLine(start, end, color, duration, depthTest); - } - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Polyhedron.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Polyhedron.cs deleted file mode 100644 index 205dfff..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Polyhedron.cs +++ /dev/null @@ -1,172 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - public static void DrawPolyhedron(Polyhedron polyhedron) - { - DrawPolyhedron(polyhedron, Vector2.zero, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The drawing offset of the polyhedron. - public static void DrawPolyhedron(Polyhedron polyhedron, in Vector3 offset) - { - DrawPolyhedron(polyhedron, offset, Color.white, DefaultDrawDuration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The color to use for drawing. - public static void DrawPolyhedron(Polyhedron polyhedron, in Color color) - { - DrawPolyhedron(polyhedron, Vector2.zero, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The drawing offset of the polyhedron. - /// The color to use for drawing. - public static void DrawPolyhedron(Polyhedron polyhedron, in Vector3 offset, in Color color) - { - DrawPolyhedron(polyhedron, offset, color, DefaultDrawDuration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The color to use for drawing. - /// - /// The duration of the polyhedron's visibility, in seconds. If 0 is passed, the polyhedron is visible for a single frame. - /// - public static void DrawPolyhedron(Polyhedron polyhedron, in Color color, float duration) - { - DrawPolyhedron(polyhedron, Vector2.zero, color, duration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The drawing offset of the polyhedron. - /// The color to use for drawing. - /// - /// The duration of the polyhedron's visibility, in seconds. If 0 is passed, the polyhedron is visible for a single frame. - /// - public static void DrawPolyhedron(Polyhedron polyhedron, in Vector3 offset, in Color color, float duration) - { - DrawPolyhedron(polyhedron, offset, color, duration, true); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The color to use for drawing. - /// - /// The duration of the polyhedron's visibility, in seconds. If 0 is passed, the polyhedron is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawPolyhedron(Polyhedron polyhedron, in Color color, float duration, bool depthTest) - { - DrawPolyhedron(polyhedron, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The drawing offset of the polyhedron. - /// The color to use for drawing. - /// - /// The duration of the polyhedron's visibility, in seconds. If 0 is passed, the polyhedron is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - /// is . - public static void DrawPolyhedron(Polyhedron polyhedron, in Vector3 offset, in Color color, float duration, bool depthTest) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - IReadOnlyList points = polyhedron.Vertices; - if (points.Count < 2) - { - return; - } - - for (var i = 0; i < points.Count; i++) - { - int j = (i + 1) % points.Count; - Vector3 start = points[i].ToUnityVector() + offset; - Vector3 end = points[j].ToUnityVector() + offset; - - DrawLine(start, end, color, duration, depthTest); - } - } - - /// - /// Draws a polyhedron. - /// - /// The polyhedron to draw. - /// The drawing offset of the polyhedron. - /// The color to use for drawing. - /// - /// The duration of the polyhedron's visibility, in seconds. If 0 is passed, the polyhedron is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - /// is . - public static void DrawUnjoinedPolyhedron(Polyhedron polyhedron, in Vector3 offset, in Color color, float duration, - bool depthTest) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - IReadOnlyList points = polyhedron.Vertices; - if (points.Count < 2) - { - return; - } - - for (var i = 0; i < points.Count; i++) - { - if (i >= points.Count - 2) - { - break; - } - - int j = i + 1; - Vector3 start = points[i].ToUnityVector() + offset; - Vector3 end = points[j].ToUnityVector() + offset; - - DrawLine(start, end, color, duration, depthTest); - } - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Ray.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Ray.cs deleted file mode 100644 index 475a80c..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Ray.cs +++ /dev/null @@ -1,108 +0,0 @@ -using UnityEngine; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a ray. - /// - /// The ray to draw. - public static void DrawRay(Ray ray) - { - DrawRay(ray, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The ray to draw. - /// The color of the line. - public static void DrawRay(Ray ray, in Color color) - { - DrawRay(ray, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The ray to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawRay(Ray ray, in Color color, float duration) - { - DrawRay(ray, color, duration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The ray to draw. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawRay(Ray ray, in Color color, float duration, bool depthTest) - { - Debug.DrawRay(ray.origin, ray.direction, color, duration, depthTest); - } - - /// - /// Draws a ray. - /// - /// The starting point. - /// The direction. - public static void DrawRay(Vector3 start, Vector3 direction) - { - DrawRay(start, direction, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The starting point. - /// The direction. - /// The color of the line. - public static void DrawRay(Vector3 start, Vector3 direction, in Color color) - { - DrawRay(start, direction, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The starting point. - /// The direction. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - public static void DrawRay(Vector3 start, Vector3 direction, in Color color, float duration) - { - DrawRay(start, direction, color, duration, DefaultDepthTest); - } - - /// - /// Draws a ray. - /// - /// The starting point. - /// The direction. - /// The color of the line. - /// - /// The duration of the line's visibility, in seconds. If 0 is passed, the line is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the line be obscured by objects closer to the camera. - /// - public static void DrawRay(Vector3 start, Vector3 direction, in Color color, float duration, bool depthTest) - { - Debug.DrawRay(start, direction, color, duration, depthTest); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Rectangle.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Rectangle.cs deleted file mode 100644 index e8377d5..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Rectangle.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System.Drawing; -using UnityEngine; -using X10D.Unity.Drawing; -using Color = UnityEngine.Color; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a rectangle. - /// - /// The center point. - /// The extents of the box. - public static void DrawRectangle(Vector2 center, Vector2 size) - { - DrawRectangle(center, size, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - public static void DrawRectangle(Vector2 center, Vector2 size, in Color color) - { - DrawRectangle(center, size, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawRectangle(Vector2 center, Vector2 size, in Color color, float duration) - { - DrawRectangle(center, size, color, duration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawRectangle(Vector2 center, Vector2 size, in Color color, float duration, bool depthTest) - { - DrawRectangle(new Rect(center, size), color, duration, depthTest); - } - - /// - /// Draws a rectangle with the specified color. - /// - /// The rectangle to draw. - /// The color of the box. - public static void DrawRectangle(Rect rect, in Color color) - { - DrawRectangle(rect, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawRectangle(Rect rect, in Color color, float duration) - { - DrawRectangle(rect, color, duration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawRectangle(Rect rect, in Color color, float duration, bool depthTest) - { - var topLeft = new Vector2(rect.xMin, rect.yMin); - var topRight = new Vector2(rect.xMax, rect.yMin); - var bottomLeft = new Vector2(rect.xMin, rect.yMax); - var bottomRight = new Vector2(rect.xMax, rect.yMax); - - DrawLine(topLeft, topRight, color, duration, depthTest); - DrawLine(topRight, bottomRight, color, duration, depthTest); - DrawLine(bottomRight, bottomLeft, color, duration, depthTest); - DrawLine(bottomLeft, topLeft, color, duration, depthTest); - } - - /// - /// Draws a rectangle with the specified color. - /// - /// The rectangle to draw. - /// The color of the box. - public static void DrawRectangle(RectInt rect, in Color color) - { - DrawRectangle(rect, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawRectangle(RectInt rect, in Color color, float duration) - { - DrawRectangle(rect, color, duration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawRectangle(RectInt rect, in Color color, float duration, bool depthTest) - { - DrawRectangle(new Rect(rect.center, rect.size), color, duration, depthTest); - } - - /// - /// Draws a rectangle with the specified color. - /// - /// The rectangle to draw. - /// The color of the box. - public static void DrawRectangle(Rectangle rectangle, in Color color) - { - DrawRectangle(rectangle, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawRectangle(Rectangle rectangle, in Color color, float duration) - { - DrawRectangle(rectangle, color, duration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawRectangle(Rectangle rectangle, in Color color, float duration, bool depthTest) - { - var origin = new Vector2(rectangle.X + rectangle.Width / 2.0f, rectangle.Y + rectangle.Height / 2.0f); - var rect = new Rect(origin, rectangle.Size.ToUnityVector2()); - DrawRectangle(rect, color, duration, depthTest); - } - - /// - /// Draws a rectangle with the specified color. - /// - /// The rectangle to draw. - /// The color of the box. - public static void DrawRectangle(RectangleF rectangle, in Color color) - { - DrawRectangle(rectangle, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawRectangle(RectangleF rectangle, in Color color, float duration) - { - DrawRectangle(rectangle, color, duration, DefaultDepthTest); - } - - /// - /// Draws a rectangle with the specified color and duration. - /// - /// The rectangle to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawRectangle(RectangleF rectangle, in Color color, float duration, bool depthTest) - { - var origin = new Vector2(rectangle.X + rectangle.Width / 2.0f, rectangle.Y + rectangle.Height / 2.0f); - var rect = new Rect(origin, rectangle.Size.ToUnityVector2()); - DrawRectangle(rect, color, duration, depthTest); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.Sphere.cs b/X10D.Unity/src/DebugUtility/DebugUtility.Sphere.cs deleted file mode 100644 index 1f75c0e..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.Sphere.cs +++ /dev/null @@ -1,198 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws a sphere with the specified color. - /// - /// The center point of the sphere. - /// The radius of the sphere. - /// The number of segments to generate. - public static void DrawSphere(Vector3 center, float radius, int segments) - { - DrawSphere(center, radius, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color. - /// - /// The center point of the sphere. - /// The radius of the sphere. - /// The number of segments to generate. - /// The color of the sphere. - public static void DrawSphere(Vector3 center, float radius, int segments, in Color color) - { - DrawSphere(center, radius, segments, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color and duration. - /// - /// The center point of the sphere. - /// The radius of the sphere. - /// The number of segments to generate. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - public static void DrawSphere(Vector3 center, float radius, int segments, in Color color, float duration) - { - DrawSphere(center, radius, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color and duration. - /// - /// The center point of the sphere. - /// The radius of the sphere. - /// The number of segments to generate. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the sphere be obscured by objects closer to the camera. - /// - public static void DrawSphere(Vector3 center, float radius, int segments, in Color color, float duration, bool depthTest) - { - DrawSphere(center, radius, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a sphere. - /// - /// The center point of the sphere. - /// The radius of the sphere. - /// The number of segments to generate. - /// The drawing offset of the sphere. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the sphere be obscured by objects closer to the camera. - /// - public static void DrawSphere(Vector3 center, float radius, int segments, Vector2 offset, in Color color, float duration, - bool depthTest) - { - DrawSphere(new Sphere(center.ToSystemVector(), radius), segments, offset, color, duration, depthTest); - } - - /// - /// Draws a sphere with the specified color. - /// - /// The sphere to draw. - /// The number of segments to generate. - public static void DrawSphere(Sphere sphere, int segments) - { - DrawSphere(sphere, segments, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The drawing offset of the sphere. - public static void DrawSphere(Sphere sphere, int segments, Vector2 offset) - { - DrawSphere(sphere, segments, offset, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The color of the sphere. - public static void DrawSphere(Sphere sphere, int segments, in Color color) - { - DrawSphere(sphere, segments, Vector2.zero, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The drawing offset of the sphere. - /// The color of the sphere. - public static void DrawSphere(Sphere sphere, int segments, Vector2 offset, in Color color) - { - DrawSphere(sphere, segments, offset, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color and duration. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - public static void DrawSphere(Sphere sphere, int segments, in Color color, float duration) - { - DrawSphere(sphere, segments, Vector2.zero, color, duration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color and duration. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The drawing offset of the sphere. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - public static void DrawSphere(Sphere sphere, int segments, Vector2 offset, in Color color, float duration) - { - DrawSphere(sphere, segments, offset, color, duration, DefaultDepthTest); - } - - /// - /// Draws a sphere with the specified color and duration. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the sphere be obscured by objects closer to the camera. - /// - public static void DrawSphere(Sphere sphere, int segments, in Color color, float duration, bool depthTest) - { - DrawSphere(sphere, segments, Vector2.zero, color, duration, depthTest); - } - - /// - /// Draws a sphere. - /// - /// The sphere to draw. - /// The number of segments to generate. - /// The drawing offset of the sphere. - /// The color of the sphere. - /// - /// The duration of the sphere's visibility, in seconds. If 0 is passed, the sphere is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the sphere be obscured by objects closer to the camera. - /// - public static void DrawSphere(Sphere sphere, int segments, in Vector3 offset, in Color color, float duration, bool depthTest) - { - DrawPolyhedron(CreateCircle(sphere.Radius, segments, Vector3.zero), offset, color, duration, depthTest); - DrawPolyhedron(CreateCircle(sphere.Radius, segments, Vector3.left), offset, color, duration, depthTest); - DrawPolyhedron(CreateCircle(sphere.Radius, segments, Vector3.up), offset, color, duration, depthTest); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.WireCube.cs b/X10D.Unity/src/DebugUtility/DebugUtility.WireCube.cs deleted file mode 100644 index 1a550c2..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.WireCube.cs +++ /dev/null @@ -1,234 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity; - -public static partial class DebugUtility -{ - /// - /// Draws an axis-aligned bounding box. - /// - /// The bounding box to draw. - public static void DrawWireCube(in Bounds bounds) - { - DrawWireCube(bounds.center, bounds.size, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an axis-aligned bounding box. - /// - /// The bounding box to draw. - /// The color of the box. - public static void DrawWireCube(in Bounds bounds, in Color color) - { - DrawWireCube(bounds.center, bounds.size, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws an axis-aligned bounding box. - /// - /// The bounding box to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawWireCube(in Bounds bounds, in Color color, float duration) - { - DrawWireCube(bounds.center, bounds.size, color, duration, DefaultDepthTest); - } - - /// - /// Draws an axis-aligned bounding box. - /// - /// The bounding box to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawWireCube(in Bounds bounds, in Color color, float duration, bool depthTest) - { - DrawWireCube(bounds.center, bounds.size, color, duration, depthTest); - } - - /// - /// Draws a wireframe cube with a center and a size. - /// - /// The center point. - /// The extents of the box. - public static void DrawWireCube(Vector3 center, Vector3 size) - { - DrawWireCube(center, size, Color.white, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified orientation. - /// - /// The center point. - /// The extents of the box. - /// The orientation of the box. - public static void DrawWireCube(Vector3 center, Vector3 size, Quaternion orientation) - { - DrawWireCube(new Cuboid(center.ToSystemVector(), size.ToSystemVector(), orientation.ToSystemQuaternion()), Color.white, - DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified color. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - public static void DrawWireCube(Vector3 center, Vector3 size, in Color color) - { - DrawWireCube(center, size, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified orientation and color. - /// - /// The center point. - /// The extents of the box. - /// The orientation of the box. - /// The color of the box. - public static void DrawWireCube(Vector3 center, Vector3 size, Quaternion orientation, in Color color) - { - DrawWireCube(new Cuboid(center.ToSystemVector(), size.ToSystemVector(), orientation.ToSystemQuaternion()), color, - DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified color and duration. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawWireCube(Vector3 center, Vector3 size, in Color color, float duration) - { - DrawWireCube(center, size, color, duration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified orientation, color, and duration. - /// - /// The center point. - /// The extents of the box. - /// The orientation of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawWireCube(Vector3 center, Vector3 size, Quaternion orientation, in Color color, float duration) - { - DrawWireCube(new Cuboid(center.ToSystemVector(), size.ToSystemVector(), orientation.ToSystemQuaternion()), color, - duration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified color and duration. - /// - /// The center point. - /// The extents of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawWireCube(Vector3 center, Vector3 size, in Color color, float duration, bool depthTest) - { - DrawWireCube(new Cuboid(center.ToSystemVector(), size.ToSystemVector()), color, duration, depthTest); - } - - /// - /// Draws a wireframe cube with the specified orientation, color, and duration. - /// - /// The center point. - /// The extents of the box. - /// The orientation of the box. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawWireCube(Vector3 center, Vector3 size, Quaternion orientation, in Color color, float duration, - bool depthTest) - { - DrawWireCube(new Cuboid(center.ToSystemVector(), size.ToSystemVector(), orientation.ToSystemQuaternion()), color, - duration, depthTest); - } - - /// - /// Draws a wireframe cube with the specified color. - /// - /// The cuboid to draw. - /// The color of the box. - public static void DrawWireCube(in Cuboid cuboid, in Color color) - { - DrawWireCube(cuboid, color, DefaultDrawDuration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified color and duration. - /// - /// The cuboid to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - public static void DrawWireCube(in Cuboid cuboid, in Color color, float duration) - { - DrawWireCube(cuboid, color, duration, DefaultDepthTest); - } - - /// - /// Draws a wireframe cube with the specified color and duration. - /// - /// The cuboid to draw. - /// The color of the box. - /// - /// The duration of the box's visibility, in seconds. If 0 is passed, the box is visible for a single frame. - /// - /// - /// if depth test should be applied; otherwise, . Passing - /// will have the box be obscured by objects closer to the camera. - /// - public static void DrawWireCube(in Cuboid cuboid, in Color color, float duration, bool depthTest) - { - Vector3 frontTopLeft = cuboid.FrontTopLeft.ToUnityVector(); - Vector3 frontTopRight = cuboid.FrontTopRight.ToUnityVector(); - Vector3 frontBottomRight = cuboid.FrontBottomRight.ToUnityVector(); - Vector3 frontBottomLeft = cuboid.FrontBottomLeft.ToUnityVector(); - Vector3 backTopLeft = cuboid.BackTopLeft.ToUnityVector(); - Vector3 backTopRight = cuboid.BackTopRight.ToUnityVector(); - Vector3 backBottomRight = cuboid.BackBottomRight.ToUnityVector(); - Vector3 backBottomLeft = cuboid.BackBottomLeft.ToUnityVector(); - - Debug.DrawLine(frontTopLeft, frontTopRight, color, duration, depthTest); - Debug.DrawLine(frontTopRight, frontBottomRight, color, duration, depthTest); - Debug.DrawLine(frontBottomRight, frontBottomLeft, color, duration, depthTest); - Debug.DrawLine(frontBottomLeft, frontTopLeft, color, duration, depthTest); - - Debug.DrawLine(backTopLeft, backTopRight, color, duration, depthTest); - Debug.DrawLine(backTopRight, backBottomRight, color, duration, depthTest); - Debug.DrawLine(backBottomRight, backBottomLeft, color, duration, depthTest); - Debug.DrawLine(backBottomLeft, backTopLeft, color, duration, depthTest); - - Debug.DrawLine(frontTopLeft, backTopLeft, color, duration, depthTest); - Debug.DrawLine(frontTopRight, backTopRight, color, duration, depthTest); - Debug.DrawLine(frontBottomRight, backBottomRight, color, duration, depthTest); - Debug.DrawLine(frontBottomLeft, backBottomLeft, color, duration, depthTest); - } -} diff --git a/X10D.Unity/src/DebugUtility/DebugUtility.cs b/X10D.Unity/src/DebugUtility/DebugUtility.cs deleted file mode 100644 index 0a2133c..0000000 --- a/X10D.Unity/src/DebugUtility/DebugUtility.cs +++ /dev/null @@ -1,417 +0,0 @@ -using System.Diagnostics; -using System.Runtime.CompilerServices; -using JetBrains.Annotations; -using UnityEngine; -using Debug = UnityEngine.Debug; -using Object = UnityEngine.Object; - -namespace X10D.Unity; - -/// -/// An extended version of Unity's utility class which offers support for drawing simple -/// primitives. -/// -public static partial class DebugUtility -{ - /// - /// The default value to use for the duration parameter. - /// - private const float DefaultDrawDuration = 0.0f; - - /// - /// The default value to use for the depthTest parameter. - /// - private const bool DefaultDepthTest = true; - - /// - /// Gets a value indicating whether this is a debug build. - /// - /// if this is a debug build; otherwise, . - // ReSharper disable once InconsistentNaming - public static bool isDebugBuild - { - get => Debug.isDebugBuild; - } - - /// - /// Gets a value indicating whether the developer console is visible. - /// - /// if the developer console is visible; otherwise, . - // ReSharper disable once InconsistentNaming - public static bool isDeveloperConsoleVisible - { - get => Debug.developerConsoleVisible; - } - - /// - /// Gets the default Unity debug logger. - /// - /// The Unity debug logger. - // ReSharper disable once InconsistentNaming - public static ILogger unityLogger - { - get => Debug.unityLogger; - } - - /// - /// Asserts a condition. - /// - /// The condition to assert. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, "Assertion failed"); - } - - /// - /// Asserts a condition. - /// - /// The condition to assert. - /// The object to which the assertion applies. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition, Object context) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, (object)"Assertion failed", context); - } - - /// - /// Asserts a condition. - /// - /// The condition to assert. - /// The message to log. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition, string? message) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, message); - } - - /// - /// Asserts a condition. - /// - /// The condition to assert. - /// The message to log. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition, T? message) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, message?.ToString()); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The condition to assert. - /// The message to log. - /// The object to which the assertion applies. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition, string? message, Object? context) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, (object?)message, context); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The condition to assert. - /// The message to log. - /// The object to which the assertion applies. - [Conditional("UNITY_ASSERTIONS")] - [AssertionMethod] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void Assert(bool condition, T? message, Object? context) - { - if (condition) - { - return; - } - - unityLogger.Log(LogType.Assert, (object?)message?.ToString(), context); - } - - /// - /// Pauses the editor. - /// - public static void Break() - { - Debug.Break(); - } - - /// - /// Clears the developer console. - /// - public static void ClearDeveloperConsole() - { - Debug.ClearDeveloperConsole(); - } - - /// - /// Populate an unmanaged buffer with the current managed call stack as a sequence of UTF-8 bytes, without allocating GC - /// memory. - /// - /// The target buffer to receive the callstack text. - /// The maximum number of bytes to write. - /// The project folder path, to clean up path names. - /// The number of bytes written into the buffer. - [MustUseReturnValue("Fewer bytes may be returned than requested.")] - public static unsafe int ExtractStackTraceNoAlloc(byte* buffer, int bufferMax, string projectFolder) - { - return Debug.ExtractStackTraceNoAlloc(buffer, bufferMax, projectFolder); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The message to log. - public static void Log(string? message) - { - Debug.Log(message); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The message to log. - public static void Log(T message) - { - Log(message?.ToString()); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void Log(string message, Object? context) - { - Debug.Log(message, context); - } - - /// - /// Logs a message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void Log(T message, Object? context) - { - Debug.Log(message?.ToString(), context); - } - - /// - /// Logs an assertion message to the Unity Console. - /// - /// The message to log. - [Conditional("UNITY_ASSERTIONS")] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void LogAssertion(string? message) - { - unityLogger.Log(LogType.Assert, message); - } - - /// - /// Logs an assertion message to the Unity Console. - /// - /// The message to log. - [Conditional("UNITY_ASSERTIONS")] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void LogAssertion(T message) - { - unityLogger.Log(LogType.Assert, message?.ToString()); - } - - /// - /// Logs an assertion message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - [Conditional("UNITY_ASSERTIONS")] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void LogAssertion(string message, Object? context) - { - unityLogger.Log(LogType.Assert, (object?)message, context); - } - - /// - /// Logs an assertion message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - [Conditional("UNITY_ASSERTIONS")] - [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] - public static void LogAssertion(T? message, Object? context) - { - unityLogger.Log(LogType.Assert, (object?)message?.ToString(), context); - } - - /// - /// Logs an error message to the Unity Console. - /// - /// The message to log. - public static void LogError(string? message) - { - Debug.LogError(message); - } - - /// - /// Logs an error message to the Unity Console. - /// - /// The message to log. - public static void LogError(T? message) - { - LogError(message?.ToString()); - } - - /// - /// Logs an error message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void LogError(string message, Object? context) - { - Debug.LogError(message, context); - } - - /// - /// Logs an error message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void LogError(T? message, Object? context) - { - Debug.LogError(message?.ToString(), context); - } - - /// - /// Logs a formatted error message to the Unity Console. - /// - /// The format string of the message to log. - /// The format arguments. - public static void LogErrorFormat(string? format, params object?[]? args) - { - Debug.LogErrorFormat(format, args); - } - - /// - /// Logs a formatted error message to the Unity Console. - /// - /// The object to which this message applies. - /// The format string of the message to log. - /// The format arguments. - public static void LogErrorFormat(Object context, string? format, params object?[]? args) - { - Debug.LogErrorFormat(context, format, args); - } - - /// - /// Logs a formatted message to the Unity Console. - /// - /// The format string of the message to log. - /// The format arguments. - public static void LogFormat(string? format, params object?[]? args) - { - Debug.LogFormat(format, args); - } - - /// - /// Logs a formatted message to the Unity Console. - /// - /// The object to which this message applies. - /// The format string of the message to log. - /// The format arguments. - public static void LogFormat(Object context, string? format, params object?[]? args) - { - Debug.LogFormat(context, format, args); - } - - /// - /// Logs a warning message to the Unity Console. - /// - /// The message to log. - public static void LogWarning(string? message) - { - Debug.LogWarning(message); - } - - /// - /// Logs a warning message to the Unity Console. - /// - /// The message to log. - public static void LogWarning(T? message) - { - LogWarning(message?.ToString()); - } - - /// - /// Logs a warning message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void LogWarning(string message, Object? context) - { - Debug.LogWarning(message, context); - } - - /// - /// Logs a warning message to the Unity Console. - /// - /// The message to log. - /// The object to which the message applies. - public static void LogWarning(T? message, Object? context) - { - Debug.LogWarning(message?.ToString(), context); - } - - /// - /// Logs a formatted warning message to the Unity Console. - /// - /// The format string of the message to log. - /// The format arguments. - public static void LogWarningFormat(string? format, params object?[]? args) - { - Debug.LogWarningFormat(format, args); - } - - /// - /// Logs a formatted warning message to the Unity Console. - /// - /// The object to which this message applies. - /// The format string of the message to log. - /// The format arguments. - public static void LogWarningFormat(Object context, string? format, params object?[]? args) - { - Debug.LogWarningFormat(context, format, args); - } -} diff --git a/X10D.Unity/src/Drawing/Color32Extensions.cs b/X10D.Unity/src/Drawing/Color32Extensions.cs deleted file mode 100644 index 16dc327..0000000 --- a/X10D.Unity/src/Drawing/Color32Extensions.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using UnityEngine; -using X10D.Drawing; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extensions for . -/// -public static class Color32Extensions -{ - /// - /// Deconstructs the current color into its RGB components. - /// - /// The source color. - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Deconstruct(this Color32 color, out byte a, out byte r, out byte g, out byte b) - { - a = color.a; - (r, g, b) = color; - } - - /// - /// Deconstructs the current color into its RGB components. - /// - /// The source color. - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Deconstruct(this Color32 color, out byte r, out byte g, out byte b) - { - r = color.r; - g = color.g; - b = color.b; - } - - /// - /// Returns a which most closely resembles the current color. - /// - /// The source color. - /// The closest . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ConsoleColor GetClosestConsoleColor(this Color32 color) - { - return color.ToSystemDrawingColor().GetClosestConsoleColor(); - } - - /// - /// Returns a new with the red, green, and blue components inverted. Alpha is not affected. - /// - /// The color to invert. - /// The inverted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 Inverted(this Color32 color) - { - return new Color32((byte)(255 - color.r), (byte)(255 - color.g), (byte)(255 - color.b), color.a); - } - - /// - /// Converts the current color to a . - /// - /// The color to convert. - /// The converted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Drawing.Color ToSystemDrawingColor(this Color32 color) - { - return System.Drawing.Color.FromArgb(color.a, color.r, color.g, color.b); - } - - /// - /// Converts the current color to a . - /// - /// The color to convert. - /// The converted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 ToUnityColor32(this System.Drawing.Color color) - { - return new Color32(color.R, color.G, color.B, color.A); - } - - /// - /// Returns a vector whose red, green, and blue components are the same as the specified color, and whose alpha component - /// is a new value. - /// - /// The color to copy. - /// The new alpha component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 WithA(this Color32 color, byte a) - { - return color with {a = a}; - } - - /// - /// Returns a vector whose red, green, and alpha components are the same as the specified color, and whose blue component - /// is a new value. - /// - /// The color to copy. - /// The new blue component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 WithB(this Color32 color, byte b) - { - return color with {b = b}; - } - - /// - /// Returns a vector whose red, blue, and alpha components are the same as the specified color, and whose green component - /// is a new value. - /// - /// The color to copy. - /// The new green component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 WithG(this Color32 color, byte g) - { - return color with {g = g}; - } - - /// - /// Returns a vector whose green, blue, and alpha components are the same as the specified color, and whose red component - /// is a new value. - /// - /// The color to copy. - /// The new red component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color32 WithR(this Color32 color, byte r) - { - return color with {r = r}; - } -} diff --git a/X10D.Unity/src/Drawing/ColorExtensions.cs b/X10D.Unity/src/Drawing/ColorExtensions.cs deleted file mode 100644 index 3fca7ec..0000000 --- a/X10D.Unity/src/Drawing/ColorExtensions.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using UnityEngine; -using X10D.Drawing; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extensions for . -/// -public static class ColorExtensions -{ - /// - /// Deconstructs the current color into its ARGB components. - /// - /// The source color. - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Deconstruct(this Color color, out float a, out float r, out float g, out float b) - { - a = color.a; - (r, g, b) = color; - } - - /// - /// Deconstructs the current color into its RGB components. - /// - /// The source color. - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - /// - /// When this method returns, contains the component of . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Deconstruct(this Color color, out float r, out float g, out float b) - { - r = color.r; - g = color.g; - b = color.b; - } - - /// - /// Returns a which most closely resembles the current color. - /// - /// The source color. - /// The closest . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ConsoleColor GetClosestConsoleColor(this Color color) - { - return color.ToSystemDrawingColor().GetClosestConsoleColor(); - } - - /// - /// Returns a new with the red, green, and blue components inverted. Alpha is not affected. - /// - /// The color to invert. - /// The inverted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color Inverted(this Color color) - { - return new Color(1f - color.r, 1f - color.g, 1f - color.b, color.a); - } - - /// - /// Converts the current color to a . - /// - /// The color to convert. - /// The converted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Drawing.Color ToSystemDrawingColor(this Color color) - { - return System.Drawing.Color.FromArgb( - (int)(color.a * 255f), - (int)(color.r * 255f), - (int)(color.g * 255f), - (int)(color.b * 255f) - ); - } - - /// - /// Converts the current color to a . - /// - /// The color to convert. - /// The converted color. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color ToUnityColor(this System.Drawing.Color color) - { - return new Color(color.R / 255f, color.G / 255f, color.B / 255f, color.A / 255f); - } - - /// - /// Returns a vector whose red, green, and blue components are the same as the specified color, and whose alpha component - /// is a new value. - /// - /// The color to copy. - /// The new alpha component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color WithA(this Color color, float a) - { - return color with {a = a}; - } - - /// - /// Returns a vector whose red, green, and alpha components are the same as the specified color, and whose blue component - /// is a new value. - /// - /// The color to copy. - /// The new blue component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color WithB(this Color color, float b) - { - return color with {b = b}; - } - - /// - /// Returns a vector whose red, blue, and alpha components are the same as the specified color, and whose green component - /// is a new value. - /// - /// The color to copy. - /// The new green component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color WithG(this Color color, float g) - { - return color with {g = g}; - } - - /// - /// Returns a vector whose green, blue, and alpha components are the same as the specified color, and whose red component - /// is a new value. - /// - /// The color to copy. - /// The new red component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Color WithR(this Color color, float r) - { - return color with {r = r}; - } -} diff --git a/X10D.Unity/src/Drawing/PointExtensions.cs b/X10D.Unity/src/Drawing/PointExtensions.cs deleted file mode 100644 index 68f2a5f..0000000 --- a/X10D.Unity/src/Drawing/PointExtensions.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class PointExtensions -{ - /// - /// Converts the current to a . - /// - /// The point to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 ToUnityVector2(this Point point) - { - return new Vector2(point.X, point.Y); - } - - /// - /// Converts the current to a . - /// - /// The point to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2Int ToUnityVector2Int(this Point value) - { - return UnsafeUtility.As(ref value); - } -} diff --git a/X10D.Unity/src/Drawing/PointFExtensions.cs b/X10D.Unity/src/Drawing/PointFExtensions.cs deleted file mode 100644 index 7f58e51..0000000 --- a/X10D.Unity/src/Drawing/PointFExtensions.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class PointFExtensions -{ - /// - /// Determines if the current lies on the specified . - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this PointF point, Vector2 start, Vector2 end) - { - return point.IsOnLine(start.ToSystemVector(), end.ToSystemVector()); - } - - /// - /// Converts the current to a . - /// - /// The point to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 ToUnityVector2(this PointF point) - { - return UnsafeUtility.As(ref point); - } -} diff --git a/X10D.Unity/src/Drawing/PolygonExtensions.cs b/X10D.Unity/src/Drawing/PolygonExtensions.cs deleted file mode 100644 index b1b962f..0000000 --- a/X10D.Unity/src/Drawing/PolygonExtensions.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class PolygonExtensions -{ - /// - /// Adds a vertex to this polygon. - /// - /// The polygon whose points to update. - /// The point to add. - /// is . - public static void AddVertex(this Polygon polygon, Vector2Int point) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - polygon.AddVertex(point.ToSystemPoint()); - } - - /// - /// Adds a collection of vertices to this polygon. - /// - /// The polygon whose vertices to update. - /// The vertices to add. - /// - /// is . - /// -or- - /// is . - /// - public static void AddVertices(this Polygon polygon, IEnumerable vertices) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - if (vertices is null) - { - throw new ArgumentNullException(nameof(vertices)); - } - - foreach (Vector2Int vertex in vertices) - { - polygon.AddVertex(vertex); - } - } -} diff --git a/X10D.Unity/src/Drawing/PolygonFExtensions.cs b/X10D.Unity/src/Drawing/PolygonFExtensions.cs deleted file mode 100644 index 1b91d0c..0000000 --- a/X10D.Unity/src/Drawing/PolygonFExtensions.cs +++ /dev/null @@ -1,99 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class PolygonFExtensions -{ - /// - /// Adds a point to this polygon. - /// - /// The polygon whose vertices to update. - /// The vertex to add. - /// is . - public static void AddVertex(this PolygonF polygon, Vector2Int vertex) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - polygon.AddVertex(vertex.ToSystemPoint()); - } - - /// - /// Adds a point to this polygon. - /// - /// The polygon whose vertices to update. - /// The vertex to add. - /// is . - public static void AddVertex(this PolygonF polygon, Vector2 vertex) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - polygon.AddVertex(vertex.ToSystemPointF()); - } - - /// - /// Adds a collection of vertices to this polygon. - /// - /// The polygon whose vertices to update. - /// The vertices to add. - /// - /// is . - /// -or- - /// is . - /// - public static void AddVertices(this PolygonF polygon, IEnumerable vertices) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - if (vertices is null) - { - throw new ArgumentNullException(nameof(vertices)); - } - - foreach (Vector2Int vertex in vertices) - { - polygon.AddVertex(vertex); - } - } - - /// - /// Adds a collection of vertices to this polygon. - /// - /// The polygon whose vertices to update. - /// The vertices to add. - /// - /// is . - /// -or- - /// is . - /// - public static void AddVertices(this PolygonF polygon, IEnumerable vertices) - { - if (polygon is null) - { - throw new ArgumentNullException(nameof(polygon)); - } - - if (vertices is null) - { - throw new ArgumentNullException(nameof(vertices)); - } - - foreach (Vector2 vertex in vertices) - { - polygon.AddVertex(vertex); - } - } -} diff --git a/X10D.Unity/src/Drawing/PolyhedronExtensions.cs b/X10D.Unity/src/Drawing/PolyhedronExtensions.cs deleted file mode 100644 index 94cd4ed..0000000 --- a/X10D.Unity/src/Drawing/PolyhedronExtensions.cs +++ /dev/null @@ -1,99 +0,0 @@ -using UnityEngine; -using X10D.Drawing; -using X10D.Unity.Numerics; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class PolyhedronExtensions -{ - /// - /// Adds a vertex to this polyhedron. - /// - /// The polyhedron whose vertices to update. - /// The vertex to add. - /// is . - public static void AddVertex(this Polyhedron polyhedron, Vector3Int vertex) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - polyhedron.AddVertex(vertex.ToSystemVector()); - } - - /// - /// Adds a vertex to this polyhedron. - /// - /// The polyhedron whose vertices to update. - /// The vertex to add. - /// is . - public static void AddVertex(this Polyhedron polyhedron, Vector3 vertex) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - polyhedron.AddVertex(vertex.ToSystemVector()); - } - - /// - /// Adds a collection of vertices to this polyhedron. - /// - /// The polyhedron whose vertices to update. - /// The vertices to add. - /// - /// is . - /// -or- - /// is . - /// - public static void AddVertices(this Polyhedron polyhedron, IEnumerable vertices) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - if (vertices is null) - { - throw new ArgumentNullException(nameof(vertices)); - } - - foreach (Vector3Int vertex in vertices) - { - polyhedron.AddVertex(vertex); - } - } - - /// - /// Adds a collection of vertices to this polyhedron. - /// - /// The polyhedron whose vertices to update. - /// The vertices to add. - /// - /// is . - /// -or- - /// is . - /// - public static void AddVertices(this Polyhedron polyhedron, IEnumerable vertices) - { - if (polyhedron is null) - { - throw new ArgumentNullException(nameof(polyhedron)); - } - - if (vertices is null) - { - throw new ArgumentNullException(nameof(vertices)); - } - - foreach (Vector3 vertex in vertices) - { - polyhedron.AddVertex(vertex); - } - } -} diff --git a/X10D.Unity/src/Drawing/RandomExtensions.cs b/X10D.Unity/src/Drawing/RandomExtensions.cs deleted file mode 100644 index c8b4bd7..0000000 --- a/X10D.Unity/src/Drawing/RandomExtensions.cs +++ /dev/null @@ -1,97 +0,0 @@ -using UnityEngine; -using X10D.Core; -using Random = System.Random; - -#pragma warning disable CA5394 - -namespace X10D.Unity.Drawing; - -/// -/// Extension methods for . -/// -public static class RandomExtensions -{ - /// - /// Returns an HDR color of random components for red, green, and blue. - /// - /// The instance. - /// A whose red, green, and blue components are all random, and whose alpha is 255 - /// is . - public static Color NextColorRgb(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int seed = random.Next(); - var seededRandom = new Random(seed); - float r = seededRandom.NextSingle(); - float g = seededRandom.NextSingle(); - float b = seededRandom.NextSingle(); - return new Color(r, g, b, 1.0f); - } - - /// - /// Returns an HDR color composed of random components for apha, red, green, and blue. - /// - /// The instance. - /// A whose alpha, red, green, and blue components are all random. - /// is . - public static Color NextColorArgb(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int seed = random.Next(); - var seededRandom = new Random(seed); - float a = seededRandom.NextSingle(); - float r = seededRandom.NextSingle(); - float g = seededRandom.NextSingle(); - float b = seededRandom.NextSingle(); - return new Color(r, g, b, a); - } - - /// - /// Returns a color of random components for red, green, and blue. - /// - /// The instance. - /// A whose red, green, and blue components are all random, and whose alpha is 255 - /// is . - public static Color32 NextColor32Rgb(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int rgb = random.Next(); - var r = (byte)(rgb >> 16 & 0xFF); - var g = (byte)(rgb >> 8 & 0xFF); - var b = (byte)(rgb & 0xFF); - return new Color32(r, g, b, 0xFF); - } - - /// - /// Returns a color composed of random components for apha, red, green, and blue. - /// - /// The instance. - /// A whose alpha, red, green, and blue components are all random. - /// is . - public static Color32 NextColor32Argb(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int argb = random.Next(); - var a = (byte)(argb >> 24 & 0xFF); - var r = (byte)(argb >> 16 & 0xFF); - var g = (byte)(argb >> 8 & 0xFF); - var b = (byte)(argb & 0xFF); - return new Color32(r, g, b, a); - } -} diff --git a/X10D.Unity/src/Drawing/RectExtensions.cs b/X10D.Unity/src/Drawing/RectExtensions.cs deleted file mode 100644 index 71db4d6..0000000 --- a/X10D.Unity/src/Drawing/RectExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class RectExtensions -{ - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static RectangleF ToSystemRectangleF(this Rect rectangle) - { - return UnsafeUtility.As(ref rectangle); - } -} diff --git a/X10D.Unity/src/Drawing/RectIntExtensions.cs b/X10D.Unity/src/Drawing/RectIntExtensions.cs deleted file mode 100644 index 184bf74..0000000 --- a/X10D.Unity/src/Drawing/RectIntExtensions.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class RectIntExtensions -{ - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Rectangle ToSystemRectangle(this RectInt rectangle) - { - return UnsafeUtility.As(ref rectangle); - } - - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static RectangleF ToSystemRectangleF(this RectInt rectangle) - { - // REMARKS: implicit conversion already exists, this method is largely pointless - return rectangle.ToSystemRectangle(); - } -} diff --git a/X10D.Unity/src/Drawing/RectangleExtensions.cs b/X10D.Unity/src/Drawing/RectangleExtensions.cs deleted file mode 100644 index 7326fdf..0000000 --- a/X10D.Unity/src/Drawing/RectangleExtensions.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class RectangleExtensions -{ - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Rect ToUnityRect(this Rectangle rectangle) - { - return new Rect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); - } - - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static RectInt ToUnityRectInt(this Rectangle rectangle) - { - return UnsafeUtility.As(ref rectangle); - } -} diff --git a/X10D.Unity/src/Drawing/RectangleFExtensions.cs b/X10D.Unity/src/Drawing/RectangleFExtensions.cs deleted file mode 100644 index 6eaf66c..0000000 --- a/X10D.Unity/src/Drawing/RectangleFExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class RectangleFExtensions -{ - /// - /// Converts the current to a . - /// - /// The rectangle to convert. - /// The converted rectangle. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Rect ToUnityRect(this RectangleF rectangle) - { - return new Rect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); - } -} diff --git a/X10D.Unity/src/Drawing/SizeExtensions.cs b/X10D.Unity/src/Drawing/SizeExtensions.cs deleted file mode 100644 index bef5855..0000000 --- a/X10D.Unity/src/Drawing/SizeExtensions.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class SizeExtensions -{ - /// - /// Converts the current to a . - /// - /// The size to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 ToUnityVector2(this Size size) - { - // REMARKS: implicit conversion already exists, this method is largely pointless - return size.ToUnityVector2Int(); - } - - /// - /// Converts the current to a . - /// - /// The size to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2Int ToUnityVector2Int(this Size size) - { - return UnsafeUtility.As(ref size); - } -} diff --git a/X10D.Unity/src/Drawing/SizeFExtensions.cs b/X10D.Unity/src/Drawing/SizeFExtensions.cs deleted file mode 100644 index d9f1047..0000000 --- a/X10D.Unity/src/Drawing/SizeFExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Drawing; - -/// -/// Drawing-related extension methods for . -/// -public static class SizeFExtensions -{ - /// - /// Converts the current to a . - /// - /// The size to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 ToUnityVector2(this SizeF size) - { - return UnsafeUtility.As(ref size); - } -} diff --git a/X10D.Unity/src/ExceptionMessages.Designer.cs b/X10D.Unity/src/ExceptionMessages.Designer.cs deleted file mode 100644 index 954a74a..0000000 --- a/X10D.Unity/src/ExceptionMessages.Designer.cs +++ /dev/null @@ -1,80 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace X10D.Unity { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class ExceptionMessages { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal ExceptionMessages() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("X10D.Unity.src.ExceptionMessages", typeof(ExceptionMessages).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to The game object {0} already has a component of type {1}.. - /// - internal static string ComponentAlreadyExists { - get { - return ResourceManager.GetString("ComponentAlreadyExists", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The game object {0} does not have a component of type {1}.. - /// - internal static string ComponentDoesNotExist { - get { - return ResourceManager.GetString("ComponentDoesNotExist", resourceCulture); - } - } - } -} diff --git a/X10D.Unity/src/ExceptionMessages.resx b/X10D.Unity/src/ExceptionMessages.resx deleted file mode 100644 index ec27743..0000000 --- a/X10D.Unity/src/ExceptionMessages.resx +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - - The game object {0} does not have a component of type {1}. - - - - The game object {0} already has a component of type {1}. - - \ No newline at end of file diff --git a/X10D.Unity/src/GameObjectExtensions.cs b/X10D.Unity/src/GameObjectExtensions.cs deleted file mode 100644 index 559ee39..0000000 --- a/X10D.Unity/src/GameObjectExtensions.cs +++ /dev/null @@ -1,324 +0,0 @@ -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Extension methods for . -/// -public static class GameObjectExtensions -{ - /// - /// Returns an array of components of the specified type, excluding components that live on this game object. - /// - /// The game object whose child components to retrieve. - /// The type of the components to retrieve. - /// An array representing the child components. - /// is . - public static T[] GetComponentsInChildrenOnly(this GameObject gameObject) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - Transform rootTransform = gameObject.transform; - var components = new List(gameObject.GetComponentsInChildren()); - - for (var index = 0; index < components.Count; index++) - { - if (components[index] is not Component childComponent) - { - // this shouldn't happen, since you can't add a non-Component to a game object, - // but GetComponentsInChildren is not constrained, so this method shouldn't be either - continue; - } - - if (childComponent.transform == rootTransform) - { - components.RemoveAt(index); - index--; - } - } - - return components.ToArray(); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at another game object. - /// - /// The game object whose rotation will be changed. - /// The game object to look at. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this GameObject gameObject, GameObject target) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - gameObject.transform.LookAt(target.transform); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at . - /// - /// The game object whose rotation will be changed. - /// The point to look at. - /// is . - public static void LookAt(this GameObject gameObject, Vector3 target) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - gameObject.transform.LookAt(target); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at a specified transform. - /// - /// The game object whose rotation will be changed. - /// The transform to look at. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this GameObject gameObject, Transform target) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - gameObject.transform.LookAt(target); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at another game object. - /// - /// The game object whose rotation will be changed. - /// The game object to look at. - /// A vector specifying the upward direction. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this GameObject gameObject, GameObject target, Vector3 worldUp) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - gameObject.transform.LookAt(target.transform, worldUp); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at . - /// - /// The game object whose rotation will be changed. - /// The point to look at. - /// A vector specifying the upward direction. - /// is . - public static void LookAt(this GameObject gameObject, Vector3 target, Vector3 worldUp) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - gameObject.transform.LookAt(target, worldUp); - } - - /// - /// Rotates the transform component of this game object so the forward vector points at a specified transform. - /// - /// The game object whose rotation will be changed. - /// The transform to look at. - /// A vector specifying the upward direction. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this GameObject gameObject, Transform target, Vector3 worldUp) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - gameObject.transform.LookAt(target, worldUp); - } - - /// - /// Sets the new layer of this game object and its children, recursively. - /// - /// The game object whose layer, and that of its children recursively, to change. - /// The new layer. - /// is . - public static void SetLayerRecursively(this GameObject gameObject, int layer) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - var children = new Stack(); - var transform = gameObject.transform; - children.Push(transform); - - while (children.Count > 0) - { - Transform child = children.Pop(); - int childCount = child.childCount; - - child.gameObject.layer = layer; - - if (childCount <= 0) - { - continue; - } - - for (var childIndex = 0; childIndex < childCount; childIndex++) - { - children.Push(child.GetChild(childIndex)); - } - } - } - - /// - /// Sets the parent of this game object. - /// - /// The game object whose parent to change. - /// The new parent. - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this GameObject gameObject, GameObject parent) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - gameObject.transform.SetParent(parent.transform); - } - - /// - /// Sets the parent of this game object. - /// - /// The game object whose parent to change. - /// The new parent. - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this GameObject gameObject, Transform parent) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - gameObject.transform.SetParent(parent); - } - - /// - /// Sets the parent of this game object. - /// - /// The game object whose parent to change. - /// The new parent. - /// - /// to modify the parent-relative position, scale and rotation such that the object keeps the same - /// world space position, rotation and scale as before; otherwise, . - /// - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this GameObject gameObject, GameObject parent, bool worldPositionStays) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - gameObject.transform.SetParent(parent.transform, worldPositionStays); - } - - /// - /// Sets the parent of this game object. - /// - /// The game object whose parent to change. - /// The new parent. - /// - /// to modify the parent-relative position, scale and rotation such that the object keeps the same - /// world space position, rotation and scale as before; otherwise, . - /// - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this GameObject gameObject, Transform parent, bool worldPositionStays) - { - if (gameObject == null) - { - throw new ArgumentNullException(nameof(gameObject)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - gameObject.transform.SetParent(parent, worldPositionStays); - } -} diff --git a/X10D.Unity/src/Numerics/QuaternionExtensions.cs b/X10D.Unity/src/Numerics/QuaternionExtensions.cs deleted file mode 100644 index 5511bbc..0000000 --- a/X10D.Unity/src/Numerics/QuaternionExtensions.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class QuaternionExtensions -{ - /// - /// Converts the current quaternion to a . - /// - /// The quaternion to convert. - /// The converted quaternion. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Quaternion ToSystemQuaternion(this Quaternion quaternion) - { - return UnsafeUtility.As(ref quaternion); - } - - /// - /// Converts the current quaternion to a . - /// - /// The quaternion to convert. - /// The converted quaternion. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Quaternion ToUnityQuaternion(this System.Numerics.Quaternion quaternion) - { - return UnsafeUtility.As(ref quaternion); - } -} diff --git a/X10D.Unity/src/Numerics/RandomExtensions.cs b/X10D.Unity/src/Numerics/RandomExtensions.cs deleted file mode 100644 index 07b54a2..0000000 --- a/X10D.Unity/src/Numerics/RandomExtensions.cs +++ /dev/null @@ -1,120 +0,0 @@ -using UnityEngine; -using X10D.Core; -using Random = System.Random; - -#pragma warning disable CA5394 - -namespace X10D.Unity.Numerics; - -/// -/// Extension methods for . -/// -public static class RandomExtensions -{ - /// - /// Returns a randomly generated rotation as represented by a . - /// - /// The instance. - /// - /// A constructed from 3 random single-precision floating point numbers representing the - /// yaw, pitch, and roll. - /// - /// is . - public static Quaternion NextRotation(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int seed = random.Next(); - var seededRandom = new Random(seed); - - float x = seededRandom.NextSingle(0, 360); - float y = seededRandom.NextSingle(0, 360); - float z = seededRandom.NextSingle(0, 360); - - return Quaternion.Euler(x, y, z); - } - - /// - /// Returns a randomly generated rotation with uniform distribution. - /// - /// The instance. - /// A constructed with uniform distribution. - /// is . - public static Quaternion NextRotationUniform(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int seed = random.Next(); - var seededRandom = new Random(seed); - float normal, w, x, y, z; - - do - { - w = seededRandom.NextSingle(-1f, 1f); - x = seededRandom.NextSingle(-1f, 1f); - y = seededRandom.NextSingle(-1f, 1f); - z = seededRandom.NextSingle(-1f, 1f); - normal = (w * w) + (x * x) + (y * y) + (z * z); - } while (normal is 0f or > 1f); - - normal = MathF.Sqrt(normal); - return new Quaternion(x / normal, y / normal, z / normal, w / normal); - } - - /// - /// Returns a with magnitude 1 whose components indicate a random point on the unit circle. - /// - /// The instance - /// - /// A whose returns 1, and whose components indicate a random - /// point on the unit circle. - /// - public static Vector2 NextUnitVector2(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - // no need to construct a seeded random here, since we only call Next once - - float angle = random.NextSingle(0, MathF.PI * 2.0f); - float x = MathF.Cos(angle); - float y = MathF.Sin(angle); - - return new Vector2(x, y); - } - - /// - /// Returns a with magnitude 1 whose components indicate a random point on the unit sphere. - /// - /// The instance - /// - /// A whose returns 1, and whose components indicate a random - /// point on the unit sphere. - /// - public static Vector3 NextUnitVector3(this Random random) - { - if (random is null) - { - throw new ArgumentNullException(nameof(random)); - } - - int seed = random.Next(); - var seededRandom = new Random(seed); - - float angle = seededRandom.NextSingle(0, MathF.PI * 2.0f); - float z = seededRandom.NextSingle(-1, 1); - float mp = MathF.Sqrt(1 - (z * z)); - float x = mp * MathF.Cos(angle); - float y = mp * MathF.Sin(angle); - - return new Vector3(x, y, z); - } -} diff --git a/X10D.Unity/src/Numerics/Vector2Extensions.cs b/X10D.Unity/src/Numerics/Vector2Extensions.cs deleted file mode 100644 index 6e608f8..0000000 --- a/X10D.Unity/src/Numerics/Vector2Extensions.cs +++ /dev/null @@ -1,185 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; -using X10D.Drawing; -using X10D.Math; -using X10D.Numerics; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class Vector2Extensions -{ - /// - /// Deconstructs the current into its components. - /// - /// The vector to deconstruct. - /// The X component value. - /// The Y component value. - public static void Deconstruct(this Vector2 vector, out float x, out float y) - { - x = vector.x; - y = vector.y; - } - - /// - /// Determines if the current lies on the specified . - /// - /// The point to check. - /// The line on which the point may lie. - /// - /// if lies on the line defined by ; otherwise - /// . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2 point, LineF line) - { - return point.ToSystemVector().IsOnLine(line); - } - - /// - /// Determines if the current lies on the specified line. - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2 point, PointF start, PointF end) - { - return point.IsOnLine(new LineF(start, end)); - } - - /// - /// Determines if the current lies on the specified line. - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2 point, Vector2 start, Vector2 end) - { - return point.ToSystemVector().IsOnLine(start.ToSystemVector(), end.ToSystemVector()); - } - - /// - /// Rounds the components in the current to the nearest integer. - /// - /// The vector whose components to round. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 Round(this Vector2 vector) - { - return vector.Round(1.0f); - } - - /// - /// Rounds the components in the current to the nearest multiple of a specified number. - /// - /// The vector whose components to round. - /// The nearest multiple to which the components should be rounded. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 Round(this Vector2 vector, float nearest) - { - float x = vector.x.Round(nearest); - float y = vector.y.Round(nearest); - return new Vector2(x, y); - } - - /// - /// Converts the current into a . - /// - /// The vector to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static PointF ToSystemPointF(this Vector2 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Converts the current into a . - /// - /// The vector to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static SizeF ToSystemSizeF(this Vector2 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Vector2 ToSystemVector(this Vector2 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 ToUnityVector(this System.Numerics.Vector2 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Returns a vector whose Y component is the same as the specified vector, and whose X component is a new value. - /// - /// The vector to copy. - /// The new X component value. - /// - /// A new instance of whose components is the same as that of - /// , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 WithX(this Vector2 vector, float x) - { - return vector with {x = x}; - } - - /// - /// Returns a vector whose X component is the same as the specified vector, and whose Y component is a new value. - /// - /// The vector to copy. - /// The new Y component value. - /// - /// A new instance of whose components is the same as that of - /// , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2 WithY(this Vector2 vector, float y) - { - return vector with {y = y}; - } -} diff --git a/X10D.Unity/src/Numerics/Vector2IntExtensions.cs b/X10D.Unity/src/Numerics/Vector2IntExtensions.cs deleted file mode 100644 index babf2d9..0000000 --- a/X10D.Unity/src/Numerics/Vector2IntExtensions.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Drawing; -using System.Runtime.CompilerServices; -using UnityEngine; -using X10D.Drawing; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class Vector2IntExtensions -{ - /// - /// Deconstructs the current into its components. - /// - /// The vector to deconstruct. - /// The X component value. - /// The Y component value. - public static void Deconstruct(this Vector2Int vector, out int x, out int y) - { - x = vector.x; - y = vector.y; - } - - /// - /// Determines if the current lies on the specified . - /// - /// The point to check. - /// The line on which the point may lie. - /// - /// if lies on the line defined by ; otherwise - /// . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2Int point, LineF line) - { - return point.ToSystemPoint().IsOnLine(line); - } - - /// - /// Determines if the current lies on the specified line. - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2Int point, PointF start, PointF end) - { - return point.IsOnLine(new LineF(start, end)); - } - - /// - /// Determines if the current lies on the specified line. - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2Int point, Vector2Int start, Vector2Int end) - { - return point.ToSystemPoint().IsOnLine(new LineF(start.ToSystemVector(), end.ToSystemVector())); - } - - /// - /// Determines if the current lies on the specified line. - /// - /// The point to check. - /// The starting point of the line. - /// The ending point of the line. - /// - /// if lies on the line defined by and - /// ; otherwise . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsOnLine(this Vector2Int point, Vector2 start, Vector2 end) - { - return point.ToSystemPoint().IsOnLine(new LineF(start.ToSystemVector(), end.ToSystemVector())); - } - - /// - /// Converts the current into a . - /// - /// The vector to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Point ToSystemPoint(this Vector2Int vector) - { - return new Point(vector.x, vector.y); - } - - /// - /// Converts the current into a . - /// - /// The vector to convert. - /// The resulting . - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Size ToSystemSize(this Vector2Int vector) - { - return new Size(vector.x, vector.y); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Vector2 ToSystemVector(this Vector2Int vector) - { - return new System.Numerics.Vector2(vector.x, vector.y); - } - - /// - /// Returns a vector whose Y component is the same as the specified vector, and whose X component is a new value. - /// - /// The vector to copy. - /// The new X component value. - /// - /// A new instance of whose components is the same as that of - /// , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2Int WithX(this Vector2Int vector, int x) - { - return vector with {x = x}; - } - - /// - /// Returns a vector whose X component is the same as the specified vector, and whose Y component is a new value. - /// - /// The vector to copy. - /// The new Y component value. - /// - /// A new instance of whose components is the same as that of - /// , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector2Int WithY(this Vector2Int vector, int y) - { - return vector with {y = y}; - } -} diff --git a/X10D.Unity/src/Numerics/Vector3Extensions.cs b/X10D.Unity/src/Numerics/Vector3Extensions.cs deleted file mode 100644 index 64dc0e1..0000000 --- a/X10D.Unity/src/Numerics/Vector3Extensions.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; -using X10D.Math; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class Vector3Extensions -{ - /// - /// Deconstructs the current into its components. - /// - /// The vector to deconstruct. - /// The X component value. - /// The Y component value. - /// The Z component value. - public static void Deconstruct(this Vector3 vector, out float x, out float y, out float z) - { - x = vector.x; - y = vector.y; - z = vector.z; - } - - /// - /// Rounds the components in the current to the nearest integer. - /// - /// The vector whose components to round. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 Round(this Vector3 vector) - { - return vector.Round(1.0f); - } - - /// - /// Rounds the components in the current to the nearest multiple of a specified number. - /// - /// The vector whose components to round. - /// The nearest multiple to which the components should be rounded. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 Round(this Vector3 vector, float nearest) - { - float x = vector.x.Round(nearest); - float y = vector.y.Round(nearest); - float z = vector.z.Round(nearest); - return new Vector3(x, y, z); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Vector3 ToSystemVector(this Vector3 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 ToUnityVector(this System.Numerics.Vector3 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Returns a vector whose Y and Z components are the same as the specified vector, and whose X component is a new value. - /// - /// The vector to copy. - /// The new X component value. - /// - /// A new instance of whose and components are - /// the same as that of , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 WithX(this Vector3 vector, float x) - { - return vector with {x = x}; - } - - /// - /// Returns a vector whose X and Z components are the same as the specified vector, and whose Y component is a new value. - /// - /// The vector to copy. - /// The new Y component value. - /// - /// A new instance of whose and components are - /// the same as that of , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 WithY(this Vector3 vector, float y) - { - return vector with {y = y}; - } - - /// - /// Returns a vector whose X and Y components are the same as the specified vector, and whose Z component is a new value. - /// - /// The vector to copy. - /// The new Z component value. - /// - /// A new instance of whose and components are - /// the same as that of , and whose component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3 WithZ(this Vector3 vector, float z) - { - return vector with {z = z}; - } -} diff --git a/X10D.Unity/src/Numerics/Vector3IntExtensions.cs b/X10D.Unity/src/Numerics/Vector3IntExtensions.cs deleted file mode 100644 index 16b2e4d..0000000 --- a/X10D.Unity/src/Numerics/Vector3IntExtensions.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using UnityEngine; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class Vector3IntExtensions -{ - /// - /// Deconstructs the current into its components. - /// - /// The vector to deconstruct. - /// The X component value. - /// The Y component value. - /// The Z component value. - public static void Deconstruct(this Vector3Int vector, out int x, out int y, out int z) - { - x = vector.x; - y = vector.y; - z = vector.z; - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Vector3 ToSystemVector(this Vector3Int vector) - { - return new System.Numerics.Vector3(vector.x, vector.y, vector.z); - } - - /// - /// Returns a vector whose Y and Z components are the same as the specified vector, and whose X component is a new value. - /// - /// The vector to copy. - /// The new X component value. - /// - /// A new instance of whose and - /// components are the same as that of , and whose component is - /// . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3Int WithX(this Vector3Int vector, int x) - { - return vector with {x = x}; - } - - /// - /// Returns a vector whose X and Z components are the same as the specified vector, and whose Y component is a new value. - /// - /// The vector to copy. - /// The new Y component value. - /// - /// A new instance of whose and - /// components are the same as that of , and whose component is - /// . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3Int WithY(this Vector3Int vector, int y) - { - return vector with {y = y}; - } - - /// - /// Returns a vector whose X and Y components are the same as the specified vector, and whose Z component is a new value. - /// - /// The vector to copy. - /// The new Z component value. - /// - /// A new instance of whose and - /// components are the same as that of , and whose component is - /// . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector3Int WithZ(this Vector3Int vector, int z) - { - return vector with {z = z}; - } -} diff --git a/X10D.Unity/src/Numerics/Vector4Extensions.cs b/X10D.Unity/src/Numerics/Vector4Extensions.cs deleted file mode 100644 index e17ba25..0000000 --- a/X10D.Unity/src/Numerics/Vector4Extensions.cs +++ /dev/null @@ -1,154 +0,0 @@ -using System.Diagnostics.Contracts; -using System.Runtime.CompilerServices; -using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; -using X10D.Math; - -namespace X10D.Unity.Numerics; - -/// -/// Numeric-extensions for . -/// -public static class Vector4Extensions -{ - /// - /// Deconstructs the current into its components. - /// - /// The vector to deconstruct. - /// The X component value. - /// The Y component value. - /// The Z component value. - /// The W component value. - public static void Deconstruct(this Vector4 vector, out float x, out float y, out float z, out float w) - { - x = vector.x; - y = vector.y; - z = vector.z; - w = vector.w; - } - - /// - /// Rounds the components in the current to the nearest integer. - /// - /// The vector whose components to round. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 Round(this Vector4 vector) - { - return vector.Round(1.0f); - } - - /// - /// Rounds the components in the current to the nearest multiple of a specified number. - /// - /// The vector whose components to round. - /// The nearest multiple to which the components should be rounded. - /// The rounded vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 Round(this Vector4 vector, float nearest) - { - float x = vector.x.Round(nearest); - float y = vector.y.Round(nearest); - float z = vector.z.Round(nearest); - float w = vector.w.Round(nearest); - return new Vector4(x, y, z, w); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static System.Numerics.Vector4 ToSystemVector(this Vector4 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Converts the current vector to a . - /// - /// The vector to convert. - /// The converted vector. - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ToUnityVector(this System.Numerics.Vector4 vector) - { - return UnsafeUtility.As(ref vector); - } - - /// - /// Returns a vector whose Y, Z, and W components are the same as the specified vector, and whose X component is a new - /// value. - /// - /// The vector to copy. - /// The new X component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 WithX(this Vector4 vector, float x) - { - return vector with {x = x}; - } - - /// - /// Returns a vector whose X, Z, and W components are the same as the specified vector, and whose Y component is a new - /// value. - /// - /// The vector to copy. - /// The new Y component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 WithY(this Vector4 vector, float y) - { - return vector with {y = y}; - } - - /// - /// Returns a vector whose X, Y, and W components are the same as the specified vector, and whose Z component is a new - /// value. - /// - /// The vector to copy. - /// The new Z component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 WithZ(this Vector4 vector, float z) - { - return vector with {z = z}; - } - - /// - /// Returns a vector whose X, Y, and Z components are the same as the specified vector, and whose W component is a new - /// value. - /// - /// The vector to copy. - /// The new W component value. - /// - /// A new instance of whose , , and - /// components are the same as that of , and whose - /// component is . - /// - [Pure] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 WithW(this Vector4 vector, float w) - { - return vector with {w = w}; - } -} diff --git a/X10D.Unity/src/RaycastHitExtensions.cs b/X10D.Unity/src/RaycastHitExtensions.cs deleted file mode 100644 index 5e44dca..0000000 --- a/X10D.Unity/src/RaycastHitExtensions.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Extension methods for . -/// -public static class RaycastHitExtensions -{ - /// - /// Gets the component of the specified type from the object that was hit by the raycast. - /// - /// The raycast hit. - /// The type of the component to retrieve. - /// - /// The component of the specified type from the object that was hit by the raycast, or if no - /// component of the specified type was found. - /// - public static T? GetComponent(this RaycastHit hit) - { - if (hit.transform == null) - { - return default; - } - - return hit.transform.GetComponent(); - } - - /// - /// Gets the component of the specified type from the object that was hit by the raycast. - /// - /// The raycast hit. - /// The type of the component to retrieve. - /// - /// The component of the specified type from the object that was hit by the raycast, or if no - /// component of the specified type was found. - /// - /// is . - public static Component? GetComponent(this RaycastHit hit, Type componentType) - { - if (componentType is null) - { - throw new ArgumentNullException(nameof(componentType)); - } - - if (hit.transform == null) - { - return default; - } - - return hit.transform.GetComponent(componentType); - } - - - /// - /// Attempts to get the component of the specified type from the object that was hit by the raycast, and returns a value - /// that indicates whether the operation succeeded. - /// - /// The raycast hit. - /// - /// When this method returns, contains the component of the specified type from the object that was hit by the raycast, or - /// if no component of the specified type was found. - /// - /// The type of the component to retrieve. - /// - /// if the component of the specified type was found; otherwise, . - /// - public static bool TryGetComponent(this RaycastHit hit, [NotNullWhen(true)] out T? component) - { - if (hit.transform == null) - { - component = default; - return false; - } - - return hit.transform.TryGetComponent(out component); - } - - /// - /// Attempts to get the component of the specified type from the object that was hit by the raycast, and returns a value - /// that indicates whether the operation succeeded. - /// - /// The raycast hit. - /// The type of the component to retrieve. - /// - /// When this method returns, contains the component of the specified type from the object that was hit by the raycast, or - /// if no component of the specified type was found. - /// - /// - /// if the component of the specified type was found; otherwise, . - /// - /// is . - public static bool TryGetComponent(this RaycastHit hit, Type componentType, [NotNullWhen(true)] out Component? component) - { - if (componentType is null) - { - throw new ArgumentNullException(nameof(componentType)); - } - - if (hit.transform == null) - { - component = default; - return false; - } - - return hit.transform.TryGetComponent(componentType, out component); - } -} diff --git a/X10D.Unity/src/Singleton.cs b/X10D.Unity/src/Singleton.cs deleted file mode 100644 index 6d75df7..0000000 --- a/X10D.Unity/src/Singleton.cs +++ /dev/null @@ -1,60 +0,0 @@ -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Represents a class which implements the singleton pattern for a specific . This class is not -/// thread-safe. -/// -/// The type of the singleton. -public abstract class Singleton : MonoBehaviour - where T : Singleton -{ - private static Lazy s_instanceLazy = new(CreateLazyInstanceInternal, false); - private static T? s_instance; - - /// - /// Gets the instance of the singleton. - /// - /// The singleton instance. -#pragma warning disable CA1000 - public static T Instance -#pragma warning restore CA1000 - { - get => s_instance ? s_instance! : s_instanceLazy.Value; - } - - /// - /// Called when the script instance is being loaded. - /// - protected virtual void Awake() - { - s_instance = (T?)this; - } - - /// - /// Called when the object is destroyed. - /// - protected virtual void OnDestroy() - { - s_instance = null; - s_instanceLazy = new Lazy(CreateLazyInstanceInternal, false); - } - - private static T CreateLazyInstanceInternal() - { - if (s_instance) - { - return s_instance!; - } - - if (FindObjectOfType() is { } instance) - { - s_instance = instance; - return instance; - } - - var gameObject = new GameObject {name = typeof(T).Name}; - return s_instance = gameObject.AddComponent(); - } -} diff --git a/X10D.Unity/src/TransformExtensions.cs b/X10D.Unity/src/TransformExtensions.cs deleted file mode 100644 index 922ed5c..0000000 --- a/X10D.Unity/src/TransformExtensions.cs +++ /dev/null @@ -1,114 +0,0 @@ -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Extension methods for . -/// -public static class TransformExtensions -{ - /// - /// Rotates this transform so the forward vector points at another game object. - /// - /// The transform whose rotation will be changed. - /// The game object to look at. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this Transform transform, GameObject target) - { - if (transform == null) - { - throw new ArgumentNullException(nameof(transform)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - transform.LookAt(target.transform); - } - - /// - /// Rotates this transform so the forward vector points at another game object. - /// - /// The transform whose rotation will be changed. - /// The game object to look at. - /// A vector specifying the upward direction. - /// - /// is . - /// -or- - /// is . - /// - public static void LookAt(this Transform transform, GameObject target, Vector3 worldUp) - { - if (transform == null) - { - throw new ArgumentNullException(nameof(transform)); - } - - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - transform.LookAt(target.transform, worldUp); - } - - /// - /// Sets the parent of this transform. - /// - /// The transform whose parent to change. - /// The new parent. - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this Transform transform, GameObject parent) - { - if (transform == null) - { - throw new ArgumentNullException(nameof(transform)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - transform.transform.SetParent(parent.transform); - } - - /// - /// Sets the parent of this transform. - /// - /// The transform whose parent to change. - /// The new parent. - /// - /// to modify the parent-relative position, scale and rotation such that the object keeps the same - /// world space position, rotation and scale as before; otherwise, . - /// - /// - /// is . - /// -or- - /// is . - /// - public static void SetParent(this Transform transform, GameObject parent, bool worldPositionStays) - { - if (transform == null) - { - throw new ArgumentNullException(nameof(transform)); - } - - if (parent == null) - { - throw new ArgumentNullException(nameof(parent)); - } - - transform.SetParent(parent.transform, worldPositionStays); - } -} diff --git a/X10D.Unity/src/WaitForFrames.cs b/X10D.Unity/src/WaitForFrames.cs deleted file mode 100644 index d6d69a8..0000000 --- a/X10D.Unity/src/WaitForFrames.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction that waits for a specific number of frames. -/// -public struct WaitForFrames : IEnumerator -{ - private readonly int _frameCount; - private int _frameIndex; - - /// - /// Initializes a new instance of the struct. - /// - /// The frame count. - public WaitForFrames(int frameCount) - { - _frameCount = frameCount; - _frameIndex = 0; - } - - /// - public object Current - { - get => _frameCount; - } - - /// - public bool MoveNext() - { - return ++_frameIndex <= _frameCount; - } - - /// - public void Reset() - { - _frameIndex = 0; - } -} diff --git a/X10D.Unity/src/WaitForKeyDown.cs b/X10D.Unity/src/WaitForKeyDown.cs deleted file mode 100644 index 0ffaaf4..0000000 --- a/X10D.Unity/src/WaitForKeyDown.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction that waits for a key to be pressed. -/// -public readonly struct WaitForKeyDown : IEnumerator -{ - private readonly KeyCode _keyCode; - - /// - /// Initializes a new instance of the struct. - /// - /// The key to wait for. - public WaitForKeyDown(KeyCode keyCode) - { - _keyCode = keyCode; - } - - /// - public object Current - { - get => _keyCode == KeyCode.None ? Input.anyKeyDown : Input.GetKeyDown(_keyCode); - } - - /// - public bool MoveNext() - { - return !(_keyCode == KeyCode.None ? Input.anyKeyDown : Input.GetKeyDown(_keyCode)); - } - - /// - public void Reset() - { - } -} diff --git a/X10D.Unity/src/WaitForKeyUp.cs b/X10D.Unity/src/WaitForKeyUp.cs deleted file mode 100644 index 9cea34d..0000000 --- a/X10D.Unity/src/WaitForKeyUp.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using UnityEngine; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction that waits for a key to be released. -/// -public readonly struct WaitForKeyUp : IEnumerator -{ - private readonly KeyCode _keyCode; - - /// - /// Initializes a new instance of the struct. - /// - /// The key to wait for. - public WaitForKeyUp(KeyCode keyCode) - { - _keyCode = keyCode; - } - - /// - public object Current - { - get => _keyCode == KeyCode.None || Input.GetKeyUp(_keyCode); - } - - /// - public bool MoveNext() - { - return !(_keyCode == KeyCode.None || Input.GetKeyUp(_keyCode)); - } - - /// - public void Reset() - { - } -} diff --git a/X10D.Unity/src/WaitForSecondsNoAlloc.cs b/X10D.Unity/src/WaitForSecondsNoAlloc.cs deleted file mode 100644 index c10b751..0000000 --- a/X10D.Unity/src/WaitForSecondsNoAlloc.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction which waits for a specified amount of seconds. -/// -/// This struct exists as an allocation-free alternative to . -public struct WaitForSecondsNoAlloc : IEnumerator -{ - private readonly float _duration; - private float _delta; - - /// - /// Initializes a new instance of the struct. - /// - /// The duration of the pause, in seconds. - public WaitForSecondsNoAlloc(float duration) - { - _duration = duration; - _delta = 0f; - } - - /// - public object Current - { - get => _delta; - } - - /// - public bool MoveNext() - { - _delta += UnityEngine.Time.deltaTime; - return _delta < _duration; - } - - /// - public void Reset() - { - } -} diff --git a/X10D.Unity/src/WaitForSecondsRealtimeNoAlloc.cs b/X10D.Unity/src/WaitForSecondsRealtimeNoAlloc.cs deleted file mode 100644 index 3335336..0000000 --- a/X10D.Unity/src/WaitForSecondsRealtimeNoAlloc.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction which waits for a given amount of time, as provided by a . -/// -/// This struct exists as an allocation-free alternative to . -public readonly struct WaitForSecondsRealtimeNoAlloc : IEnumerator -{ - private readonly DateTime _expectedEnd; - - /// - /// Initializes a new instance of the struct. - /// - /// The duration of the pause, in seconds. - public WaitForSecondsRealtimeNoAlloc(float duration) - { - _expectedEnd = DateTime.Now + TimeSpan.FromSeconds(duration); - } - - /// - public object Current - { - get => DateTime.Now; - } - - /// - public bool MoveNext() - { - return DateTime.Now < _expectedEnd; - } - - /// - public void Reset() - { - } -} diff --git a/X10D.Unity/src/WaitForTimeSpan.cs b/X10D.Unity/src/WaitForTimeSpan.cs deleted file mode 100644 index 11b83c1..0000000 --- a/X10D.Unity/src/WaitForTimeSpan.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction which waits for a given amount of time, as provided by a . -/// -public struct WaitForTimeSpan : IEnumerator -{ - private readonly TimeSpan _duration; - private readonly DateTime _start; - private DateTime _current; - - /// - /// Initializes a new instance of the struct. - /// - /// The duration of the pause. - public WaitForTimeSpan(TimeSpan duration) - { - _duration = duration; - _start = DateTime.Now; - _current = _start; - } - - /// - public object Current - { - get => _current; - } - - /// - public bool MoveNext() - { - _current += TimeSpan.FromSeconds(UnityEngine.Time.deltaTime); - return _current < _start + _duration; - } - - /// - public void Reset() - { - } -} diff --git a/X10D.Unity/src/WaitForTimeSpanRealtime.cs b/X10D.Unity/src/WaitForTimeSpanRealtime.cs deleted file mode 100644 index 28ed33f..0000000 --- a/X10D.Unity/src/WaitForTimeSpanRealtime.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; - -namespace X10D.Unity; - -/// -/// Represents a yield instruction which waits for a given amount of time, as provided by a . -/// -public readonly struct WaitForTimeSpanRealtime : IEnumerator -{ - private readonly DateTime _expectedEnd; - - /// - /// Initializes a new instance of the struct. - /// - /// The duration of the pause. - public WaitForTimeSpanRealtime(TimeSpan duration) - { - _expectedEnd = DateTime.Now + duration; - } - - /// - public object Current - { - get => DateTime.Now; - } - - /// - public bool MoveNext() - { - return DateTime.Now < _expectedEnd; - } - - /// - public void Reset() - { - } -} diff --git a/X10D.sln b/X10D.sln index d552642..1596572 100644 --- a/X10D.sln +++ b/X10D.sln @@ -17,19 +17,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution README.md = README.md branding_Icon.png = branding_Icon.png Directory.Build.props = Directory.Build.props + global.json = global.json EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceValidator", "tools\SourceValidator\SourceValidator.csproj", "{84750149-9068-4780-AFDE-CDA1AC57007D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "X10D.Unity", "X10D.Unity\X10D.Unity.csproj", "{7EAB3F09-A9FD-4334-B4DB-0394DD0C6568}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceGenerator", "tools\SourceGenerator\SourceGenerator.csproj", "{077A5D33-AD55-4C55-8A67-972CEBC32C7A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "X10D.Hosting", "X10D.Hosting\X10D.Hosting.csproj", "{B04AF429-30CF-4B69-81BA-38F560CA9126}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Workflows", "Workflows", "{1FC74E58-F3BA-4F1A-8693-5F80895DA69D}" ProjectSection(SolutionItems) = preProject - .github\workflows\activate-unity.yml = .github\workflows\activate-unity.yml .github\workflows\docfx.yml = .github\workflows\docfx.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml .github\workflows\nightly.yml = .github\workflows\nightly.yml @@ -37,11 +35,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Workflows", "Workflows", "{ .github\workflows\release.yml = .github\workflows\release.yml .github\workflows\sonarcloud.yml = .github\workflows\sonarcloud.yml .github\workflows\source_validator.yml = .github\workflows\source_validator.yml - .github\workflows\unity.yml = .github\workflows\unity.yml EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpmPackageGenerator", "tools\UpmPackageGenerator\UpmPackageGenerator.csproj", "{CCBF047D-1B01-45EC-8D89-B00B4AC482CA}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{4B8969E6-27D2-4357-964E-9979FF7CC805}" ProjectSection(SolutionItems) = preProject tools\Directory.Build.props = tools\Directory.Build.props @@ -69,10 +64,6 @@ Global {84750149-9068-4780-AFDE-CDA1AC57007D}.Debug|Any CPU.Build.0 = Debug|Any CPU {84750149-9068-4780-AFDE-CDA1AC57007D}.Release|Any CPU.ActiveCfg = Release|Any CPU {84750149-9068-4780-AFDE-CDA1AC57007D}.Release|Any CPU.Build.0 = Release|Any CPU - {7EAB3F09-A9FD-4334-B4DB-0394DD0C6568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7EAB3F09-A9FD-4334-B4DB-0394DD0C6568}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7EAB3F09-A9FD-4334-B4DB-0394DD0C6568}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7EAB3F09-A9FD-4334-B4DB-0394DD0C6568}.Release|Any CPU.Build.0 = Release|Any CPU {077A5D33-AD55-4C55-8A67-972CEBC32C7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {077A5D33-AD55-4C55-8A67-972CEBC32C7A}.Debug|Any CPU.Build.0 = Debug|Any CPU {077A5D33-AD55-4C55-8A67-972CEBC32C7A}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -81,10 +72,6 @@ Global {B04AF429-30CF-4B69-81BA-38F560CA9126}.Debug|Any CPU.Build.0 = Debug|Any CPU {B04AF429-30CF-4B69-81BA-38F560CA9126}.Release|Any CPU.ActiveCfg = Release|Any CPU {B04AF429-30CF-4B69-81BA-38F560CA9126}.Release|Any CPU.Build.0 = Release|Any CPU - {CCBF047D-1B01-45EC-8D89-B00B4AC482CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCBF047D-1B01-45EC-8D89-B00B4AC482CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCBF047D-1B01-45EC-8D89-B00B4AC482CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCBF047D-1B01-45EC-8D89-B00B4AC482CA}.Release|Any CPU.Build.0 = Release|Any CPU {259450A0-9964-403A-91E1-E9111B92C293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {259450A0-9964-403A-91E1-E9111B92C293}.Debug|Any CPU.Build.0 = Debug|Any CPU {259450A0-9964-403A-91E1-E9111B92C293}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -102,7 +89,6 @@ Global EndGlobalSection GlobalSection(NestedProjects) = preSolution {84750149-9068-4780-AFDE-CDA1AC57007D} = {4B8969E6-27D2-4357-964E-9979FF7CC805} - {CCBF047D-1B01-45EC-8D89-B00B4AC482CA} = {4B8969E6-27D2-4357-964E-9979FF7CC805} {259450A0-9964-403A-91E1-E9111B92C293} = {4B8969E6-27D2-4357-964E-9979FF7CC805} {077A5D33-AD55-4C55-8A67-972CEBC32C7A} = {4B8969E6-27D2-4357-964E-9979FF7CC805} {F57376C4-3591-43AF-BBED-447A1DE2B1FE} = {4B8969E6-27D2-4357-964E-9979FF7CC805} diff --git a/X10D/X10D.csproj b/X10D/X10D.csproj index c288f87..8f36b52 100644 --- a/X10D/X10D.csproj +++ b/X10D/X10D.csproj @@ -1,5 +1,9 @@ + + net8.0;net7.0;net6.0 + + True diff --git a/X10D/src/Collections/BinaryIntegerExtensions.cs b/X10D/src/Collections/BinaryIntegerExtensions.cs index 7f29b21..7c68d88 100644 --- a/X10D/src/Collections/BinaryIntegerExtensions.cs +++ b/X10D/src/Collections/BinaryIntegerExtensions.cs @@ -18,7 +18,7 @@ public static class BinaryIntegerExtensions /// The value to unpack. /// An array of with a length equal to the size of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool[] Unpack(this TInteger value) where TInteger : unmanaged, IBinaryInteger { @@ -36,7 +36,7 @@ public static class BinaryIntegerExtensions /// The value to unpack. /// When this method returns, contains the unpacked booleans from . /// is not large enough to contain the result. - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Unpack(this TInteger value, Span destination) where TInteger : unmanaged, IBinaryInteger { @@ -72,7 +72,7 @@ public static class BinaryIntegerExtensions } } - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static void UnpackInternal_Fallback(this TInteger value, Span destination) where TInteger : unmanaged, IBinaryInteger { diff --git a/X10D/src/Collections/ByteExtensions.cs b/X10D/src/Collections/ByteExtensions.cs index 34d08be..bdcdcce 100644 --- a/X10D/src/Collections/ByteExtensions.cs +++ b/X10D/src/Collections/ByteExtensions.cs @@ -3,12 +3,9 @@ using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; #endif using System.Runtime.CompilerServices; -using X10D.CompilerServices; - -#if NETCOREAPP3_0_OR_GREATER using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; -#endif +using X10D.CompilerServices; namespace X10D.Collections; @@ -26,7 +23,7 @@ public static class ByteExtensions /// The value to unpack. /// An array of with length 8. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool[] Unpack(this byte value) { var buffer = new bool[Size]; @@ -41,7 +38,7 @@ public static class ByteExtensions /// When this method returns, contains the unpacked booleans from . /// is not large enough to contain the result. [ExcludeFromCodeCoverage] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Unpack(this byte value, Span destination) { if (destination.Length < Size) @@ -49,19 +46,17 @@ public static class ByteExtensions throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); } -#if NETCOREAPP3_0_OR_GREATER if (Sse3.IsSupported) { UnpackInternal_Ssse3(value, destination); return; } -#endif UnpackInternal_Fallback(value, destination); } #endif - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static void UnpackInternal_Fallback(this byte value, Span destination) { for (var index = 0; index < Size; index++) @@ -70,8 +65,7 @@ public static class ByteExtensions } } -#if NETCOREAPP3_0_OR_GREATER - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal unsafe static void UnpackInternal_Ssse3(this byte value, Span destination) { fixed (bool* pDestination = destination) @@ -91,5 +85,4 @@ public static class ByteExtensions Sse2.StoreScalar((long*)pDestination, correctness.AsInt64()); } } -#endif } diff --git a/X10D/src/Collections/DictionaryExtensions.cs b/X10D/src/Collections/DictionaryExtensions.cs index 387016e..6138a62 100644 --- a/X10D/src/Collections/DictionaryExtensions.cs +++ b/X10D/src/Collections/DictionaryExtensions.cs @@ -1,7 +1,5 @@ using System.Diagnostics.Contracts; -#if NET6_0_OR_GREATER using System.Runtime.InteropServices; -#endif using System.Web; namespace X10D.Collections; @@ -47,23 +45,10 @@ public static class DictionaryExtensions throw new ArgumentNullException(nameof(updateValueFactory)); } -#if NET6_0_OR_GREATER ref var value = ref CollectionsMarshal.GetValueRefOrAddDefault(dictionary, key, out bool exists); // DO NOT CHANGE. reassigning value is necessary to mutate the dictionary, due to ref return above. // mutation of the dictionary is INTENDED BEHAVIOUR. this is not a mistake. return value = exists ? updateValueFactory(key, value!) : addValue; -#else - if (dictionary.TryGetValue(key, out TValue? old)) - { - TValue updated = updateValueFactory(key, old); - dictionary[key] = updated; - - return updated; - } - - dictionary.Add(key, addValue); - return addValue; -#endif } /// @@ -157,25 +142,10 @@ public static class DictionaryExtensions throw new ArgumentNullException(nameof(updateValueFactory)); } -#if NET6_0_OR_GREATER ref TValue? value = ref CollectionsMarshal.GetValueRefOrAddDefault(dictionary, key, out bool exists); // DO NOT CHANGE. reassigning value is necessary to mutate the dictionary, due to ref return above. // mutation of the dictionary is INTENDED BEHAVIOUR. this is not a mistake. return value = exists ? updateValueFactory(key, value!) : addValueFactory(key); -#else - if (dictionary.TryGetValue(key, out TValue? old)) - { - TValue updated = updateValueFactory(key, old); - dictionary[key] = updated; - - return updated; - } - - TValue add = addValueFactory(key); - dictionary.Add(key, add); - - return add; -#endif } /// @@ -284,25 +254,10 @@ public static class DictionaryExtensions throw new ArgumentNullException(nameof(updateValueFactory)); } -#if NET6_0_OR_GREATER ref TValue? value = ref CollectionsMarshal.GetValueRefOrAddDefault(dictionary, key, out bool exists); // DO NOT CHANGE. reassigning value is necessary to mutate the dictionary, due to ref return above. // mutation of the dictionary is INTENDED BEHAVIOUR. this is not a mistake. return value = exists ? updateValueFactory(key, value!, factoryArgument) : addValueFactory(key, factoryArgument); -#else - if (dictionary.TryGetValue(key, out TValue? old)) - { - TValue updated = updateValueFactory(key, old, factoryArgument); - dictionary[key] = updated; - - return updated; - } - - TValue add = addValueFactory(key, factoryArgument); - dictionary.Add(key, add); - - return add; -#endif } /// diff --git a/X10D/src/Collections/Int16Extensions.cs b/X10D/src/Collections/Int16Extensions.cs index ed4b3cd..e3e5570 100644 --- a/X10D/src/Collections/Int16Extensions.cs +++ b/X10D/src/Collections/Int16Extensions.cs @@ -3,12 +3,9 @@ using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; #endif using System.Runtime.CompilerServices; -using X10D.CompilerServices; - -#if NETCOREAPP3_0_OR_GREATER using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; -#endif +using X10D.CompilerServices; namespace X10D.Collections; @@ -26,7 +23,7 @@ public static class Int16Extensions /// The value to unpack. /// An array of with length 16. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool[] Unpack(this short value) { var ret = new bool[Size]; @@ -41,7 +38,7 @@ public static class Int16Extensions /// When this method returns, contains the unpacked booleans from . /// is not large enough to contain the result. [ExcludeFromCodeCoverage] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Unpack(this short value, Span destination) { if (destination.Length < Size) @@ -49,19 +46,17 @@ public static class Int16Extensions throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); } -#if NETCOREAPP3_0_OR_GREATER if (Sse3.IsSupported) { UnpackInternal_Ssse3(value, destination); return; } -#endif UnpackInternal_Fallback(value, destination); } #endif - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static void UnpackInternal_Fallback(this short value, Span destination) { for (var index = 0; index < Size; index++) @@ -70,8 +65,7 @@ public static class Int16Extensions } } -#if NETCOREAPP3_0_OR_GREATER - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal unsafe static void UnpackInternal_Ssse3(this short value, Span destination) { fixed (bool* pDestination = destination) @@ -93,5 +87,4 @@ public static class Int16Extensions Sse2.Store((byte*)pDestination, correctness); } } -#endif } diff --git a/X10D/src/Collections/Int32Extensions.cs b/X10D/src/Collections/Int32Extensions.cs index 2509214..b74a311 100644 --- a/X10D/src/Collections/Int32Extensions.cs +++ b/X10D/src/Collections/Int32Extensions.cs @@ -3,12 +3,9 @@ using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; #endif using System.Runtime.CompilerServices; -using X10D.CompilerServices; - -#if NETCOREAPP3_0_OR_GREATER using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; -#endif +using X10D.CompilerServices; namespace X10D.Collections; @@ -26,7 +23,7 @@ public static class Int32Extensions /// The value to unpack. /// An array of with length 32. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool[] Unpack(this int value) { var ret = new bool[Size]; @@ -41,7 +38,7 @@ public static class Int32Extensions /// When this method returns, contains the unpacked booleans from . /// is not large enough to contain the result. [ExcludeFromCodeCoverage] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Unpack(this int value, Span destination) { if (destination.Length < Size) @@ -49,7 +46,6 @@ public static class Int32Extensions throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); } -#if NETCOREAPP3_0_OR_GREATER if (Avx2.IsSupported) { UnpackInternal_Avx2(value, destination); @@ -61,13 +57,12 @@ public static class Int32Extensions UnpackInternal_Ssse3(value, destination); return; } -#endif UnpackInternal_Fallback(value, destination); } #endif - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static void UnpackInternal_Fallback(this int value, Span destination) { for (var index = 0; index < Size; index++) @@ -76,8 +71,7 @@ public static class Int32Extensions } } -#if NETCOREAPP3_0_OR_GREATER - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static unsafe void UnpackInternal_Ssse3(this int value, Span destination) { fixed (bool* pDestination = destination) @@ -134,5 +128,4 @@ public static class Int32Extensions Avx.Store((byte*)pDestination, correctness); } } -#endif } diff --git a/X10D/src/Collections/ListExtensions.cs b/X10D/src/Collections/ListExtensions.cs index be53ee8..900fd9f 100644 --- a/X10D/src/Collections/ListExtensions.cs +++ b/X10D/src/Collections/ListExtensions.cs @@ -241,20 +241,9 @@ public static class ListExtensions throw new ArgumentNullException(nameof(source)); } - int start = range.Start.IsFromEnd ? source.Count - range.Start.Value : range.Start.Value; - int end = range.End.IsFromEnd ? source.Count - range.End.Value : range.End.Value; + (int start, int length) = range.GetOffsetAndLength(source.Count); - if (end < start) - { - throw new ArgumentException(ExceptionMessages.EndIndexLessThanStartIndex); - } - - if (end >= source.Count) - { - throw new ArgumentOutOfRangeException(nameof(range), ExceptionMessages.EndIndexGreaterThanCount); - } - - for (int index = end; index >= start; index--) + for (int index = start + length; index >= start; index--) { source.RemoveAt(index); } diff --git a/X10D/src/Collections/SpanExtensions.cs b/X10D/src/Collections/SpanExtensions.cs index da54843..7c3ee0a 100644 --- a/X10D/src/Collections/SpanExtensions.cs +++ b/X10D/src/Collections/SpanExtensions.cs @@ -53,6 +53,7 @@ public static class SpanExtensions return source; } +#if !NET8_0_OR_GREATER /// /// Replaces all occurrences of a specified element in a span of elements with another specified element. /// @@ -72,6 +73,7 @@ public static class SpanExtensions } } } +#endif /// /// Splits a span of elements into sub-spans based on a delimiting element. diff --git a/X10D/src/CompilerServices/CompilerResources.cs b/X10D/src/CompilerServices/CompilerResources.cs index a02ca99..373a366 100644 --- a/X10D/src/CompilerServices/CompilerResources.cs +++ b/X10D/src/CompilerServices/CompilerResources.cs @@ -4,10 +4,6 @@ namespace X10D.CompilerServices; internal static class CompilerResources { -#if NETCOREAPP3_0_OR_GREATER - public const MethodImplOptions MethodImplOptions = System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining | - System.Runtime.CompilerServices.MethodImplOptions.AggressiveOptimization; -#else - public const MethodImplOptions MethodImplOptions = System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining; -#endif + public const MethodImplOptions MaxOptimization = MethodImplOptions.AggressiveInlining | + MethodImplOptions.AggressiveOptimization; } diff --git a/X10D/src/Core/EnumExtensions.cs b/X10D/src/Core/EnumExtensions.cs index 2545f1e..6b813ef 100644 --- a/X10D/src/Core/EnumExtensions.cs +++ b/X10D/src/Core/EnumExtensions.cs @@ -20,11 +20,7 @@ public static class EnumExtensions public static T Next(this T value) where T : struct, Enum { -#if NET5_0_OR_GREATER T[] values = Enum.GetValues(); -#else - T[] values = Enum.GetValues(typeof(T)).Cast().ToArray(); -#endif int index = Array.IndexOf(values, value) + 1; index %= values.Length; return values[index]; @@ -44,11 +40,7 @@ public static class EnumExtensions public static T NextUnchecked(this T value) where T : struct, Enum { -#if NET5_0_OR_GREATER T[] values = Enum.GetValues(); -#else - T[] values = Enum.GetValues(typeof(T)).Cast().ToArray(); -#endif int index = Array.IndexOf(values, value) + 1; return values[index]; } @@ -66,11 +58,7 @@ public static class EnumExtensions public static T Previous(this T value) where T : struct, Enum { -#if NET5_0_OR_GREATER T[] values = Enum.GetValues(); -#else - T[] values = Enum.GetValues(typeof(T)).Cast().ToArray(); -#endif int index = Array.IndexOf(values, value) - 1; int length = values.Length; @@ -94,11 +82,7 @@ public static class EnumExtensions public static T PreviousUnchecked(this T value) where T : struct, Enum { -#if NET5_0_OR_GREATER T[] values = Enum.GetValues(); -#else - T[] values = Enum.GetValues(typeof(T)).Cast().ToArray(); -#endif int index = Array.IndexOf(values, value) - 1; return values[index]; } diff --git a/X10D/src/Core/IntrinsicExtensions.cs b/X10D/src/Core/IntrinsicExtensions.cs index 7085c63..7a98d64 100644 --- a/X10D/src/Core/IntrinsicExtensions.cs +++ b/X10D/src/Core/IntrinsicExtensions.cs @@ -1,4 +1,3 @@ -#if NETCOREAPP3_0_OR_GREATER using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; @@ -30,7 +29,7 @@ public static class IntrinsicExtensions /// A of which remapped back to 0 and 1 based on boolean truthiness. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector64 CorrectBoolean(this Vector64 vector) { Vector64 output = IntrinsicUtility.GetUninitializedVector64(); @@ -65,7 +64,7 @@ public static class IntrinsicExtensions /// A of which remapped back to 0 and 1 based on boolean truthiness. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector128 CorrectBoolean(this Vector128 vector) { @@ -88,7 +87,7 @@ public static class IntrinsicExtensions /// A of which remapped back to 0 and 1 based on boolean truthiness. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector256 CorrectBoolean(this Vector256 vector) { @@ -112,7 +111,7 @@ public static class IntrinsicExtensions /// [Pure] [CLSCompliant(false)] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector128 ReverseElements(this Vector128 vector) { @@ -120,7 +119,7 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 CorrectBooleanInternal_Fallback(this Vector128 vector) { Vector128 output = IntrinsicUtility.GetUninitializedVector128(); @@ -135,7 +134,7 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 CorrectBooleanInternal_Sse2(this Vector128 vector) { Vector128 cmp = Sse2.CompareEqual(vector, Vector128.Zero); @@ -145,7 +144,7 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector256 CorrectBooleanInternal_Fallback(this Vector256 vector) { Vector256 output = IntrinsicUtility.GetUninitializedVector256(); @@ -160,7 +159,7 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector256 CorrectBooleanInternal_Avx2(this Vector256 vector) { Vector256 cmp = Avx2.CompareEqual(vector, Vector256.Zero); @@ -170,7 +169,7 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 ReverseElementsInternal_Fallback(this Vector128 vector) { Vector128 output = IntrinsicUtility.GetUninitializedVector128(); @@ -182,10 +181,9 @@ public static class IntrinsicExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 ReverseElementsInternal_Sse2(this Vector128 vector) { return Sse2.Shuffle(vector.AsDouble(), vector.AsDouble(), 0b01).AsUInt64(); } } -#endif diff --git a/X10D/src/Core/IntrinsicUtility.cs b/X10D/src/Core/IntrinsicUtility.cs index 44997cc..73685d1 100644 --- a/X10D/src/Core/IntrinsicUtility.cs +++ b/X10D/src/Core/IntrinsicUtility.cs @@ -1,5 +1,3 @@ -#if NETCOREAPP3_0_OR_GREATER - using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; @@ -33,7 +31,7 @@ public static class IntrinsicUtility /// The truncated product vector. [Pure] [CLSCompliant(false)] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector128 Multiply(Vector128 left, Vector128 right) { @@ -64,7 +62,7 @@ public static class IntrinsicUtility /// [Pure] [CLSCompliant(false)] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector256 Multiply(Vector256 lhs, Vector256 rhs) { @@ -92,7 +90,7 @@ public static class IntrinsicUtility /// A of whose elements is 64-bit truncated product of lhs and rhs. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector128 Multiply(Vector128 lhs, Vector128 rhs) { return Multiply(lhs.AsUInt64(), rhs.AsUInt64()).AsInt64(); @@ -116,7 +114,7 @@ public static class IntrinsicUtility /// A of whose elements is 64-bit truncated product of lhs and rhs. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector256 Multiply(Vector256 lhs, Vector256 rhs) { return Multiply(lhs.AsUInt64(), rhs.AsUInt64()).AsInt64(); @@ -142,7 +140,7 @@ public static class IntrinsicUtility /// elements in lhs and rhs. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static Vector128 HorizontalOr(Vector128 left, Vector128 right) { @@ -173,7 +171,7 @@ public static class IntrinsicUtility /// elements in lhs and rhs. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [CLSCompliant(false)] public static Vector128 HorizontalOr(Vector128 left, Vector128 right) { @@ -181,41 +179,29 @@ public static class IntrinsicUtility } // Helper methods - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector64 GetUninitializedVector64() where T : struct { -#if NET6_0_OR_GREATER Unsafe.SkipInit(out Vector64 output); return output; -#else - return default; -#endif } - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 GetUninitializedVector128() where T : struct { -#if NET6_0_OR_GREATER Unsafe.SkipInit(out Vector128 output); return output; -#else - return default; -#endif } - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector256 GetUninitializedVector256() where T : struct { -#if NET6_0_OR_GREATER Unsafe.SkipInit(out Vector256 output); return output; -#else - return default; -#endif } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 HorizontalOr_Sse(Vector128 left, Vector128 right) { Vector128 leftSingle = left.AsSingle(); @@ -230,7 +216,7 @@ public static class IntrinsicUtility } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 HorizontalOrInternal_Fallback(Vector128 left, Vector128 right) { Vector128 output = GetUninitializedVector128(); @@ -249,7 +235,7 @@ public static class IntrinsicUtility } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 MultiplyInternal_Fallback(Vector128 left, Vector128 right) { ulong leftInteger1 = Unsafe.As, ulong>(ref left); @@ -266,7 +252,7 @@ public static class IntrinsicUtility } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector128 MultiplyInternal_Sse2(Vector128 left, Vector128 right) { // https://stackoverflow.com/questions/17863411/sse-multiplication-of-2-64-bit-integers @@ -283,7 +269,7 @@ public static class IntrinsicUtility } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector256 MultiplyInternal_Fallback(Vector256 left, Vector256 right) { Vector256 output = GetUninitializedVector256(); @@ -299,7 +285,7 @@ public static class IntrinsicUtility } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static Vector256 MultiplyInternal_Avx2(Vector256 left, Vector256 right) { // https://stackoverflow.com/questions/17863411/sse-multiplication-of-2-64-bit-integers @@ -315,5 +301,3 @@ public static class IntrinsicUtility return Avx2.Add(high, ac); } } - -#endif diff --git a/X10D/src/Core/RandomExtensions.cs b/X10D/src/Core/RandomExtensions.cs index fa8d412..7cbdcc0 100644 --- a/X10D/src/Core/RandomExtensions.cs +++ b/X10D/src/Core/RandomExtensions.cs @@ -11,10 +11,6 @@ namespace X10D.Core; /// public static class RandomExtensions { -#if !NET6_0_OR_GREATER - private static readonly Random Shared = new(); -#endif - /// /// Returns a random value that defined in a specified enum. /// @@ -505,10 +501,6 @@ public static class RandomExtensions internal static Random GetShared() { -#if NET6_0_OR_GREATER return Random.Shared; -#else - return Shared; -#endif } } diff --git a/X10D/src/Core/SpanExtensions.cs b/X10D/src/Core/SpanExtensions.cs index c75880c..c1f2a1e 100644 --- a/X10D/src/Core/SpanExtensions.cs +++ b/X10D/src/Core/SpanExtensions.cs @@ -2,13 +2,9 @@ using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using X10D.CompilerServices; - -#if NETCOREAPP3_0_OR_GREATER using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; -using System.Runtime.Intrinsics.Arm; -#endif +using X10D.CompilerServices; #if NET7_0_OR_GREATER using System.Diagnostics; @@ -21,7 +17,6 @@ namespace X10D.Core; /// public static class SpanExtensions { -#if NETCOREAPP3_0_OR_GREATER private const ulong IntegerPackingMagic = 0x0102040810204080; [ExcludeFromCodeCoverage] @@ -35,7 +30,6 @@ public static class SpanExtensions { get => Vector256.Create(IntegerPackingMagic); } -#endif /// /// Returns a value indicating whether a specific enumeration value is contained with the current span of elements. @@ -49,7 +43,7 @@ public static class SpanExtensions /// /// The size of is unsupported. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Contains(this Span span, T value) where T : struct, Enum { return Contains((ReadOnlySpan)span, value); @@ -68,63 +62,46 @@ public static class SpanExtensions /// /// The size of is unsupported. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Contains(this ReadOnlySpan span, T value) where T : struct, Enum { -#if NET6_0_OR_GREATER - unsafe + switch (Unsafe.SizeOf()) { -#pragma warning disable CS8500 - switch (sizeof(T)) -#pragma warning restore CS8500 - { - case 1: - { - ref byte enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); - return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); - } + case 1: + { + ref byte enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); + return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); + } - case 2: - { - ref ushort enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); - return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); - } + case 2: + { + ref ushort enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); + return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); + } - case 4: - { - ref uint enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); - return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); - } + case 4: + { + ref uint enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); + return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); + } - case 8: - { - ref ulong enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); - return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); - } + case 8: + { + ref ulong enums = ref Unsafe.As(ref MemoryMarshal.GetReference(span)); + return MemoryMarshal.CreateSpan(ref enums, span.Length).Contains(Unsafe.As(ref value)); + } - // dotcover disable - //NOSONAR - default: + // dotcover disable + //NOSONAR + default: #if NET7_0_OR_GREATER - throw new UnreachableException(ExceptionMessages.EnumSizeIsUnexpected); + throw new UnreachableException(string.Format(ExceptionMessages.EnumSizeIsUnexpected, Unsafe.SizeOf())); #else - throw new ArgumentException(ExceptionMessages.EnumSizeIsUnexpected); + throw new ArgumentException(string.Format(ExceptionMessages.EnumSizeIsUnexpected, Unsafe.SizeOf())); #endif - //NOSONAR - // dotcover enable - } + //NOSONAR + // dotcover enable } -#else - foreach (var it in span) - { - if (EqualityComparer.Default.Equals(it, value)) - { - return true; - } - } - - return false; -#endif } /// @@ -134,7 +111,7 @@ public static class SpanExtensions /// An 8-bit unsigned integer containing the packed booleans. /// contains more than 8 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte PackByte(this Span source) { return PackByte((ReadOnlySpan)source); @@ -147,7 +124,7 @@ public static class SpanExtensions /// An 8-bit unsigned integer containing the packed booleans. /// contains more than 8 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static byte PackByte(this ReadOnlySpan source) { @@ -161,7 +138,6 @@ public static class SpanExtensions return PackByteInternal_Fallback(source); } -#if NETCOREAPP3_0_OR_GREATER if (!BitConverter.IsLittleEndian) { return PackByteInternal_Fallback(source); @@ -172,12 +148,6 @@ public static class SpanExtensions return PackByteInternal_Sse2(source); } - if (AdvSimd.IsSupported) - { - return PackByteInternal_AdvSimd(source); - } -#endif - return PackByteInternal_Fallback(source); } @@ -201,7 +171,7 @@ public static class SpanExtensions /// A 16-bit signed integer containing the packed booleans. /// contains more than 16 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static short PackInt16(this ReadOnlySpan source) { @@ -217,12 +187,10 @@ public static class SpanExtensions goto default; } -#if NETCOREAPP3_0_OR_GREATER if (Sse2.IsSupported) { return PackInt16Internal_Sse2(source); } -#endif goto default; case < 16: @@ -240,7 +208,7 @@ public static class SpanExtensions /// A 32-bit signed integer containing the packed booleans. /// contains more than 32 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PackInt32(this Span source) { return PackInt32((ReadOnlySpan)source); @@ -253,7 +221,7 @@ public static class SpanExtensions /// A 32-bit signed integer containing the packed booleans. /// contains more than 32 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static int PackInt32(this ReadOnlySpan source) { @@ -269,7 +237,6 @@ public static class SpanExtensions return PackInt16(source); case 32: -#if NETCOREAPP3_0_OR_GREATER if (!BitConverter.IsLittleEndian) { goto default; @@ -285,11 +252,6 @@ public static class SpanExtensions return PackInt32Internal_Sse2(source); } - if (AdvSimd.IsSupported) - { - return PackInt32Internal_AdvSimd(source); - } -#endif goto default; default: @@ -304,7 +266,7 @@ public static class SpanExtensions /// A 64-bit signed integer containing the packed booleans. /// contains more than 64 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long PackInt64(this Span source) { return PackInt64((ReadOnlySpan)source); @@ -317,7 +279,7 @@ public static class SpanExtensions /// A 64-bit signed integer containing the packed booleans. /// contains more than 64 elements. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long PackInt64(this ReadOnlySpan source) { switch (source.Length) @@ -342,7 +304,7 @@ public static class SpanExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static byte PackByteInternal_Fallback(this ReadOnlySpan source) { byte result = 0; @@ -356,7 +318,7 @@ public static class SpanExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static short PackInt16Internal_Fallback(this ReadOnlySpan source) { short result = 0; @@ -370,7 +332,7 @@ public static class SpanExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static int PackInt32Internal_Fallback(this ReadOnlySpan source) { var result = 0; @@ -383,9 +345,8 @@ public static class SpanExtensions return result; } -#if NETCOREAPP3_0_OR_GREATER [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static byte PackByteInternal_Sse2(this ReadOnlySpan source) { unsafe @@ -399,7 +360,7 @@ public static class SpanExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static short PackInt16Internal_Sse2(this ReadOnlySpan source) { unsafe @@ -416,37 +377,8 @@ public static class SpanExtensions } } - // dotcover disable - //NOSONAR [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - internal static int PackInt32Internal_AdvSimd(this ReadOnlySpan source) - { - unsafe - { - fixed (bool* pSource = source) - { - Vector128 vector1 = AdvSimd.LoadVector128((byte*)pSource).CorrectBoolean().AsUInt64(); - Vector128 vector2 = AdvSimd.LoadVector128((byte*)(pSource + 16)).CorrectBoolean().AsUInt64(); - - Vector128 calc1 = IntrinsicUtility.Multiply(IntegerPackingMagicV128, vector1); - Vector128 calc2 = IntrinsicUtility.Multiply(IntegerPackingMagicV128, vector2); - - calc1 = AdvSimd.ShiftRightLogical(calc1, 56); - calc2 = AdvSimd.ShiftRightLogical(calc2, 56); - - Vector128 shift1 = AdvSimd.ShiftLogical(calc1, Vector128.Create(0, 8)); - Vector128 shift2 = AdvSimd.ShiftLogical(calc2, Vector128.Create(16, 24)); - - return (int)(shift1.GetElement(0) | shift1.GetElement(1) | shift2.GetElement(0) | shift2.GetElement(1)); - } - } - } - //NOSONAR - // dotcover enable - - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static int PackInt32Internal_Avx2(this ReadOnlySpan source) { unsafe @@ -471,7 +403,7 @@ public static class SpanExtensions } [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] internal static int PackInt32Internal_Sse2(this ReadOnlySpan source) { unsafe @@ -498,25 +430,4 @@ public static class SpanExtensions } } } - -#if NET5_0_OR_GREATER - // dotcover disable - //NOSONAR - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - internal static byte PackByteInternal_AdvSimd(this ReadOnlySpan source) - { - unsafe - { - fixed (bool* pSource = source) - { - Vector64 load = AdvSimd.LoadVector64((byte*)pSource); - return unchecked((byte)(IntegerPackingMagic * load.CorrectBoolean().AsUInt64().GetElement(0) >> 56)); - } - } - } - //NOSONAR - // dotcover enable -#endif -#endif } diff --git a/X10D/src/Drawing/ColorExtensions.cs b/X10D/src/Drawing/ColorExtensions.cs index 86f7615..3d90e05 100644 --- a/X10D/src/Drawing/ColorExtensions.cs +++ b/X10D/src/Drawing/ColorExtensions.cs @@ -27,7 +27,7 @@ public static class ColorExtensions /// When this method returns, contains the component of . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Deconstruct(this Color color, out byte a, out byte r, out byte g, out byte b) { a = color.A; @@ -48,7 +48,7 @@ public static class ColorExtensions /// When this method returns, contains the component of . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static void Deconstruct(this Color color, out byte r, out byte g, out byte b) { r = color.R; @@ -63,7 +63,7 @@ public static class ColorExtensions /// The closest . /// Glenn Slayden, https://stackoverflow.com/a/12340136/1467293 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ConsoleColor GetClosestConsoleColor(this Color color) { ConsoleColor result = 0; @@ -72,17 +72,9 @@ public static class ColorExtensions double blue = color.B; var delta = double.MaxValue; -#if NET5_0_OR_GREATER foreach (ConsoleColor consoleColor in Enum.GetValues()) -#else - foreach (ConsoleColor consoleColor in Enum.GetValues(typeof(ConsoleColor))) -#endif { -#if NET5_0_OR_GREATER string name = Enum.GetName(consoleColor)!; -#else - string name = Enum.GetName(typeof(ConsoleColor), consoleColor)!; -#endif Color currentColor = Color.FromName(name == "DarkYellow" ? "Orange" : name); // bug fix double r = currentColor.R - red; double g = currentColor.G - green; @@ -110,7 +102,7 @@ public static class ColorExtensions /// The color to invert. /// The inverted color. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Color Inverted(this Color color) { return Color.FromArgb(color.A, 255 - color.R, 255 - color.G, 255 - color.B); @@ -128,7 +120,7 @@ public static class ColorExtensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Color WithA(this Color color, int a) { return Color.FromArgb(a, color.R, color.G, color.B); @@ -146,7 +138,7 @@ public static class ColorExtensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Color WithB(this Color color, int b) { return Color.FromArgb(color.A, color.R, color.G, b); @@ -164,7 +156,7 @@ public static class ColorExtensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Color WithG(this Color color, int g) { return Color.FromArgb(color.A, color.R, g, color.B); @@ -182,7 +174,7 @@ public static class ColorExtensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Color WithR(this Color color, int r) { return Color.FromArgb(color.A, r, color.G, color.B); diff --git a/X10D/src/Drawing/PointExtensions.cs b/X10D/src/Drawing/PointExtensions.cs index 6d0b7b7..9153c13 100644 --- a/X10D/src/Drawing/PointExtensions.cs +++ b/X10D/src/Drawing/PointExtensions.cs @@ -21,7 +21,7 @@ public static class PointExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Point point, LineF line) { return ((PointF)point).IsOnLine(line); @@ -38,7 +38,7 @@ public static class PointExtensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Point point, PointF start, PointF end) { return point.IsOnLine(new LineF(start, end)); @@ -55,7 +55,7 @@ public static class PointExtensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Point point, Vector2 start, Vector2 end) { return point.IsOnLine(new LineF(start, end)); @@ -67,7 +67,7 @@ public static class PointExtensions /// The point to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Size ToSize(this Point point) { return new Size(point.X, point.Y); diff --git a/X10D/src/Drawing/PointFExtensions.cs b/X10D/src/Drawing/PointFExtensions.cs index 4207440..bfa0edf 100644 --- a/X10D/src/Drawing/PointFExtensions.cs +++ b/X10D/src/Drawing/PointFExtensions.cs @@ -22,7 +22,7 @@ public static class PointFExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this PointF point, LineF line) { (float x1, float x2) = (line.Start.X, line.End.X); @@ -42,7 +42,7 @@ public static class PointFExtensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this PointF point, PointF start, PointF end) { return point.IsOnLine(new LineF(start, end)); @@ -59,7 +59,7 @@ public static class PointFExtensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this PointF point, Vector2 start, Vector2 end) { return point.IsOnLine(new LineF(start, end)); @@ -71,7 +71,7 @@ public static class PointFExtensions /// The point whose components to round. /// The rounded point. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static PointF Round(this PointF point) { return point.Round(1.0f); @@ -84,7 +84,7 @@ public static class PointFExtensions /// The nearest multiple to which the components should be rounded. /// The rounded point. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static PointF Round(this PointF point, float nearest) { float x = point.X.Round(nearest); @@ -98,7 +98,7 @@ public static class PointFExtensions /// The point to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static SizeF ToSizeF(this PointF point) { return new SizeF(point.X, point.Y); diff --git a/X10D/src/Drawing/SizeExtensions.cs b/X10D/src/Drawing/SizeExtensions.cs index 5276c4b..dcf3058 100644 --- a/X10D/src/Drawing/SizeExtensions.cs +++ b/X10D/src/Drawing/SizeExtensions.cs @@ -17,7 +17,7 @@ public static class SizeExtensions /// The size to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Point ToPoint(this Size size) { return new Point(size.Width, size.Height); @@ -29,7 +29,7 @@ public static class SizeExtensions /// The size to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static PointF ToPointF(this Size size) { return new PointF(size.Width, size.Height); @@ -41,7 +41,7 @@ public static class SizeExtensions /// The size to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector2 ToVector2(this Size size) { return new Vector2(size.Width, size.Height); diff --git a/X10D/src/ExceptionMessages.Designer.cs b/X10D/src/ExceptionMessages.Designer.cs index 8d6c6b6..f5ba95d 100644 --- a/X10D/src/ExceptionMessages.Designer.cs +++ b/X10D/src/ExceptionMessages.Designer.cs @@ -150,7 +150,7 @@ namespace X10D { } /// - /// Looks up a localized string similar to The enum has a size that is not supported.. + /// Looks up a localized string similar to Enum has unexpected size of {0} bytes.. /// internal static string EnumSizeIsUnexpected { get { diff --git a/X10D/src/ExceptionMessages.resx b/X10D/src/ExceptionMessages.resx index f9dcc1e..5bb74e3 100644 --- a/X10D/src/ExceptionMessages.resx +++ b/X10D/src/ExceptionMessages.resx @@ -145,7 +145,7 @@ Type provided must be an Enum. - The enum has a size that is not supported. + Enum has unexpected size of {0} bytes. The specified object is not a valid type. diff --git a/X10D/src/IO/DecimalExtensions.cs b/X10D/src/IO/DecimalExtensions.cs index 5b82682..68b9a6e 100644 --- a/X10D/src/IO/DecimalExtensions.cs +++ b/X10D/src/IO/DecimalExtensions.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Diagnostics.Contracts; using System.Runtime.InteropServices; @@ -17,7 +18,7 @@ public static class DecimalExtensions public static byte[] GetBigEndianBytes(this decimal value) { Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -30,7 +31,7 @@ public static class DecimalExtensions public static byte[] GetLittleEndianBytes(this decimal value) { Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -40,15 +41,15 @@ public static class DecimalExtensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this decimal value, Span destination) + public static bool TryWriteBigEndianBytes(this decimal value, Span destination) { Span buffer = stackalloc int[4]; GetBits(value, buffer); - if (buffer[0].TryWriteBigEndian(destination[..4]) && - buffer[1].TryWriteBigEndian(destination[4..8]) && - buffer[2].TryWriteBigEndian(destination[8..12]) && - buffer[3].TryWriteBigEndian(destination[12..])) + if (buffer[0].TryWriteBigEndianBytes(destination[..4]) && + buffer[1].TryWriteBigEndianBytes(destination[4..8]) && + buffer[2].TryWriteBigEndianBytes(destination[8..12]) && + buffer[3].TryWriteBigEndianBytes(destination[12..])) { if (BitConverter.IsLittleEndian) { @@ -68,15 +69,15 @@ public static class DecimalExtensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this decimal value, Span destination) + public static bool TryWriteLittleEndianBytes(this decimal value, Span destination) { Span buffer = stackalloc int[4]; GetBits(value, buffer); - if (buffer[0].TryWriteLittleEndian(destination[..4]) && - buffer[1].TryWriteLittleEndian(destination[4..8]) && - buffer[2].TryWriteLittleEndian(destination[8..12]) && - buffer[3].TryWriteLittleEndian(destination[12..])) + if (buffer[0].TryWriteLittleEndianBytes(destination[..4]) && + buffer[1].TryWriteLittleEndianBytes(destination[4..8]) && + buffer[2].TryWriteLittleEndianBytes(destination[8..12]) && + buffer[3].TryWriteLittleEndianBytes(destination[12..])) { if (!BitConverter.IsLittleEndian) { @@ -92,15 +93,10 @@ public static class DecimalExtensions private static void GetBits(decimal value, Span destination) { -#if NET5_0_OR_GREATER - decimal.GetBits(value, destination); -#else - Span buffer = stackalloc byte[16]; - MemoryMarshal.Write(buffer, ref value); - WriteBits(destination, buffer); -#endif + _ = decimal.GetBits(value, destination); } +#if !NET5_0_OR_GREATER private static void WriteBits(Span destination, Span buffer) { var flags = MemoryMarshal.Read(buffer[..4]); @@ -115,4 +111,5 @@ public static class DecimalExtensions destination[2] = hi; destination[3] = flags; } +#endif } diff --git a/X10D/src/IO/DoubleExtensions.cs b/X10D/src/IO/DoubleExtensions.cs index 327604e..8856c79 100644 --- a/X10D/src/IO/DoubleExtensions.cs +++ b/X10D/src/IO/DoubleExtensions.cs @@ -18,7 +18,7 @@ public static class DoubleExtensions public static byte[] GetBigEndianBytes(this double value) { Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -31,7 +31,7 @@ public static class DoubleExtensions public static byte[] GetLittleEndianBytes(this double value) { Span buffer = stackalloc byte[8]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -41,19 +41,9 @@ public static class DoubleExtensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this double value, Span destination) + public static bool TryWriteBigEndianBytes(this double value, Span destination) { -#if NET5_0_OR_GREATER return BinaryPrimitives.TryWriteDoubleBigEndian(destination, value); -#else - if (BitConverter.IsLittleEndian) - { - long tmp = BinaryPrimitives.ReverseEndianness(BitConverter.DoubleToInt64Bits(value)); - return MemoryMarshal.TryWrite(destination, ref tmp); - } - - return MemoryMarshal.TryWrite(destination, ref value); -#endif } /// @@ -62,18 +52,8 @@ public static class DoubleExtensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this double value, Span destination) + public static bool TryWriteLittleEndianBytes(this double value, Span destination) { -#if NET5_0_OR_GREATER return BinaryPrimitives.TryWriteDoubleLittleEndian(destination, value); -#else - if (BitConverter.IsLittleEndian) - { - return MemoryMarshal.TryWrite(destination, ref value); - } - - long tmp = BinaryPrimitives.ReverseEndianness(BitConverter.DoubleToInt64Bits(value)); - return MemoryMarshal.TryWrite(destination, ref tmp); -#endif } } diff --git a/X10D/src/IO/Int16Extensions.cs b/X10D/src/IO/Int16Extensions.cs index 82cda58..af81b2d 100644 --- a/X10D/src/IO/Int16Extensions.cs +++ b/X10D/src/IO/Int16Extensions.cs @@ -17,7 +17,7 @@ public static class Int16Extensions public static byte[] GetBigEndianBytes(this short value) { Span buffer = stackalloc byte[2]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -30,7 +30,7 @@ public static class Int16Extensions public static byte[] GetLittleEndianBytes(this short value) { Span buffer = stackalloc byte[2]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -40,7 +40,7 @@ public static class Int16Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this short value, Span destination) + public static bool TryWriteBigEndianBytes(this short value, Span destination) { return BinaryPrimitives.TryWriteInt16BigEndian(destination, value); } @@ -51,7 +51,7 @@ public static class Int16Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this short value, Span destination) + public static bool TryWriteLittleEndianBytes(this short value, Span destination) { return BinaryPrimitives.TryWriteInt16LittleEndian(destination, value); } diff --git a/X10D/src/IO/Int32Extensions.cs b/X10D/src/IO/Int32Extensions.cs index 4a24df2..0556ab6 100644 --- a/X10D/src/IO/Int32Extensions.cs +++ b/X10D/src/IO/Int32Extensions.cs @@ -17,7 +17,7 @@ public static class Int32Extensions public static byte[] GetBigEndianBytes(this int value) { Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -30,7 +30,7 @@ public static class Int32Extensions public static byte[] GetLittleEndianBytes(this int value) { Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -40,7 +40,7 @@ public static class Int32Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this int value, Span destination) + public static bool TryWriteBigEndianBytes(this int value, Span destination) { return BinaryPrimitives.TryWriteInt32BigEndian(destination, value); } @@ -51,7 +51,7 @@ public static class Int32Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this int value, Span destination) + public static bool TryWriteLittleEndianBytes(this int value, Span destination) { return BinaryPrimitives.TryWriteInt32LittleEndian(destination, value); } diff --git a/X10D/src/IO/Int64Extensions.cs b/X10D/src/IO/Int64Extensions.cs index 869d325..447c794 100644 --- a/X10D/src/IO/Int64Extensions.cs +++ b/X10D/src/IO/Int64Extensions.cs @@ -17,7 +17,7 @@ public static class Int64Extensions public static byte[] GetBigEndianBytes(this long value) { Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -30,7 +30,7 @@ public static class Int64Extensions public static byte[] GetLittleEndianBytes(this long value) { Span buffer = stackalloc byte[8]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -40,7 +40,7 @@ public static class Int64Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this long value, Span destination) + public static bool TryWriteBigEndianBytes(this long value, Span destination) { return BinaryPrimitives.TryWriteInt64BigEndian(destination, value); } @@ -51,7 +51,7 @@ public static class Int64Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this long value, Span destination) + public static bool TryWriteLittleEndianBytes(this long value, Span destination) { return BinaryPrimitives.TryWriteInt64LittleEndian(destination, value); } diff --git a/X10D/src/IO/SingleExtensions.cs b/X10D/src/IO/SingleExtensions.cs index 670ae34..6e65001 100644 --- a/X10D/src/IO/SingleExtensions.cs +++ b/X10D/src/IO/SingleExtensions.cs @@ -20,7 +20,7 @@ public static class SingleExtensions public static byte[] GetBigEndianBytes(this float value) { Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -33,7 +33,7 @@ public static class SingleExtensions public static byte[] GetLittleEndianBytes(this float value) { Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -43,19 +43,9 @@ public static class SingleExtensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this float value, Span destination) + public static bool TryWriteBigEndianBytes(this float value, Span destination) { -#if NET5_0_OR_GREATER return BinaryPrimitives.TryWriteSingleBigEndian(destination, value); -#else - if (BitConverter.IsLittleEndian) - { - int tmp = BinaryPrimitives.ReverseEndianness(BitConverter.SingleToInt32Bits(value)); - return MemoryMarshal.TryWrite(destination, ref tmp); - } - - return MemoryMarshal.TryWrite(destination, ref value); -#endif } /// @@ -64,18 +54,8 @@ public static class SingleExtensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this float value, Span destination) + public static bool TryWriteLittleEndianBytes(this float value, Span destination) { -#if NET5_0_OR_GREATER return BinaryPrimitives.TryWriteSingleLittleEndian(destination, value); -#else - if (BitConverter.IsLittleEndian) - { - return MemoryMarshal.TryWrite(destination, ref value); - } - - int tmp = BinaryPrimitives.ReverseEndianness(BitConverter.SingleToInt32Bits(value)); - return MemoryMarshal.TryWrite(destination, ref tmp); -#endif } } diff --git a/X10D/src/IO/StreamExtensions.Reading.cs b/X10D/src/IO/StreamExtensions.Reading.cs index 6d75187..3a32554 100644 --- a/X10D/src/IO/StreamExtensions.Reading.cs +++ b/X10D/src/IO/StreamExtensions.Reading.cs @@ -1,5 +1,4 @@ using System.Buffers.Binary; -using System.Runtime.InteropServices; namespace X10D.IO; @@ -40,11 +39,7 @@ public static partial class StreamExtensions buffer.Reverse(); } -#if NET5_0_OR_GREATER return new decimal(buffer); -#else - return new decimal(buffer.ToArray()); -#endif } /// @@ -82,11 +77,7 @@ public static partial class StreamExtensions buffer.Reverse(); } -#if NET5_0_OR_GREATER return new decimal(buffer); -#else - return new decimal(buffer.ToArray()); -#endif } /// @@ -110,16 +101,7 @@ public static partial class StreamExtensions Span buffer = stackalloc byte[8]; _ = stream.Read(buffer); -#if NET5_0_OR_GREATER return BinaryPrimitives.ReadDoubleBigEndian(buffer); -#else - if (BitConverter.IsLittleEndian) - { - buffer.Reverse(); - } - - return MemoryMarshal.Read(buffer); -#endif } /// @@ -144,16 +126,7 @@ public static partial class StreamExtensions Span buffer = stackalloc byte[8]; _ = stream.Read(buffer); -#if NET5_0_OR_GREATER return BinaryPrimitives.ReadDoubleLittleEndian(buffer); -#else - if (!BitConverter.IsLittleEndian) - { - buffer.Reverse(); - } - - return MemoryMarshal.Read(buffer); -#endif } /// @@ -323,16 +296,7 @@ public static partial class StreamExtensions Span buffer = stackalloc byte[4]; _ = stream.Read(buffer); -#if NET5_0_OR_GREATER return BinaryPrimitives.ReadSingleBigEndian(buffer); -#else - if (BitConverter.IsLittleEndian) - { - buffer.Reverse(); - } - - return MemoryMarshal.Read(buffer); -#endif } /// @@ -358,16 +322,7 @@ public static partial class StreamExtensions Span buffer = stackalloc byte[4]; _ = stream.Read(buffer); -#if NET5_0_OR_GREATER return BinaryPrimitives.ReadSingleLittleEndian(buffer); -#else - if (!BitConverter.IsLittleEndian) - { - buffer.Reverse(); - } - - return MemoryMarshal.Read(buffer); -#endif } /// @@ -396,7 +351,8 @@ public static partial class StreamExtensions } /// - /// Reads an from the current stream as little endian, and advances the stream position by two bytes. + /// Reads an from the current stream as little endian, and advances the stream position by two + /// bytes. /// /// The stream from which the value should be read. /// The little endian value. diff --git a/X10D/src/IO/StreamExtensions.Writing.cs b/X10D/src/IO/StreamExtensions.Writing.cs index faede4a..a9a55b4 100644 --- a/X10D/src/IO/StreamExtensions.Writing.cs +++ b/X10D/src/IO/StreamExtensions.Writing.cs @@ -25,7 +25,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[2]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -50,7 +50,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -75,7 +75,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -101,7 +101,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[2]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -127,7 +127,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -153,7 +153,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -178,7 +178,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -204,7 +204,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -230,7 +230,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[16]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -255,7 +255,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[2]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -280,7 +280,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -305,7 +305,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[8]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -330,7 +330,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -356,7 +356,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[8]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } @@ -382,7 +382,7 @@ public static partial class StreamExtensions } Span buffer = stackalloc byte[16]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return stream.WriteInternal(buffer); } diff --git a/X10D/src/IO/UInt16Extensions.cs b/X10D/src/IO/UInt16Extensions.cs index 569516f..972281a 100644 --- a/X10D/src/IO/UInt16Extensions.cs +++ b/X10D/src/IO/UInt16Extensions.cs @@ -18,7 +18,7 @@ public static class UInt16Extensions public static byte[] GetBigEndianBytes(this ushort value) { Span buffer = stackalloc byte[2]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -31,7 +31,7 @@ public static class UInt16Extensions public static byte[] GetLittleEndianBytes(this ushort value) { Span buffer = stackalloc byte[2]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -41,7 +41,7 @@ public static class UInt16Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this ushort value, Span destination) + public static bool TryWriteBigEndianBytes(this ushort value, Span destination) { return BinaryPrimitives.TryWriteUInt16BigEndian(destination, value); } @@ -52,7 +52,7 @@ public static class UInt16Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this ushort value, Span destination) + public static bool TryWriteLittleEndianBytes(this ushort value, Span destination) { return BinaryPrimitives.TryWriteUInt16LittleEndian(destination, value); } diff --git a/X10D/src/IO/UInt32Extensions.cs b/X10D/src/IO/UInt32Extensions.cs index 3af3cce..099a87d 100644 --- a/X10D/src/IO/UInt32Extensions.cs +++ b/X10D/src/IO/UInt32Extensions.cs @@ -18,7 +18,7 @@ public static class UInt32Extensions public static byte[] GetBigEndianBytes(this uint value) { Span buffer = stackalloc byte[4]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -31,7 +31,7 @@ public static class UInt32Extensions public static byte[] GetLittleEndianBytes(this uint value) { Span buffer = stackalloc byte[4]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -41,7 +41,7 @@ public static class UInt32Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this uint value, Span destination) + public static bool TryWriteBigEndianBytes(this uint value, Span destination) { return BinaryPrimitives.TryWriteUInt32BigEndian(destination, value); } @@ -52,7 +52,7 @@ public static class UInt32Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this uint value, Span destination) + public static bool TryWriteLittleEndianBytes(this uint value, Span destination) { return BinaryPrimitives.TryWriteUInt32LittleEndian(destination, value); } diff --git a/X10D/src/IO/UInt64Extensions.cs b/X10D/src/IO/UInt64Extensions.cs index 0ca5725..bd9305c 100644 --- a/X10D/src/IO/UInt64Extensions.cs +++ b/X10D/src/IO/UInt64Extensions.cs @@ -18,7 +18,7 @@ public static class UInt64Extensions public static byte[] GetBigEndianBytes(this ulong value) { Span buffer = stackalloc byte[8]; - value.TryWriteBigEndian(buffer); + value.TryWriteBigEndianBytes(buffer); return buffer.ToArray(); } @@ -31,7 +31,7 @@ public static class UInt64Extensions public static byte[] GetLittleEndianBytes(this ulong value) { Span buffer = stackalloc byte[8]; - value.TryWriteLittleEndian(buffer); + value.TryWriteLittleEndianBytes(buffer); return buffer.ToArray(); } @@ -41,7 +41,7 @@ public static class UInt64Extensions /// The value. /// The span of bytes where the value is to be written, as big endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteBigEndian(this ulong value, Span destination) + public static bool TryWriteBigEndianBytes(this ulong value, Span destination) { return BinaryPrimitives.TryWriteUInt64BigEndian(destination, value); } @@ -52,7 +52,7 @@ public static class UInt64Extensions /// The value. /// The span of bytes where the value is to be written, as little endian. /// if the conversion was successful; otherwise, . - public static bool TryWriteLittleEndian(this ulong value, Span destination) + public static bool TryWriteLittleEndianBytes(this ulong value, Span destination) { return BinaryPrimitives.TryWriteUInt64LittleEndian(destination, value); } diff --git a/X10D/src/Linq/EnumerableExtensions.cs b/X10D/src/Linq/EnumerableExtensions.cs index 74ac802..25db9a3 100644 --- a/X10D/src/Linq/EnumerableExtensions.cs +++ b/X10D/src/Linq/EnumerableExtensions.cs @@ -1,6 +1,4 @@ -#if NET5_0_OR_GREATER using System.Runtime.InteropServices; -#endif namespace X10D.Linq; @@ -389,11 +387,9 @@ public static class EnumerableExtensions span = array; break; -#if NET5_0_OR_GREATER case List list: span = CollectionsMarshal.AsSpan(list); break; -#endif default: span = default; diff --git a/X10D/src/Math/BigIntegerExtensions.cs b/X10D/src/Math/BigIntegerExtensions.cs index ea9aabf..79c936c 100644 --- a/X10D/src/Math/BigIntegerExtensions.cs +++ b/X10D/src/Math/BigIntegerExtensions.cs @@ -37,7 +37,7 @@ public static class BigIntegerExtensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int DigitalRoot(this BigInteger value) { BigInteger root = BigInteger.Abs(value).Mod(9); @@ -52,7 +52,7 @@ public static class BigIntegerExtensions /// The factorial of . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger Factorial(this BigInteger value) { if (value < 0) @@ -81,7 +81,7 @@ public static class BigIntegerExtensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger GreatestCommonFactor(this BigInteger value, BigInteger other) { while (other != 0) @@ -101,7 +101,7 @@ public static class BigIntegerExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this BigInteger value) { return !value.IsEven; @@ -115,7 +115,7 @@ public static class BigIntegerExtensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this BigInteger value) { if (value <= 1) @@ -151,7 +151,7 @@ public static class BigIntegerExtensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger LowestCommonMultiple(this BigInteger value, BigInteger other) { if (value == 0 || other == 0) @@ -188,7 +188,7 @@ public static class BigIntegerExtensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger Mod(this BigInteger dividend, BigInteger divisor) { BigInteger r = dividend % divisor; @@ -205,7 +205,7 @@ public static class BigIntegerExtensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this BigInteger value) { var persistence = 0; @@ -250,7 +250,7 @@ public static class BigIntegerExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger Wrap(this BigInteger value, BigInteger low, BigInteger high) { BigInteger difference = high - low; @@ -264,7 +264,7 @@ public static class BigIntegerExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static BigInteger Wrap(this BigInteger value, BigInteger length) { return ((value % length) + length) % length; diff --git a/X10D/src/Math/BinaryIntegerExtensions.cs b/X10D/src/Math/BinaryIntegerExtensions.cs index 3e5fd21..5b460c9 100644 --- a/X10D/src/Math/BinaryIntegerExtensions.cs +++ b/X10D/src/Math/BinaryIntegerExtensions.cs @@ -17,7 +17,7 @@ public static class BinaryIntegerExtensions /// The value whose digit count to compute. /// The number of digits in . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int CountDigits(this TInteger value) where TInteger : IBinaryInteger { @@ -40,7 +40,7 @@ public static class BinaryIntegerExtensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int DigitalRoot(this TInteger value) where TInteger : IBinaryInteger { diff --git a/X10D/src/Math/ByteExtensions.cs b/X10D/src/Math/ByteExtensions.cs index 60f59bd..500988d 100644 --- a/X10D/src/Math/ByteExtensions.cs +++ b/X10D/src/Math/ByteExtensions.cs @@ -36,7 +36,7 @@ public static class ByteExtensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte DigitalRoot(this byte value) { int root = value % 9; @@ -50,7 +50,7 @@ public static class ByteExtensions /// The value whose factorial to compute. /// The factorial of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Factorial(this byte value) { if (value == 0) @@ -74,7 +74,7 @@ public static class ByteExtensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte GreatestCommonFactor(this byte value, byte other) { return (byte)((long)value).GreatestCommonFactor(other); @@ -89,7 +89,7 @@ public static class ByteExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this byte value) { return (value & 1) == 0; @@ -104,7 +104,7 @@ public static class ByteExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this byte value) { return !value.IsEven(); @@ -130,7 +130,7 @@ public static class ByteExtensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte LowestCommonMultiple(this byte value, byte other) { return (byte)((long)value).LowestCommonMultiple(other); @@ -145,7 +145,7 @@ public static class ByteExtensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this byte value) { return ((long)value).MultiplicativePersistence(); @@ -159,7 +159,7 @@ public static class ByteExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte Wrap(this byte value, byte low, byte high) { return (byte)((ulong)value).Wrap(low, high); @@ -172,7 +172,7 @@ public static class ByteExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte Wrap(this byte value, byte length) { return (byte)((ulong)value).Wrap(length); diff --git a/X10D/src/Math/ComparableExtensions.cs b/X10D/src/Math/ComparableExtensions.cs index 9aea7fc..c206dca 100644 --- a/X10D/src/Math/ComparableExtensions.cs +++ b/X10D/src/Math/ComparableExtensions.cs @@ -49,7 +49,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Between(this T1 value, T2 lower, T3 upper, InclusiveOptions inclusiveOptions = InclusiveOptions.None) where T1 : IComparable, IComparable @@ -106,7 +106,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static T Clamp(this T value, T lower, T upper) where T : IComparable { @@ -148,7 +148,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool GreaterThan(this T1 value, T2 other) where T1 : IComparable { @@ -183,7 +183,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool GreaterThanOrEqualTo(this T1 value, T2 other) where T1 : IComparable { @@ -218,7 +218,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool LessThan(this T1 value, T2 other) where T1 : IComparable { @@ -253,7 +253,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool LessThanOrEqualTo(this T1 value, T2 other) where T1 : IComparable { @@ -287,7 +287,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static T Max(this T value, T other) where T : IComparable { @@ -321,7 +321,7 @@ public static class ComparableExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static T Min(this T value, T other) where T : IComparable { diff --git a/X10D/src/Math/DecimalExtensions.cs b/X10D/src/Math/DecimalExtensions.cs index 6c8bc4f..1aa678d 100644 --- a/X10D/src/Math/DecimalExtensions.cs +++ b/X10D/src/Math/DecimalExtensions.cs @@ -16,7 +16,7 @@ public static class DecimalExtensions /// The number whose square root is to be found. /// The square root of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Complex ComplexSqrt(this decimal value) { return Complex.Sqrt((double)value); @@ -31,7 +31,7 @@ public static class DecimalExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this decimal value) { return value % 2.0m == 0.0m; @@ -46,7 +46,7 @@ public static class DecimalExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this decimal value) { return !value.IsEven(); @@ -58,7 +58,7 @@ public static class DecimalExtensions /// The value to round. /// rounded to the nearest whole number. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Round(this decimal value) { return value.Round(1.0m); @@ -71,7 +71,7 @@ public static class DecimalExtensions /// The nearest multiple to which should be rounded. /// rounded to the nearest multiple of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Round(this decimal value, decimal nearest) { return System.Math.Round(value / nearest) * nearest; @@ -84,7 +84,7 @@ public static class DecimalExtensions /// The saturated value. /// This method clamps between 0 and 1. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Saturate(this decimal value) { return System.Math.Clamp(value, 0.0m, 1.0m); @@ -118,7 +118,7 @@ public static class DecimalExtensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this decimal value) { return System.Math.Sign(value); @@ -153,7 +153,7 @@ public static class DecimalExtensions /// /// is negative. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Sqrt(this decimal value) { switch (value) @@ -183,7 +183,7 @@ public static class DecimalExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Wrap(this decimal value, decimal low, decimal high) { decimal difference = high - low; @@ -197,7 +197,7 @@ public static class DecimalExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static decimal Wrap(this decimal value, decimal length) { return ((value % length) + length) % length; diff --git a/X10D/src/Math/DoubleExtensions.cs b/X10D/src/Math/DoubleExtensions.cs index ac05e03..51a7b7a 100644 --- a/X10D/src/Math/DoubleExtensions.cs +++ b/X10D/src/Math/DoubleExtensions.cs @@ -21,7 +21,7 @@ public static class DoubleExtensions /// is equal to , less than -1, or greater than 1, is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Acos(this double value) { return System.Math.Acos(value); @@ -39,7 +39,7 @@ public static class DoubleExtensions /// is less than 1 or equal to , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Acosh(this double value) { return System.Math.Acosh(value); @@ -57,7 +57,7 @@ public static class DoubleExtensions /// is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Asin(this double value) { return System.Math.Asin(value); @@ -75,7 +75,7 @@ public static class DoubleExtensions /// , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Asinh(this double value) { return System.Math.Asinh(value); @@ -92,7 +92,7 @@ public static class DoubleExtensions /// is equal to , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Atan(this double value) { return System.Math.Atan(value); @@ -111,7 +111,7 @@ public static class DoubleExtensions /// is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Atanh(this double value) { return System.Math.Atanh(value); @@ -123,7 +123,7 @@ public static class DoubleExtensions /// The number whose square root is to be found. /// The square root of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Complex ComplexSqrt(this double value) { switch (value) @@ -153,7 +153,7 @@ public static class DoubleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Cos(this double value) { return System.Math.Cos(value); @@ -170,7 +170,7 @@ public static class DoubleExtensions /// , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Cosh(this double value) { return System.Math.Cosh(value); @@ -182,7 +182,7 @@ public static class DoubleExtensions /// The angle in degrees to convert. /// The result of π * / 180. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double DegreesToRadians(this double value) { return value * (System.Math.PI / 180.0); @@ -197,7 +197,7 @@ public static class DoubleExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this double value) { return System.Math.Abs(value % 2.0) < double.Epsilon; @@ -212,7 +212,7 @@ public static class DoubleExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this double value) { return !value.IsEven(); @@ -224,7 +224,7 @@ public static class DoubleExtensions /// The angle in radians to convert. /// The result of π * / 180. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double RadiansToDegrees(this double value) { return value * (180.0 / System.Math.PI); @@ -236,7 +236,7 @@ public static class DoubleExtensions /// The value to round. /// rounded to the nearest whole number. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Round(this double value) { return value.Round(1.0); @@ -249,7 +249,7 @@ public static class DoubleExtensions /// The nearest multiple to which should be rounded. /// rounded to the nearest multiple of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Round(this double value, double nearest) { return System.Math.Round(value / nearest) * nearest; @@ -262,7 +262,7 @@ public static class DoubleExtensions /// The saturated value. /// This method clamps between 0 and 1. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Saturate(this double value) { return System.Math.Clamp(value, 0.0, 1.0); @@ -278,7 +278,7 @@ public static class DoubleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Sin(this double value) { return System.Math.Sin(value); @@ -294,7 +294,7 @@ public static class DoubleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Sinh(this double value) { return System.Math.Sinh(value); @@ -329,7 +329,7 @@ public static class DoubleExtensions /// /// is equal to . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this double value) { return System.Math.Sign(value); @@ -365,7 +365,7 @@ public static class DoubleExtensions /// SLenik https://stackoverflow.com/a/6755197/1467293 /// CC BY-SA 3.0 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Sqrt(this double value) { switch (value) @@ -399,7 +399,7 @@ public static class DoubleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Tan(this double value) { return System.Math.Tan(value); @@ -416,7 +416,7 @@ public static class DoubleExtensions /// , this method returns . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Tanh(this double value) { return System.Math.Tanh(value); @@ -430,7 +430,7 @@ public static class DoubleExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Wrap(this double value, double low, double high) { double difference = high - low; @@ -444,7 +444,7 @@ public static class DoubleExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Wrap(this double value, double length) { return ((value % length) + length) % length; diff --git a/X10D/src/Math/Int16Extensions.cs b/X10D/src/Math/Int16Extensions.cs index ce6c468..dc3cf96 100644 --- a/X10D/src/Math/Int16Extensions.cs +++ b/X10D/src/Math/Int16Extensions.cs @@ -35,7 +35,7 @@ public static class Int16Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short DigitalRoot(this short value) { short root = System.Math.Abs(value).Mod(9); @@ -50,7 +50,7 @@ public static class Int16Extensions /// The factorial of . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Factorial(this short value) { if (value < 0) @@ -79,7 +79,7 @@ public static class Int16Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short GreatestCommonFactor(this short value, short other) { return (short)((long)value).GreatestCommonFactor(other); @@ -94,7 +94,7 @@ public static class Int16Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this short value) { return (value & 1) == 0; @@ -109,7 +109,7 @@ public static class Int16Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this short value) { return !value.IsEven(); @@ -123,7 +123,7 @@ public static class Int16Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this short value) { return ((long)value).IsPrime(); @@ -136,7 +136,7 @@ public static class Int16Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short LowestCommonMultiple(this short value, short other) { return (short)((long)value).LowestCommonMultiple(other); @@ -158,7 +158,7 @@ public static class Int16Extensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short Mod(this short dividend, short divisor) { int r = dividend % divisor; @@ -175,7 +175,7 @@ public static class Int16Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this short value) { return ((long)value).MultiplicativePersistence(); @@ -209,7 +209,7 @@ public static class Int16Extensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this short value) { return System.Math.Sign(value); @@ -223,7 +223,7 @@ public static class Int16Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short Wrap(this short value, short low, short high) { return (short)((long)value).Wrap(low, high); @@ -236,7 +236,7 @@ public static class Int16Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short Wrap(this short value, short length) { return (short)((long)value).Wrap(length); diff --git a/X10D/src/Math/Int32Extensions.cs b/X10D/src/Math/Int32Extensions.cs index 19fd47a..7ed6535 100644 --- a/X10D/src/Math/Int32Extensions.cs +++ b/X10D/src/Math/Int32Extensions.cs @@ -35,7 +35,7 @@ public static class Int32Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int DigitalRoot(this int value) { int root = System.Math.Abs(value).Mod(9); @@ -50,7 +50,7 @@ public static class Int32Extensions /// The factorial of . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Factorial(this int value) { if (value < 0) @@ -79,7 +79,7 @@ public static class Int32Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int GreatestCommonFactor(this int value, int other) { return (int)((long)value).GreatestCommonFactor(other); @@ -94,7 +94,7 @@ public static class Int32Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this int value) { return (value & 1) == 0; @@ -109,7 +109,7 @@ public static class Int32Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this int value) { return !value.IsEven(); @@ -123,7 +123,7 @@ public static class Int32Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this int value) { return ((long)value).IsPrime(); @@ -136,7 +136,7 @@ public static class Int32Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int LowestCommonMultiple(this int value, int other) { return (int)((long)value).LowestCommonMultiple(other); @@ -158,7 +158,7 @@ public static class Int32Extensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Mod(this int dividend, int divisor) { int r = dividend % divisor; @@ -175,7 +175,7 @@ public static class Int32Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this int value) { return ((long)value).MultiplicativePersistence(); @@ -209,7 +209,7 @@ public static class Int32Extensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this int value) { return System.Math.Sign(value); @@ -223,7 +223,7 @@ public static class Int32Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Wrap(this int value, int low, int high) { return (int)((long)value).Wrap(low, high); @@ -236,7 +236,7 @@ public static class Int32Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Wrap(this int value, int length) { return (int)((long)value).Wrap(length); diff --git a/X10D/src/Math/Int64Extensions.cs b/X10D/src/Math/Int64Extensions.cs index 4fd3ab4..64b94e0 100644 --- a/X10D/src/Math/Int64Extensions.cs +++ b/X10D/src/Math/Int64Extensions.cs @@ -35,7 +35,7 @@ public static class Int64Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long DigitalRoot(this long value) { long root = System.Math.Abs(value).Mod(9L); @@ -50,7 +50,7 @@ public static class Int64Extensions /// The factorial of . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Factorial(this long value) { if (value < 0) @@ -79,7 +79,7 @@ public static class Int64Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long GreatestCommonFactor(this long value, long other) { while (other != 0) @@ -99,7 +99,7 @@ public static class Int64Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this long value) { return (value & 1) == 0; @@ -114,7 +114,7 @@ public static class Int64Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this long value) { return !value.IsEven(); @@ -128,7 +128,7 @@ public static class Int64Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this long value) { switch (value) @@ -160,7 +160,7 @@ public static class Int64Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long LowestCommonMultiple(this long value, long other) { if (value == 0 || other == 0) @@ -197,7 +197,7 @@ public static class Int64Extensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Mod(this long dividend, long divisor) { long r = dividend % divisor; @@ -214,7 +214,7 @@ public static class Int64Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this long value) { var persistence = 0; @@ -279,7 +279,7 @@ public static class Int64Extensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this long value) { return System.Math.Sign(value); @@ -293,7 +293,7 @@ public static class Int64Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Wrap(this long value, long low, long high) { long difference = high - low; @@ -307,7 +307,7 @@ public static class Int64Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Wrap(this long value, long length) { return ((value % length) + length) % length; diff --git a/X10D/src/Math/MathUtility.cs b/X10D/src/Math/MathUtility.cs index b1b46b7..3a21e44 100644 --- a/X10D/src/Math/MathUtility.cs +++ b/X10D/src/Math/MathUtility.cs @@ -13,6 +13,121 @@ public static class MathUtility private const double DefaultGamma = 2.2; private const float DefaultGammaF = 2.2f; + /// + /// Calculates exponential decay for a value. + /// + /// The value to decay. + /// A factor by which to scale the decay. + /// The decay amount. + /// The exponentially decayed value. + public static float ExponentialDecay(float value, float alpha, float decay) + { + return value * MathF.Exp(-decay * alpha); + } + + /// + /// Calculates exponential decay for a value. + /// + /// The value to decay. + /// A factor by which to scale the decay. + /// The decay amount. + /// The exponentially decayed value. + public static double ExponentialDecay(double value, double alpha, double decay) + { + return value * System.Math.Exp(-decay * alpha); + } + + /// + /// Converts a gamma-encoded value to a linear value using a gamma value of 2.2. + /// + /// The gamma-encoded value to convert. Expected range is [0, 1]. + /// The linear value. + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static float GammaToLinear(float value) + { + return GammaToLinear(value, DefaultGammaF); + } + + /// + /// Converts a gamma-encoded value to a linear value using the specified gamma value. + /// + /// The gamma-encoded value to convert. Expected range is [0, 1]. + /// The gamma value to use for decoding. + /// The linear value. + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static float GammaToLinear(float value, float gamma) + { + return MathF.Pow(value, 1.0f / gamma); + } + + /// + /// Converts a gamma-encoded value to a linear value using a gamma value of 2.2. + /// + /// The gamma-encoded value to convert. Expected range is [0, 1]. + /// The linear value. + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static double GammaToLinear(double value) + { + return GammaToLinear(value, DefaultGamma); + } + + /// + /// Converts a gamma-encoded value to a linear value using the specified gamma value. + /// + /// The gamma-encoded value to convert. Expected range is [0, 1]. + /// The gamma value to use for decoding. + /// The linear value. + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static double GammaToLinear(double value, double gamma) + { + return System.Math.Pow(value, 1.0 / gamma); + } + + /// + /// Returns the linear interpolation inverse of a value, such that it determines where a value lies between two other + /// values. + /// + /// The value whose lerp inverse is to be found. + /// The start of the range. + /// The end of the range. + /// A value determined by (alpha - start) / (end - start). + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static float InverseLerp(float alpha, float start, float end) + { + if (MathF.Abs(start - end) < float.Epsilon) + { + return 0f; + } + + return (alpha - start) / (end - start); + } + + /// + /// Returns the linear interpolation inverse of a value, such that it determines where a value lies between two other + /// values. + /// + /// The value whose lerp inverse is to be found. + /// The start of the range. + /// The end of the range. + /// A value determined by (alpha - start) / (end - start). + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static double InverseLerp(double alpha, double start, double end) + { + if (System.Math.Abs(start - end) < double.Epsilon) + { + return 0.0; + } + + return (alpha - start) / (end - start); + } + + #if !NET7_0_OR_GREATER /// /// Applies a simple bias function to value. @@ -42,46 +157,6 @@ public static class MathUtility return value / ((1.0 / bias - 2.0) * (1.0 - value) + 1.0); } - /// - /// Returns the linear interpolation inverse of a value, such that it determines where a value lies between two other - /// values. - /// - /// The value whose lerp inverse is to be found. - /// The start of the range. - /// The end of the range. - /// A value determined by (alpha - start) / (end - start). - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static float InverseLerp(float alpha, float start, float end) - { - if (MathF.Abs(start - end) < float.Epsilon) - { - return 0f; - } - - return (alpha - start) / (end - start); - } - - /// - /// Returns the linear interpolation inverse of a value, such that it determines where a value lies between two other - /// values. - /// - /// The value whose lerp inverse is to be found. - /// The start of the range. - /// The end of the range. - /// A value determined by (alpha - start) / (end - start). - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static double InverseLerp(double alpha, double start, double end) - { - if (System.Math.Abs(start - end) < double.Epsilon) - { - return 0.0; - } - - return (alpha - start) / (end - start); - } - /// /// Linearly interpolates from one value to a target using a specified alpha. /// @@ -92,7 +167,7 @@ public static class MathUtility /// The interpolation result as determined by (1 - alpha) * value + alpha * target. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Lerp(float value, float target, float alpha) { // rookie mistake: a + t * (b - a) @@ -110,7 +185,7 @@ public static class MathUtility /// The interpolation result as determined by (1 - alpha) * value + alpha * target. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double Lerp(double value, double target, double alpha) { // rookie mistake: a + t * (b - a) @@ -156,7 +231,7 @@ public static class MathUtility /// The new maximum value. /// The scaled value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float ScaleRange(float value, float oldMin, float oldMax, float newMin, float newMax) { float oldRange = oldMax - oldMin; @@ -175,7 +250,7 @@ public static class MathUtility /// The new maximum value. /// The scaled value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double ScaleRange(double value, double oldMin, double oldMax, double newMin, double newMax) { double oldRange = oldMax - oldMin; @@ -205,87 +280,13 @@ public static class MathUtility } #endif - /// - /// Calculates exponential decay for a value. - /// - /// The value to decay. - /// A factor by which to scale the decay. - /// The decay amount. - /// The exponentially decayed value. - public static float ExponentialDecay(float value, float alpha, float decay) - { - return value * MathF.Exp(-decay * alpha); - } - - /// - /// Calculates exponential decay for a value. - /// - /// The value to decay. - /// A factor by which to scale the decay. - /// The decay amount. - /// The exponentially decayed value. - public static double ExponentialDecay(double value, double alpha, double decay) - { - return value * System.Math.Exp(-decay * alpha); - } - - /// - /// Converts a gamma-encoded value to a linear value using a gamma value of 2.2. - /// - /// The gamma-encoded value to convert. Expected range is [0, 1]. - /// The linear value. - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static float GammaToLinear(float value) - { - return GammaToLinear(value, DefaultGammaF); - } - - /// - /// Converts a gamma-encoded value to a linear value using the specified gamma value. - /// - /// The gamma-encoded value to convert. Expected range is [0, 1]. - /// The gamma value to use for decoding. - /// The linear value. - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static float GammaToLinear(float value, float gamma) - { - return MathF.Pow(value, 1.0f / gamma); - } - - /// - /// Converts a gamma-encoded value to a linear value using a gamma value of 2.2. - /// - /// The gamma-encoded value to convert. Expected range is [0, 1]. - /// The linear value. - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static double GammaToLinear(double value) - { - return GammaToLinear(value, DefaultGamma); - } - - /// - /// Converts a gamma-encoded value to a linear value using the specified gamma value. - /// - /// The gamma-encoded value to convert. Expected range is [0, 1]. - /// The gamma value to use for decoding. - /// The linear value. - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static double GammaToLinear(double value, double gamma) - { - return System.Math.Pow(value, 1.0 / gamma); - } - /// /// Converts a linear value to a gamma-encoded value using a gamma value of 2.2. /// /// The linear value to convert. Expected range is [0, 1]. /// The gamma-encoded value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float LinearToGamma(float value) { return LinearToGamma(value, DefaultGammaF); @@ -298,7 +299,7 @@ public static class MathUtility /// The gamma value to use for encoding. /// The gamma-encoded value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float LinearToGamma(float value, float gamma) { return MathF.Pow(value, 1.0f / gamma); @@ -310,7 +311,7 @@ public static class MathUtility /// The linear value to convert. Expected range is [0, 1]. /// The gamma-encoded value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double LinearToGamma(double value) { return LinearToGamma(value, DefaultGamma); @@ -323,7 +324,7 @@ public static class MathUtility /// The gamma value to use for encoding. /// The gamma-encoded value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static double LinearToGamma(double value, double gamma) { return System.Math.Pow(value, 1.0 / gamma); @@ -342,15 +343,7 @@ public static class MathUtility public static float Pulse(float value, float lowerBound, float upperBound) { bool result = lowerBound <= value && value <= upperBound; -#if NET6_0_OR_GREATER return Unsafe.As(ref result); -#else - unsafe - { - var pResult = (int*)&result; - return *pResult; - } -#endif } /// @@ -366,15 +359,7 @@ public static class MathUtility public static double Pulse(double value, double lowerBound, double upperBound) { bool result = lowerBound <= value && value <= upperBound; -#if NET6_0_OR_GREATER return Unsafe.As(ref result); -#else - unsafe - { - var pResult = (int*)&result; - return *pResult; - } -#endif } /// @@ -422,27 +407,6 @@ public static class MathUtility return value / ((identity / bias - TNumber.CreateChecked(2)) * (identity - value) + identity); } - /// - /// Returns the linear interpolation inverse of a value, such that it determines where a value lies between two other - /// values. - /// - /// The value whose lerp inverse is to be found. - /// The start of the range. - /// The end of the range. - /// A value determined by (alpha - start) / (end - start). - [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] - public static TNumber InverseLerp(TNumber alpha, TNumber start, TNumber end) - where TNumber : INumber - { - if (start == end) - { - return TNumber.Zero; - } - - return (alpha - start) / (end - start); - } - /// /// Linearly interpolates from one value to a target using a specified alpha. /// @@ -453,7 +417,7 @@ public static class MathUtility /// The interpolation result as determined by (1 - alpha) * value + alpha * target. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TNumber Lerp(TNumber value, TNumber target, TNumber alpha) where TNumber : INumber { @@ -483,7 +447,7 @@ public static class MathUtility /// The new maximum value. /// The scaled value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TNumber ScaleRange(TNumber value, TNumber oldMin, TNumber oldMax, TNumber newMin, TNumber newMax) where TNumber : INumber { diff --git a/X10D/src/Math/NumberExtensions.cs b/X10D/src/Math/NumberExtensions.cs index cd331e0..3a058c5 100644 --- a/X10D/src/Math/NumberExtensions.cs +++ b/X10D/src/Math/NumberExtensions.cs @@ -20,7 +20,7 @@ public static class NumberExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this TNumber value) where TNumber : INumber { @@ -36,7 +36,7 @@ public static class NumberExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this TNumber value) where TNumber : INumber { @@ -58,7 +58,7 @@ public static class NumberExtensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TNumber Mod(this TNumber dividend, TNumber divisor) where TNumber : INumber { @@ -94,7 +94,7 @@ public static class NumberExtensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this TNumber value) where TNumber : INumber { diff --git a/X10D/src/Math/SByteExtensions.cs b/X10D/src/Math/SByteExtensions.cs index b92e3c4..00cfa04 100644 --- a/X10D/src/Math/SByteExtensions.cs +++ b/X10D/src/Math/SByteExtensions.cs @@ -36,7 +36,7 @@ public static class SByteExtensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte DigitalRoot(this sbyte value) { int root = System.Math.Abs(value).Mod(9); @@ -51,7 +51,7 @@ public static class SByteExtensions /// The factorial of . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long Factorial(this sbyte value) { if (value < 0) @@ -80,7 +80,7 @@ public static class SByteExtensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte GreatestCommonFactor(this sbyte value, sbyte other) { return (sbyte)((long)value).GreatestCommonFactor(other); @@ -95,7 +95,7 @@ public static class SByteExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this sbyte value) { return (value & 1) == 0; @@ -110,7 +110,7 @@ public static class SByteExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this sbyte value) { return !value.IsEven(); @@ -124,7 +124,7 @@ public static class SByteExtensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this sbyte value) { return ((long)value).IsPrime(); @@ -137,7 +137,7 @@ public static class SByteExtensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte LowestCommonMultiple(this sbyte value, sbyte other) { return (sbyte)((long)value).LowestCommonMultiple(other); @@ -159,7 +159,7 @@ public static class SByteExtensions /// ShreevatsaR, https://stackoverflow.com/a/1082938/1467293 /// CC-BY-SA 2.5 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte Mod(this sbyte dividend, sbyte divisor) { int r = dividend % divisor; @@ -176,7 +176,7 @@ public static class SByteExtensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this sbyte value) { return ((long)value).MultiplicativePersistence(); @@ -210,7 +210,7 @@ public static class SByteExtensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this sbyte value) { return System.Math.Sign(value); @@ -224,7 +224,7 @@ public static class SByteExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte Wrap(this sbyte value, sbyte low, sbyte high) { return (sbyte)((long)value).Wrap(low, high); @@ -237,7 +237,7 @@ public static class SByteExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte Wrap(this sbyte value, sbyte length) { return (sbyte)((long)value).Wrap(length); diff --git a/X10D/src/Math/SingleExtensions.cs b/X10D/src/Math/SingleExtensions.cs index 296ec03..9e70592 100644 --- a/X10D/src/Math/SingleExtensions.cs +++ b/X10D/src/Math/SingleExtensions.cs @@ -21,7 +21,7 @@ public static class SingleExtensions /// is equal to , less than -1, or greater than 1, is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Acos(this float value) { return MathF.Acos(value); @@ -39,7 +39,7 @@ public static class SingleExtensions /// is less than 1 or equal to , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Acosh(this float value) { return MathF.Acosh(value); @@ -57,7 +57,7 @@ public static class SingleExtensions /// is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Asin(this float value) { return MathF.Asin(value); @@ -75,7 +75,7 @@ public static class SingleExtensions /// , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Asinh(this float value) { return MathF.Asinh(value); @@ -92,7 +92,7 @@ public static class SingleExtensions /// is equal to , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Atan(this float value) { return MathF.Atan(value); @@ -111,7 +111,7 @@ public static class SingleExtensions /// is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Atanh(this float value) { return MathF.Atanh(value); @@ -123,7 +123,7 @@ public static class SingleExtensions /// The number whose square root is to be found. /// The square root of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Complex ComplexSqrt(this float value) { switch (value) @@ -153,7 +153,7 @@ public static class SingleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Cos(this float value) { return MathF.Cos(value); @@ -170,7 +170,7 @@ public static class SingleExtensions /// , is returned. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Cosh(this float value) { return MathF.Cosh(value); @@ -182,7 +182,7 @@ public static class SingleExtensions /// The angle in degrees to convert. /// The result of π * / 180. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float DegreesToRadians(this float value) { return value * (MathF.PI / 180.0f); @@ -197,7 +197,7 @@ public static class SingleExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this float value) { return value % 2 == 0; @@ -212,7 +212,7 @@ public static class SingleExtensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this float value) { return !value.IsEven(); @@ -224,7 +224,7 @@ public static class SingleExtensions /// The angle in radians to convert. /// The result of π * / 180. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float RadiansToDegrees(this float value) { return value * (180.0f / MathF.PI); @@ -236,7 +236,7 @@ public static class SingleExtensions /// The value to round. /// rounded to the nearest whole number. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Round(this float value) { return value.Round(1.0f); @@ -249,7 +249,7 @@ public static class SingleExtensions /// The nearest multiple to which should be rounded. /// rounded to the nearest multiple of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Round(this float value, float nearest) { return MathF.Round(value / nearest) * nearest; @@ -262,7 +262,7 @@ public static class SingleExtensions /// The saturated value. /// This method clamps between 0 and 1. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Saturate(this float value) { return System.Math.Clamp(value, 0.0f, 1.0f); @@ -296,7 +296,7 @@ public static class SingleExtensions /// /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Sign(this float value) { return MathF.Sign(value); @@ -332,7 +332,7 @@ public static class SingleExtensions /// SLenik https://stackoverflow.com/a/6755197/1467293 /// CC BY-SA 3.0 [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Sqrt(this float value) { switch (value) @@ -366,7 +366,7 @@ public static class SingleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Sin(this float value) { return MathF.Sin(value); @@ -382,7 +382,7 @@ public static class SingleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Sinh(this float value) { return MathF.Sinh(value); @@ -398,7 +398,7 @@ public static class SingleExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Tan(this float value) { return MathF.Sin(value); @@ -415,7 +415,7 @@ public static class SingleExtensions /// , this method returns . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Tanh(this float value) { return MathF.Tanh(value); @@ -429,7 +429,7 @@ public static class SingleExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Wrap(this float value, float low, float high) { return (float)((double)value).Wrap(low, high); @@ -442,7 +442,7 @@ public static class SingleExtensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static float Wrap(this float value, float length) { return (float)((double)value).Wrap(length); diff --git a/X10D/src/Math/UInt16Extensions.cs b/X10D/src/Math/UInt16Extensions.cs index ad07c30..8479cb2 100644 --- a/X10D/src/Math/UInt16Extensions.cs +++ b/X10D/src/Math/UInt16Extensions.cs @@ -36,7 +36,7 @@ public static class UInt16Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort DigitalRoot(this ushort value) { var root = (ushort)(value % 9); @@ -50,7 +50,7 @@ public static class UInt16Extensions /// The value whose factorial to compute. /// The factorial of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong Factorial(this ushort value) { if (value == 0) @@ -75,7 +75,7 @@ public static class UInt16Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort GreatestCommonFactor(this ushort value, ushort other) { return (ushort)((long)value).GreatestCommonFactor(other); @@ -90,7 +90,7 @@ public static class UInt16Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this ushort value) { return (value & 1) == 0; @@ -104,7 +104,7 @@ public static class UInt16Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this ushort value) { return ((ulong)value).IsPrime(); @@ -119,7 +119,7 @@ public static class UInt16Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this ushort value) { return !value.IsEven(); @@ -133,7 +133,7 @@ public static class UInt16Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort LowestCommonMultiple(this ushort value, ushort other) { return (ushort)((ulong)value).LowestCommonMultiple(other); @@ -148,7 +148,7 @@ public static class UInt16Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this ushort value) { return ((ulong)value).MultiplicativePersistence(); @@ -162,7 +162,7 @@ public static class UInt16Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort Wrap(this ushort value, ushort low, ushort high) { return (ushort)((ulong)value).Wrap(low, high); @@ -175,7 +175,7 @@ public static class UInt16Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort Wrap(this ushort value, ushort length) { return (ushort)((ulong)value).Wrap(length); diff --git a/X10D/src/Math/UInt32Extensions.cs b/X10D/src/Math/UInt32Extensions.cs index d7f6699..6684e4f 100644 --- a/X10D/src/Math/UInt32Extensions.cs +++ b/X10D/src/Math/UInt32Extensions.cs @@ -36,7 +36,7 @@ public static class UInt32Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint DigitalRoot(this uint value) { uint root = value % 9; @@ -50,7 +50,7 @@ public static class UInt32Extensions /// The value whose factorial to compute. /// The factorial of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong Factorial(this uint value) { if (value == 0) @@ -75,7 +75,7 @@ public static class UInt32Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint GreatestCommonFactor(this uint value, uint other) { return (uint)((long)value).GreatestCommonFactor(other); @@ -90,7 +90,7 @@ public static class UInt32Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this uint value) { return (value & 1) == 0; @@ -104,7 +104,7 @@ public static class UInt32Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this uint value) { return ((ulong)value).IsPrime(); @@ -119,7 +119,7 @@ public static class UInt32Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this uint value) { return !value.IsEven(); @@ -133,7 +133,7 @@ public static class UInt32Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint LowestCommonMultiple(this uint value, uint other) { return (uint)((ulong)value).LowestCommonMultiple(other); @@ -148,7 +148,7 @@ public static class UInt32Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this uint value) { return ((ulong)value).MultiplicativePersistence(); @@ -162,7 +162,7 @@ public static class UInt32Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint Wrap(this uint value, uint low, uint high) { return (uint)((ulong)value).Wrap(low, high); @@ -175,7 +175,7 @@ public static class UInt32Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint Wrap(this uint value, uint length) { return (uint)((ulong)value).Wrap(length); diff --git a/X10D/src/Math/UInt64Extensions.cs b/X10D/src/Math/UInt64Extensions.cs index f65a845..dc1e6f1 100644 --- a/X10D/src/Math/UInt64Extensions.cs +++ b/X10D/src/Math/UInt64Extensions.cs @@ -36,7 +36,7 @@ public static class UInt64Extensions /// For example, the digital root of 239 is 5: 2 + 3 + 9 = 14, then 1 + 4 = 5. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong DigitalRoot(this ulong value) { ulong root = value % 9; @@ -50,7 +50,7 @@ public static class UInt64Extensions /// The value whose factorial to compute. /// The factorial of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong Factorial(this ulong value) { if (value == 0) @@ -75,7 +75,7 @@ public static class UInt64Extensions /// The second value. /// The greatest common factor between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong GreatestCommonFactor(this ulong value, ulong other) { while (other != 0) @@ -95,7 +95,7 @@ public static class UInt64Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEven(this ulong value) { return (value & 1) == 0; @@ -109,7 +109,7 @@ public static class UInt64Extensions /// if is prime; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPrime(this ulong value) { switch (value) @@ -143,7 +143,7 @@ public static class UInt64Extensions /// otherwise. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOdd(this ulong value) { return !value.IsEven(); @@ -157,7 +157,7 @@ public static class UInt64Extensions /// The second value. /// The lowest common multiple between and . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong LowestCommonMultiple(this ulong value, ulong other) { if (value == 0 || other == 0) @@ -187,7 +187,7 @@ public static class UInt64Extensions /// Multiplicative persistence is defined as the recursive digital product until that product is a single digit. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int MultiplicativePersistence(this ulong value) { var persistence = 0; @@ -232,7 +232,7 @@ public static class UInt64Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong Wrap(this ulong value, ulong low, ulong high) { ulong difference = high - low; @@ -246,7 +246,7 @@ public static class UInt64Extensions /// The exclusive upper bound. /// The wrapped value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong Wrap(this ulong value, ulong length) { return ((value % length) + length) % length; diff --git a/X10D/src/Net/EndPointExtensions.cs b/X10D/src/Net/EndPointExtensions.cs index 05f8755..cb9c42e 100644 --- a/X10D/src/Net/EndPointExtensions.cs +++ b/X10D/src/Net/EndPointExtensions.cs @@ -23,7 +23,7 @@ public static class EndPointExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string GetHost(this EndPoint endPoint) { if (endPoint is null) @@ -52,7 +52,7 @@ public static class EndPointExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int GetPort(this EndPoint endPoint) { if (endPoint is null) diff --git a/X10D/src/Net/IPAddressExtensions.cs b/X10D/src/Net/IPAddressExtensions.cs index b2cf6a0..c340468 100644 --- a/X10D/src/Net/IPAddressExtensions.cs +++ b/X10D/src/Net/IPAddressExtensions.cs @@ -20,7 +20,7 @@ public static class IPAddressExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsIPv4(this IPAddress address) { if (address is null) @@ -40,7 +40,7 @@ public static class IPAddressExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsIPv6(this IPAddress address) { if (address is null) diff --git a/X10D/src/Net/Int16Extensions.cs b/X10D/src/Net/Int16Extensions.cs index 78f8b19..375406a 100644 --- a/X10D/src/Net/Int16Extensions.cs +++ b/X10D/src/Net/Int16Extensions.cs @@ -16,7 +16,7 @@ public static class Int16Extensions /// The value to convert, expressed in host byte order. /// An integer value, expressed in network byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short HostToNetworkOrder(this short value) { return IPAddress.HostToNetworkOrder(value); @@ -28,7 +28,7 @@ public static class Int16Extensions /// The value to convert, expressed in network byte order. /// An integer value, expressed in host byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short NetworkToHostOrder(this short value) { return IPAddress.NetworkToHostOrder(value); diff --git a/X10D/src/Net/Int32Extensions.cs b/X10D/src/Net/Int32Extensions.cs index 372932d..8554d63 100644 --- a/X10D/src/Net/Int32Extensions.cs +++ b/X10D/src/Net/Int32Extensions.cs @@ -16,7 +16,7 @@ public static class Int32Extensions /// The value to convert, expressed in host byte order. /// An integer value, expressed in network byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int HostToNetworkOrder(this int value) { return IPAddress.HostToNetworkOrder(value); @@ -28,7 +28,7 @@ public static class Int32Extensions /// The value to convert, expressed in network byte order. /// An integer value, expressed in host byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int NetworkToHostOrder(this int value) { return IPAddress.NetworkToHostOrder(value); diff --git a/X10D/src/Net/Int64Extensions.cs b/X10D/src/Net/Int64Extensions.cs index 989947f..3dfd89b 100644 --- a/X10D/src/Net/Int64Extensions.cs +++ b/X10D/src/Net/Int64Extensions.cs @@ -16,7 +16,7 @@ public static class Int64Extensions /// The value to convert, expressed in host byte order. /// An integer value, expressed in network byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long HostToNetworkOrder(this long value) { return IPAddress.HostToNetworkOrder(value); @@ -28,7 +28,7 @@ public static class Int64Extensions /// The value to convert, expressed in network byte order. /// An integer value, expressed in host byte order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long NetworkToHostOrder(this long value) { return IPAddress.NetworkToHostOrder(value); diff --git a/X10D/src/Numerics/ByteExtensions.cs b/X10D/src/Numerics/ByteExtensions.cs index 70f8708..158fcbe 100644 --- a/X10D/src/Numerics/ByteExtensions.cs +++ b/X10D/src/Numerics/ByteExtensions.cs @@ -20,7 +20,7 @@ public static class ByteExtensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this byte value) { return ((uint)value).PopCount(); @@ -35,7 +35,7 @@ public static class ByteExtensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte RotateLeft(this byte value, int count) { count = count.Mod(8); @@ -51,7 +51,7 @@ public static class ByteExtensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte RotateRight(this byte value, int count) { count = count.Mod(8); @@ -67,7 +67,7 @@ public static class ByteExtensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte RoundUpToPowerOf2(this byte value) { return (byte)((uint)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/Int16Extensions.cs b/X10D/src/Numerics/Int16Extensions.cs index 0e04682..b0278c9 100644 --- a/X10D/src/Numerics/Int16Extensions.cs +++ b/X10D/src/Numerics/Int16Extensions.cs @@ -19,7 +19,7 @@ public static class Int16Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this short value) { return ((uint)value).PopCount(); @@ -34,7 +34,7 @@ public static class Int16Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short RotateLeft(this short value, int count) { var unsigned = unchecked((ushort)value); @@ -50,7 +50,7 @@ public static class Int16Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short RotateRight(this short value, int count) { var unsigned = unchecked((ushort)value); @@ -66,7 +66,7 @@ public static class Int16Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static short RoundUpToPowerOf2(this short value) { return (short)((uint)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/Int32Extensions.cs b/X10D/src/Numerics/Int32Extensions.cs index c64fd6c..2fb047e 100644 --- a/X10D/src/Numerics/Int32Extensions.cs +++ b/X10D/src/Numerics/Int32Extensions.cs @@ -19,7 +19,7 @@ public static class Int32Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this int value) { return ((uint)value).PopCount(); @@ -34,7 +34,7 @@ public static class Int32Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int RotateLeft(this int value, int count) { var unsigned = unchecked((uint)value); @@ -50,7 +50,7 @@ public static class Int32Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int RotateRight(this int value, int count) { var unsigned = unchecked((uint)value); @@ -66,7 +66,7 @@ public static class Int32Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int RoundUpToPowerOf2(this int value) { return (int)((uint)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/Int64Extensions.cs b/X10D/src/Numerics/Int64Extensions.cs index 7ead90b..598a73e 100644 --- a/X10D/src/Numerics/Int64Extensions.cs +++ b/X10D/src/Numerics/Int64Extensions.cs @@ -19,7 +19,7 @@ public static class Int64Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this long value) { return ((ulong)value).PopCount(); @@ -34,7 +34,7 @@ public static class Int64Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long RotateLeft(this long value, int count) { var unsigned = unchecked((ulong)value); @@ -50,7 +50,7 @@ public static class Int64Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long RotateRight(this long value, int count) { var unsigned = unchecked((ulong)value); @@ -66,7 +66,7 @@ public static class Int64Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long RoundUpToPowerOf2(this long value) { return (long)((ulong)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/SByteExtensions.cs b/X10D/src/Numerics/SByteExtensions.cs index e4f3f40..f498a54 100644 --- a/X10D/src/Numerics/SByteExtensions.cs +++ b/X10D/src/Numerics/SByteExtensions.cs @@ -20,7 +20,7 @@ public static class SByteExtensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this sbyte value) { return ((uint)value).PopCount(); @@ -35,7 +35,7 @@ public static class SByteExtensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte RotateLeft(this sbyte value, int count) { var signed = unchecked((byte)value); @@ -51,7 +51,7 @@ public static class SByteExtensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte RotateRight(this sbyte value, int count) { var signed = unchecked((byte)value); @@ -67,7 +67,7 @@ public static class SByteExtensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static sbyte RoundUpToPowerOf2(this sbyte value) { return (sbyte)((uint)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/UInt16Extensions.cs b/X10D/src/Numerics/UInt16Extensions.cs index ad02430..cdd9723 100644 --- a/X10D/src/Numerics/UInt16Extensions.cs +++ b/X10D/src/Numerics/UInt16Extensions.cs @@ -20,7 +20,7 @@ public static class UInt16Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this ushort value) { return ((uint)value).PopCount(); @@ -35,7 +35,7 @@ public static class UInt16Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort RotateLeft(this ushort value, int count) { return (ushort)((ushort)(value << count) | (ushort)(value >> (16 - count))); @@ -50,7 +50,7 @@ public static class UInt16Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort RotateRight(this ushort value, int count) { return (ushort)((ushort)(value >> count) | (ushort)(value << (16 - count))); @@ -65,7 +65,7 @@ public static class UInt16Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ushort RoundUpToPowerOf2(this ushort value) { return (ushort)((uint)value).RoundUpToPowerOf2(); diff --git a/X10D/src/Numerics/UInt32Extensions.cs b/X10D/src/Numerics/UInt32Extensions.cs index 6d80db9..869dc5f 100644 --- a/X10D/src/Numerics/UInt32Extensions.cs +++ b/X10D/src/Numerics/UInt32Extensions.cs @@ -21,23 +21,10 @@ public static class UInt32Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this uint value) { -#if NETCOREAPP3_1_OR_GREATER return BitOperations.PopCount(value); -#else - const uint c1 = 0x_55555555u; - const uint c2 = 0x_33333333u; - const uint c3 = 0x_0F0F0F0Fu; - const uint c4 = 0x_01010101u; - - value -= (value >> 1) & c1; - value = (value & c2) + ((value >> 2) & c2); - value = (((value + (value >> 4)) & c3) * c4) >> 24; - - return (int)value; -#endif } /// @@ -49,7 +36,7 @@ public static class UInt32Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint RotateLeft(this uint value, int count) { return (value << count) | (value >> (32 - count)); @@ -64,7 +51,7 @@ public static class UInt32Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint RotateRight(this uint value, int count) { return (value >> count) | (value << (32 - count)); @@ -79,20 +66,9 @@ public static class UInt32Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static uint RoundUpToPowerOf2(this uint value) { -#if NET6_0_OR_GREATER return BitOperations.RoundUpToPowerOf2(value); -#else - // Based on https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 - --value; - value |= value >> 1; - value |= value >> 2; - value |= value >> 4; - value |= value >> 8; - value |= value >> 16; - return value + 1; -#endif } } diff --git a/X10D/src/Numerics/UInt64Extensions.cs b/X10D/src/Numerics/UInt64Extensions.cs index 1bce332..42944c8 100644 --- a/X10D/src/Numerics/UInt64Extensions.cs +++ b/X10D/src/Numerics/UInt64Extensions.cs @@ -21,23 +21,10 @@ public static class UInt64Extensions /// POPCNT /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int PopCount(this ulong value) { -#if NETCOREAPP3_1_OR_GREATER return BitOperations.PopCount(value); -#else - const ulong c1 = 0x_55555555_55555555ul; - const ulong c2 = 0x_33333333_33333333ul; - const ulong c3 = 0x_0F0F0F0F_0F0F0F0Ful; - const ulong c4 = 0x_01010101_01010101ul; - - value -= (value >> 1) & c1; - value = (value & c2) + ((value >> 2) & c2); - value = (((value + (value >> 4)) & c3) * c4) >> 56; - - return (int)value; -#endif } /// @@ -49,7 +36,7 @@ public static class UInt64Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong RotateLeft(this ulong value, int count) { return (value << count) | (value >> (64 - count)); @@ -64,7 +51,7 @@ public static class UInt64Extensions /// /// The rotated value. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong RotateRight(this ulong value, int count) { return (value >> count) | (value << (64 - count)); @@ -79,21 +66,9 @@ public static class UInt64Extensions /// is 0 or the result overflows. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static ulong RoundUpToPowerOf2(this ulong value) { -#if NET6_0_OR_GREATER return BitOperations.RoundUpToPowerOf2(value); -#else - // Based on https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 - --value; - value |= value >> 1; - value |= value >> 2; - value |= value >> 4; - value |= value >> 8; - value |= value >> 16; - value |= value >> 32; - return value + 1; -#endif } } diff --git a/X10D/src/Numerics/Vector2Extensions.cs b/X10D/src/Numerics/Vector2Extensions.cs index 4bb52f2..2e67a40 100644 --- a/X10D/src/Numerics/Vector2Extensions.cs +++ b/X10D/src/Numerics/Vector2Extensions.cs @@ -35,7 +35,7 @@ public static class Vector2Extensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Vector2 point, LineF line) { (float x1, float x2) = (line.Start.X, line.End.X); @@ -55,7 +55,7 @@ public static class Vector2Extensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Vector2 point, PointF start, PointF end) { return point.IsOnLine(new LineF(start, end)); @@ -72,7 +72,7 @@ public static class Vector2Extensions /// ; otherwise . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsOnLine(this Vector2 point, Vector2 start, Vector2 end) { return point.IsOnLine(new LineF(start, end)); @@ -84,7 +84,7 @@ public static class Vector2Extensions /// The vector whose components to round. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector2 Round(this Vector2 vector) { return vector.Round(1.0f); @@ -97,7 +97,7 @@ public static class Vector2Extensions /// The nearest multiple to which the components should be rounded. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector2 Round(this Vector2 vector, float nearest) { float x = vector.X.Round(nearest); @@ -111,7 +111,7 @@ public static class Vector2Extensions /// The vector to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static PointF ToPointF(this Vector2 vector) { return new PointF(vector.X, vector.Y); @@ -123,7 +123,7 @@ public static class Vector2Extensions /// The vector to convert. /// The resulting . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static SizeF ToSizeF(this Vector2 vector) { return new SizeF(vector.X, vector.Y); @@ -139,7 +139,7 @@ public static class Vector2Extensions /// , and whose component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector2 WithX(this Vector2 vector, float x) { return vector with {X = x}; @@ -155,7 +155,7 @@ public static class Vector2Extensions /// , and whose component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector2 WithY(this Vector2 vector, float y) { return vector with {Y = y}; diff --git a/X10D/src/Numerics/Vector3Extensions.cs b/X10D/src/Numerics/Vector3Extensions.cs index 29b5b9e..3bc6ce7 100644 --- a/X10D/src/Numerics/Vector3Extensions.cs +++ b/X10D/src/Numerics/Vector3Extensions.cs @@ -31,7 +31,7 @@ public static class Vector3Extensions /// The vector whose components to round. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector3 Round(this Vector3 vector) { return vector.Round(1.0f); @@ -44,7 +44,7 @@ public static class Vector3Extensions /// The nearest multiple to which the components should be rounded. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector3 Round(this Vector3 vector, float nearest) { float x = vector.X.Round(nearest); @@ -63,7 +63,7 @@ public static class Vector3Extensions /// the same as that of , and whose component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector3 WithX(this Vector3 vector, float x) { return vector with {X = x}; @@ -79,7 +79,7 @@ public static class Vector3Extensions /// the same as that of , and whose component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector3 WithY(this Vector3 vector, float y) { return vector with {Y = y}; @@ -95,7 +95,7 @@ public static class Vector3Extensions /// the same as that of , and whose component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector3 WithZ(this Vector3 vector, float z) { return vector with {Z = z}; diff --git a/X10D/src/Numerics/Vector4Extensions.cs b/X10D/src/Numerics/Vector4Extensions.cs index 4c6d9df..ab79c5f 100644 --- a/X10D/src/Numerics/Vector4Extensions.cs +++ b/X10D/src/Numerics/Vector4Extensions.cs @@ -33,7 +33,7 @@ public static class Vector4Extensions /// The vector whose components to round. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 Round(this Vector4 vector) { return vector.Round(1.0f); @@ -46,7 +46,7 @@ public static class Vector4Extensions /// The nearest multiple to which the components should be rounded. /// The rounded vector. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 Round(this Vector4 vector, float nearest) { float x = vector.X.Round(nearest); @@ -68,7 +68,7 @@ public static class Vector4Extensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 WithX(this Vector4 vector, float x) { return vector with {X = x}; @@ -86,7 +86,7 @@ public static class Vector4Extensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 WithY(this Vector4 vector, float y) { return vector with {Y = y}; @@ -104,7 +104,7 @@ public static class Vector4Extensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 WithZ(this Vector4 vector, float z) { return vector with {Z = z}; @@ -122,7 +122,7 @@ public static class Vector4Extensions /// component is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static Vector4 WithW(this Vector4 vector, float w) { return vector with {W = w}; diff --git a/X10D/src/Reflection/MemberInfoExtensions.cs b/X10D/src/Reflection/MemberInfoExtensions.cs index 166207e..8e9ed92 100644 --- a/X10D/src/Reflection/MemberInfoExtensions.cs +++ b/X10D/src/Reflection/MemberInfoExtensions.cs @@ -22,7 +22,7 @@ public static class MemberInfoExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool HasCustomAttribute(this MemberInfo member) where T : Attribute { @@ -45,7 +45,7 @@ public static class MemberInfoExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool HasCustomAttribute(this MemberInfo member, Type attribute) { if (member is null) diff --git a/X10D/src/Reflection/TypeExtensions.cs b/X10D/src/Reflection/TypeExtensions.cs index a36a2a5..b1e34fb 100644 --- a/X10D/src/Reflection/TypeExtensions.cs +++ b/X10D/src/Reflection/TypeExtensions.cs @@ -18,7 +18,7 @@ public static class TypeExtensions /// if the current exists on the type; otherwise, . /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Implements(this Type value) { if (value is null) @@ -41,7 +41,7 @@ public static class TypeExtensions /// is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Implements(this Type value, Type interfaceType) { if (value is null) @@ -77,7 +77,7 @@ public static class TypeExtensions /// is . /// is not a class. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Inherits(this Type value) where T : class { @@ -109,7 +109,7 @@ public static class TypeExtensions /// is not a class. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool Inherits(this Type value, Type type) { if (value is null) diff --git a/X10D/src/Text/CharExtensions.cs b/X10D/src/Text/CharExtensions.cs index 2a3eef8..8b015de 100644 --- a/X10D/src/Text/CharExtensions.cs +++ b/X10D/src/Text/CharExtensions.cs @@ -15,10 +15,16 @@ public static class CharExtensions /// The character to check. /// if this character is an emoji; otherwise, . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEmoji(this char value) { - return value.ToString().IsEmoji(); +#if NET7_0_OR_GREATER + Span chars = stackalloc char[1]; + chars[0] = value; + return EmojiRegex.Value.IsMatch(chars); +#else + return EmojiRegex.Value.IsMatch(value.ToString()); +#endif } /// @@ -30,7 +36,7 @@ public static class CharExtensions /// A composed of repeated times. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Repeat(this char value, int count) { return count switch @@ -41,4 +47,34 @@ public static class CharExtensions _ => new string(value, count) }; } + + /// + /// Writes a character to a span of characters, repeated a specified number of times. + /// + /// The character to repeat. + /// The number of times to repeat. + /// The span of characters into which the repeated characters will be written. + [MethodImpl(CompilerResources.MaxOptimization)] + public static void Repeat(this char value, int count, Span destination) + { + if (count < 0) + { + throw new ArgumentOutOfRangeException(nameof(count), ExceptionMessages.CountMustBeGreaterThanOrEqualTo0); + } + + if (count == 0) + { + return; + } + + if (destination.Length < count) + { + throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); + } + + for (var i = 0; i < count; i++) + { + destination[i] = value; + } + } } diff --git a/X10D/src/Text/CharSpanExtensions.cs b/X10D/src/Text/CharSpanExtensions.cs index 67a01ce..17bfb71 100644 --- a/X10D/src/Text/CharSpanExtensions.cs +++ b/X10D/src/Text/CharSpanExtensions.cs @@ -1,3 +1,8 @@ +using System.Diagnostics.Contracts; +using System.Runtime.CompilerServices; +using System.Text; +using X10D.CompilerServices; + namespace X10D.Text; /// @@ -67,4 +72,73 @@ public static class CharSpanExtensions return count; } + + /// + /// Repeats a span of characters a specified number of times. + /// + /// The string to repeat. + /// The repeat count. + /// A string containing repeated times. + /// is . + /// is less than 0. + [Pure] + [MethodImpl(CompilerResources.MaxOptimization)] + public static string Repeat(this ReadOnlySpan value, int count) + { + switch (count) + { + case < 0: + throw new ArgumentOutOfRangeException(nameof(count), ExceptionMessages.CountMustBeGreaterThanOrEqualTo0); + + case 0: + return string.Empty; + + case 1: + return value.ToString(); + } + + var builder = new StringBuilder(value.Length * count); + + for (var i = 0; i < count; i++) + { + builder.Append(value); + } + + return builder.ToString(); + } + + /// + /// Repeats a span of character a specified number of times, writing the result to another span of characters. + /// + /// The span of characters to repeat. + /// The repeat count. + /// The destination span to write to. + /// is less than 0. + /// + /// is too short to contain the repeated string. + /// + [MethodImpl(CompilerResources.MaxOptimization)] + public static void Repeat(this ReadOnlySpan value, int count, Span destination) + { + if (count < 0) + { + throw new ArgumentOutOfRangeException(nameof(count), ExceptionMessages.CountMustBeGreaterThanOrEqualTo0); + } + + if (count == 0) + { + return; + } + + if (destination.Length < value.Length * count) + { + throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); + } + + for (var iteration = 0; iteration < count; iteration++) + { + Span slice = destination.Slice(iteration * value.Length, value.Length); + value.CopyTo(slice); + } + } } diff --git a/X10D/src/Text/EnumerableExtensions.cs b/X10D/src/Text/EnumerableExtensions.cs index 0fba459..691f8bf 100644 --- a/X10D/src/Text/EnumerableExtensions.cs +++ b/X10D/src/Text/EnumerableExtensions.cs @@ -55,12 +55,10 @@ public static class EnumerableExtensions throw new ArgumentNullException(nameof(pattern)); } -#if NET6_0_OR_GREATER if (source.TryGetNonEnumeratedCount(out int count) && count == 0) { yield break; } -#endif var options = RegexOptions.Compiled | (ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None); var regex = new Regex(pattern, options, Regex.InfiniteMatchTimeout); diff --git a/X10D/src/Text/Extensions.cs b/X10D/src/Text/Extensions.cs index 0e5a9e9..b6c7ff5 100644 --- a/X10D/src/Text/Extensions.cs +++ b/X10D/src/Text/Extensions.cs @@ -1,4 +1,3 @@ -#if NET5_0_OR_GREATER using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; using System.Text.Json; @@ -19,10 +18,9 @@ public static class Extensions /// The type of the value to convert. /// A JSON string representing the object. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string ToJson(this T value, JsonSerializerOptions? options = null) { return JsonSerializer.Serialize(value, options); } } -#endif diff --git a/X10D/src/Text/MarkdownExtensions.cs b/X10D/src/Text/MarkdownExtensions.cs new file mode 100644 index 0000000..0e91ab1 --- /dev/null +++ b/X10D/src/Text/MarkdownExtensions.cs @@ -0,0 +1,205 @@ +namespace X10D.Text; + +/// +/// Markdown-related extension methods for . +/// +public static class MarkdownExtensions +{ + /// + /// Formats the specified text as bold, using Markdown. + /// + /// The value to surround with bold. + /// The formatted text. + /// is null. + public static string MDBold(this string value) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return $"**{value}**"; + } + + /// + /// Formats the specified text as code, using Markdown. + /// + /// The value to surround with code. + /// The formatted text. + /// is null. + public static string MDCode(this string value) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return $"`{value}`"; + } + + /// + /// Formats the specified text as a code block, using Markdown. + /// + /// The value to surround with code blocks. + /// The formatted text. + /// is null. + public static string MDCodeBlock(this string value) + { + return MDCodeBlock(value, string.Empty); + } + + /// + /// Formats the specified text as a code block, using Markdown. + /// + /// The value to surround with code blocks. + /// The language to use for syntax highlighting. + /// The formatted text. + /// is null. + public static string MDCodeBlock(this string value, string language) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return $"```{language}{Environment.NewLine}{value}{Environment.NewLine}```"; + } + + /// + /// Formats the specified text as a heading, using Markdown. + /// + /// The value to surround with italics. + /// The level of the heading. + /// The formatted text. + /// is null. + /// is less than 1 or greater than 6. + public static string MDHeading(this string value, int level) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + if (level is < 1 or > 6) + { + throw new ArgumentOutOfRangeException(nameof(level)); + } + + return $"{'#'.Repeat(level)} {value}"; + } + + /// + /// Formats the specified text as italics, using Markdown. + /// + /// The value to surround with italics. + /// The formatted text. + /// is null. + /// + /// Markdown has two methods of italicizing text: * and _. This method uses asterisks by default. To + /// use underscores, use and pass as the second argument. + /// + public static string MDItalic(this string value) + { + return MDItalic(value, false); + } + + /// + /// Formats the specified text as italics, using Markdown. + /// + /// The value to surround with italics. + /// Whether to use underscores instead of asterisks for italicizing. + /// The formatted text. + /// is null. + public static string MDItalic(this string value, bool useUnderscores) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return useUnderscores ? $"_{value}_" : $"*{value}*"; + } + + /// + /// Formats the specified text as a link, using Markdown. + /// + /// The label to use for the link. + /// The URL to link to. + /// The formatted text. + /// is null. + public static string MDLink(this string? label, string url) + { + if (url is null) + { + throw new ArgumentNullException(nameof(url)); + } + + return string.IsNullOrWhiteSpace(label) ? url : $"[{label}]({url})"; + } + + /// + /// Formats the specified text as a link, using Markdown. + /// + /// The label to use for the link. + /// The URL to link to. + /// The formatted text. + /// is null. + public static string MDLink(this string? label, Uri url) + { + if (url is null) + { + throw new ArgumentNullException(nameof(url)); + } + + return string.IsNullOrWhiteSpace(label) ? url.ToString() : $"[{label}]({url})"; + } + + /// + /// Formats the specified text as a link, using Markdown. + /// + /// The URL to link to. + /// The label to use for the link. + /// The formatted text. + /// is null. + public static string MDLink(this Uri url, string? label) + { + if (url is null) + { + throw new ArgumentNullException(nameof(url)); + } + + return string.IsNullOrWhiteSpace(label) ? url.ToString() : $"[{label}]({url})"; + } + + /// + /// Formats the specified text as striked out, using Markdown. + /// + /// The value to surround with strikeout. + /// The formatted text. + /// is null. + public static string MDStrikeOut(this string value) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return $"~~{value}~~"; + } + + /// + /// Formats the specified text as underlined, using Markdown. + /// + /// The value to surround with underline. + /// The formatted text. + /// is null. + public static string MDUnderline(this string value) + { + if (value is null) + { + throw new ArgumentNullException(nameof(value)); + } + + return $"__{value}__"; + } +} diff --git a/X10D/src/Text/RuneExtensions.cs b/X10D/src/Text/RuneExtensions.cs index e842fcb..47349b1 100644 --- a/X10D/src/Text/RuneExtensions.cs +++ b/X10D/src/Text/RuneExtensions.cs @@ -1,4 +1,3 @@ -#if NETCOREAPP3_0_OR_GREATER using System.Diagnostics; using System.Diagnostics.Contracts; using System.Globalization; @@ -20,7 +19,7 @@ public static class RuneExtensions /// The rune to check. /// if this rune is an emoji; otherwise, . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEmoji(this Rune value) { return value.ToString().IsEmoji(); @@ -35,7 +34,7 @@ public static class RuneExtensions /// A composed of repeated times. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Repeat(this Rune value, int count) { switch (count) @@ -106,11 +105,10 @@ public static class RuneExtensions #if NET7_0_OR_GREATER throw new UnreachableException(message); #else - throw new InvalidOperationException(message); + throw new InvalidOperationException(message); #endif //NOSONAR // dotcover enable } } } -#endif diff --git a/X10D/src/Text/StringExtensions.cs b/X10D/src/Text/StringExtensions.cs index 7465c43..7b0f048 100644 --- a/X10D/src/Text/StringExtensions.cs +++ b/X10D/src/Text/StringExtensions.cs @@ -2,9 +2,7 @@ using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; using System.Text; -#if NET5_0_OR_GREATER using System.Text.Json; -#endif using X10D.Collections; using X10D.CompilerServices; using X10D.Core; @@ -26,7 +24,7 @@ public static class StringExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [return: NotNullIfNotNull("value")] public static string? AsNullIfEmpty(this string? value) { @@ -43,7 +41,7 @@ public static class StringExtensions /// whitespace; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [return: NotNullIfNotNull("value")] public static string? AsNullIfWhiteSpace(this string? value) { @@ -57,7 +55,7 @@ public static class StringExtensions /// The plain text string representation of . /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Base64Decode(this string value) { if (value is null) @@ -75,7 +73,7 @@ public static class StringExtensions /// The string representation, in base 64, of . /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Base64Encode(this string value) { if (value is null) @@ -104,7 +102,7 @@ public static class StringExtensions /// is . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string ChangeEncoding(this string value, Encoding sourceEncoding, Encoding destinationEncoding) { if (value is null) @@ -537,7 +535,7 @@ public static class StringExtensions /// (http://geekswithblogs.net/sdorman/Default.aspx). /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static T EnumParse(this string value) where T : struct, Enum { @@ -556,7 +554,7 @@ public static class StringExtensions /// (http://geekswithblogs.net/sdorman/Default.aspx). /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static T EnumParse(this string value, bool ignoreCase) where T : struct, Enum { @@ -575,7 +573,6 @@ public static class StringExtensions return Enum.Parse(value, ignoreCase); } -#if NET5_0_OR_GREATER /// /// Returns an object from the specified JSON string. /// @@ -590,7 +587,6 @@ public static class StringExtensions { return JsonSerializer.Deserialize(value, options); } -#endif /// /// Gets a [] representing the value the with @@ -599,7 +595,7 @@ public static class StringExtensions /// The string to convert. /// Returns a []. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte[] GetBytes(this string value) { return value.GetBytes(Encoding.UTF8); @@ -616,7 +612,7 @@ public static class StringExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static byte[] GetBytes(this string value, Encoding encoding) { if (value is null) @@ -638,7 +634,7 @@ public static class StringExtensions /// The input string. /// if this string is an emoji; otherwise, . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEmoji(this string value) { if (value is null) @@ -658,7 +654,7 @@ public static class StringExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsEmpty(this string value) { if (value is null) @@ -678,7 +674,7 @@ public static class StringExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLower(this string value) { if (value is null) @@ -688,7 +684,6 @@ public static class StringExtensions for (var index = 0; index < value.Length; index++) { -#if NETCOREAPP3_0_OR_GREATER var rune = new Rune(value[index]); if (!Rune.IsLetter(rune)) @@ -700,19 +695,6 @@ public static class StringExtensions { return false; } -#else - char current = value[index]; - - if (!char.IsLetter(current)) - { - continue; - } - - if (!char.IsLower(current)) - { - return false; - } -#endif } return true; @@ -728,7 +710,7 @@ public static class StringExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsNullOrEmpty([NotNullWhen(false)] this string? value) { return string.IsNullOrEmpty(value); @@ -744,7 +726,7 @@ public static class StringExtensions /// whitespace; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this string? value) { return string.IsNullOrWhiteSpace(value); @@ -761,7 +743,7 @@ public static class StringExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsPalindrome(this string value) { if (value is null) @@ -777,7 +759,6 @@ public static class StringExtensions for (int index = 0, endIndex = value.Length - 1; index < value.Length; index++, endIndex--) { -#if NETCOREAPP3_0_OR_GREATER Rune startRune = new Rune(value[index]); Rune endRune = new Rune(value[endIndex]); @@ -797,27 +778,6 @@ public static class StringExtensions { return false; } -#else - char startChar = value[index]; - char endChar = value[endIndex]; - - if (!char.IsLetter(startChar) && !char.IsNumber(startChar)) - { - endIndex++; - continue; - } - - if (!char.IsLetter(endChar) && !char.IsNumber(endChar)) - { - index--; - continue; - } - - if (char.ToUpperInvariant(startChar) != char.ToUpperInvariant(endChar)) - { - return false; - } -#endif } return true; @@ -831,7 +791,7 @@ public static class StringExtensions /// if all alpha characters in this string are uppercase; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsUpper(this string value) { if (value is null) @@ -841,7 +801,6 @@ public static class StringExtensions for (var index = 0; index < value.Length; index++) { -#if NETCOREAPP3_0_OR_GREATER var rune = new Rune(value[index]); if (!Rune.IsLetter(rune)) @@ -853,19 +812,6 @@ public static class StringExtensions { return false; } -#else - char current = value[index]; - - if (!char.IsLetter(current)) - { - continue; - } - - if (!char.IsUpper(current)) - { - return false; - } -#endif } return true; @@ -882,7 +828,7 @@ public static class StringExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsWhiteSpace(this string value) { if (value is null) @@ -911,11 +857,10 @@ public static class StringExtensions /// /// The string to repeat. /// The repeat count. - /// A string containing repeated times. - /// + /// A string containing repeated times. /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Repeat(this string value, int count) { if (value is null) @@ -933,14 +878,50 @@ public static class StringExtensions return value; } - var builder = new StringBuilder(value.Length * count); + Span destination = stackalloc char[value.Length * count]; + value.Repeat(count, destination); + return new string(destination); + } - for (var i = 0; i < count; i++) + /// + /// Repeats a string a specified number of times, writing the result to a span of characters. + /// + /// The string to repeat. + /// The repeat count. + /// The destination span to write to. + /// is . + /// is less than 0. + /// + /// is too short to contain the repeated string. + /// + [MethodImpl(CompilerResources.MaxOptimization)] + public static void Repeat(this string value, int count, Span destination) + { + if (value is null) { - builder.Append(value); + throw new ArgumentNullException(nameof(value)); } - return builder.ToString(); + if (count < 0) + { + throw new ArgumentOutOfRangeException(nameof(count), ExceptionMessages.CountMustBeGreaterThanOrEqualTo0); + } + + if (count == 0) + { + return; + } + + if (destination.Length < value.Length * count) + { + throw new ArgumentException(ExceptionMessages.DestinationSpanLengthTooShort, nameof(destination)); + } + + for (var iteration = 0; iteration < count; iteration++) + { + Span slice = destination.Slice(iteration * value.Length, value.Length); + value.AsSpan().CopyTo(slice); + } } /// @@ -956,7 +937,7 @@ public static class StringExtensions /// is . /// is less than 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Randomize(this string source, int length, Random? random = null) { if (source is null) @@ -994,7 +975,7 @@ public static class StringExtensions /// The string to reverse. /// A whose characters are that of in reverse order. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Reverse(this string value) { if (value is null) @@ -1028,7 +1009,7 @@ public static class StringExtensions /// A new containing the characters in , rearranged. /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static string Shuffled(this string value, Random? random = null) { if (value is null) @@ -1054,7 +1035,7 @@ public static class StringExtensions /// /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static IEnumerable Split(this string value, int chunkSize) { if (value is null) @@ -1154,7 +1135,7 @@ public static class StringExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [return: NotNullIfNotNull("alternative")] public static string? WithEmptyAlternative(this string? value, string? alternative) { @@ -1172,7 +1153,7 @@ public static class StringExtensions /// whitespace; otherwise, . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [return: NotNullIfNotNull("alternative")] public static string? WithWhiteSpaceAlternative(this string? value, string? alternative) { diff --git a/X10D/src/Time/ByteExtensions.cs b/X10D/src/Time/ByteExtensions.cs index 8d480d1..700cd17 100644 --- a/X10D/src/Time/ByteExtensions.cs +++ b/X10D/src/Time/ByteExtensions.cs @@ -18,7 +18,7 @@ public static class ByteExtensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this byte value) { if (value == 0) @@ -44,7 +44,7 @@ public static class ByteExtensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this byte value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -65,7 +65,7 @@ public static class ByteExtensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this byte value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -77,7 +77,7 @@ public static class ByteExtensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this byte value) { return TimeSpan.FromTicks(value); @@ -91,7 +91,7 @@ public static class ByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this byte value) { return TimeSpan.FromMilliseconds(value); @@ -105,7 +105,7 @@ public static class ByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this byte value) { return TimeSpan.FromSeconds(value); @@ -119,7 +119,7 @@ public static class ByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this byte value) { return TimeSpan.FromMinutes(value); @@ -133,7 +133,7 @@ public static class ByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this byte value) { return TimeSpan.FromHours(value); @@ -145,7 +145,7 @@ public static class ByteExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this byte value) { return TimeSpan.FromDays(value); @@ -159,7 +159,7 @@ public static class ByteExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this byte value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/CharSpanExtensions.cs b/X10D/src/Time/CharSpanExtensions.cs index 3a41f06..64072c9 100644 --- a/X10D/src/Time/CharSpanExtensions.cs +++ b/X10D/src/Time/CharSpanExtensions.cs @@ -58,7 +58,7 @@ public static class CharSpanExtensions /// /// A new instance of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan ToTimeSpan(this ReadOnlySpan input) { return TimeSpanParser.TryParse(input, out TimeSpan result) ? result : default; diff --git a/X10D/src/Time/DateOnlyExtensions.cs b/X10D/src/Time/DateOnlyExtensions.cs index d349068..fd59001 100644 --- a/X10D/src/Time/DateOnlyExtensions.cs +++ b/X10D/src/Time/DateOnlyExtensions.cs @@ -1,4 +1,3 @@ -#if NET6_0_OR_GREATER using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; @@ -17,7 +16,7 @@ public static class DateOnlyExtensions /// The date from which to calculate. /// The rounded-down integer number of years since as of today. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static int Age(this DateOnly value) { @@ -34,7 +33,7 @@ public static class DateOnlyExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Age(this DateOnly value, DateOnly referenceDate) { return value.ToDateTime(default).Age(referenceDate.ToDateTime(default)); @@ -61,7 +60,7 @@ public static class DateOnlyExtensions /// The day of the week. /// A representing the first occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateOnly First(this DateOnly value, DayOfWeek dayOfWeek) { DateOnly first = value.FirstDayOfMonth(); @@ -80,7 +79,7 @@ public static class DateOnlyExtensions /// The current date. /// A representing the first day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateOnly FirstDayOfMonth(this DateOnly value) { return value.AddDays(1 - value.Day); @@ -114,7 +113,7 @@ public static class DateOnlyExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this DateOnly value) { return DateTime.IsLeapYear(value.Year); @@ -127,7 +126,7 @@ public static class DateOnlyExtensions /// The day of the week. /// A representing the final occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateOnly Last(this DateOnly value, DayOfWeek dayOfWeek) { DateOnly last = value.LastDayOfMonth(); @@ -145,7 +144,7 @@ public static class DateOnlyExtensions /// The current date. /// A representing the last day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateOnly LastDayOfMonth(this DateOnly value) { int daysInMonth = DateTime.DaysInMonth(value.Year, value.Month); @@ -159,7 +158,7 @@ public static class DateOnlyExtensions /// The day of the week. /// A representing the next occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateOnly Next(this DateOnly value, DayOfWeek dayOfWeek) { int offsetDays = dayOfWeek - value.DayOfWeek; @@ -179,7 +178,7 @@ public static class DateOnlyExtensions /// A reference time to use with the current date. /// The number of milliseconds that have elapsed since 1970-01-01T00:00:00.000Z. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long ToUnixTimeMilliseconds(this DateOnly value, TimeOnly time) { return value.ToDateTime(time).ToUnixTimeMilliseconds(); @@ -192,10 +191,9 @@ public static class DateOnlyExtensions /// A reference time to use with the current date. /// The number of seconds that have elapsed since 1970-01-01T00:00:00.000Z. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long ToUnixTimeSeconds(this DateOnly value, TimeOnly time) { return value.ToDateTime(time).ToUnixTimeSeconds(); } } -#endif diff --git a/X10D/src/Time/DateTimeExtensions.cs b/X10D/src/Time/DateTimeExtensions.cs index 6750b15..d82a796 100644 --- a/X10D/src/Time/DateTimeExtensions.cs +++ b/X10D/src/Time/DateTimeExtensions.cs @@ -13,7 +13,7 @@ public static class DateTimeExtensions { /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static int Age(this DateTime value) { @@ -22,7 +22,7 @@ public static class DateTimeExtensions /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Age(this DateTime value, DateTime referenceDate) { return ((DateTimeOffset)value).Age(referenceDate); @@ -31,7 +31,7 @@ public static class DateTimeExtensions /// /// A representing the first occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime First(this DateTime value, DayOfWeek dayOfWeek) { return ((DateTimeOffset)value).First(dayOfWeek).DateTime; @@ -40,7 +40,7 @@ public static class DateTimeExtensions /// /// A representing the first day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime FirstDayOfMonth(this DateTime value) { return ((DateTimeOffset)value).FirstDayOfMonth().DateTime; @@ -81,7 +81,7 @@ public static class DateTimeExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this DateTime value) { return DateTime.IsLeapYear(value.Year); @@ -90,7 +90,7 @@ public static class DateTimeExtensions /// /// A representing the final occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime Last(this DateTime value, DayOfWeek dayOfWeek) { return ((DateTimeOffset)value).Last(dayOfWeek).DateTime; @@ -99,7 +99,7 @@ public static class DateTimeExtensions /// /// A representing the last day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime LastDayOfMonth(this DateTime value) { return ((DateTimeOffset)value).LastDayOfMonth().DateTime; @@ -108,7 +108,7 @@ public static class DateTimeExtensions /// /// A representing the next occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime Next(this DateTime value, DayOfWeek dayOfWeek) { return ((DateTimeOffset)value).Next(dayOfWeek).DateTime; @@ -120,7 +120,7 @@ public static class DateTimeExtensions /// The current date. /// The number of milliseconds that have elapsed since 1970-01-01T00:00:00.000Z. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long ToUnixTimeMilliseconds(this DateTime value) { return ((DateTimeOffset)value).ToUnixTimeMilliseconds(); @@ -132,7 +132,7 @@ public static class DateTimeExtensions /// The current date. /// The number of seconds that have elapsed since 1970-01-01T00:00:00.000Z. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static long ToUnixTimeSeconds(this DateTime value) { return ((DateTimeOffset)value).ToUnixTimeSeconds(); diff --git a/X10D/src/Time/DateTimeOffsetExtensions.cs b/X10D/src/Time/DateTimeOffsetExtensions.cs index ca606f1..1efe89b 100644 --- a/X10D/src/Time/DateTimeOffsetExtensions.cs +++ b/X10D/src/Time/DateTimeOffsetExtensions.cs @@ -16,7 +16,7 @@ public static class DateTimeOffsetExtensions /// The date from which to calculate. /// The rounded-down integer number of years since as of today. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] [ExcludeFromCodeCoverage] public static int Age(this DateTimeOffset value) { @@ -33,7 +33,7 @@ public static class DateTimeOffsetExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static int Age(this DateTimeOffset value, DateTimeOffset referenceDate) { return (int)(((referenceDate.Date - TimeSpan.FromDays(1) - value.Date).TotalDays + 1) / 365.2425); @@ -46,7 +46,7 @@ public static class DateTimeOffsetExtensions /// The day of the week. /// A representing the first occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset First(this DateTimeOffset value, DayOfWeek dayOfWeek) { var first = value.FirstDayOfMonth(); @@ -65,7 +65,7 @@ public static class DateTimeOffsetExtensions /// The current date. /// A representing the first day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FirstDayOfMonth(this DateTimeOffset value) { return value.AddDays(1 - value.Day); @@ -99,7 +99,7 @@ public static class DateTimeOffsetExtensions /// . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this DateTimeOffset value) { return DateTime.IsLeapYear(value.Year); @@ -112,7 +112,7 @@ public static class DateTimeOffsetExtensions /// The day of the week. /// A representing the final occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset Last(this DateTimeOffset value, DayOfWeek dayOfWeek) { var last = value.LastDayOfMonth(); @@ -130,7 +130,7 @@ public static class DateTimeOffsetExtensions /// The current date. /// A representing the last day of the current month. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset LastDayOfMonth(this DateTimeOffset value) { int daysInMonth = DateTime.DaysInMonth(value.Year, value.Month); @@ -144,7 +144,7 @@ public static class DateTimeOffsetExtensions /// The day of the week. /// A representing the next occurence of . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset Next(this DateTimeOffset value, DayOfWeek dayOfWeek) { int offsetDays = dayOfWeek - value.DayOfWeek; diff --git a/X10D/src/Time/DecimalExtensions.cs b/X10D/src/Time/DecimalExtensions.cs index 41cf384..0fc1f0f 100644 --- a/X10D/src/Time/DecimalExtensions.cs +++ b/X10D/src/Time/DecimalExtensions.cs @@ -17,7 +17,7 @@ public static class DecimalExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this decimal value) { return TimeSpan.FromMilliseconds((double)value); @@ -31,7 +31,7 @@ public static class DecimalExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this decimal value) { return TimeSpan.FromSeconds((double)value); @@ -45,7 +45,7 @@ public static class DecimalExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this decimal value) { return TimeSpan.FromMinutes((double)value); @@ -59,7 +59,7 @@ public static class DecimalExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this decimal value) { return TimeSpan.FromHours((double)value); @@ -71,7 +71,7 @@ public static class DecimalExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this decimal value) { return TimeSpan.FromDays((double)value); @@ -85,7 +85,7 @@ public static class DecimalExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this decimal value) { return TimeSpan.FromDays((double)value * 7); diff --git a/X10D/src/Time/DoubleExtensions.cs b/X10D/src/Time/DoubleExtensions.cs index f4054d9..04878df 100644 --- a/X10D/src/Time/DoubleExtensions.cs +++ b/X10D/src/Time/DoubleExtensions.cs @@ -17,7 +17,7 @@ public static class DoubleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this double value) { return TimeSpan.FromMilliseconds(value); @@ -31,7 +31,7 @@ public static class DoubleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this double value) { return TimeSpan.FromSeconds(value); @@ -45,7 +45,7 @@ public static class DoubleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this double value) { return TimeSpan.FromMinutes(value); @@ -59,7 +59,7 @@ public static class DoubleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this double value) { return TimeSpan.FromHours(value); @@ -71,7 +71,7 @@ public static class DoubleExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this double value) { return TimeSpan.FromDays(value); @@ -85,7 +85,7 @@ public static class DoubleExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this double value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/HalfExtensions.cs b/X10D/src/Time/HalfExtensions.cs index 26cec4f..d6b52ed 100644 --- a/X10D/src/Time/HalfExtensions.cs +++ b/X10D/src/Time/HalfExtensions.cs @@ -1,4 +1,3 @@ -#if NET5_0_OR_GREATER using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; using X10D.CompilerServices; @@ -18,7 +17,7 @@ public static class HalfExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this Half value) { return TimeSpan.FromMilliseconds((float)value); @@ -32,7 +31,7 @@ public static class HalfExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this Half value) { return TimeSpan.FromSeconds((float)value); @@ -46,7 +45,7 @@ public static class HalfExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this Half value) { return TimeSpan.FromMinutes((float)value); @@ -60,7 +59,7 @@ public static class HalfExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this Half value) { return TimeSpan.FromHours((float)value); @@ -72,7 +71,7 @@ public static class HalfExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this Half value) { return TimeSpan.FromDays((float)value); @@ -86,10 +85,9 @@ public static class HalfExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this Half value) { return TimeSpan.FromDays((float)value * 7); } } -#endif diff --git a/X10D/src/Time/Int16Extensions.cs b/X10D/src/Time/Int16Extensions.cs index 31af241..0490c47 100644 --- a/X10D/src/Time/Int16Extensions.cs +++ b/X10D/src/Time/Int16Extensions.cs @@ -19,7 +19,7 @@ public static class Int16Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this short value) { if (value == 0) @@ -50,7 +50,7 @@ public static class Int16Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this short value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -71,7 +71,7 @@ public static class Int16Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this short value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -83,7 +83,7 @@ public static class Int16Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this short value) { return TimeSpan.FromTicks(value); @@ -97,7 +97,7 @@ public static class Int16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this short value) { return TimeSpan.FromMilliseconds(value); @@ -111,7 +111,7 @@ public static class Int16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this short value) { return TimeSpan.FromSeconds(value); @@ -125,7 +125,7 @@ public static class Int16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this short value) { return TimeSpan.FromMinutes(value); @@ -139,7 +139,7 @@ public static class Int16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this short value) { return TimeSpan.FromHours(value); @@ -151,7 +151,7 @@ public static class Int16Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this short value) { return TimeSpan.FromDays(value); @@ -165,7 +165,7 @@ public static class Int16Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this short value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/Int32Extensions.cs b/X10D/src/Time/Int32Extensions.cs index 2fc108a..52bd6f3 100644 --- a/X10D/src/Time/Int32Extensions.cs +++ b/X10D/src/Time/Int32Extensions.cs @@ -19,7 +19,7 @@ public static class Int32Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this int value) { if (value == 0) @@ -50,7 +50,7 @@ public static class Int32Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this int value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -71,7 +71,7 @@ public static class Int32Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this int value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -83,7 +83,7 @@ public static class Int32Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this int value) { return TimeSpan.FromTicks(value); @@ -97,7 +97,7 @@ public static class Int32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this int value) { return TimeSpan.FromMilliseconds(value); @@ -111,7 +111,7 @@ public static class Int32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this int value) { return TimeSpan.FromSeconds(value); @@ -125,7 +125,7 @@ public static class Int32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this int value) { return TimeSpan.FromMinutes(value); @@ -139,7 +139,7 @@ public static class Int32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this int value) { return TimeSpan.FromHours(value); @@ -151,7 +151,7 @@ public static class Int32Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this int value) { return TimeSpan.FromDays(value); @@ -165,7 +165,7 @@ public static class Int32Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this int value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/Int64Extensions.cs b/X10D/src/Time/Int64Extensions.cs index 24ff185..84a999e 100644 --- a/X10D/src/Time/Int64Extensions.cs +++ b/X10D/src/Time/Int64Extensions.cs @@ -19,7 +19,7 @@ public static class Int64Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this long value) { if (value == 0) @@ -50,7 +50,7 @@ public static class Int64Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this long value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -71,7 +71,7 @@ public static class Int64Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this long value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -83,7 +83,7 @@ public static class Int64Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this long value) { return TimeSpan.FromTicks(value); @@ -97,7 +97,7 @@ public static class Int64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this long value) { return TimeSpan.FromMilliseconds(value); @@ -111,7 +111,7 @@ public static class Int64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this long value) { return TimeSpan.FromSeconds(value); @@ -125,7 +125,7 @@ public static class Int64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this long value) { return TimeSpan.FromMinutes(value); @@ -139,7 +139,7 @@ public static class Int64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this long value) { return TimeSpan.FromHours(value); @@ -151,7 +151,7 @@ public static class Int64Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this long value) { return TimeSpan.FromDays(value); @@ -165,7 +165,7 @@ public static class Int64Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this long value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/SByteExtensions.cs b/X10D/src/Time/SByteExtensions.cs index d8d25fb..fea7719 100644 --- a/X10D/src/Time/SByteExtensions.cs +++ b/X10D/src/Time/SByteExtensions.cs @@ -20,7 +20,7 @@ public static class SByteExtensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this sbyte value) { if (value == 0) @@ -51,7 +51,7 @@ public static class SByteExtensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this sbyte value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -72,7 +72,7 @@ public static class SByteExtensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this sbyte value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -84,7 +84,7 @@ public static class SByteExtensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this sbyte value) { return TimeSpan.FromTicks(value); @@ -98,7 +98,7 @@ public static class SByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this sbyte value) { return TimeSpan.FromMilliseconds(value); @@ -112,7 +112,7 @@ public static class SByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this sbyte value) { return TimeSpan.FromSeconds(value); @@ -126,7 +126,7 @@ public static class SByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this sbyte value) { return TimeSpan.FromMinutes(value); @@ -140,7 +140,7 @@ public static class SByteExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this sbyte value) { return TimeSpan.FromHours(value); @@ -152,7 +152,7 @@ public static class SByteExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this sbyte value) { return TimeSpan.FromDays(value); @@ -166,7 +166,7 @@ public static class SByteExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this sbyte value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/SingleExtensions.cs b/X10D/src/Time/SingleExtensions.cs index 2403b4e..ccab055 100644 --- a/X10D/src/Time/SingleExtensions.cs +++ b/X10D/src/Time/SingleExtensions.cs @@ -17,7 +17,7 @@ public static class SingleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this float value) { return TimeSpan.FromMilliseconds(value); @@ -31,7 +31,7 @@ public static class SingleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this float value) { return TimeSpan.FromSeconds(value); @@ -45,7 +45,7 @@ public static class SingleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this float value) { return TimeSpan.FromMinutes(value); @@ -59,7 +59,7 @@ public static class SingleExtensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this float value) { return TimeSpan.FromHours(value); @@ -71,7 +71,7 @@ public static class SingleExtensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this float value) { return TimeSpan.FromDays(value); @@ -85,7 +85,7 @@ public static class SingleExtensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this float value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/StringExtensions.cs b/X10D/src/Time/StringExtensions.cs index 668f26d..4960877 100644 --- a/X10D/src/Time/StringExtensions.cs +++ b/X10D/src/Time/StringExtensions.cs @@ -58,7 +58,7 @@ public static class StringExtensions /// A new instance of . /// is . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan ToTimeSpan(this string input) { if (input is null) diff --git a/X10D/src/Time/TimeSpanExtensions.cs b/X10D/src/Time/TimeSpanExtensions.cs index f39b39b..c6e5e7b 100644 --- a/X10D/src/Time/TimeSpanExtensions.cs +++ b/X10D/src/Time/TimeSpanExtensions.cs @@ -17,7 +17,7 @@ public static class TimeSpanExtensions /// A that is a duration of in the past relative to the current time. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime Ago(this TimeSpan value) { return DateTime.Now.Subtract(value); @@ -31,7 +31,7 @@ public static class TimeSpanExtensions /// A that is a duration of in the future relative to the current time. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTime FromNow(this TimeSpan value) { return DateTime.Now.Add(value); diff --git a/X10D/src/Time/UInt16Extensions.cs b/X10D/src/Time/UInt16Extensions.cs index 967d21d..16180ed 100644 --- a/X10D/src/Time/UInt16Extensions.cs +++ b/X10D/src/Time/UInt16Extensions.cs @@ -25,7 +25,7 @@ public static class UInt16Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this ushort value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -46,7 +46,7 @@ public static class UInt16Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this ushort value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -61,7 +61,7 @@ public static class UInt16Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this ushort value) { if (value == 0) @@ -78,7 +78,7 @@ public static class UInt16Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this ushort value) { return TimeSpan.FromTicks(value); @@ -92,7 +92,7 @@ public static class UInt16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this ushort value) { return TimeSpan.FromMilliseconds(value); @@ -106,7 +106,7 @@ public static class UInt16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this ushort value) { return TimeSpan.FromSeconds(value); @@ -120,7 +120,7 @@ public static class UInt16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this ushort value) { return TimeSpan.FromMinutes(value); @@ -134,7 +134,7 @@ public static class UInt16Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this ushort value) { return TimeSpan.FromHours(value); @@ -146,7 +146,7 @@ public static class UInt16Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this ushort value) { return TimeSpan.FromDays(value); @@ -160,7 +160,7 @@ public static class UInt16Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this ushort value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/UInt32Extensions.cs b/X10D/src/Time/UInt32Extensions.cs index ac21a16..05d890b 100644 --- a/X10D/src/Time/UInt32Extensions.cs +++ b/X10D/src/Time/UInt32Extensions.cs @@ -25,7 +25,7 @@ public static class UInt32Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this uint value) { return DateTimeOffset.FromUnixTimeMilliseconds(value); @@ -46,7 +46,7 @@ public static class UInt32Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this uint value) { return DateTimeOffset.FromUnixTimeSeconds(value); @@ -61,7 +61,7 @@ public static class UInt32Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this uint value) { if (value == 0) @@ -78,7 +78,7 @@ public static class UInt32Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this uint value) { return TimeSpan.FromTicks(value); @@ -92,7 +92,7 @@ public static class UInt32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this uint value) { return TimeSpan.FromMilliseconds(value); @@ -106,7 +106,7 @@ public static class UInt32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this uint value) { return TimeSpan.FromSeconds(value); @@ -120,7 +120,7 @@ public static class UInt32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this uint value) { return TimeSpan.FromMinutes(value); @@ -134,7 +134,7 @@ public static class UInt32Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this uint value) { return TimeSpan.FromHours(value); @@ -146,7 +146,7 @@ public static class UInt32Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this uint value) { return TimeSpan.FromDays(value); @@ -160,7 +160,7 @@ public static class UInt32Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this uint value) { return TimeSpan.FromDays(value * 7); diff --git a/X10D/src/Time/UInt64Extensions.cs b/X10D/src/Time/UInt64Extensions.cs index bb902b6..c1c47ac 100644 --- a/X10D/src/Time/UInt64Extensions.cs +++ b/X10D/src/Time/UInt64Extensions.cs @@ -25,7 +25,7 @@ public static class UInt64Extensions /// is greater than 253,402,300,799,999. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeMilliseconds(this ulong value) { return DateTimeOffset.FromUnixTimeMilliseconds((long)value); @@ -46,7 +46,7 @@ public static class UInt64Extensions /// is greater than 253,402,300,799. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static DateTimeOffset FromUnixTimeSeconds(this ulong value) { return DateTimeOffset.FromUnixTimeSeconds((long)value); @@ -61,7 +61,7 @@ public static class UInt64Extensions /// /// is 0. [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static bool IsLeapYear(this ulong value) { if (value == 0) @@ -78,7 +78,7 @@ public static class UInt64Extensions /// The duration, in ticks. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Ticks(this ulong value) { return TimeSpan.FromTicks((long)value); @@ -92,7 +92,7 @@ public static class UInt64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Milliseconds(this ulong value) { return TimeSpan.FromMilliseconds((long)value); @@ -106,7 +106,7 @@ public static class UInt64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Seconds(this ulong value) { return TimeSpan.FromSeconds((long)value); @@ -120,7 +120,7 @@ public static class UInt64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Minutes(this ulong value) { return TimeSpan.FromMinutes((long)value); @@ -134,7 +134,7 @@ public static class UInt64Extensions /// A whose will equal . /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Hours(this ulong value) { return TimeSpan.FromHours((long)value); @@ -146,7 +146,7 @@ public static class UInt64Extensions /// The duration, in days. /// A whose will equal . [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Days(this ulong value) { return TimeSpan.FromDays((long)value); @@ -160,7 +160,7 @@ public static class UInt64Extensions /// A whose will equal × 7. /// [Pure] - [MethodImpl(CompilerResources.MethodImplOptions)] + [MethodImpl(CompilerResources.MaxOptimization)] public static TimeSpan Weeks(this ulong value) { return TimeSpan.FromDays((long)value * 7); diff --git a/docfx_project/articles/intro.md b/docfx_project/articles/intro.md index c0478ce..3104f6b 100644 --- a/docfx_project/articles/intro.md +++ b/docfx_project/articles/intro.md @@ -1 +1,86 @@ -# Add your introductions here! +## X10D +X10D (pronounced *extend*), is a .NET package that provides extension methods for numerous types. The purpose of this library is to simplify a codebase by reducing the need for repeated code when performing common operations. Simplify your codebase. Take advantage of .NET. Use extension methods. + +*(I'm also [dogfooding](https://www.pcmag.com/encyclopedia/term/dogfooding) this library, so there's that.)* + +### What are extension methods? + +Extension methods are a clever .NET feature that augment existing types with new functionality. They are defined as +static methods in a static class, and are called as if they were instance methods on the type they are extending. Take, +for example, the following code: + +```csharp +public static class Program +{ + public static void Main() + { + string str = "Hello, world!"; + Console.WriteLine(str.Reverse()); + } +} + +public static class StringExtensions +{ + public static string Reverse(this string str) + { + char[] chars = str.ToCharArray(); + Array.Reverse(chars); + return new string(chars); + } +} +``` + +This will print `!dlrow ,olleH` to the console. The `Reverse` method is defined in the `StringExtensions` class, yet is +called as if it were an instance method on the `str` variable, even though it's not. + +### Why use extension methods? + +Extension methods were introduced when LINQ was added to .NET. LINQ is a set of extension methods that provide a way to +query, filter, and transform data. If you were to access LINQ's methods statically, you would have to write code like +this: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + IEnumerable evenNumbers = Enumerable.Where(numbers, x => x % 2 == 0); + IEnumerable doubledNumbers = Enumerable.Select(evenNumbers, x => x * 2); + int sum = Enumerable.Sum(doubledNumbers); + Console.WriteLine(sum); + } +} +``` + +And if you wanted to one-line this, you'd have to write this: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + Console.WriteLine(Enumerable.Sum(Enumerable.Select(Enumerable.Where(numbers, x => x % 2 == 0), x => x * 2))); + } +} +``` + +This is a lot of code to write, and it's not very readable. The nested method calls make it incredibly difficult to +follow. However, because LINQ is implemented as extension methods, you can write the following code instead: + +```csharp +public static class Program +{ + public static void Main() + { + int[] numbers = { 1, 2, 3, 4, 5 }; + Console.WriteLine(numbers.Where(x => x % 2 == 0).Select(x => x * 2).Sum()); + } +} +``` + +Because the methods are called as if they were instance methods on `IEnumerable`, they can be chained together, +making the code much more readable. + +X10D aims to provide these same benefits as LINQ, but for dozens of other types and for countless other use cases. \ No newline at end of file diff --git a/docfx_project/articles/migration-from-3.x.x.md b/docfx_project/articles/migration-from-3.x.x.md new file mode 100644 index 0000000..1dbe179 --- /dev/null +++ b/docfx_project/articles/migration-from-3.x.x.md @@ -0,0 +1,52 @@ +# Migration from 3.x.x + +X10D 4.0.0 is a major release that introduces breaking changes. This document will help you migrate your code from 3.x.x +to 4.0.0. + +## Removed APIs + +### X10D.DSharpPlus library + +The `X10D.DSharpPlus` library has been removed. This library was used to provide extension methods for the DSharpPlus +wrapper library. However, I have since moved to using a different library, and as such, I feel it is no longer in the +scope of X10D or in my best interest to maintain it. The library will remain available on NuGet until DSharpPlus release +5.0.0 as stable, and X10D.DSharpPlus will NOT be part of X10D 4.0.0. I'm sorry for any inconvenience this may cause. + +### `Endianness` enum + +The `Endianness` enum was used to specify the endianness of data when reading or writing to a stream. This was causing +some clutter, and makes it harder to develop X10D, so it was removed. In its stead, any method which accepted an +`Endianness` parameter now has two overloads: one for big-endian, and one for little-endian. For example, the following +code: + +```csharp +someStream.Write(12345, Endianness.BigEndian); + +// or + +Span buffer = stackalloc byte[4]; +12345.TryWriteBytes(buffer, Endianness.BigEndian); +``` + +would now be written as: + +```csharp +someStream.WriteBigEndian(12345); + +// or + +Span buffer = stackalloc byte[4]; +12345.TryWriteLittleEndianBytes(buffer); +``` + +### `IEnumerable.ConcatOne(T)` extension method + +The `IEnumerable.ConcatOne` extension method was used to concatenate a single item to an enumerable. At the time, I +was unaware of the `Enumerable.Append` method, which does the same thing. As such, `ConcatOne` has been removed. There +is no migration path for this, as the built in `Append` method from LINQ is a drop-in replacement. + +## Exception Changes + +If you were previously catching TypeInitializationException when calling `Stream.GetHash<>` or `Stream.TryWriteHash<>`, +you will now need to catch a ArgumentException instead. The justification for this change is that ArgumentException is +more general, and more easily understood by developers. \ No newline at end of file diff --git a/docfx_project/articles/toc.yml b/docfx_project/articles/toc.yml index ff89ef1..fb0eb80 100644 --- a/docfx_project/articles/toc.yml +++ b/docfx_project/articles/toc.yml @@ -1,2 +1,4 @@ - name: Introduction href: intro.md +- name: Migration from 3.x.x + href: migration-from-3.x.x.md \ No newline at end of file diff --git a/docfx_project/docfx.json b/docfx_project/docfx.json index fd59db2..0e7eab1 100644 --- a/docfx_project/docfx.json +++ b/docfx_project/docfx.json @@ -6,8 +6,7 @@ "src": "../", "files": [ "X10D/**/**.csproj", - "X10D.Hosting/**/**.csproj", - "X10D.Unity/**/**.csproj" + "X10D.Hosting/**/**.csproj" ] } ], diff --git a/global.json b/global.json index 36e1a9e..b5b37b6 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.0", + "version": "8.0.0", "rollForward": "latestMajor", "allowPrerelease": false } diff --git a/tools/Benchmarks/Benchmarks.csproj b/tools/Benchmarks/Benchmarks.csproj index fb326bc..0791ad9 100644 --- a/tools/Benchmarks/Benchmarks.csproj +++ b/tools/Benchmarks/Benchmarks.csproj @@ -1,9 +1,9 @@ + net8.0;net7.0;net6.0 Release Exe - net7.0;net6.0;netcoreapp3.1 true diff --git a/tools/SourceValidator/SourceValidator.csproj b/tools/SourceValidator/SourceValidator.csproj index 5059923..70c5cb3 100644 --- a/tools/SourceValidator/SourceValidator.csproj +++ b/tools/SourceValidator/SourceValidator.csproj @@ -1,8 +1,8 @@ + net8.0 Exe - net7.0 diff --git a/tools/UpmPackageGenerator/Program.cs b/tools/UpmPackageGenerator/Program.cs deleted file mode 100644 index 76f4748..0000000 --- a/tools/UpmPackageGenerator/Program.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Reflection; -using System.Text.Json; - -string version; - -string? githubSha = Environment.GetEnvironmentVariable("GITHUB_SHA"); -Console.WriteLine(string.IsNullOrWhiteSpace(githubSha) - ? "GITHUB_SHA environment variable not found. This is not a CI run." - : $"Building from commit {githubSha}."); - -if (args.Length == 0 || string.IsNullOrWhiteSpace(args[0])) -{ - Console.WriteLine("No input file specified. Attempting to use GITHUB_SHA."); - version = githubSha ?? "0.0.0"; -} -else -{ - string path = args[0]; - var assembly = Assembly.LoadFrom(path); - var attribute = assembly.GetCustomAttribute(); - if (attribute is null || string.IsNullOrWhiteSpace(attribute.InformationalVersion)) - { - Console.WriteLine("AssemblyInformationalVersionAttribute not found. Attempting to use GITHUB_SHA."); - version = githubSha ?? "0.0.0"; - } - else - { - Console.WriteLine("AssemblyInformationalVersionAttribute found."); - version = attribute.InformationalVersion; - } -} - -Console.WriteLine($"Building for version {version}."); - -var package = new -{ - name = "me.olivr.x10d", - author = new {name = "Oliver Booth", email = "me@olivr.me", url = "https://oliverbooth.dev"}, - displayName = "X10D", - version, - unity = "2021.3", - description = "Extension methods on crack", - keywords = new[] {"dotnet", "extension-methods"}, - changelogUrl = "https://github.com/oliverbooth/X10D/blob/main/CHANGELOG.md", - licensesUrl = "https://github.com/oliverbooth/X10D/blob/main/LICENSE.md" -}; - -using FileStream stream = File.Open("package.json", FileMode.Create, FileAccess.ReadWrite); -Console.WriteLine("Serializing package.json."); -JsonSerializer.Serialize(stream, package, new JsonSerializerOptions {WriteIndented = true}); -stream.Position = 0; -stream.CopyTo(Console.OpenStandardOutput()); diff --git a/tools/UpmPackageGenerator/UpmPackageGenerator.csproj b/tools/UpmPackageGenerator/UpmPackageGenerator.csproj deleted file mode 100644 index 82cad6d..0000000 --- a/tools/UpmPackageGenerator/UpmPackageGenerator.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - Exe - net7.0 - - -