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  }