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