mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
66 lines
1.3 KiB
Plaintext
66 lines
1.3 KiB
Plaintext
module bitstruct_ops_bool;
|
|
import std::io;
|
|
|
|
bitstruct Foo : int
|
|
{
|
|
bool a;
|
|
bool b;
|
|
}
|
|
|
|
bitstruct Bar : char[13]
|
|
{
|
|
bool z;
|
|
bool w;
|
|
bool gh;
|
|
}
|
|
|
|
fn void! test_bitops() @test
|
|
{
|
|
Foo f1 = { true, true };
|
|
Foo f2 = { true, false };
|
|
|
|
Foo f3 = f1 & f2;
|
|
assert(f3.a == true);
|
|
assert(f3.b == false);
|
|
|
|
Foo f4 = (f1 | ~f2) ^ f3;
|
|
assert(f4.a == false && f4.b == true);
|
|
Foo f5 = Foo { true, false } | Foo { false, true };
|
|
assert(f5.a == true && f5.b == true);
|
|
|
|
f5 &= f2;
|
|
assert(f5.a == true && f5.b == false);
|
|
|
|
Bar b1 = { true, true, true };
|
|
Bar b2 = { true, false, false };
|
|
|
|
Bar b3 = b1 & b2;
|
|
assert(b3.z == true && b3.w == false && b3.gh == false);
|
|
b3 = ~b3;
|
|
assert(b3.z == false && b3.w == true && b3.gh == true);
|
|
b3 ^= Bar { true, true, false };
|
|
assert(b3.z == true && b3.w == false && b3.gh == true);
|
|
}
|
|
|
|
fn void! test_bitops_const() @test
|
|
{
|
|
const Foo F1 = { true, true };
|
|
const Foo F2 = { true, false };
|
|
|
|
const Foo F3 = F1 & F2;
|
|
assert(F3.a == true);
|
|
assert(F3.b == false);
|
|
|
|
const Foo F4 = (F1 | ~F2) ^ F3;
|
|
assert(F4.a == false && F4.b == true);
|
|
const Foo F5 = Foo { true, false } | Foo { false, true };
|
|
assert(F5.a == true && F5.b == true);
|
|
|
|
const Bar B1 = { true, true, true };
|
|
const Bar B2 = { true, false, false };
|
|
|
|
const Bar B3 = B1 & B2;
|
|
assert(B3.z == true && B3.w == false && B3.gh == false);
|
|
}
|
|
|