From 8adfe5570fea11f2bf471c9ca1b7551b2c4957d0 Mon Sep 17 00:00:00 2001 From: Quentin Renard Date: Tue, 3 Oct 2023 12:17:14 +0200 Subject: [PATCH] Added bit flags --- bit_flags.go | 9 +++++++++ bit_flags_test.go | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 bit_flags.go create mode 100644 bit_flags_test.go diff --git a/bit_flags.go b/bit_flags.go new file mode 100644 index 0000000..f568f41 --- /dev/null +++ b/bit_flags.go @@ -0,0 +1,9 @@ +package astikit + +type BitFlags uint64 + +func (fs BitFlags) Add(f uint64) uint64 { return uint64(fs) | f } + +func (fs BitFlags) Del(f uint64) uint64 { return uint64(fs) &^ f } + +func (fs BitFlags) Has(f uint64) bool { return uint64(fs)&f > 0 } diff --git a/bit_flags_test.go b/bit_flags_test.go new file mode 100644 index 0000000..eaae6e6 --- /dev/null +++ b/bit_flags_test.go @@ -0,0 +1,23 @@ +package astikit + +import ( + "testing" +) + +func TestBitFlags(t *testing.T) { + f := BitFlags(2 | 4) + r := f.Add(1) + if e, g := uint64(7), r; e != g { + t.Errorf("expected %d, got %d", e, g) + } + r = f.Del(2) + if e, g := uint64(4), r; e != g { + t.Errorf("expected %d, got %d", e, g) + } + if e, g := false, f.Has(1); e != g { + t.Errorf("expected %v, got %v", e, g) + } + if e, g := true, f.Has(4); e != g { + t.Errorf("expected %v, got %v", e, g) + } +}