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