diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 82c61e4..4426046 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -2,7 +2,7 @@ name: .NET on: push: - branches: [ main, dev, dev/*, feature/*, fix/*, release/* ] + branches: [ main, dev, feature/*, fix/*, release/* ] pull_request: branches: [ main ] @@ -21,7 +21,9 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: '6.0.x' + dotnet-version: | + 6.0.x + 7.0.x # Create Local NuGet Source @@ -31,33 +33,33 @@ jobs: - name: Add Local Nuget Source run: dotnet nuget add source ~/nuget - # Collections.EqualityComparers + # EqualityComparers - - name: Restore Collections.EqualityComparers - run: dotnet restore ./src/*/*/Collections.EqualityComparers.csproj + - name: Restore EqualityComparers + run: dotnet restore ./src/*/*/Collections.Generic.EqualityComparers.csproj - - name: Build Collections.EqualityComparers - run: dotnet build ./src/*/*/Collections.EqualityComparers.csproj --no-restore -c Release + - name: Build EqualityComparers + run: dotnet build ./src/*/*/Collections.Generic.EqualityComparers.csproj --no-restore -c Release - - name: Pack Collections.EqualityComparers - run: dotnet pack ./src/*/*/Collections.EqualityComparers.csproj --no-restore -o ~/nuget -c Release + - name: Pack EqualityComparers + run: dotnet pack ./src/*/*/Collections.Generic.EqualityComparers.csproj --no-restore -o ~/nuget -c Release - - name: Restore Collections.EqualityComparers.Tests - run: dotnet restore ./src/*/*/Collections.EqualityComparers.Tests.csproj + - name: Restore EqualityComparers.Tests + run: dotnet restore ./src/*/*/Collections.Generic.EqualityComparers.Tests.csproj - - name: Test Collections.EqualityComparers.Tests - run: dotnet test ./src/*/*/Collections.EqualityComparers.Tests.csproj --no-restore -c Release + - name: Test EqualityComparers.Tests + run: dotnet test ./src/*/*/Collections.Generic.EqualityComparers.Tests.csproj --no-restore -c Release # Collections - name: Restore Collections - run: dotnet restore ./src/*/*/Collections.csproj + run: dotnet restore ./src/*/*/Collections.Generic.csproj - name: Build Collections - run: dotnet build ./src/*/*/Collections.csproj --no-restore -c Release + run: dotnet build ./src/*/*/Collections.Generic.csproj --no-restore -c Release - name: Pack Collections - run: dotnet pack ./src/*/*/Collections.csproj --no-restore -o ~/nuget -c Release + run: dotnet pack ./src/*/*/Collections.Generic.csproj --no-restore -o ~/nuget -c Release # Push diff --git a/LICENSE b/LICENSE index eb30daf..6a819bc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Andrei Sergeev, Pavel Moskovoy +Copyright (c) 2022-2023 Andrei Sergeev, Pavel Moskovoy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index a27f873..c600837 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -# PrimeFuncPack Collections +# PrimeFuncPack Generic Collections -PrimeFuncPack Collections is a core library pack for .NET consisting of useful collection extensions: -- Collection equality comparers (implementing value equality); -- Immutable FlatArray. +PrimeFuncPack Generic Collections is a core library pack for .NET consisting of collection extensions such as collection value equality comparers. diff --git a/docs/collections-equality-comparers/README.md b/docs/collections-equality-comparers/README.md index 45f4c0a..a7149b0 100644 --- a/docs/collections-equality-comparers/README.md +++ b/docs/collections-equality-comparers/README.md @@ -1,4 +1,4 @@ -# PrimeFuncPack Collections.EqualityComparers +# PrimeFuncPack Generic Collections.EqualityComparers -PrimeFuncPack Collections.EqualityComparers is a core library for .NET consisting of collection equality comparers (implementing value equality). -The Collections.EqualityComparers is shipped as a part of PrimeFuncPack Collections pack. +PrimeFuncPack Generic Collections.EqualityComparers is a core library for .NET consisting of collection value equality comparers. +The Generic Collections.EqualityComparers is shipped as a part of PrimeFuncPack Generic Collections pack. diff --git a/docs/collections-flat-array/README.md b/docs/collections-flat-array/README.md deleted file mode 100644 index b4e4b67..0000000 --- a/docs/collections-flat-array/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# PrimeFuncPack Collections.FlatArray - -PrimeFuncPack Collections.FlatArray is a core library for .NET consisting of immutable FlatArray. -The Collections.FlatArray is shipped as a part of PrimeFuncPack Collections pack. diff --git a/docs/collections/README.md b/docs/collections/README.md index a27f873..c600837 100644 --- a/docs/collections/README.md +++ b/docs/collections/README.md @@ -1,5 +1,3 @@ -# PrimeFuncPack Collections +# PrimeFuncPack Generic Collections -PrimeFuncPack Collections is a core library pack for .NET consisting of useful collection extensions: -- Collection equality comparers (implementing value equality); -- Immutable FlatArray. +PrimeFuncPack Generic Collections is a core library pack for .NET consisting of collection extensions such as collection value equality comparers. diff --git a/src/collections-equality-comparers/Collections.EqualityComparers.Tests/Collections.EqualityComparers.Tests.csproj b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/Collections.Generic.EqualityComparers.Tests.csproj similarity index 69% rename from src/collections-equality-comparers/Collections.EqualityComparers.Tests/Collections.EqualityComparers.Tests.csproj rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/Collections.Generic.EqualityComparers.Tests.csproj index f897b04..d35112d 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers.Tests/Collections.EqualityComparers.Tests.csproj +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/Collections.Generic.EqualityComparers.Tests.csproj @@ -1,20 +1,20 @@ - net6.0 + net6.0;net7.0 disable enable true true false Andrei Sergeev, Pavel Moskovoy - Copyright © 2022 Andrei Sergeev, Pavel Moskovoy - PrimeFuncPack.Collections.EqualityComparers.Tests - PrimeFuncPack.Collections.EqualityComparers.Tests + Copyright © 2022-2023 Andrei Sergeev, Pavel Moskovoy + PrimeFuncPack.Collections.Generic.EqualityComparers.Tests + PrimeFuncPack.Collections.Generic.EqualityComparers.Tests - + runtime; build; native; contentfiles; analyzers; buildtransitive @@ -27,7 +27,7 @@ - + diff --git a/src/collections-equality-comparers/Collections.EqualityComparers/Collections.EqualityComparers.csproj b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/Collections.Generic.EqualityComparers.csproj similarity index 64% rename from src/collections-equality-comparers/Collections.EqualityComparers/Collections.EqualityComparers.csproj rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/Collections.Generic.EqualityComparers.csproj index 3da3bb4..ab1a90e 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers/Collections.EqualityComparers.csproj +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/Collections.Generic.EqualityComparers.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net7.0 disable enable true @@ -9,15 +9,15 @@ true LICENSE README.md - https://github.com/pfpack/pfpack-collections - https://github.com/pfpack/pfpack-collections + https://github.com/pfpack/pfpack-collections-generic + https://github.com/pfpack/pfpack-collections-generic pfpack Andrei Sergeev, Pavel Moskovoy - Copyright © 2022 Andrei Sergeev, Pavel Moskovoy - PrimeFuncPack Collections.EqualityComparers is a core library for .NET consisting of collection equality comparers (implementing value equality). + Copyright © 2022-2023 Andrei Sergeev, Pavel Moskovoy + PrimeFuncPack Generic Collections.EqualityComparers is a core library for .NET consisting of collection value equality comparers. System.Collections.Generic - EarlyFuncPack.Collections.EqualityComparers - 0.4.1 + EarlyFuncPack.Collections.Generic.EqualityComparers + 0.99.0 diff --git a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs similarity index 92% rename from src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs index 845d4fd..011f8e3 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ArrayEqualityComparer.cs @@ -49,10 +49,9 @@ public bool Equals(T[]? x, T[]? y) return true; } - public int GetHashCode(T[] obj) + public int GetHashCode(T[]? obj) { - // Return zero instead of throwing ArgumentNullException - if (obj is null) + if (obj is null) // Return zero instead of throwing ArgumentNullException { return default; } diff --git a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs similarity index 69% rename from src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs index 6666419..9861804 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ImmutableArrayEqualityComparer.cs @@ -1,8 +1,8 @@ -using System.Collections.Generic; +using System.Collections.Immutable; -namespace System.Collections.Immutable; +namespace System.Collections.Generic; -public sealed class ImmutableArrayEqualityComparer : IEqualityComparer> +public sealed class ImmutableArrayEqualityComparer : IEqualityComparer>, IEqualityComparer?> { private readonly IEqualityComparer comparer; @@ -24,20 +24,12 @@ public static ImmutableArrayEqualityComparer Default public bool Equals(ImmutableArray x, ImmutableArray y) { - // ImmutableArray 'reference' equality - if (x.Equals(y)) + if (x.Equals(y)) // Check if the values' underlying arrays are reference equal (incl. the null case) { return true; } - // Redundant since the 'reference' equality check is already done - // Keep for safety purposes to avoid possible NullReferenceException - if (x.IsDefault && y.IsDefault) - { - return true; - } - - if (x.IsDefault || y.IsDefault) + if (x.IsDefault || y.IsDefault) // The default means null { return false; } @@ -61,8 +53,7 @@ public bool Equals(ImmutableArray x, ImmutableArray y) public int GetHashCode(ImmutableArray obj) { - // Return zero instead of throwing ArgumentNullException - if (obj.IsDefault) + if (obj.IsDefault) // Return zero instead of throwing ArgumentNullException { return default; } @@ -78,6 +69,14 @@ public int GetHashCode(ImmutableArray obj) return builder.ToHashCode(); } + public bool Equals(ImmutableArray? x, ImmutableArray? y) + => + Equals(x ?? default, y ?? default); // The default means null + + public int GetHashCode(ImmutableArray? obj) + => + GetHashCode(obj ?? default); // The default means null + private static class InnerDefault { internal static readonly ImmutableArrayEqualityComparer Value = Create(); diff --git a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ListEqualityComparer.cs b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ListEqualityComparer.cs similarity index 72% rename from src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ListEqualityComparer.cs rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ListEqualityComparer.cs index 4fdc418..d83dc4a 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ListEqualityComparer.cs +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ListEqualityComparer.cs @@ -1,6 +1,4 @@ -using System.Runtime.CompilerServices; - -namespace System.Collections.Generic; +namespace System.Collections.Generic; public sealed class ListEqualityComparer : IEqualityComparer>, IEqualityComparer> { @@ -23,23 +21,6 @@ public static ListEqualityComparer Default InnerDefault.Value; public bool Equals(IList? x, IList? y) - => - InnerEquals(x, y); - - public bool Equals(List? x, List? y) - => - InnerEquals(x, y); - - public int GetHashCode(IList obj) - => - InnerGetHashCode(obj); - - public int GetHashCode(List obj) - => - InnerGetHashCode(obj); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private bool InnerEquals(IList? x, IList? y) { if (ReferenceEquals(x, y)) { @@ -68,11 +49,9 @@ private bool InnerEquals(IList? x, IList? y) return true; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private int InnerGetHashCode(IList obj) + public int GetHashCode(IList? obj) { - // Return zero instead of throwing ArgumentNullException - if (obj is null) + if (obj is null) // Return zero instead of throwing ArgumentNullException { return default; } @@ -88,6 +67,14 @@ private int InnerGetHashCode(IList obj) return builder.ToHashCode(); } + public bool Equals(List? x, List? y) + => + Equals((IList?)x, y); + + public int GetHashCode(List? obj) + => + GetHashCode((IList?)obj); + private static class InnerDefault { internal static readonly ListEqualityComparer Value = Create(); diff --git a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs similarity index 92% rename from src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs rename to src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs index 5b785de..e9e8c40 100644 --- a/src/collections-equality-comparers/Collections.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs +++ b/src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers/EqualityComparers/ReadOnlyListEqualityComparer.cs @@ -49,10 +49,9 @@ public bool Equals(IReadOnlyList? x, IReadOnlyList? y) return true; } - public int GetHashCode(IReadOnlyList obj) + public int GetHashCode(IReadOnlyList? obj) { - // Return zero instead of throwing ArgumentNullException - if (obj is null) + if (obj is null) // Return zero instead of throwing ArgumentNullException { return default; } diff --git a/src/collections/Collections/Collections.csproj b/src/collections-generic/Collections.Generic/Collections.Generic.csproj similarity index 60% rename from src/collections/Collections/Collections.csproj rename to src/collections-generic/Collections.Generic/Collections.Generic.csproj index 353d59f..d07d1a8 100644 --- a/src/collections/Collections/Collections.csproj +++ b/src/collections-generic/Collections.Generic/Collections.Generic.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net7.0 disable enable true @@ -9,15 +9,15 @@ true LICENSE README.md - https://github.com/pfpack/pfpack-collections - https://github.com/pfpack/pfpack-collections + https://github.com/pfpack/pfpack-collections-generic + https://github.com/pfpack/pfpack-collections-generic pfpack Andrei Sergeev, Pavel Moskovoy - Copyright © 2022 Andrei Sergeev, Pavel Moskovoy - PrimeFuncPack Collections is a core library pack for .NET consisting of useful collection extensions such as collection equality comparers and immutable FlatArray. + Copyright © 2022-2023 Andrei Sergeev, Pavel Moskovoy + PrimeFuncPack Generic Collections is a core library pack for .NET consisting of collection extensions such as collection value equality comparers. System.Collections.Generic - EarlyFuncPack.Collections - 0.11.0 + EarlyFuncPack.Collections.Generic + 0.99.0 @@ -32,7 +32,7 @@ - +