Skip to content

Commit

Permalink
#50 and #49. Merged the v3.3.1 branch. (part 2, as I still don't know…
Browse files Browse the repository at this point in the history
… how to use git properly)

This branch included the `HasValue` method for #49.
This branch also included the PR #50. But as `Maybe<T>` is now removed in the v8 branch, much of that PR becomes redundant and so has been removed.
  • Loading branch information
DavidArno committed Nov 26, 2018
1 parent 1dc36c1 commit 1fbb2e6
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 17 deletions.
29 changes: 12 additions & 17 deletions src/SuccincT/Unions/Union{T1,T2,T3,T4}.cs
Expand Up @@ -53,23 +53,6 @@ public TResult Value<TResult>()
default: throw new InvalidCaseOfTypeException(typeof(TResult));
}
}

public bool HasValue<TResult>()
{
switch (Case)
{
case Variant.Case1:
return _value1.GetType() == typeof(TResult);
case Variant.Case2:
return _value2.GetType() == typeof(TResult);
case Variant.Case3:
return _value3.GetType() == typeof(TResult);
case Variant.Case4:
return _value4.GetType() == typeof(TResult);
}

return false;
}

public Option<TResult> TryGetValue<TResult>()
{
Expand All @@ -83,6 +66,18 @@ public Option<TResult> TryGetValue<TResult>()
}
}

public bool HasValue<TResult>()
{
switch (Case)
{
case Variant.Case1: return _value1.GetType() == typeof(TResult);
case Variant.Case2: return _value2.GetType() == typeof(TResult);
case Variant.Case3: return _value3.GetType() == typeof(TResult);
case Variant.Case4: return _value4.GetType() == typeof(TResult);
default: return false;
}
}

public IUnionFuncPatternMatcher<T1, T2, T3, T4, TResult> Match<TResult>()
=> new UnionPatternMatcher<T1, T2, T3, T4, TResult>(this);

Expand Down
10 changes: 10 additions & 0 deletions src/SuccincT/Unions/Union{T1,T2}.cs
Expand Up @@ -46,6 +46,16 @@ public Option<TResult> TryGetValue<TResult>()
}
}

public bool HasValue<TResult>()
{
switch (Case)
{
case Variant.Case1: return _value1.GetType() == typeof(TResult);
case Variant.Case2: return _value2.GetType() == typeof(TResult);
default: return false;
}
}

public IUnionFuncPatternMatcher<T1, T2, TResult> Match<TResult>()
=> new UnionPatternMatcher<T1, T2, TResult>(this);

Expand Down
24 changes: 24 additions & 0 deletions tests/SuccincT.Tests/SuccincT/Unions/UnionT1T2DirectValueTests.cs
Expand Up @@ -52,5 +52,29 @@ public void UnionT1T2WithInvalidTypeTryGetValue_ReturnNone()
var result = union.TryGetValue<float>();
IsFalse(result.HasValue);
}

[Test]
public void UnionT1HasValueTest_ReturnsTrue()
{
var union = new Union<int, string>(2);
var hasInteger = union.HasValue<int>();
IsTrue(hasInteger);
}

[Test]
public void UnionT1T2HasValueTest_ReturnsFalse()
{
var union = new Union<int, string>(2);
var hasString = union.HasValue<string>();
IsFalse(hasString);
}

[Test]
public void UnionT1T2HasValueTest_ReturnsFalseAndDoesNotThrowExceptionTypeNotInUnion()
{
var union = new Union<int, string>(2);
var hasBool = union.HasValue<bool>();
IsFalse(hasBool);
}
}
}
Expand Up @@ -70,5 +70,28 @@ public void UnionT1T2T3WithInvalidTryGetTypeValue_ReturnsNone()
var result = union.TryGetValue<float>();
IsFalse(result.HasValue);
}
[Test]
public void UnionT1HasValueTest_ReturnsTrue()
{
var union = new Union<int, string, Plants>(2);
var hasInteger = union.HasValue<int>();
IsTrue(hasInteger);
}

[Test]
public void UnionT1T2T3HasValueTest_ReturnsFalse()
{
var union = new Union<int, string, Plants>(2);
var hasPlants = union.HasValue<Plants>();
IsFalse(hasPlants);
}

[Test]
public void UnionT1T2T3HasValueTestWithOtherType_ReturnsFalse()
{
var union = new Union<int, string, Plants>(2);
var hasBool = union.HasValue<bool>();
IsFalse(hasBool);
}
}
}
Expand Up @@ -87,5 +87,29 @@ public void UnionT1T2T3WithInvalidTypeTryGetValue_ReturnsNone()
var result = union.TryGetValue<float>();
IsFalse(result.HasValue);
}

[Test]
public void UnionT1HasValueTest_ReturnsTrue()
{
var union = new Union<int, string, Plants, Foods>(2);
var hasInteger = union.HasValue<int>();
IsTrue(hasInteger);
}

[Test]
public void UnionT1T2T3T4HasValueTest_ReturnsFalse()
{
var union = new Union<int, string, Plants, Foods>(2);
var hasPlants = union.HasValue<Plants>();
IsFalse(hasPlants);
}

[Test]
public void UnionT1T2T3T4HasValueTestWithOtherType_ReturnsFalse()
{
var union = new Union<int, string, Plants, Foods>(2);
var hasBool = union.HasValue<bool>();
IsFalse(hasBool);
}
}
}

0 comments on commit 1fbb2e6

Please sign in to comment.