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.LayoutSuite; 23 24 import java.nio.ByteBuffer; 25 26 import capnproto; 27 28 //SimpleRawDataStruct 29 unittest 30 { 31 ubyte[] data = [ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef ]; 32 33 auto buffer = ByteBuffer(data); 34 35 auto arena = new ReaderArena([buffer], 0x7fffffffffffffffL); 36 37 auto reader = WireHelpers.readStructPointer!StructReader(arena.tryGetSegment(0), 0, null, 0, 0x7fffffff); 38 39 assert(reader._getLongField(0) == 0xefcdab8967452301L); 40 assert(reader._getLongField(1) == 0L); 41 42 assert(reader._getUintField(0) == 0x67452301); 43 assert(reader._getUintField(1) == 0xefcdab89); 44 assert(reader._getUintField(2) == 0); 45 assert(reader._getUshortField(0) == 0x2301); 46 assert(reader._getUshortField(1) == 0x6745); 47 assert(reader._getUshortField(2) == 0xab89); 48 assert(reader._getUshortField(3) == 0xefcd); 49 assert(reader._getUshortField(4) == 0); 50 51 // TODO masking 52 53 assert(reader._getBoolField(0) == true); 54 assert(reader._getBoolField(1) == false); 55 assert(reader._getBoolField(2) == false); 56 57 assert(reader._getBoolField(3) == false); 58 assert(reader._getBoolField(4) == false); 59 assert(reader._getBoolField(5) == false); 60 assert(reader._getBoolField(6) == false); 61 assert(reader._getBoolField(7) == false); 62 63 assert(reader._getBoolField(8) == true); 64 assert(reader._getBoolField(9) == true); 65 assert(reader._getBoolField(10) == false); 66 assert(reader._getBoolField(11) == false); 67 assert(reader._getBoolField(12) == false); 68 assert(reader._getBoolField(13) == true); 69 assert(reader._getBoolField(14) == false); 70 assert(reader._getBoolField(15) == false); 71 72 assert(reader._getBoolField(63) == true); 73 assert(reader._getBoolField(64) == false); 74 75 // TODO masking 76 } 77 78 //StructRoundTrip_OneSegment 79 unittest 80 { 81 auto buffer = ByteBuffer(new ubyte[](1024 * 8)); 82 83 auto segment = SegmentBuilder(buffer, new BuilderArena(BuilderArena.SUGGESTED_FIRST_SEGMENT_WORDS, BuilderArena.SUGGESTED_ALLOCATION_STRATEGY)); 84 auto builder = WireHelpers.initStructPointer!StructBuilder(0, &segment, cast(immutable)StructSize(2, 4)); 85 setupStruct(&builder); 86 checkStruct(&builder); 87 } 88 89 void setupStruct(StructBuilder* builder) 90 { 91 builder._setLongField(0, 0x1011121314151617L); 92 builder._setIntField(2, 0x20212223); 93 builder._setShortField(6, 0x3031); 94 builder._setByteField(14, 0x40); 95 builder._setBoolField(120, false); 96 builder._setBoolField(121, false); 97 builder._setBoolField(122, true); 98 builder._setBoolField(123, false); 99 builder._setBoolField(124, true); 100 builder._setBoolField(125, true); 101 builder._setBoolField(126, true); 102 builder._setBoolField(127, false); 103 } 104 105 void checkStruct(StructBuilder* builder) 106 { 107 assert(builder._getLongField(0) == 0x1011121314151617L); 108 assert(builder._getIntField(2) == 0x20212223); 109 assert(builder._getShortField(6) == 0x3031); 110 assert(builder._getByteField(14) == 0x40); 111 assert(builder._getBoolField(120) == false); 112 assert(builder._getBoolField(121) == false); 113 assert(builder._getBoolField(122) == true); 114 assert(builder._getBoolField(123) == false); 115 assert(builder._getBoolField(124) == true); 116 assert(builder._getBoolField(125) == true); 117 assert(builder._getBoolField(126) == true); 118 assert(builder._getBoolField(127) == false); 119 } 120