1- using System . Collections . Generic ;
1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
24using DataStructures . Dictionaries ;
35using Xunit ;
46
@@ -7,107 +9,134 @@ namespace UnitTest.DataStructuresTests
79 public static class HashTableSeparateChainingTest
810 {
911 [ Fact ]
10- public static void DoTest ( )
12+ public static void Adding_ThreeDifferentElements_ReturnsSuccessful ( )
1113 {
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 ) ;
10028
10129 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 ) ) ;
10298
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" ) ;
109102
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 ) ;
111140 }
112141 }
113142}
0 commit comments