ecce1ac458bc1ea1ef0248445371d54137a6ca55
[mono.git] / mcs / class / System.Drawing / Test / System.Drawing.Imaging / TestColorMatrix.cs
1 //\r
2 // Copyright (C) 2005-2007 Novell, Inc (http://www.novell.com)\r
3 //\r
4 // Permission is hereby granted, free of charge, to any person obtaining\r
5 // a copy of this software and associated documentation files (the\r
6 // "Software"), to deal in the Software without restriction, including\r
7 // without limitation the rights to use, copy, modify, merge, publish,\r
8 // distribute, sublicense, and/or sell copies of the Software, and to\r
9 // permit persons to whom the Software is furnished to do so, subject to\r
10 // the following conditions:\r
11 //\r
12 // The above copyright notice and this permission notice shall be\r
13 // included in all copies or substantial portions of the Software.\r
14 //\r
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22 //\r
23 //\r
24 // Authors:\r
25 //   Jordi Mas i Hernandez (jordi@ximian.com)\r
26 //   Sebastien Pouliot  <sebastien@ximian.com>\r
27 //\r
28 \r
29 using System;\r
30 using System.Drawing;\r
31 using System.Drawing.Imaging;\r
32 using System.Runtime.InteropServices;\r
33 using System.Security.Permissions;\r
34 using NUnit.Framework;\r
35 \r
36 namespace MonoTests.System.Drawing.Imaging {\r
37 \r
38         [TestFixture]\r
39         [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)]\r
40         public class ColorMatrixTest {\r
41 \r
42                 [Test]\r
43                 [ExpectedException (typeof (NullReferenceException))]\r
44                 public void Constructor_Null ()\r
45                 {\r
46                         new ColorMatrix (null);\r
47                 }\r
48 \r
49                 [Test]\r
50                 [ExpectedException (typeof (IndexOutOfRangeException))]\r
51                 public void Constructor_TooSmallArraySize ()\r
52                 {\r
53                         new ColorMatrix (new float[][] { });\r
54                 }\r
55 \r
56                 [Test]\r
57                 [ExpectedException (typeof (IndexOutOfRangeException))]\r
58                 public void Constructor_TooWideArraySize ()\r
59                 {\r
60                         new ColorMatrix (new float[][] {\r
61                                 new float[] { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f }\r
62                         });\r
63                 }\r
64 \r
65                 [Test]\r
66                 [ExpectedException (typeof (IndexOutOfRangeException))]\r
67                 public void Constructor_TooTallArraySize ()\r
68                 {\r
69                         new ColorMatrix (new float[][] {\r
70                                 new float[] { 0.0f },\r
71                                 new float[] { 1.0f },\r
72                                 new float[] { 2.0f },\r
73                                 new float[] { 3.0f },\r
74                                 new float[] { 4.0f },\r
75                                 new float[] { 5.0f }\r
76                         });\r
77                 }\r
78 \r
79                 [Test]\r
80                 public void Constructor_TooBigArraySize ()\r
81                 {\r
82                         ColorMatrix cm = new ColorMatrix (new float[][] {\r
83                                 new float[] { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f },\r
84                                 new float[] { 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f },\r
85                                 new float[] { 2.0f, 2.1f, 2.2f, 2.3f, 2.4f, 2.5f },\r
86                                 new float[] { 3.0f, 3.1f, 3.2f, 3.3f, 3.4f, 3.5f },\r
87                                 new float[] { 4.0f, 4.1f, 4.2f, 4.3f, 4.4f, 4.5f },\r
88                                 new float[] { 5.0f, 5.1f, 5.2f, 5.3f, 5.4f, 5.5f }\r
89                         });\r
90 \r
91                         Assert.AreEqual (0.0f, cm.Matrix00, "00");\r
92                         Assert.AreEqual (0.1f, cm.Matrix01, "01");\r
93                         Assert.AreEqual (0.2f, cm.Matrix02, "02");\r
94                         Assert.AreEqual (0.3f, cm.Matrix03, "03");\r
95                         Assert.AreEqual (0.4f, cm.Matrix04, "04");\r
96                         Assert.AreEqual (1.0f, cm.Matrix10, "10");\r
97                         Assert.AreEqual (1.1f, cm.Matrix11, "11");\r
98                         Assert.AreEqual (1.2f, cm.Matrix12, "12");\r
99                         Assert.AreEqual (1.3f, cm.Matrix13, "13");\r
100                         Assert.AreEqual (1.4f, cm.Matrix14, "14");\r
101                         Assert.AreEqual (2.0f, cm.Matrix20, "20");\r
102                         Assert.AreEqual (2.1f, cm.Matrix21, "21");\r
103                         Assert.AreEqual (2.2f, cm.Matrix22, "22");\r
104                         Assert.AreEqual (2.3f, cm.Matrix23, "23");\r
105                         Assert.AreEqual (2.4f, cm.Matrix24, "24");\r
106                         Assert.AreEqual (3.0f, cm.Matrix30, "30");\r
107                         Assert.AreEqual (3.1f, cm.Matrix31, "31");\r
108                         Assert.AreEqual (3.2f, cm.Matrix32, "32");\r
109                         Assert.AreEqual (3.3f, cm.Matrix33, "33");\r
110                         Assert.AreEqual (3.4f, cm.Matrix34, "34");\r
111                         Assert.AreEqual (4.0f, cm.Matrix40, "40");\r
112                         Assert.AreEqual (4.1f, cm.Matrix41, "41");\r
113                         Assert.AreEqual (4.2f, cm.Matrix42, "42");\r
114                         Assert.AreEqual (4.3f, cm.Matrix43, "43");\r
115                         Assert.AreEqual (4.4f, cm.Matrix44, "44");\r
116                 }\r
117 \r
118                 [Test]\r
119                 [ExpectedException (typeof (IndexOutOfRangeException))]\r
120                 public void TooBigItems ()\r
121                 {\r
122                         ColorMatrix cm = new ColorMatrix (new float[][] {\r
123                                 new float[] { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f },\r
124                                 new float[] { 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f },\r
125                                 new float[] { 2.0f, 2.1f, 2.2f, 2.3f, 2.4f, 2.5f },\r
126                                 new float[] { 3.0f, 3.1f, 3.2f, 3.3f, 3.4f, 3.5f },\r
127                                 new float[] { 4.0f, 4.1f, 4.2f, 4.3f, 4.4f, 4.5f },\r
128                                 new float[] { 5.0f, 5.1f, 5.2f, 5.3f, 5.4f, 5.5f }\r
129                         });\r
130                         Assert.AreEqual (5.5f, cm[5,5], "out");\r
131                 }\r
132 \r
133                 [Test]\r
134                 public void DefaultConstructor ()\r
135                 {\r
136                         ColorMatrix cm = new ColorMatrix ();\r
137 \r
138                         Assert.AreEqual (1, cm.Matrix00, "0,0");\r
139                         Assert.AreEqual (1, cm.Matrix11, "1,1");\r
140                         Assert.AreEqual (1, cm.Matrix22, "2,2");\r
141                         Assert.AreEqual (1, cm.Matrix33, "3,3");\r
142                         Assert.AreEqual (1, cm.Matrix44, "4,4");\r
143                         Assert.AreEqual (0, cm.Matrix01, "0,1");\r
144                         Assert.AreEqual (0, cm.Matrix02, "0,2");\r
145                         Assert.AreEqual (0, cm.Matrix03, "0,3");\r
146                         Assert.AreEqual (0, cm.Matrix04, "0,4");\r
147                         Assert.AreEqual (0, cm.Matrix10, "1,0");\r
148                         Assert.AreEqual (0, cm.Matrix12, "1,2");\r
149                         Assert.AreEqual (0, cm.Matrix13, "1,3");\r
150                         Assert.AreEqual (0, cm.Matrix14, "1,4");\r
151                         Assert.AreEqual (0, cm.Matrix20, "2,0");\r
152                         Assert.AreEqual (0, cm.Matrix21, "2,1");\r
153                         Assert.AreEqual (0, cm.Matrix23, "2,3");\r
154                         Assert.AreEqual (0, cm.Matrix24, "2,4");\r
155                         Assert.AreEqual (0, cm.Matrix30, "3,0");\r
156                         Assert.AreEqual (0, cm.Matrix31, "3,1");\r
157                         Assert.AreEqual (0, cm.Matrix32, "3,2");\r
158                         Assert.AreEqual (0, cm.Matrix34, "3,4");\r
159                         Assert.AreEqual (0, cm.Matrix40, "4,0");\r
160                         Assert.AreEqual (0, cm.Matrix41, "4,1");\r
161                         Assert.AreEqual (0, cm.Matrix42, "4,2");\r
162                         Assert.AreEqual (0, cm.Matrix43, "4,3");\r
163                         Assert.AreEqual (100, Marshal.SizeOf (cm), "object");\r
164                         Assert.AreEqual (100, Marshal.SizeOf (typeof (ColorMatrix)), "type");\r
165                 }\r
166 \r
167                 [Test]\r
168                 public void ConstructorArrayAndMethods ()\r
169                 {\r
170                         ColorMatrix cm = new ColorMatrix (new float[][] {\r
171                                 new float[] {0.393f, 0.349f, 0.272f, 0, 0},\r
172                                 new float[] {0.769f, 0.686f, 0.534f, 0, 0},\r
173                                 new float[] {0.189f, 0.168f, 0.131f, 0, 0},\r
174                                 new float[] {     0,      0,      0, 1, 0},\r
175                                 new float[] {     0,      0,      0, 0, 1}\r
176                         });\r
177 \r
178                         Assert.AreEqual (0.393f, cm.Matrix00, "00");\r
179                         Assert.AreEqual (0.349f, cm.Matrix01, "01");\r
180                         Assert.AreEqual (0.272f, cm.Matrix02, "02");\r
181                         Assert.AreEqual (0, cm.Matrix03, "03");\r
182                         Assert.AreEqual (0, cm.Matrix04, "04");\r
183 \r
184                         Assert.AreEqual (0.769f, cm.Matrix10, "10");\r
185                         Assert.AreEqual (0.686f, cm.Matrix11, "11");\r
186                         Assert.AreEqual (0.534f, cm.Matrix12, "12");\r
187                         Assert.AreEqual (0, cm.Matrix13, "13");\r
188                         Assert.AreEqual (0, cm.Matrix14, "14");\r
189 \r
190                         Assert.AreEqual (0.189f, cm.Matrix20, "20");\r
191                         Assert.AreEqual (0.168f, cm.Matrix21, "21");\r
192                         Assert.AreEqual (0.131f, cm.Matrix22, "22");\r
193                         Assert.AreEqual (0, cm.Matrix23, "23");\r
194                         Assert.AreEqual (0, cm.Matrix24, "24");\r
195 \r
196                         Assert.AreEqual (0, cm.Matrix30, "30");\r
197                         Assert.AreEqual (0, cm.Matrix31, "31");\r
198                         Assert.AreEqual (0, cm.Matrix32, "32");\r
199                         Assert.AreEqual (1, cm.Matrix33, "33");\r
200                         Assert.AreEqual (0, cm.Matrix34, "34");\r
201 \r
202                         Assert.AreEqual (0, cm.Matrix40, "40");\r
203                         Assert.AreEqual (0, cm.Matrix41, "41");\r
204                         Assert.AreEqual (0, cm.Matrix42, "42");\r
205                         Assert.AreEqual (0, cm.Matrix43, "43");\r
206                         Assert.AreEqual (1, cm.Matrix44, "44");\r
207                 }\r
208 \r
209                 [Test]\r
210                 public void IndexerProperty ()\r
211                 {\r
212                         ColorMatrix cm = new ColorMatrix (new float[][] {\r
213                                 new float[]     {1,     0,      0,      0,      0},\r
214                                 new float[]     {0.5f,  1,      0,      0,      0},\r
215                                 new float[]     {0,     0.1f,   1.5f,   0,      0},\r
216                                 new float[]     {0.5f,  3,      0.5f,   1,      0},\r
217                                 new float[]     {0,     0,      0,      0,      0}\r
218                         });\r
219 \r
220                         Assert.AreEqual (1, cm[0,0], "0,0");\r
221                         Assert.AreEqual (0, cm[0,1], "0,1");\r
222                         Assert.AreEqual (0, cm[0,2], "0,2");\r
223                         Assert.AreEqual (0, cm[0,3], "0,3");\r
224                         Assert.AreEqual (0, cm[0,4], "0,4");\r
225                         \r
226                         Assert.AreEqual (0.5f, cm[1,0], "1,0");\r
227                         Assert.AreEqual (1, cm[1,1], "1,1");\r
228                         Assert.AreEqual (0, cm[1,2], "1,2");\r
229                         Assert.AreEqual (0, cm[1,3], "1,3");\r
230                         Assert.AreEqual (0, cm[1,4], "1,4");\r
231                         \r
232                         Assert.AreEqual (0, cm[2,0], "2,0");\r
233                         Assert.AreEqual (0.1f, cm[2,1], "2,1");\r
234                         Assert.AreEqual (1.5f, cm[2,2], "2,2");\r
235                         Assert.AreEqual (0, cm[2,3], "2,3");\r
236                         Assert.AreEqual (0, cm[2,4], "2,4");\r
237                         \r
238                         Assert.AreEqual (0.5f, cm[3,0], "3,0");\r
239                         Assert.AreEqual (3, cm[3,1], "3,1");\r
240                         Assert.AreEqual (0.5f, cm[3,2], "3,2");\r
241                         Assert.AreEqual (1, cm[3,3], "3,3");\r
242                         Assert.AreEqual (0, cm[3,4], "3,4");\r
243                         \r
244                         Assert.AreEqual (0, cm[4,0], "4,0");\r
245                         Assert.AreEqual (0, cm[4,1], "4,1");\r
246                         Assert.AreEqual (0, cm[4,2], "4,2");\r
247                         Assert.AreEqual (0, cm[4,3], "4,3");\r
248                         Assert.AreEqual (0, cm[4,4], "4,4");\r
249                 }\r
250 \r
251                 [Test]\r
252                 public void IndividualProperties ()\r
253                 {\r
254                         ColorMatrix cm = new ColorMatrix (new float[][] {\r
255                                 new float[]     {1,     0,      0,      0,      0},\r
256                                 new float[]     {0.5f,  1,      0,      0,      0},\r
257                                 new float[]     {0,     0.1f,   1.5f,   0,      0},\r
258                                 new float[]     {0.5f,  3,      0.5f,   1,      0},\r
259                                 new float[]     {0,     0,      0,      0,      0}\r
260                         });\r
261 \r
262                         Assert.AreEqual (1, cm.Matrix00, "0,0");\r
263                         Assert.AreEqual (0, cm.Matrix01, "0,1");\r
264                         Assert.AreEqual (0, cm.Matrix02, "0,2");\r
265                         Assert.AreEqual (0, cm.Matrix03, "0,3");\r
266                         Assert.AreEqual (0, cm.Matrix04, "0,4");\r
267                         \r
268                         Assert.AreEqual (0.5f, cm.Matrix10, "1,0");\r
269                         Assert.AreEqual (1, cm.Matrix11, "1,1");\r
270                         Assert.AreEqual (0, cm.Matrix12, "1,2");\r
271                         Assert.AreEqual (0, cm.Matrix13, "1,3");\r
272                         Assert.AreEqual (0, cm.Matrix14, "1,4");\r
273                         \r
274                         Assert.AreEqual (0, cm.Matrix20, "2,0");\r
275                         Assert.AreEqual (0.1f, cm.Matrix21, "2,1");\r
276                         Assert.AreEqual (1.5f, cm.Matrix22, "2,2");\r
277                         Assert.AreEqual (0, cm.Matrix23, "2,3");\r
278                         Assert.AreEqual (0, cm.Matrix24, "2,4");\r
279                         \r
280                         Assert.AreEqual (0.5f, cm.Matrix30, "3,0");\r
281                         Assert.AreEqual (3, cm.Matrix31, "3,1");\r
282                         Assert.AreEqual (0.5f, cm.Matrix32, "3,2");\r
283                         Assert.AreEqual (1, cm.Matrix33, "3,3");\r
284                         Assert.AreEqual (0, cm.Matrix34, "3,4");\r
285                         \r
286                         Assert.AreEqual (0, cm.Matrix40, "4,0");\r
287                         Assert.AreEqual (0, cm.Matrix41, "4,1");\r
288                         Assert.AreEqual (0, cm.Matrix42, "4,2");\r
289                         Assert.AreEqual (0, cm.Matrix43, "4,3");\r
290                         Assert.AreEqual (0, cm.Matrix44, "4,4");\r
291                 }\r
292         }\r
293 }\r