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 @@
-
+