def test_bitmask_int():
    assert int(BitMask16()) == 0
    assert int(BitMask16(0xfffe)) == 0xfffe

    assert int(BitMask32()) == 0
    assert int(BitMask32(1)) == 1
    assert int(BitMask32(1234567)) == 1234567
    assert int(BitMask32(0x8ff123fe)) == 0x8ff123fe
    assert int(BitMask32(0xffffffff)) == 0xffffffff

    assert int(BitMask64()) == 0
    assert int(BitMask64(0xfffffffffffffffe)) == 0xfffffffffffffffe

    assert int(DoubleBitMaskNative()) == 0
    assert int(DoubleBitMaskNative(1)) == 1
    assert int(DoubleBitMaskNative(1 << (double_num_bits //
                                         2))) == 1 << (double_num_bits // 2)
    assert int(DoubleBitMaskNative(0xffff0001)) == 0xffff0001
    assert int(DoubleBitMaskNative((1 << double_num_bits) -
                                   1)) == (1 << double_num_bits) - 1

    assert int(QuadBitMaskNative()) == 0
    assert int(QuadBitMaskNative(1)) == 1
    assert int(QuadBitMaskNative(1 << (quad_num_bits //
                                       2))) == 1 << (quad_num_bits // 2)
    assert int(QuadBitMaskNative(0xffff0001feff0002)) == 0xffff0001feff0002
    assert int(QuadBitMaskNative((1 << quad_num_bits) -
                                 1)) == (1 << quad_num_bits) - 1
def test_bitmask_overflow():
    with pytest.raises(OverflowError):
        DoubleBitMaskNative(1 << double_num_bits)

    with pytest.raises(OverflowError):
        QuadBitMaskNative(1 << quad_num_bits)

    with pytest.raises(Exception):
        DoubleBitMaskNative(-1)
def test_bitmask_allon():
    assert BitMask16.all_on().is_all_on()
    assert BitMask32.all_on().is_all_on()
    assert BitMask64.all_on().is_all_on()
    assert DoubleBitMaskNative.all_on().is_all_on()
    assert QuadBitMaskNative.all_on().is_all_on()

    assert DoubleBitMaskNative((1 << double_num_bits) - 1).is_all_on()
    assert QuadBitMaskNative((1 << quad_num_bits) - 1).is_all_on()
def test_bitmask_pickle():
    assert pickle.loads(pickle.dumps(BitMask16(0), -1)).is_zero()

    mask1 = BitMask16(123)
    data = pickle.dumps(mask1, -1)
    mask2 = pickle.loads(data)
    assert mask1 == mask2

    assert pickle.loads(pickle.dumps(DoubleBitMaskNative(0), -1)).is_zero()

    mask1 = DoubleBitMaskNative(0xffff0001)
    data = pickle.dumps(mask1, -1)
    mask2 = pickle.loads(data)
    assert mask1 == mask2
def test_bitmask_nonzero():
    assert not BitMask16()
    assert not BitMask32()
    assert not BitMask64()
    assert not DoubleBitMaskNative()
    assert not QuadBitMaskNative()
from panda3d.core import BitMask16, BitMask32, BitMask64
from panda3d.core import DoubleBitMaskNative, QuadBitMaskNative
import pickle
import pytest

double_num_bits = DoubleBitMaskNative.get_max_num_bits()
quad_num_bits = QuadBitMaskNative.get_max_num_bits()


def test_bitmask_type():
    assert BitMask16.get_class_type().name == "BitMask16"


def test_bitmask_allon():
    assert BitMask16.all_on().is_all_on()
    assert BitMask32.all_on().is_all_on()
    assert BitMask64.all_on().is_all_on()
    assert DoubleBitMaskNative.all_on().is_all_on()
    assert QuadBitMaskNative.all_on().is_all_on()

    assert DoubleBitMaskNative((1 << double_num_bits) - 1).is_all_on()
    assert QuadBitMaskNative((1 << quad_num_bits) - 1).is_all_on()


def test_bitmask_nonzero():
    assert not BitMask16()
    assert not BitMask32()
    assert not BitMask64()
    assert not DoubleBitMaskNative()
    assert not QuadBitMaskNative()