github.com/andy2046/gopie@v0.7.0/pkg/bitflag/bitflag_test.go (about) 1 package bitflag_test 2 3 import ( 4 "testing" 5 6 . "github.com/andy2046/gopie/pkg/bitflag" 7 ) 8 9 const ( 10 FLAG_A Flag = 1 << Flag(iota) 11 FLAG_B 12 FLAG_C 13 FLAG_D 14 ) 15 16 func TestExample(t *testing.T) { 17 18 var flag Flag 19 20 flag.SetAll(FLAG_A) 21 flag.SetAll(FLAG_B, FLAG_C) 22 flag.SetAll(FLAG_C | FLAG_D) 23 24 flag.Reset() 25 26 flag.SetAll(FLAG_A, FLAG_B, FLAG_C, FLAG_D) 27 28 flag.ClearAll(FLAG_A) 29 30 flag.ClearAll(FLAG_B, FLAG_C) 31 32 if flag.AreAllSet(FLAG_A) { 33 t.Fatal("A") 34 } 35 36 if flag.AreAllSet(FLAG_B) { 37 t.Fatal("B") 38 } 39 40 if flag.AreAllSet(FLAG_C) { 41 t.Fatal("C") 42 } 43 44 if !flag.AreAllSet(FLAG_D) { 45 t.Fatal("D") 46 } 47 } 48 49 func TestSet(t *testing.T) { 50 51 var flag Flag 52 53 flag.SetAll(FLAG_A) 54 flag.SetAll(FLAG_B) 55 56 if !flag.AreAllSet(FLAG_A) { 57 t.Fail() 58 } 59 60 if !flag.AreAllSet(FLAG_B) { 61 t.Fail() 62 } 63 64 flag.SetAll(FLAG_A, FLAG_B) 65 66 if !flag.AreAllSet(FLAG_A, FLAG_B) { 67 t.Fail() 68 } 69 70 if !flag.IsAnySet(FLAG_B) { 71 t.Fail() 72 } 73 } 74 75 func TestClear(t *testing.T) { 76 77 var flag Flag 78 79 flag.SetAll(FLAG_A, FLAG_B, FLAG_C) 80 81 if !flag.AreAllSet(FLAG_A, FLAG_B, FLAG_C) { 82 t.Fail() 83 } 84 85 flag.ClearAll(FLAG_B) 86 87 if flag.AreAllSet(FLAG_B) { 88 t.Fail() 89 } 90 91 if !flag.AreAllSet(FLAG_A, FLAG_C) { 92 t.Fail() 93 } 94 } 95 96 func TestToggle(t *testing.T) { 97 98 var flag Flag 99 100 flag.SetAll(FLAG_A, FLAG_B, FLAG_C) 101 102 if !flag.AreAllSet(FLAG_A, FLAG_B, FLAG_C) { 103 t.Fail() 104 } 105 106 flag.ToggleAll(FLAG_B) 107 108 if flag.AreAllSet(FLAG_B) { 109 t.Fail() 110 } 111 112 if !flag.AreAllSet(FLAG_A, FLAG_C) { 113 t.Fail() 114 } 115 } 116 117 func TestN(t *testing.T) { 118 119 var flag Flag 120 121 flag.Set(1) 122 123 if !flag.IsSet(1) { 124 t.Fail() 125 } 126 127 flag.Toggle(1) 128 129 if flag.IsSet(1) { 130 t.Fail() 131 } 132 133 flag.Toggle(1) 134 flag.Clear(1) 135 136 if flag.IsSet(1) { 137 t.Fail() 138 } 139 }