Skip to content

Commit 872a4f6

Browse files
committed
Add generic equality compare object IfEquals and IfNotEquals
1 parent 50c5dcc commit 872a4f6

3 files changed

Lines changed: 242 additions & 34 deletions

File tree

src/DomainCommonExtensions/CommonExtensions/TypeParam/TypeParamExtensions.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,41 @@ public static T[] SubArray<T>(this T[] array, int offset, int length)
182182
.Take(length)
183183
.ToArray();
184184
}
185+
186+
/// <summary>
187+
/// A T extension method that check if source and search value are equals.
188+
/// </summary>
189+
/// <typeparam name="T">Generic type parameter.</typeparam>
190+
/// <param name="source">Source object value.</param>
191+
/// <param name="searchValue">The search value.</param>
192+
/// <param name="resultValue">Result object value.</param>
193+
/// <returns>
194+
/// A T. If objects are equals then return defaultValue.
195+
/// </returns>
196+
public static T IfEquals<T>(this T source, T searchValue, T resultValue)
197+
{
198+
if (source.IsNull() || searchValue.IsNull())
199+
return resultValue;
200+
201+
return EqualityComparer<T>.Default.Equals(source, searchValue) ? resultValue : source;
202+
}
203+
204+
/// <summary>
205+
/// A T extension method that check if source and search value are not equals.
206+
/// </summary>
207+
/// <typeparam name="T">Generic type parameter.</typeparam>
208+
/// <param name="source">Source object value.</param>
209+
/// <param name="searchValue">The search value.</param>
210+
/// <param name="resultValue">Result object value.</param>
211+
/// <returns>
212+
/// A T. If objects are not equals then return resultValue.
213+
/// </returns>
214+
public static T IfNotEquals<T>(this T source, T searchValue, T resultValue)
215+
{
216+
if (source.IsNull() || searchValue.IsNull())
217+
return resultValue;
218+
219+
return EqualityComparer<T>.Default.Equals(source, searchValue).IsFalse() ? resultValue : source;
220+
}
185221
}
186222
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// ***********************************************************************
2+
// Assembly : RzR.Shared.Extensions.DataTypeTests
3+
// Author : RzR
4+
// Created On : 2025-07-15 12:18
5+
//
6+
// Last Modified By : RzR
7+
// Last Modified On : 2025-07-15 12:19
8+
// ***********************************************************************
9+
// <copyright file="TypeParamFuncTests.cs" company="RzR SOFT & TECH">
10+
// Copyright © RzR. All rights reserved.
11+
// </copyright>
12+
//
13+
// <summary>
14+
// </summary>
15+
// ***********************************************************************
16+
17+
#region U S A G E S
18+
19+
using DomainCommonExtensions.CommonExtensions;
20+
using DomainCommonExtensions.CommonExtensions.TypeParam;
21+
using Microsoft.VisualStudio.TestTools.UnitTesting;
22+
23+
#endregion
24+
25+
namespace DataTypeTests.DataTests
26+
{
27+
[TestClass]
28+
public class TypeParamFuncTests
29+
{
30+
[TestMethod]
31+
public void IfIsNulOrFunc_Null_Test()
32+
{
33+
int? i = null;
34+
35+
var test = i.IfIsNullOrFuncIsTrue(0, () => i == 0);
36+
37+
Assert.AreEqual(0, test);
38+
}
39+
40+
[TestMethod]
41+
public void IfIsNulOrFunc_Zero_Equal_Zero_Test()
42+
{
43+
int? i = 0;
44+
45+
var test = i.IfIsNullOrFuncIsTrue(-1, () => i == 0);
46+
47+
Assert.AreEqual(-1, test);
48+
}
49+
50+
[TestMethod]
51+
public void IfIsNulOrFunc_One_Equal_Zero_False_Test()
52+
{
53+
int? i = 1;
54+
55+
var test = i.IfIsNullOrFuncIsTrue(0, () => i == 0);
56+
57+
Assert.AreEqual(1, test);
58+
}
59+
60+
[TestMethod]
61+
public void IfIsNulOrFunc_Null_Func_True_Test()
62+
{
63+
int? i = null;
64+
65+
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), true);
66+
67+
Assert.AreEqual(0, test);
68+
}
69+
70+
[TestMethod]
71+
public void IfIsNulOrFunc_Null_Func_False_Test()
72+
{
73+
int? i = null;
74+
75+
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), false);
76+
77+
Assert.AreEqual(null, test);
78+
}
79+
80+
[TestMethod]
81+
public void IfIsNulOrFunc_1_Func_True_Test()
82+
{
83+
int? i = 1;
84+
85+
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), true);
86+
87+
Assert.AreEqual(1, test);
88+
}
89+
90+
[TestMethod]
91+
public void IfIsNulOrFunc_1_Func_False_Test()
92+
{
93+
int? i = 1;
94+
95+
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), false);
96+
97+
Assert.AreEqual(0, test);
98+
}
99+
}
100+
}

src/tests/DataTypeTests/DataTests/TypeParamTests.cs

Lines changed: 106 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616

1717
#region U S A G E S
1818

19+
using System;
1920
using DataTypeTests.Models;
20-
using DomainCommonExtensions.CommonExtensions;
2121
using DomainCommonExtensions.CommonExtensions.TypeParam;
2222
using Microsoft.VisualStudio.TestTools.UnitTesting;
23+
using DomainCommonExtensions.CommonExtensions;
24+
using DomainCommonExtensions.DataTypeExtensions;
2325

2426
#endregion
2527

@@ -90,74 +92,144 @@ public void IfIsNull_ClassModel_Test()
9092
Assert.AreEqual(testModel2, test2);
9193
}
9294

95+
[DataRow("a", "a", "a")]
96+
[DataRow("a", "g", "a")]
97+
[DataRow("a", null, "a")]
98+
[DataRow(null, "r", null)]
99+
[DataRow(null, null, null)]
93100
[TestMethod]
94-
public void IfIsNulOrFunc_Null_Test()
101+
public void IfEquals_string_Test(string sourceValue, string checkValue, string exceptedResult)
95102
{
96-
int? i = null;
103+
var r = sourceValue.IfEquals(checkValue, exceptedResult);
97104

98-
var test = i.IfIsNullOrFuncIsTrue(0, () => i == 0);
99-
100-
Assert.AreEqual(0, test);
105+
if (sourceValue.IsNull())
106+
Assert.IsNull(r);
107+
else
108+
Assert.IsNotNull(r);
109+
Assert.AreEqual(exceptedResult, r);
101110
}
102111

112+
[DataRow(1, 1, 1)]
113+
[DataRow(2, 1, 2)]
114+
[DataRow(3, null, 3)]
115+
[DataRow(null, 2, null)]
116+
[DataRow(null, null, null)]
103117
[TestMethod]
104-
public void IfIsNulOrFunc_Zero_Equal_Zero_Test()
118+
public void IfEquals_int_Test(int sourceValue, int checkValue, int exceptedResult)
105119
{
106-
int? i = 0;
120+
var r = sourceValue.IfEquals(checkValue, exceptedResult);
107121

108-
var test = i.IfIsNullOrFuncIsTrue(-1, () => i == 0);
109-
110-
Assert.AreEqual(-1, test);
122+
if (sourceValue.IsNull())
123+
Assert.IsNull(r);
124+
else
125+
Assert.IsNotNull(r);
126+
Assert.AreEqual(exceptedResult, r);
111127
}
112128

129+
[DataRow(1, 1, 1)]
130+
[DataRow(2, 1, 2)]
131+
[DataRow(3, null, 3)]
132+
[DataRow(null, 2, null)]
133+
[DataRow(null, null, null)]
113134
[TestMethod]
114-
public void IfIsNulOrFunc_One_Equal_Zero_False_Test()
135+
public void IfEquals_long_Test(long sourceValue, long checkValue, long exceptedResult)
115136
{
116-
int? i = 1;
117-
118-
var test = i.IfIsNullOrFuncIsTrue(0, () => i == 0);
137+
var r = sourceValue.IfEquals(checkValue, exceptedResult);
119138

120-
Assert.AreEqual(1, test);
139+
if (sourceValue.IsNull())
140+
Assert.IsNull(r);
141+
else
142+
Assert.IsNotNull(r);
143+
Assert.AreEqual(exceptedResult, r);
121144
}
122145

146+
[DataRow(1.2, 1.21, 1.2)]
147+
[DataRow(2, 1, 2)]
148+
[DataRow(3, null, 3)]
149+
[DataRow(null, 2, null)]
150+
[DataRow(null, null, null)]
123151
[TestMethod]
124-
public void IfIsNulOrFunc_Null_Func_True_Test()
152+
public void IfEquals_double_Test(double sourceValue, double checkValue, double exceptedResult)
125153
{
126-
int? i = null;
127-
128-
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), true);
154+
var r = sourceValue.IfEquals(checkValue, exceptedResult);
129155

130-
Assert.AreEqual(0, test);
156+
if (sourceValue.IsNull())
157+
Assert.IsNull(r);
158+
else
159+
Assert.IsNotNull(r);
160+
Assert.AreEqual(exceptedResult, r);
131161
}
132162

163+
[DataRow("5e9d1a52-d737-4dd0-9075-e9b0f46c19d2", "5e9d1a52-d737-4dd0-9075-e9b0f46c19d2", "00000000-0000-0000-0000-000000000000")]
164+
[DataRow("5e9d1a52-d737-4dd0-9075-e9b0f46c19d2", "00000000-0000-0000-0000-000000000000", "5e9d1a52-d737-4dd0-9075-e9b0f46c19d2")]
165+
[DataRow("5e9d1a52-d737-4dd0-9075-e9b0f46c19d2", null, "5e9d1a52-d737-4dd0-9075-e9b0f46c19d2")]
166+
[DataRow(null, "00000000-0000-0000-0000-000000000000", null)]
167+
[DataRow(null, null, null)]
133168
[TestMethod]
134-
public void IfIsNulOrFunc_Null_Func_False_Test()
169+
public void IfEquals_Guid_Test(string sourceValue, string checkValue, string exceptedResult)
135170
{
136-
int? i = null;
171+
var sourceGuid = (Guid?)sourceValue.ToGuid();
172+
var checkValueGuid = (Guid?)checkValue.ToGuid();
173+
var exceptedResultGuid = (Guid?)exceptedResult.ToGuid();
137174

138-
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), false);
175+
var r = sourceGuid.IfEquals(checkValueGuid, exceptedResultGuid);
139176

140-
Assert.AreEqual(null, test);
177+
if (sourceGuid.IsNull())
178+
Assert.IsNull(r);
179+
else
180+
Assert.IsNotNull(r);
181+
Assert.AreEqual(exceptedResultGuid, r);
141182
}
142183

184+
[DataRow("a", "a", "a")]
185+
[DataRow("a", "g", "a")]
186+
[DataRow("a", null, "a")]
187+
[DataRow(null, "r", null)]
188+
[DataRow(null, null, null)]
143189
[TestMethod]
144-
public void IfIsNulOrFunc_1_Func_True_Test()
190+
public void IfNotEquals_string_Test(string sourceValue, string checkValue, string exceptedResult)
145191
{
146-
int? i = 1;
147-
148-
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), true);
192+
var r = sourceValue.IfNotEquals(checkValue, exceptedResult);
149193

150-
Assert.AreEqual(1, test);
194+
if (sourceValue.IsNull())
195+
Assert.IsNull(r);
196+
else
197+
Assert.IsNotNull(r);
198+
Assert.AreEqual(exceptedResult, r);
151199
}
152200

201+
[DataRow(1, 1, 1)]
202+
[DataRow(2, 1, 2)]
203+
[DataRow(3, null, 3)]
204+
[DataRow(null, 2, null)]
205+
[DataRow(null, null, null)]
153206
[TestMethod]
154-
public void IfIsNulOrFunc_1_Func_False_Test()
207+
public void IfNotEquals_int_Test(int sourceValue, int checkValue, int exceptedResult)
155208
{
156-
int? i = 1;
209+
var r = sourceValue.IfNotEquals(checkValue, exceptedResult);
157210

158-
var test = i.IfFunc(0, () => i != 0 && i.IsNull(), false);
211+
if (sourceValue.IsNull())
212+
Assert.IsNull(r);
213+
else
214+
Assert.IsNotNull(r);
215+
Assert.AreEqual(exceptedResult, r);
216+
}
217+
218+
[DataRow(1, 1, 1)]
219+
[DataRow(2, 1, 2)]
220+
[DataRow(3, null, 3)]
221+
[DataRow(null, 2, null)]
222+
[DataRow(null, null, null)]
223+
[TestMethod]
224+
public void IfNotEquals_long_Test(long sourceValue, long checkValue, long exceptedResult)
225+
{
226+
var r = sourceValue.IfNotEquals(checkValue, exceptedResult);
159227

160-
Assert.AreEqual(0, test);
228+
if (sourceValue.IsNull())
229+
Assert.IsNull(r);
230+
else
231+
Assert.IsNotNull(r);
232+
Assert.AreEqual(exceptedResult, r);
161233
}
162234
}
163235
}

0 commit comments

Comments
 (0)