2019-12-10 04:16:47 +01:00
|
|
|
[flag]
|
|
|
|
enum BfPermission {
|
|
|
|
read
|
|
|
|
write
|
|
|
|
execute
|
|
|
|
other
|
|
|
|
}
|
|
|
|
|
|
|
|
struct BfFile {
|
|
|
|
mut:
|
|
|
|
perm BfPermission
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_enum_bitfield() {
|
|
|
|
mut a := BfFile{}
|
2020-11-27 22:09:14 +01:00
|
|
|
assert 1 == int(BfPermission.read)
|
|
|
|
assert 2 == int(BfPermission.write)
|
|
|
|
assert 4 == int(BfPermission.execute)
|
|
|
|
assert 8 == int(BfPermission.other)
|
2019-12-10 04:16:47 +01:00
|
|
|
a.perm.set(.read)
|
|
|
|
a.perm.set(.write)
|
|
|
|
a.perm.toggle(.execute)
|
|
|
|
a.perm.clear(.write)
|
2020-04-12 01:41:26 +02:00
|
|
|
// a.perm.set(.other)
|
2019-12-10 04:16:47 +01:00
|
|
|
assert a.perm.has(.read)
|
|
|
|
assert a.perm.has(.execute)
|
|
|
|
assert !a.perm.has(.write)
|
|
|
|
assert !a.perm.has(.other)
|
2020-11-27 22:09:14 +01:00
|
|
|
mut b := BfPermission.read | BfPermission.execute
|
|
|
|
assert int(b) == 1 + 0 + 4 + 0
|
|
|
|
assert b.has(.read)
|
|
|
|
assert b.has(.execute)
|
2019-12-10 04:16:47 +01:00
|
|
|
b.set(.write)
|
2020-11-27 22:09:14 +01:00
|
|
|
assert int(b) == 1 + 2 + 4 + 0
|
2019-12-10 04:16:47 +01:00
|
|
|
b.set(.other)
|
2020-11-27 22:09:14 +01:00
|
|
|
assert int(b) == 1 + 2 + 4 + 8
|
2019-12-10 04:16:47 +01:00
|
|
|
assert b.has(.write)
|
|
|
|
assert b.has(.other)
|
2020-11-27 22:09:14 +01:00
|
|
|
b.toggle(.read)
|
|
|
|
assert int(b) == 0 + 2 + 4 + 8
|
|
|
|
b.toggle(.execute)
|
|
|
|
assert int(b) == 0 + 2 + 0 + 8
|
2019-12-10 04:16:47 +01:00
|
|
|
assert !b.has(.read)
|
|
|
|
assert !b.has(.execute)
|
|
|
|
}
|