bitmask_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright © 2021 Jeffrey H. Johnson <trnsz@pobox.com>.
  2. // Copyright © 2021 Gridfinity, LLC.
  3. // Copyright © 2019 Neal.
  4. // Copyright © 2018 lrita@163.com.
  5. //
  6. // Use of this source code is governed by the MIT
  7. // license that can be found in the LICENSE file.
  8. package gonuma_test
  9. import (
  10. "strings"
  11. "testing"
  12. "github.com/johnsonjh/gonuma"
  13. "github.com/stretchr/testify/require"
  14. )
  15. func TestBitmask(t *testing.T) {
  16. assert := require.New(t)
  17. for i := 0; i < 256; i++ {
  18. mask := gonuma.NewBitmask(i)
  19. assert.True(mask.Len()%8 == 0)
  20. assert.True(len(mask)*64 >= i)
  21. for j := 0; j < i; j++ {
  22. mask.Set(j, true)
  23. assert.True(mask.Get(j))
  24. assert.Equal(j+1, mask.OnesCount())
  25. mask.Set(j, false)
  26. assert.False(mask.Get(j))
  27. mask.Set(j, true)
  28. for k := j + 1; k < i; k++ {
  29. assert.False(mask.Get(k))
  30. }
  31. }
  32. clone := mask.Clone()
  33. for j := 0; j < mask.Len(); j++ {
  34. assert.Equal(mask.Get(j), clone.Get(j))
  35. }
  36. if i != 0 {
  37. assert.Equal(len(mask), strings.Count(mask.String(), ",")+1)
  38. assert.Equal(
  39. mask.OnesCount(),
  40. strings.Count(mask.Text(), ",")+1,
  41. )
  42. } else {
  43. assert.Empty(mask.String())
  44. assert.Empty(mask.Text())
  45. }
  46. mask.ClearAll()
  47. assert.Equal(0, mask.OnesCount())
  48. mask.SetAll()
  49. for j := 0; j < i; j++ {
  50. assert.True(mask.Get(j))
  51. }
  52. }
  53. }