1 /** 2 * Copyright: Copyright (c) 2017 Wojciech Szęszoł. All rights reserved. 3 * Authors: Wojciech Szęszoł 4 * Version: Initial created: October 22, 2017 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module tests.unit.BitFieldsTests; 8 9 import Common; 10 11 unittest 12 { 13 assertTranslates(q"C 14 struct Foo 15 { 16 int x : 4; 17 }; 18 19 C",q"D 20 extern (C): 21 22 struct Foo 23 { 24 import std.bitmanip : bitfields; 25 26 mixin(bitfields!( 27 int, "x", 4, 28 uint, "", 4)); 29 } 30 D"); 31 32 } 33 34 unittest 35 { 36 assertTranslates(q"C 37 struct Foo 38 { 39 int x : 8; 40 }; 41 42 C",q"D 43 extern (C): 44 45 struct Foo 46 { 47 import std.bitmanip : bitfields; 48 mixin(bitfields!(int, "x", 8)); 49 } 50 D"); 51 52 } 53 54 55 unittest 56 { 57 assertTranslates(q"C 58 struct bitfield { 59 unsigned int one : 4; 60 unsigned int two : 8; 61 unsigned int : 4; 62 }; 63 C",q"D 64 extern (C): 65 66 struct bitfield 67 { 68 import std.bitmanip : bitfields; 69 70 mixin(bitfields!( 71 uint, "one", 4, 72 uint, "two", 8, 73 uint, "", 4)); 74 } 75 D"); 76 } 77 78 unittest 79 { 80 assertTranslates(q"C 81 struct Foo { 82 unsigned char a : 3, : 2, b : 6, c : 2; 83 }; 84 C",q"D 85 extern (C): 86 87 struct Foo 88 { 89 import std.bitmanip : bitfields; 90 91 mixin(bitfields!( 92 ubyte, "a", 3, 93 ubyte, "", 2, 94 ubyte, "b", 6, 95 ubyte, "c", 2, 96 uint, "", 3)); 97 } 98 D"); 99 100 }; 101 102 unittest 103 { 104 assertTranslates(q"C 105 struct Foo { 106 short a : 4; 107 char b; 108 }; 109 C",q"D 110 extern (C): 111 112 struct Foo 113 { 114 import std.bitmanip : bitfields; 115 116 mixin(bitfields!( 117 short, "a", 4, 118 uint, "", 4)); 119 120 char b; 121 } 122 D"); 123 124 }; 125 126 unittest 127 { 128 assertTranslates(q"C 129 struct Foo { 130 short a; 131 char b : 7; 132 char c[1]; 133 }; 134 C",q"D 135 extern (C): 136 137 struct Foo 138 { 139 import std.bitmanip : bitfields; 140 141 short a; 142 143 mixin(bitfields!( 144 char, "b", 7, 145 uint, "", 1)); 146 147 char[1] c; 148 } 149 D"); 150 151 }; 152 153 unittest 154 { 155 assertTranslates(q"C 156 struct Foo { 157 short a; 158 char b; 159 int c : 1; 160 int d : 4; 161 int e : 7; 162 }; 163 C",q"D 164 extern (C): 165 166 struct Foo 167 { 168 import std.bitmanip : bitfields; 169 170 short a; 171 char b; 172 173 mixin(bitfields!( 174 int, "c", 1, 175 int, "d", 4, 176 int, "e", 7, 177 uint, "", 4)); 178 } 179 D"); 180 181 }; 182 183 unittest 184 { 185 assertTranslates(q"C 186 struct Foo { 187 short a; 188 int b : 1; 189 int c : 4; 190 int d : 3; 191 int e : 7; 192 int f : 25; 193 char g; 194 }; 195 C",q"D 196 extern (C): 197 198 struct Foo 199 { 200 import std.bitmanip : bitfields; 201 202 short a; 203 204 mixin(bitfields!( 205 int, "b", 1, 206 int, "c", 4, 207 int, "d", 3, 208 int, "e", 7, 209 int, "f", 25, 210 uint, "", 24)); 211 212 char g; 213 } 214 D"); 215 216 }; 217 218 unittest 219 { 220 assertTranslates(q"C 221 struct Foo { 222 short a; 223 int b : 1; 224 int c : 4; 225 int d : 3; 226 long e; 227 int f : 7; 228 int g : 25; 229 char h; 230 }; 231 C",q"D 232 import core.stdc.config; 233 234 extern (C): 235 236 struct Foo 237 { 238 import std.bitmanip : bitfields; 239 240 short a; 241 242 mixin(bitfields!( 243 int, "b", 1, 244 int, "c", 4, 245 int, "d", 3)); 246 247 c_long e; 248 249 mixin(bitfields!( 250 int, "f", 7, 251 int, "g", 25)); 252 253 char h; 254 } 255 D"); 256 257 };