Admin Panel

import pytest
from amitools.vamos.atypes import BitFieldType


def atypes_bitfield_test():
  @BitFieldType
  class MyBF:
    a = 1
    b = 2
    c = 4
  # to_strs
  assert MyBF.to_strs(1) == ['a']
  assert MyBF.to_str(1) == "a"
  assert MyBF.to_strs(5) == ['a', 'c']
  assert MyBF.to_str(5) == "a|c"
  with pytest.raises(ValueError):
    MyBF.to_strs(9)
  assert MyBF.to_strs(9, check=False) == ['a', '8']
  assert MyBF.to_str(9, check=False) == 'a|8'
  # from_strs
  assert MyBF.from_strs('a') == 1
  assert MyBF.from_strs('a', 'c') == 5
  assert MyBF.from_str('a') == 1
  assert MyBF.from_str('a|c') == 5
  with pytest.raises(ValueError):
    MyBF.from_strs('bla')
  # is_set
  assert MyBF.is_set('a', 1)
  assert MyBF.is_set(1, 1)
  assert not MyBF.is_set('a', 2)
  with pytest.raises(ValueError):
    MyBF.is_set('bla', 5)
  # is_clr
  assert MyBF.is_clr('a', 2)
  assert MyBF.is_clr(1, 2)
  assert not MyBF.is_clr('a', 1)
  with pytest.raises(ValueError):
    MyBF.is_clr('bla', 5)
  # instance
  a = MyBF('a')
  assert str(a) == 'a'
  assert repr(a) == "MyBF('a')"
  assert int(a) == 1
  assert a == 1
  assert a == MyBF(1)
  assert a.has_bits(1)
  assert a.has_bits('a')
  ac = MyBF('c|a')
  assert str(ac) == 'a|c'
  assert int(ac) == 5
  assert ac == 5
  assert ac.has_bits('a')
  assert ac.has_bits(1)
  ac.clr_bits(1)
  assert not ac.has_bits(1)
  ac.set_bits(1)
  assert ac.has_bits(1)
  ac2 = MyBF('c', 'a')
  assert str(ac2) == 'a|c'
  assert int(ac2) == 5
  ac3 = MyBF(MyBF.a | MyBF.c)
  assert str(ac3) == 'a|c'
  assert int(ac3) == 5