Compare commits

...
10 Commits
Author SHA1 Message Date
ds5678 78ecfb7de4 Bump version 2024-05-31 07:23:23 -07:00
ds5678 5080b7eb29 Add net461 target 2024-05-31 07:17:06 -07:00
ds5678 2e8940973f Bump version 2024-05-19 17:40:14 -04:00
ds5678 64f50b46fb Add .NET 8 to the CI workflow 2024-05-19 17:34:41 -04:00
ds5678 fbdda777ac Remove package reference to System.Text.Json 2024-05-19 17:32:46 -04:00
ds5678 2de06bfaf4 .NET target 2024-05-19 17:28:57 -04:00
ds5678 c7a8932863 Remove benchmarks 2024-05-19 17:25:33 -04:00
ds5678 4bcc823371 Bump version 2024-04-20 15:55:53 -07:00
ds5678 7630da6da0 Improve parsing of version zero 2024-04-20 15:55:14 -07:00
ds5678 e5802e39ee Parse with only the major version 2024-04-20 15:44:19 -07:00
12 changed files with 60 additions and 114 deletions

No files matched your search

+18 -3
View File
@@ -7,6 +7,23 @@ on:
branches: [ master ]
jobs:
net8:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/[email protected]
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --framework net8.0 --no-restore
- name: Test
run: dotnet test --framework net8.0 --no-build --verbosity normal
net7:
runs-on: ubuntu-latest
@@ -50,9 +67,7 @@ jobs:
- name: Setup .NET
uses: actions/[email protected]
with:
dotnet-version: |
5.0.x
6.0.x
dotnet-version: 5.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
@@ -1,15 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<LangVersion>Latest</LangVersion>
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
</ItemGroup>
</Project>
@@ -1,11 +0,0 @@
using BenchmarkDotNet.Running;
namespace AssetRipper.Primitives.Benckmarks;
internal static class Program
{
static void Main()
{
BenchmarkRunner.Run(typeof(Program).Assembly);
}
}
@@ -1,46 +0,0 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using System.Runtime.CompilerServices;
namespace AssetRipper.Primitives.Benckmarks;
[SimpleJob(RuntimeMoniker.Net80)]
[RPlotExporter]
public class YearVersionCheck
{
[Params(4, 5, 6, 7, 2016, 2017, 2018, 2022, 2023, 2024)]
public ushort Major;
[Benchmark]
public bool Simple() => Major is >= 2017 and <= 2023;
[Benchmark]
public bool BitsWith2016() => BitComparison(Major);
[Benchmark]
public bool BitsWithout2016() => BitComparison(Major) && Major is not 2016;
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
private static bool BitComparison(uint value)
{
//This function determines if an unsigned integer
//is between 2016 and 2023, inclusive. It does this
//by comparing bits of the value with know constants.
const uint VariableBitMask = 0x7;
const uint FixedBitMask = ~VariableBitMask;
const uint ExpectedFixedBits = 0x7E0;//2016
return (value & FixedBitMask) == ExpectedFixedBits;
}
/* Results:
* Due to the simplicity of the methods being profiled,
* benchmarking was inconclusive. The costs of calling
* these methods are almost neglible.
*
* Decision:
* For the time being, the library will continue to use
* the simple bounds check. If another option is shown
* to be significantly better, I am open to switching.
*/
}
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netframework3.5;netframework4.0;netframework4.8;net5.0;net6.0;net7.0</TargetFrameworks>
<TargetFrameworks>net35;net40;net48;net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
<Nullable>enable</Nullable>
+6 -1
View File
@@ -9,8 +9,13 @@ public class ParsingTests
[TestCase("4.2.2f1\n1", 4, 2, 2, UnityVersionType.Final, 1, "\n1", "Custom Unity 4 Version")]
[TestCase("2343.4.5f7", 2343, 4, 5, UnityVersionType.Final, 7, null, "Fictitious Future Version")]
[TestCase("2019.2.2f1c2\n2", 2019, 2, 2, UnityVersionType.China, 2, "\n2", "Fake Custom Chinese Version")]
[TestCase("2019", 2019, 0, 0, UnityVersionType.Final, 1, null, "Major Only")]
[TestCase("2019.4", 2019, 4, 0, UnityVersionType.Final, 1, null, "Major Minor Only")]
[TestCase("2019.4.3", 2019, 4, 3, UnityVersionType.Final, 1, null, "Major Minor Build Only")]
[TestCase("0", 0, 0, 0, UnityVersionType.Alpha, 0, null, "Zero, Major Only")]
[TestCase("0.0", 0, 0, 0, UnityVersionType.Alpha, 0, null, "Zero, Major Minor Only")]
[TestCase("0.0.0", 0, 0, 0, UnityVersionType.Alpha, 0, null, "Zero, Major Minor Build Only")]
[TestCase("0.0.0b2", 0, 0, 0, UnityVersionType.Beta, 2, null, "Zero, Full")]
[TestCase("2019.2.2f1-letters", 2019, 2, 2, UnityVersionType.Final, 1, "-letters", "Issue #40 - Appended Custom Characters")]
public void UnityVersionParsesCorrectly(string versionString, int major, int minor, int build, UnityVersionType type, int typeNumber, string? customEngine, string name)
{
@@ -20,7 +25,7 @@ public class ParsingTests
{
Assert.That(parsedCustomEngine, Is.EqualTo(customEngine), $"The custom engine boolean is incorrect for '{name}'");
Assert.That(parsedVersion, Is.EqualTo(expected), $"The parsed version is incorrect for '{name}'");
if (customEngine is not null || typeNumber is not 1)
if (customEngine is not null || typeNumber is not 0 and not 1)
{
Assert.That(parsedVersion.ToString(UnityVersionFormatFlags.Default, parsedCustomEngine ?? ""), Is.EqualTo(versionString));
}
-6
View File
@@ -24,8 +24,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssetRipper.Primitives", "A
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssetRipper.Primitives.Tests", "AssetRipper.Primitives.Tests\AssetRipper.Primitives.Tests.csproj", "{545E670D-141B-4F05-9AFD-2F184A59EADC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssetRipper.Primitives.Benckmarks", "AssetRipper.Primitives.Benckmarks\AssetRipper.Primitives.Benckmarks.csproj", "{E3DEB571-4EE4-4C89-9005-DB10D9FB561B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -40,10 +38,6 @@ Global
{545E670D-141B-4F05-9AFD-2F184A59EADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{545E670D-141B-4F05-9AFD-2F184A59EADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{545E670D-141B-4F05-9AFD-2F184A59EADC}.Release|Any CPU.Build.0 = Release|Any CPU
{E3DEB571-4EE4-4C89-9005-DB10D9FB561B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E3DEB571-4EE4-4C89-9005-DB10D9FB561B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E3DEB571-4EE4-4C89-9005-DB10D9FB561B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E3DEB571-4EE4-4C89-9005-DB10D9FB561B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netframework3.5;netframework4.0;netstandard2.0;net5.0;net6.0;net7.0</TargetFrameworks>
<TargetFrameworks>net35;net40;net461;netstandard2.0;net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
<Nullable>enable</Nullable>
<Authors>ds5678</Authors>
<Company>AssetRipper</Company>
<Version>3.0.0</Version>
<Version>3.1.2</Version>
<AssemblyVersion>$(Version)</AssemblyVersion>
<PackageId>AssetRipper.Primitives</PackageId>
<PackageTags>C# assetripper unity unity3d</PackageTags>
@@ -14,17 +14,21 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryType>git</RepositoryType>
<PackageProjectUrl>https://github.com/AssetRipper/AssetRipper.Primitives</PackageProjectUrl>
<Copyright>Copyright (c) 2022-2023 ds5678</Copyright>
<Copyright>Copyright (c) 2022-2024 ds5678</Copyright>
<Description>Managed library for primitive types used in AssetRipper.</Description>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' != 'netframework3.5' and '$(TargetFramework)' != 'netframework4.0' ">
<PropertyGroup Condition=" '$(TargetFramework)' != 'net35' and '$(TargetFramework)' != 'net40' ">
<IsTrimmable>true</IsTrimmable>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
@@ -36,33 +40,18 @@
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net461'">
<PackageReference Include="Microsoft.Bcl.HashCode">
<Version>1.1.1</Version>
</PackageReference>
<PackageReference Include="System.Memory">
<Version>4.5.5</Version>
</PackageReference>
<PackageReference Include="System.Text.Json">
<Version>8.0.1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
<PackageReference Include="System.Text.Json">
<Version>8.0.1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
<PackageReference Include="System.Text.Json">
<Version>8.0.1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="System.Text.Json">
<Version>8.0.1</Version>
<ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<PackageReference Include="System.ValueTuple">
<Version>4.5.0</Version>
</PackageReference>
</ItemGroup>
+4 -3
View File
@@ -1,4 +1,4 @@
#if NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
#if NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NET461_OR_GREATER
using System.Buffers.Binary;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
@@ -6,11 +6,12 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json.Serialization;
namespace AssetRipper.Primitives;
[JsonConverter(typeof(UnityGuidJsonConverter))]
#if NET5_0_OR_GREATER
[System.Text.Json.Serialization.JsonConverter(typeof(UnityGuidJsonConverter))]
#endif
public readonly record struct UnityGuid
{
public UnityGuid(Guid guid)
@@ -1,4 +1,4 @@
#if NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
#if NET5_0_OR_GREATER
using System.Text.Json;
using System.Text.Json.Serialization;
+16 -2
View File
@@ -5,6 +5,7 @@ namespace AssetRipper.Primitives;
public readonly partial struct UnityVersion
{
private static readonly Regex majorRegex = new Regex(@"^([0-9]+)$", RegexOptions.Compiled);
private static readonly Regex majorMinorRegex = new Regex(@"^([0-9]+)\.([0-9]+)$", RegexOptions.Compiled);
private static readonly Regex majorMinorBuildRegex = new Regex(@"^([0-9]+)\.([0-9]+)\.([0-9]+)$", RegexOptions.Compiled);
private static readonly Regex normalRegex = new Regex(@"^([0-9]+)\.([0-9]+)\.([0-9]+)\.?([abcfpx])([0-9]+)((?:.|[\r\n])+)?$", RegexOptions.Compiled);
@@ -125,7 +126,9 @@ public readonly partial struct UnityVersion
int minor = int.Parse(match.Groups[2].Value);
int build = int.Parse(match.Groups[3].Value);
customEngine = null;
version = new UnityVersion((ushort)major, (ushort)minor, (ushort)build, UnityVersionType.Final, 1);
version = major is not 0 || minor is not 0 || build is not 0
? new UnityVersion((ushort)major, (ushort)minor, (ushort)build, UnityVersionType.Final, 1)
: default;
return true;
}
else if (majorMinorRegex.TryMatch(s, out match))
@@ -133,7 +136,18 @@ public readonly partial struct UnityVersion
int major = int.Parse(match.Groups[1].Value);
int minor = int.Parse(match.Groups[2].Value);
customEngine = null;
version = new UnityVersion((ushort)major, (ushort)minor, 0, UnityVersionType.Final, 1);
version = major is not 0 || minor is not 0
? new UnityVersion((ushort)major, (ushort)minor, 0, UnityVersionType.Final, 1)
: default;
return true;
}
else if (majorRegex.TryMatch(s, out match))
{
int major = int.Parse(match.Groups[1].Value);
customEngine = null;
version = major is not 0
? new UnityVersion((ushort)major, 0, 0, UnityVersionType.Final, 1)
: default;
return true;
}
else
+1 -1
View File
@@ -1,4 +1,4 @@
#if NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
#if NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NET461_OR_GREATER
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text;