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