TinyTypes–adding equality operator–part 3
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); } } }