-
-
Notifications
You must be signed in to change notification settings - Fork 424
/
Copy pathRecordTests.cs
97 lines (82 loc) · 2.71 KB
/
RecordTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
namespace LanguageExt.Tests
{
public class RecordTests
{
/// <summary>
/// Cons type - singly linked list
/// </summary>
public class Cons<A> : Record<Cons<A>>
{
public readonly A Head;
public readonly Cons<A> Tail;
public Cons(A head, Cons<A> tail)
{
Head = head;
Tail = tail;
}
}
[Fact]
public void ConsTests()
{
var listA = new Cons<int>(1, new Cons<int>(2, new Cons<int>(3, new Cons<int>(4, null))));
var listB = new Cons<int>(1, new Cons<int>(2, new Cons<int>(3, new Cons<int>(4, null))));
var listC = new Cons<int>(1, new Cons<int>(2, new Cons<int>(3, null)));
Assert.True(listA == listB);
Assert.True(listB != listC);
Assert.True(listA != listC);
}
/// <summary>
/// Binary tree
/// </summary>
public class Tree<A> : Record<Tree<A>>
{
public readonly A Value;
public readonly Tree<A> Left;
public readonly Tree<A> Right;
public Tree(A value, Tree<A> left, Tree<A> right)
{
Value = value;
Left = left;
Right = right;
}
}
[Fact]
public void TreeTests()
{
var treeA = new Tree<int>(5, new Tree<int>(3, null, null), new Tree<int>(7, null, new Tree<int>(9, null, null)));
var treeB = new Tree<int>(5, new Tree<int>(3, null, null), new Tree<int>(7, null, new Tree<int>(9, null, null)));
var treeC = new Tree<int>(5, new Tree<int>(3, null, null), new Tree<int>(7, null, null));
Assert.True(treeA == treeB);
Assert.True(treeB != treeC);
Assert.True(treeA != treeC);
var str = treeA.ToString();
}
class Disorder : Record<Disorder>
{
public string Present = "Here";
public string Absent = null;
}
[Fact]
public void NullMemberEqualityTest()
{
var a = new Disorder();
var b = new Disorder();
Assert.True(a == b);
Assert.True(a.GetHashCode() == b.GetHashCode());
Assert.False(a != b);
Assert.False(a.GetHashCode() != b.GetHashCode());
}
[Fact]
public void NullMemberOrderingTest()
{
var a = new Disorder();
var b = new Disorder();
Assert.True(a.CompareTo(b) == 0);
Assert.True(b.CompareTo(a) == 0);
}
}
}