import unittest
from unittest import SkipTest
from dds3 import par, calc_dd_table
from test_utils import assert_raises
class TestPar(unittest.TestCase):
def test_par_basic(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table)
self.assertTrue(isinstance(result, dict))
except RuntimeError:
raise SkipTest("Could not create valid DD table")
def test_par_vulnerable_none(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table, vulnerable=0)
self.assertTrue(isinstance(result, dict))
except RuntimeError:
raise SkipTest("Could not create valid DD table")
def test_par_vulnerable_ns(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table, vulnerable=2)
self.assertTrue(isinstance(result, dict))
except RuntimeError:
raise SkipTest("Could not create valid DD table")
def test_par_vulnerable_ew(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table, vulnerable=3)
self.assertTrue(isinstance(result, dict))
except RuntimeError:
raise SkipTest("Could not create valid DD table")
def test_par_invalid_vulnerable(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
except RuntimeError:
raise SkipTest("Could not create valid DD table")
assert_raises(ValueError, par, dd_table, vulnerable=4, match="vulnerable has invalid value")
def test_par_result_structure(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table)
self.assertTrue(isinstance(result, dict))
self.assertTrue("par_score" in result or "par_contracts_string" in result)
except RuntimeError:
raise SkipTest("Could not create valid DD table")
def test_par_requires_table_input(self) -> None:
assert_raises((KeyError, ValueError, RuntimeError, TypeError), par, {"invalid": "structure"})
def test_par_default_vulnerable_is_zero(self) -> None:
table_deal = {
"cards": [
[0x7FFC, 0, 0, 0],
[0, 0x7FFC, 0, 0],
[0, 0, 0x7FFC, 0],
[0, 0, 0, 0x7FFC],
],
}
try:
dd_table = calc_dd_table(table_deal)
result = par(dd_table)
self.assertTrue(isinstance(result, dict))
except RuntimeError:
raise SkipTest("Could not create valid DD table")
if __name__ == "__main__":
unittest.main()