1 // Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors 2 // Licensed under the MIT License: 3 // 4 // Permission is hereby granted, free of charge, to any person obtaining a copy 5 // of this software and associated documentation files (the "Software"), to deal 6 // in the Software without restriction, including without limitation the rights 7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 // copies of the Software, and to permit persons to whom the Software is 9 // furnished to do so, subject to the following conditions: 10 // 11 // The above copyright notice and this permission notice shall be included in 12 // all copies or substantial portions of the Software. 13 // 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 // THE SOFTWARE. 21 22 module capnproto.tests.TestUtil; 23 24 import capnproto; 25 26 import capnproto.tests.test; 27 import capnproto.tests.testimport; 28 29 struct TestUtil 30 { 31 static ubyte[] data(string str) 32 { 33 return cast(ubyte[])str; 34 } 35 36 static void initTestMessage(TestAllTypes.Builder builder) 37 { 38 builder.setVoidField(); 39 builder.setBoolField(true); 40 builder.setInt8Field(-123); 41 builder.setInt16Field(-12345); 42 builder.setInt32Field(-12345678); 43 builder.setInt64Field(-123456789012345L); 44 builder.setUInt8Field(0xea); 45 builder.setUInt16Field(0x4567); 46 builder.setUInt32Field(0x34567890); 47 builder.setUInt64Field(0x1234567890123456L); 48 builder.setFloat32Field(1234.5f); 49 builder.setFloat64Field(-123e45); 50 builder.setTextField("foo"); 51 builder.setDataField(data("bar")); 52 53 { 54 auto subBuilder = builder.initStructField(); 55 subBuilder.setVoidField(); 56 subBuilder.setBoolField(true); 57 subBuilder.setInt8Field(-12); 58 subBuilder.setInt16Field(3456); 59 subBuilder.setInt32Field(-78901234); 60 subBuilder.setInt64Field(56789012345678L); 61 subBuilder.setUInt8Field(90); 62 subBuilder.setUInt16Field(1234); 63 subBuilder.setUInt32Field(56789012); 64 subBuilder.setUInt64Field(345678901234567890L); 65 subBuilder.setFloat32Field(-1.25e-10f); 66 subBuilder.setFloat64Field(345); 67 subBuilder.setTextField(Text.Reader("baz")); 68 subBuilder.setDataField(data("qux")); 69 70 { 71 auto subSubBuilder = subBuilder.initStructField(); 72 subSubBuilder.setTextField(Text.Reader("nested")); 73 subSubBuilder.initStructField().setTextField(Text.Reader("really nested")); 74 } 75 76 subBuilder.setEnumField(TestEnum.baz); 77 78 auto boolList = subBuilder.initBoolList(5); 79 boolList.set(0, false); 80 boolList.set(1, true); 81 boolList.set(2, false); 82 boolList.set(3, true); 83 boolList.set(4, true); 84 } 85 86 builder.setEnumField(TestEnum.corge); 87 builder.initVoidList(6); 88 89 auto boolList = builder.initBoolList(4); 90 boolList.set(0, true); 91 boolList.set(1, false); 92 boolList.set(2, false); 93 boolList.set(3, true); 94 95 auto float64List = builder.initFloat64List(4); 96 float64List.set(0, 7777.75); 97 float64List.set(1, double.infinity); 98 float64List.set(2, -double.infinity); 99 float64List.set(3, double.nan); 100 101 auto textList = builder.initTextList(3); 102 textList.set(0, Text.Reader("plugh")); 103 textList.set(1, Text.Reader("xyzzy")); 104 textList.set(2, Text.Reader("thud")); 105 106 auto structList = builder.initStructList(3); 107 structList.get(0).setTextField(Text.Reader("structlist 1")); 108 structList.get(1).setTextField(Text.Reader("structlist 2")); 109 structList.get(2).setTextField(Text.Reader("structlist 3")); 110 111 auto enumList = builder.initEnumList(2); 112 enumList.set(0, TestEnum.foo); 113 enumList.set(1, TestEnum.garply); 114 } 115 116 static void checkTestMessage(TestAllTypes.Builder builder) 117 { 118 builder.getVoidField(); 119 assert(builder.getBoolField() == true); 120 assert(builder.getInt8Field() == -123); 121 assert(builder.getInt16Field() == -12345); 122 assert(builder.getInt32Field() == -12345678); 123 assert(builder.getInt64Field() == -123456789012345L); 124 assert(builder.getUInt8Field() == 0xea); 125 assert(builder.getUInt16Field() == 0x4567); 126 assert(builder.getUInt32Field() == 0x34567890); 127 assert(builder.getUInt64Field() == 0x1234567890123456L); 128 assert(builder.getFloat32Field() == 1234.5f); 129 assert(builder.getFloat64Field() == -123e45); 130 assert(builder.getTextField().toString() == "foo"); 131 132 { 133 auto subBuilder = builder.getStructField(); 134 subBuilder.getVoidField(); 135 assert(subBuilder.getBoolField() == true); 136 assert(subBuilder.getInt8Field() == -12); 137 assert(subBuilder.getInt16Field() == 3456); 138 assert(subBuilder.getInt32Field() == -78901234); 139 assert(subBuilder.getInt64Field() == 56789012345678L); 140 assert(subBuilder.getUInt8Field() == 90); 141 assert(subBuilder.getUInt16Field() == 1234); 142 assert(subBuilder.getUInt32Field() == 56789012); 143 assert(subBuilder.getUInt64Field() == 345678901234567890L); 144 assert(subBuilder.getFloat32Field() == -1.25e-10f); 145 assert(subBuilder.getFloat64Field() == 345); 146 147 { 148 auto subSubBuilder = subBuilder.getStructField(); 149 assert(subSubBuilder.getTextField().toString() == "nested"); 150 } 151 152 assert(subBuilder.getEnumField() == TestEnum.baz); 153 154 auto boolList = subBuilder.getBoolList(); 155 assert(boolList.get(0) == false); 156 assert(boolList.get(1) == true); 157 assert(boolList.get(2) == false); 158 assert(boolList.get(3) == true); 159 assert(boolList.get(4) == true); 160 } 161 assert(builder.getEnumField() == TestEnum.corge); 162 163 assert(builder.getVoidList().length == 6); 164 165 auto boolList = builder.getBoolList(); 166 assert(boolList.get(0) == true); 167 assert(boolList.get(1) == false); 168 assert(boolList.get(2) == false); 169 assert(boolList.get(3) == true); 170 171 auto float64List = builder.getFloat64List(); 172 assert(float64List.get(0) == 7777.75); 173 assert(float64List.get(1) == double.infinity); 174 assert(float64List.get(2) == -double.infinity); 175 assert(float64List.get(3) != float64List.get(3)); // NaN; 176 177 auto textList = builder.getTextList(); 178 assert(textList.length == 3); 179 assert(textList.get(0).toString() == "plugh"); 180 assert(textList.get(1).toString() == "xyzzy"); 181 assert(textList.get(2).toString() == "thud"); 182 183 auto structList = builder.getStructList(); 184 assert(structList.length == 3); 185 assert(structList.get(0).getTextField().toString() == "structlist 1"); 186 assert(structList.get(1).getTextField().toString() == "structlist 2"); 187 assert(structList.get(2).getTextField().toString() == "structlist 3"); 188 189 auto enumList = builder.getEnumList(); 190 assert(enumList.get(0) == TestEnum.foo); 191 assert(enumList.get(1) == TestEnum.garply); 192 }; 193 194 static void checkTestMessage(TestAllTypes.Reader reader) 195 { 196 reader.getVoidField(); 197 assert(reader.getBoolField() == true); 198 assert(reader.getInt8Field() == -123); 199 assert(reader.getInt16Field() == -12345); 200 assert(reader.getInt32Field() == -12345678); 201 assert(reader.getInt64Field() == -123456789012345L); 202 assert(reader.getUInt8Field() == 0xea); 203 assert(reader.getUInt16Field() == 0x4567); 204 assert(reader.getUInt32Field() == 0x34567890); 205 assert(reader.getUInt64Field() == 0x1234567890123456L); 206 assert(reader.getFloat32Field() == 1234.5f); 207 assert(reader.getFloat64Field() == -123e45); 208 assert(reader.getTextField() == "foo"); 209 210 { 211 auto subReader = reader.getStructField(); 212 subReader.getVoidField(); 213 assert(subReader.getBoolField() == true); 214 assert(subReader.getInt8Field() == -12); 215 assert(subReader.getInt16Field() == 3456); 216 assert(subReader.getInt32Field() == -78901234); 217 assert(subReader.getInt64Field() == 56789012345678L); 218 assert(subReader.getUInt8Field() == 90); 219 assert(subReader.getUInt16Field() == 1234); 220 assert(subReader.getUInt32Field() == 56789012); 221 assert(subReader.getUInt64Field() == 345678901234567890L); 222 assert(subReader.getFloat32Field() == -1.25e-10f); 223 assert(subReader.getFloat64Field() == 345); 224 225 { 226 auto subSubReader = subReader.getStructField(); 227 assert(subSubReader.getTextField() == "nested"); 228 } 229 auto boolList = subReader.getBoolList(); 230 assert(boolList.get(0) == false); 231 assert(boolList.get(1) == true); 232 assert(boolList.get(2) == false); 233 assert(boolList.get(3) == true); 234 assert(boolList.get(4) == true); 235 } 236 237 assert(reader.getVoidList().length == 6); 238 239 auto boolList = reader.getBoolList(); 240 assert(boolList.get(0) == true); 241 assert(boolList.get(1) == false); 242 assert(boolList.get(2) == false); 243 assert(boolList.get(3) == true); 244 245 auto float64List = reader.getFloat64List(); 246 assert(float64List.get(0) == 7777.75); 247 assert(float64List.get(1) == double.infinity); 248 assert(float64List.get(2) == -double.infinity); 249 assert(float64List.get(3) != float64List.get(3)); // NaN; 250 251 auto textList = reader.getTextList(); 252 assert(textList.length == 3); 253 assert(textList.get(0) == "plugh"); 254 assert(textList.get(1) == "xyzzy"); 255 assert(textList.get(2) == "thud"); 256 257 auto structList = reader.getStructList(); 258 assert(3 == structList.length); 259 assert(structList.get(0).getTextField() == "structlist 1"); 260 assert(structList.get(1).getTextField() == "structlist 2"); 261 assert(structList.get(2).getTextField() == "structlist 3"); 262 263 auto enumList = reader.getEnumList(); 264 assert(enumList.get(0) == TestEnum.foo); 265 assert(enumList.get(1) == TestEnum.garply); 266 }; 267 268 static void checkDefaultMessage(TestDefaults.Builder builder) 269 { 270 builder.getVoidField(); 271 assert(builder.getBoolField() == true); 272 assert(builder.getInt8Field() == -123); 273 assert(builder.getInt16Field() == -12345); 274 assert(builder.getInt32Field() == -12345678); 275 assert(builder.getInt64Field() == -123456789012345L); 276 assert(builder.getUInt8Field() == 0xea); 277 assert(builder.getUInt16Field() == 45678); 278 assert(builder.getUInt32Field() == 0xce0a6a14); 279 assert(builder.getUInt64Field() == 0xab54a98ceb1f0ad2L); 280 assert(builder.getFloat32Field() == 1234.5f); 281 assert(builder.getFloat64Field() == -123e45); 282 assert(builder.getEnumField() == TestEnum.corge); 283 284 assert(builder.getTextField().toString() == "foo"); 285 assert(builder.getDataField().toArray() == [0x62, 0x61, 0x72]); 286 } 287 288 static void checkDefaultMessage(TestDefaults.Reader reader) 289 { 290 reader.getVoidField(); 291 assert(reader.getBoolField() == true); 292 assert(reader.getInt8Field() == -123); 293 assert(reader.getInt16Field() == -12345); 294 assert(reader.getInt32Field() == -12345678); 295 assert(reader.getInt64Field() == -123456789012345L); 296 assert(reader.getUInt8Field() == 0xea); 297 assert(reader.getUInt16Field() == 45678); 298 assert(reader.getUInt32Field() == 0xce0a6a14); 299 assert(reader.getUInt64Field() == 0xab54a98ceb1f0ad2L); 300 assert(reader.getFloat32Field() == 1234.5f); 301 assert(reader.getFloat64Field() == -123e45); 302 assert(reader.getTextField() == "foo"); 303 assert(reader.getDataField() == [0x62, 0x61, 0x72]); 304 305 { 306 auto subReader = reader.getStructField(); 307 subReader.getVoidField(); 308 assert(subReader.getBoolField() == true); 309 assert(subReader.getInt8Field() == -12); 310 assert(subReader.getInt16Field() == 3456); 311 assert(subReader.getInt32Field() == -78901234); 312 assert(subReader.getTextField() == "baz"); 313 314 { 315 auto subSubReader = subReader.getStructField(); 316 assert(subSubReader.getTextField() == "nested"); 317 } 318 } 319 320 assert(reader.getEnumField() == TestEnum.corge); 321 322 assert(reader.getVoidList().length == 6); 323 324 { 325 auto listReader = reader.getBoolList(); 326 assert(listReader.length == 4); 327 assert(listReader.get(0) == true); 328 assert(listReader.get(1) == false); 329 assert(listReader.get(2) == false); 330 assert(listReader.get(3) == true); 331 } 332 333 { 334 auto listReader = reader.getInt8List(); 335 assert(listReader.length == 2); 336 assert(listReader.get(0) == 111); 337 assert(listReader.get(1) == -111); 338 } 339 } 340 341 static void setDefaultMessage(TestDefaults.Builder builder) 342 { 343 builder.setBoolField(false); 344 builder.setInt8Field(-122); 345 builder.setInt16Field(-12344); 346 builder.setInt32Field(-12345677); 347 builder.setInt64Field(-123456789012344L); 348 builder.setUInt8Field(0xe9); 349 builder.setUInt16Field(45677); 350 builder.setUInt32Field(0xce0a6a13); 351 builder.setUInt64Field(0xab54a98ceb1f0ad1L); 352 builder.setFloat32Field(1234.4f); 353 builder.setFloat64Field(-123e44); 354 builder.setTextField(Text.Reader("bar")); 355 builder.setEnumField(TestEnum.qux); 356 } 357 358 static void checkSettedDefaultMessage(TestDefaults.Reader reader) 359 { 360 assert(reader.getBoolField() == false); 361 assert(reader.getInt8Field() == -122); 362 assert(reader.getInt16Field() == -12344); 363 assert(reader.getInt32Field() == -12345677); 364 assert(reader.getInt64Field() == -123456789012344L); 365 assert(reader.getUInt8Field() == 0xe9); 366 assert(reader.getUInt16Field() == 45677); 367 assert(reader.getUInt32Field() == 0xce0a6a13); 368 assert(reader.getUInt64Field() == 0xab54a98ceb1f0ad1L); 369 assert(reader.getFloat32Field() == 1234.4f); 370 assert(reader.getFloat64Field() == -123e44); 371 assert(reader.getEnumField() == TestEnum.qux); 372 } 373 }