This is a series
- http://msprogrammer.serviciipeweb.ro/2018/03/12/tiny-types-in-cpart-1/
- http://msprogrammer.serviciipeweb.ro/2018/03/19/tiny-types-part-2adding-iequatable/
-
http://msprogrammer.serviciipeweb.ro/2018/03/26/tinytypesadding-equality-operatorpart-3/
-
http://msprogrammer.serviciipeweb.ro/2018/04/02/tiny-typesdocumentationpart-4/
Now we have come to the interesting part – the equality operator.
We have already operator equals,but not ==
[TestMethod]
public void TestSimpleIntOperatorEqual()
{
int nr = 7;
TinyType<int> tt1 = nr;
TinyType<int> tt2 = nr;
Assert.AreEqual(tt1,tt2);
Assert.IsFalse(tt1 == tt2);
}
[TestMethod]
public void TestSimpleStringOperatorEqual()
{
string s = "http://msprogrammer.serviciipeweb.ro";
TinyType<string> tt1 = s;
TinyType<string> tt2 = s;
Assert.AreEqual(tt1,tt2);
Assert.IsFalse(tt1 == tt2);
}
Because we primary want this TinyTypes for structs( int,double,bool,and so on) we can define a new class
For this we could implement operator == by using the Equals operator ( because we KNOW that a struct cannot be null)
public class TinyTypeOf<T> : TinyType<T>
where T:struct
{
public TinyTypeOf(T tDef) : base(tDef)
{
}
public static bool operator ==(TinyTypeOf<T> lhs,TinyTypeOf<T> rhs)
{
if(lhs is null)
{
return rhs is null;
}
return lhs.t.Equals(rhs.t);
}
public static bool operator !=(TinyTypeOf<T> lhs,TinyTypeOf<T> rhs)
{
return !(lhs==rhs);
}
CODE FOR NEW CLASS
Also,because the string is not a struct,but a class,we need for String also:
public class TinyTypeOfString : TinyType<string>
And the tests are
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TinyTypesObjects;
namespace TinyTypesTest
{
[TestClass]
public class TestTinyTypeOperatorEqual
{
[TestMethod]
public void TestSimpleIntOperatorEqual()
{
int nr = 7;
TinyType<int> tt1 = nr;
TinyType<int> tt2 = nr;
Assert.AreEqual(tt1,tt2);
Assert.IsFalse(tt1 == tt2);
}
[TestMethod]
public void TestSimpleStringOperatorEqual()
{
string s = "http://msprogrammer.serviciipeweb.ro";
TinyType<string> tt1 = s;
TinyType<string> tt2 = s;
Assert.AreEqual(tt1,tt2);
Assert.IsFalse(tt1 == tt2);
}
[TestMethod]
public void TestSimpleStringOperatorEqualWorks()
{
string s = "http://msprogrammer.serviciipeweb.ro";
TinyTypeOfString tt1 = s;
TinyTypeOfString tt2 = s;
Assert.AreEqual(tt1,tt2);
Assert.IsTrue(tt1 == tt2);
}
[TestMethod]
public void TestSimpleIntOperatorEqualWorks()
{
int nr = 7;
TinyTypeOf<int> tt1 = nr;
TinyTypeOf<int> tt2 = nr;
Assert.AreEqual(tt1,tt2);
Assert.IsTrue(tt1 == tt2);
}
[TestMethod]
public void TestSimpleIntNrOperatorEqualWorks()
{
int nr = 7;
TinyType<int> tt1 = nr;
Assert.AreEqual(tt1,nr);
Assert.IsTrue(tt1 == nr);
}
}
}
Leave a Reply