1
- using System . Collections . Generic ;
1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Linq ;
2
4
using DataStructures . Dictionaries ;
3
5
using Xunit ;
4
6
@@ -7,107 +9,134 @@ namespace UnitTest.DataStructuresTests
7
9
public static class HashTableSeparateChainingTest
8
10
{
9
11
[ Fact ]
10
- public static void DoTest ( )
12
+ public static void Adding_ThreeDifferentElements_ReturnsSuccessful ( )
11
13
{
12
- // TEST ADD KEY-VALUE PAIRS
13
- var studentsMarks = new ChainedHashTable < string , int >
14
- {
15
- { "Konstantinos" , 124 } ,
16
- { "Bic" , 224 } ,
17
- { "Z" , 324 } ,
18
- { "Ioanna" , 424 } ,
19
- { "Mark Zuckerberg" , 524 } ,
20
- { "Semsem" , 624 } ,
21
- { "Sa3eeed" , 724 } ,
22
- { "Sameer" , 824 } ,
23
- { "Ahmad" , 924 } ,
24
- { "Zeyad" , 999 } ,
25
- { "Mahmoood 3eed" , 111 } ,
26
- { "Mahmoood Abu 3eed" , 222 } ,
27
- { "EISA" , 333 } ,
28
- { "Test1" , 3210 } ,
29
- { "Test11" , 3210 } ,
30
- { "Test222" , 3210 } ,
31
- { "Test3333" , 3210 } ,
32
- { "Test44444" , 3210 } ,
33
- { "Test555555" , 3210 } ,
34
- { "Test6666666" , 3210 } ,
35
- { "Test77777777" , 3210 } ,
36
- { "Test888888888" , 3210 }
37
- } ;
38
-
39
- // TEST FETCH KEY-VALUE
40
- var mark = studentsMarks [ "Ahmad" ] ;
41
- Assert . True ( mark == 924 ) ;
42
-
43
- mark = studentsMarks [ "Konstantinos" ] ;
44
- Assert . True ( mark == 124 ) ;
45
-
46
- mark = studentsMarks [ "Bic" ] ;
47
- Assert . True ( mark == 224 ) ;
48
-
49
- mark = studentsMarks [ "Z" ] ;
50
- Assert . True ( mark == 324 ) ;
51
-
52
- mark = studentsMarks [ "Ioanna" ] ;
53
- Assert . True ( mark == 424 ) ;
54
-
55
- mark = studentsMarks [ "Mark Zuckerberg" ] ;
56
- Assert . True ( mark == 524 ) ;
57
-
58
- mark = studentsMarks [ "Semsem" ] ;
59
- Assert . True ( mark == 624 ) ;
60
-
61
- mark = studentsMarks [ "Sa3eeed" ] ;
62
- Assert . True ( mark == 724 ) ;
63
-
64
- mark = studentsMarks [ "Sameer" ] ;
65
- Assert . True ( mark == 824 ) ;
66
-
67
- mark = studentsMarks [ "Zeyad" ] ;
68
- Assert . True ( mark == 999 ) ;
69
-
70
- mark = studentsMarks [ "Mahmoood 3eed" ] ;
71
- Assert . True ( mark == 111 ) ;
72
-
73
- mark = studentsMarks [ "Mahmoood Abu 3eed" ] ;
74
- Assert . True ( mark == 222 ) ;
75
-
76
- mark = studentsMarks [ "EISA" ] ;
77
- Assert . True ( mark == 333 ) ;
78
-
79
- //
80
- // TEST DELETE BY KEYS
81
- studentsMarks . Remove ( "Ahmad" ) ;
82
- studentsMarks . Remove ( "Zeyad" ) ;
83
- studentsMarks . Remove ( "Bic" ) ;
84
- studentsMarks . Remove ( "Konstantinos" ) ;
85
- studentsMarks . Remove ( "Sameer" ) ;
86
- studentsMarks . Remove ( "Z" ) ;
87
- studentsMarks . Remove ( "Ioanna" ) ;
88
- studentsMarks . Remove ( "Mark Zuckerberg" ) ;
89
- studentsMarks . Remove ( "Semsem" ) ;
90
- studentsMarks . Remove ( "Sa3eeed" ) ;
91
- studentsMarks . Remove ( "Test1" ) ;
92
- studentsMarks . Remove ( "Test11" ) ;
93
- studentsMarks . Remove ( "Test222" ) ;
94
- studentsMarks . Remove ( "Test3333" ) ;
95
- studentsMarks . Remove ( "Test44444" ) ;
96
- studentsMarks . Remove ( "Test555555" ) ;
97
- studentsMarks . Remove ( "Test6666666" ) ;
98
- studentsMarks . Remove ( "Test77777777" ) ;
99
- studentsMarks . Remove ( "Test888888888" ) ;
14
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
15
+
16
+ studentsMarks . Add ( "Name1" , 1 ) ;
17
+ studentsMarks . Add ( "Name2" , 5 ) ;
18
+ studentsMarks . Add ( new KeyValuePair < string , int > ( "Name3" , 3 ) ) ;
19
+
20
+ var mark = studentsMarks [ "Name1" ] ;
21
+ Assert . True ( mark == 1 ) ;
22
+
23
+ mark = studentsMarks [ "Name2" ] ;
24
+ Assert . True ( mark == 5 ) ;
25
+
26
+ mark = studentsMarks [ "Name3" ] ;
27
+ Assert . True ( mark == 3 ) ;
100
28
101
29
Assert . True ( studentsMarks . Count == 3 ) ;
30
+ }
31
+
32
+ [ Fact ]
33
+ public static void Adding_TwoDuplicateElements_ReturnsException ( )
34
+ {
35
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
36
+ studentsMarks . Add ( "Name1" , 1 ) ;
37
+ studentsMarks . Add ( "Name2" , 5 ) ;
38
+
39
+ Action act = ( ) => studentsMarks . Add ( "Name2" , 7 ) ;
40
+
41
+ var exception = Assert . Throws < ArgumentException > ( act ) ;
42
+ Assert . Equal ( "Key already exists in the hash table." , exception . Message ) ;
43
+ }
44
+
45
+ [ Fact ]
46
+ public static void GetElement_ExistingElement_ReturnsElement ( )
47
+ {
48
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
49
+ studentsMarks . Add ( "Name1" , 1 ) ;
50
+ studentsMarks . Add ( "Name2" , 5 ) ;
51
+
52
+ var value = studentsMarks [ "Name2" ] ;
53
+
54
+ Assert . Equal ( 5 , value ) ;
55
+ }
56
+
57
+ [ Fact ]
58
+ public static void GetElement_NonExistingElement_ReturnsException ( )
59
+ {
60
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
61
+ studentsMarks . Add ( "Name1" , 1 ) ;
62
+ studentsMarks . Add ( "Name2" , 5 ) ;
63
+
64
+ int value ;
65
+ Action act = ( ) => value = studentsMarks [ "Name3" ] ;
66
+
67
+ Assert . Throws < KeyNotFoundException > ( act ) ;
68
+ }
69
+
70
+ [ Fact ]
71
+ public static void RemovingOneElement_ThreeDifferentElements_ReturnsSuccessful ( )
72
+ {
73
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
74
+ studentsMarks . Add ( "Name1" , 1 ) ;
75
+ studentsMarks . Add ( "Name2" , 5 ) ;
76
+ studentsMarks . Add ( new KeyValuePair < string , int > ( "Name3" , 3 ) ) ;
77
+
78
+ studentsMarks . Remove ( "Name2" ) ;
79
+
80
+ var mark = studentsMarks [ "Name1" ] ;
81
+ Assert . True ( mark == 1 ) ;
82
+
83
+ mark = studentsMarks [ "Name3" ] ;
84
+ Assert . True ( mark == 3 ) ;
85
+
86
+ Assert . False ( studentsMarks . ContainsKey ( "Name2" ) ) ;
87
+
88
+ Assert . True ( studentsMarks . Count == 2 ) ;
89
+ }
90
+
91
+ [ Fact ]
92
+ public static void RemovingAllElement_ThreeDifferentElements_ReturnsSuccessful ( )
93
+ {
94
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
95
+ studentsMarks . Add ( "Name1" , 1 ) ;
96
+ studentsMarks . Add ( "Name2" , 5 ) ;
97
+ studentsMarks . Add ( new KeyValuePair < string , int > ( "Name3" , 3 ) ) ;
102
98
103
- KeyValuePair < string , int > [ ] array = new KeyValuePair < string , int > [ studentsMarks . Count ] ;
104
-
105
- if ( studentsMarks != null )
106
- {
107
- studentsMarks . CopyTo ( array , 0 ) ;
108
- }
99
+ studentsMarks . Remove ( "Name2" ) ;
100
+ studentsMarks . Remove ( "Name1" ) ;
101
+ studentsMarks . Remove ( "Name3" ) ;
109
102
110
- Assert . True ( array . Length == studentsMarks . Count ) ;
103
+ Assert . True ( studentsMarks . Count == 0 ) ;
104
+ }
105
+
106
+ [ Fact ]
107
+ public static void CopyTo_FilledHashTable_ReturnsSuccessful ( )
108
+ {
109
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
110
+ studentsMarks . Add ( "Name1" , 1 ) ;
111
+ studentsMarks . Add ( "Name2" , 5 ) ;
112
+ studentsMarks . Add ( new KeyValuePair < string , int > ( "Name3" , 3 ) ) ;
113
+
114
+ var array = new KeyValuePair < string , int > [ studentsMarks . Count ] ;
115
+ studentsMarks . CopyTo ( array , 0 ) ;
116
+
117
+ Assert . True ( studentsMarks . Count == 3 ) ;
118
+ Assert . True ( array . Length == 3 ) ;
119
+ var arrayKeys = array . Select ( x => x . Key ) . OrderBy ( x => x ) . ToArray ( ) ;
120
+ Assert . Equal ( "Name1" , arrayKeys [ 0 ] ) ;
121
+ Assert . Equal ( "Name2" , arrayKeys [ 1 ] ) ;
122
+ Assert . Equal ( "Name3" , arrayKeys [ 2 ] ) ;
123
+ }
124
+
125
+ [ Fact ]
126
+ public static void CopyTo_EmptyHashTable_ReturnsSuccessful ( )
127
+ {
128
+ var studentsMarks = new ChainedHashTable < string , int > ( ) ;
129
+ studentsMarks . Add ( "Name1" , 1 ) ;
130
+ studentsMarks . Add ( "Name2" , 5 ) ;
131
+ studentsMarks . Add ( new KeyValuePair < string , int > ( "Name3" , 3 ) ) ;
132
+
133
+ studentsMarks . Remove ( "Name2" ) ;
134
+ studentsMarks . Remove ( "Name1" ) ;
135
+ studentsMarks . Remove ( "Name3" ) ;
136
+
137
+ Assert . True ( studentsMarks . Count == 0 ) ;
138
+ var array = new KeyValuePair < string , int > [ studentsMarks . Count ] ;
139
+ studentsMarks . CopyTo ( array , 0 ) ;
111
140
}
112
141
}
113
142
}
0 commit comments