1
+ using System ;
2
+ using NUnit . Framework ;
3
+ using FluentAssertions ;
4
+ using System . Drawing ;
5
+
6
+ namespace FloodFillTest
7
+ {
8
+ public static class Tests
9
+ {
10
+ private static Color black = Color . FromArgb ( 255 , 0 , 0 , 0 ) ;
11
+ private static Color green = Color . FromArgb ( 255 , 0 , 255 , 0 ) ;
12
+ private static Color violet = Color . FromArgb ( 255 , 255 , 0 , 255 ) ;
13
+ private static Color white = Color . FromArgb ( 255 , 255 , 255 , 255 ) ;
14
+ private static Color orange = Color . FromArgb ( 255 , 255 , 128 , 0 ) ;
15
+
16
+ [ Test ]
17
+ public static void BreadthFirstSearch_ThrowsArgumentOutOfRangeException ( )
18
+ {
19
+ Action act = ( ) => Algorithms . Other . FloodFill . BreadthFirstSearch ( GenerateTestBitmap ( ) , ( 10 , 10 ) , black , white ) ;
20
+ act . Should ( ) . Throw < ArgumentOutOfRangeException > ( ) ;
21
+ }
22
+
23
+ [ Test ]
24
+ public static void DepthFirstSearch_ThrowsArgumentOutOfRangeException ( )
25
+ {
26
+ Action act = ( ) => Algorithms . Other . FloodFill . DepthFirstSearch ( GenerateTestBitmap ( ) , ( - 1 , - 1 ) , black , white ) ;
27
+ act . Should ( ) . Throw < ArgumentOutOfRangeException > ( ) ;
28
+ }
29
+
30
+ [ Test ]
31
+ public static void BreadthFirstSearch_Test1 ( )
32
+ {
33
+ TestAlgorithm ( Algorithms . Other . FloodFill . BreadthFirstSearch , ( 1 , 1 ) , green , orange , ( 1 , 1 ) , orange ) ;
34
+ }
35
+
36
+ [ Test ]
37
+ public static void BreadthFirstSearch_Test2 ( )
38
+ {
39
+ TestAlgorithm ( Algorithms . Other . FloodFill . BreadthFirstSearch , ( 1 , 1 ) , green , orange , ( 0 , 1 ) , violet ) ;
40
+ }
41
+
42
+ [ Test ]
43
+ public static void BreadthFirstSearch_Test3 ( )
44
+ {
45
+ TestAlgorithm ( Algorithms . Other . FloodFill . BreadthFirstSearch , ( 1 , 1 ) , green , orange , ( 0 , 1 ) , violet ) ;
46
+ }
47
+
48
+ [ Test ]
49
+ public static void BreadthFirstSearch_Test4 ( )
50
+ {
51
+ TestAlgorithm ( Algorithms . Other . FloodFill . BreadthFirstSearch , ( 1 , 1 ) , green , orange , ( 6 , 4 ) , white ) ;
52
+ }
53
+
54
+ [ Test ]
55
+ public static void DepthFirstSearch_Test1 ( )
56
+ {
57
+ TestAlgorithm ( Algorithms . Other . FloodFill . DepthFirstSearch , ( 1 , 1 ) , green , orange , ( 1 , 1 ) , orange ) ;
58
+ }
59
+
60
+ [ Test ]
61
+ public static void DepthFirstSearch_Test2 ( )
62
+ {
63
+ TestAlgorithm ( Algorithms . Other . FloodFill . DepthFirstSearch , ( 1 , 1 ) , green , orange , ( 0 , 1 ) , violet ) ;
64
+ }
65
+
66
+ [ Test ]
67
+ public static void DepthFirstSearch_Test3 ( )
68
+ {
69
+ TestAlgorithm ( Algorithms . Other . FloodFill . DepthFirstSearch , ( 1 , 1 ) , green , orange , ( 0 , 1 ) , violet ) ;
70
+ }
71
+
72
+ [ Test ]
73
+ public static void DepthFirstSearch_Test4 ( )
74
+ {
75
+ TestAlgorithm ( Algorithms . Other . FloodFill . DepthFirstSearch , ( 1 , 1 ) , green , orange , ( 6 , 4 ) , white ) ;
76
+ }
77
+
78
+ private static Bitmap GenerateTestBitmap ( )
79
+ {
80
+ Color [ , ] layout =
81
+ {
82
+ { violet , violet , green , green , black , green , green } ,
83
+ { violet , green , green , black , green , green , green } ,
84
+ { green , green , green , black , green , green , green } ,
85
+ { black , black , green , black , white , white , green } ,
86
+ { violet , violet , black , violet , violet , white , white } ,
87
+ { green , green , green , violet , violet , violet , violet } ,
88
+ { violet , violet , violet , violet , violet , violet , violet }
89
+ } ;
90
+
91
+ Bitmap bitmap = new Bitmap ( 7 , 7 ) ;
92
+ for ( int x = 0 ; x < layout . GetLength ( 0 ) ; x ++ )
93
+ {
94
+ for ( int y = 0 ; y < layout . GetLength ( 1 ) ; y ++ )
95
+ {
96
+ bitmap . SetPixel ( x , y , layout [ y , x ] ) ;
97
+ }
98
+ }
99
+
100
+ return bitmap ;
101
+ }
102
+
103
+ private static void TestAlgorithm (
104
+ Action < Bitmap , ValueTuple < int , int > , Color , Color > algorithm ,
105
+ ValueTuple < int , int > fillLocation ,
106
+ Color targetColor ,
107
+ Color replacementColor ,
108
+ ValueTuple < int , int > testLocation ,
109
+ Color expectedColor )
110
+ {
111
+ Bitmap bitmap = GenerateTestBitmap ( ) ;
112
+ algorithm ( bitmap , fillLocation , targetColor , replacementColor ) ;
113
+ Color actualColor = bitmap . GetPixel ( testLocation . Item1 , testLocation . Item2 ) ;
114
+ actualColor . Should ( ) . Be ( expectedColor ) ;
115
+ }
116
+ }
117
+ }
0 commit comments