@@ -40,7 +40,7 @@ public static void ThreeParameters(string value1, int value2, char value3)
4040 [ Theory ]
4141 [ InlineData ( "Foo" , 42 , 'a' , 87.73665 ) ]
4242 [ InlineData ( "Bar" , - 177422 , 'Y' , - 15.25 ) ]
43- [ InlineData ( null , 0 , default ( char ) , 0.0 ) ]
43+ [ InlineData ( null , 0 , ' \0 ' , 0.0 ) ]
4444 public static void FourParameters ( string value1 , int value2 , char value3 , double value4 )
4545 {
4646 var hashCode1 = MultiplyAddHash . CreateHashCode ( value1 , value2 , value3 , value4 ) ;
@@ -53,4 +53,164 @@ public static void FourParameters(string value1, int value2, char value3, double
5353
5454 hashCode1 . Should ( ) . Be ( hashCode2 ) ;
5555 }
56- }
56+
57+ [ Fact ]
58+ public static void EverySupportedArityMatchesTheBuilder ( )
59+ {
60+ var values = new object [ ]
61+ { 1 , "two" , 3m , '4' , 5L , 6f , 7d , ( short ) 8 , ( byte ) 9 , 10u , 11ul , null , 13 , 14 , 15 , 16 } ;
62+
63+ MultiplyAddHash . CreateHashCode ( values [ 0 ] , values [ 1 ] , values [ 2 ] , values [ 3 ] , values [ 4 ] )
64+ . Should ( ) . Be ( CreateExpectedHash ( values , 5 ) ) ;
65+ MultiplyAddHash . CreateHashCode ( values [ 0 ] , values [ 1 ] , values [ 2 ] , values [ 3 ] , values [ 4 ] , values [ 5 ] )
66+ . Should ( ) . Be ( CreateExpectedHash ( values , 6 ) ) ;
67+ MultiplyAddHash . CreateHashCode ( values [ 0 ] , values [ 1 ] , values [ 2 ] , values [ 3 ] , values [ 4 ] , values [ 5 ] , values [ 6 ] )
68+ . Should ( ) . Be ( CreateExpectedHash ( values , 7 ) ) ;
69+ MultiplyAddHash . CreateHashCode (
70+ values [ 0 ] ,
71+ values [ 1 ] ,
72+ values [ 2 ] ,
73+ values [ 3 ] ,
74+ values [ 4 ] ,
75+ values [ 5 ] ,
76+ values [ 6 ] ,
77+ values [ 7 ]
78+ )
79+ . Should ( ) . Be ( CreateExpectedHash ( values , 8 ) ) ;
80+ MultiplyAddHash . CreateHashCode (
81+ values [ 0 ] ,
82+ values [ 1 ] ,
83+ values [ 2 ] ,
84+ values [ 3 ] ,
85+ values [ 4 ] ,
86+ values [ 5 ] ,
87+ values [ 6 ] ,
88+ values [ 7 ] ,
89+ values [ 8 ]
90+ )
91+ . Should ( ) . Be ( CreateExpectedHash ( values , 9 ) ) ;
92+ MultiplyAddHash . CreateHashCode (
93+ values [ 0 ] ,
94+ values [ 1 ] ,
95+ values [ 2 ] ,
96+ values [ 3 ] ,
97+ values [ 4 ] ,
98+ values [ 5 ] ,
99+ values [ 6 ] ,
100+ values [ 7 ] ,
101+ values [ 8 ] ,
102+ values [ 9 ]
103+ )
104+ . Should ( ) . Be ( CreateExpectedHash ( values , 10 ) ) ;
105+ MultiplyAddHash . CreateHashCode (
106+ values [ 0 ] ,
107+ values [ 1 ] ,
108+ values [ 2 ] ,
109+ values [ 3 ] ,
110+ values [ 4 ] ,
111+ values [ 5 ] ,
112+ values [ 6 ] ,
113+ values [ 7 ] ,
114+ values [ 8 ] ,
115+ values [ 9 ] ,
116+ values [ 10 ]
117+ )
118+ . Should ( ) . Be ( CreateExpectedHash ( values , 11 ) ) ;
119+ MultiplyAddHash . CreateHashCode (
120+ values [ 0 ] ,
121+ values [ 1 ] ,
122+ values [ 2 ] ,
123+ values [ 3 ] ,
124+ values [ 4 ] ,
125+ values [ 5 ] ,
126+ values [ 6 ] ,
127+ values [ 7 ] ,
128+ values [ 8 ] ,
129+ values [ 9 ] ,
130+ values [ 10 ] ,
131+ values [ 11 ]
132+ )
133+ . Should ( ) . Be ( CreateExpectedHash ( values , 12 ) ) ;
134+ MultiplyAddHash . CreateHashCode (
135+ values [ 0 ] ,
136+ values [ 1 ] ,
137+ values [ 2 ] ,
138+ values [ 3 ] ,
139+ values [ 4 ] ,
140+ values [ 5 ] ,
141+ values [ 6 ] ,
142+ values [ 7 ] ,
143+ values [ 8 ] ,
144+ values [ 9 ] ,
145+ values [ 10 ] ,
146+ values [ 11 ] ,
147+ values [ 12 ]
148+ )
149+ . Should ( ) . Be ( CreateExpectedHash ( values , 13 ) ) ;
150+ MultiplyAddHash . CreateHashCode (
151+ values [ 0 ] ,
152+ values [ 1 ] ,
153+ values [ 2 ] ,
154+ values [ 3 ] ,
155+ values [ 4 ] ,
156+ values [ 5 ] ,
157+ values [ 6 ] ,
158+ values [ 7 ] ,
159+ values [ 8 ] ,
160+ values [ 9 ] ,
161+ values [ 10 ] ,
162+ values [ 11 ] ,
163+ values [ 12 ] ,
164+ values [ 13 ]
165+ )
166+ . Should ( ) . Be ( CreateExpectedHash ( values , 14 ) ) ;
167+ MultiplyAddHash . CreateHashCode (
168+ values [ 0 ] ,
169+ values [ 1 ] ,
170+ values [ 2 ] ,
171+ values [ 3 ] ,
172+ values [ 4 ] ,
173+ values [ 5 ] ,
174+ values [ 6 ] ,
175+ values [ 7 ] ,
176+ values [ 8 ] ,
177+ values [ 9 ] ,
178+ values [ 10 ] ,
179+ values [ 11 ] ,
180+ values [ 12 ] ,
181+ values [ 13 ] ,
182+ values [ 14 ]
183+ )
184+ . Should ( ) . Be ( CreateExpectedHash ( values , 15 ) ) ;
185+ MultiplyAddHash . CreateHashCode (
186+ values [ 0 ] ,
187+ values [ 1 ] ,
188+ values [ 2 ] ,
189+ values [ 3 ] ,
190+ values [ 4 ] ,
191+ values [ 5 ] ,
192+ values [ 6 ] ,
193+ values [ 7 ] ,
194+ values [ 8 ] ,
195+ values [ 9 ] ,
196+ values [ 10 ] ,
197+ values [ 11 ] ,
198+ values [ 12 ] ,
199+ values [ 13 ] ,
200+ values [ 14 ] ,
201+ values [ 15 ]
202+ )
203+ . Should ( ) . Be ( CreateExpectedHash ( values , 16 ) ) ;
204+ }
205+
206+ private static int CreateExpectedHash ( object [ ] values , int count )
207+ {
208+ var builder = MultiplyAddHashBuilder . Create ( ) ;
209+ for ( var i = 0 ; i < count ; i ++ )
210+ {
211+ builder = builder . CombineIntoHash ( values [ i ] ) ;
212+ }
213+
214+ return builder . BuildHash ( ) ;
215+ }
216+ }
0 commit comments