"""Tests based off of known examples."""

import proquint
import pytest


examples = [
    # Various single-bit data
    (1, 32, "babab-babad"),
    (2, 32, "babab-babaf"),
    (4, 32, "babab-babah"),
    (8, 32, "babab-babam"),
    (16, 32, "babab-babib"),
    (32, 32, "babab-babob"),
    (64, 32, "babab-badab"),
    (128, 32, "babab-bafab"),
    (256, 32, "babab-bahab"),
    (512, 32, "babab-bamab"),
    (1024, 32, "babab-bibab"),
    (2048, 32, "babab-bobab"),
    (4096, 32, "babab-dabab"),
    (8192, 32, "babab-fabab"),
    (16384, 32, "babab-habab"),
    (32768, 32, "babab-mabab"),
    (65536, 32, "babad-babab"),
    (131072, 32, "babaf-babab"),
    (262144, 32, "babah-babab"),
    (524288, 32, "babam-babab"),
    (1048576, 32, "babib-babab"),
    (2097152, 32, "babob-babab"),
    (4194304, 32, "badab-babab"),
    (8388608, 32, "bafab-babab"),
    (16777216, 32, "bahab-babab"),
    (33554432, 32, "bamab-babab"),
    (67108864, 32, "bibab-babab"),
    (134217728, 32, "bobab-babab"),
    (268435456, 32, "dabab-babab"),
    (536870912, 32, "fabab-babab"),
    (1073741824, 32, "habab-babab"),
    (2147483648, 32, "mabab-babab"),
    # A random value
    (3232235536, 32, "safom-babib"),
]


@pytest.mark.parametrize("val,width,qint", examples)
def test_decode_examples(val, width, qint):
    assert proquint.Proquint.decode(qint) == val, f"qint {qint} did not decode"


@pytest.mark.parametrize("val,width,qint", examples)
def test_encode_examples(val, width, qint):
    encoded_qint = proquint.Proquint.encode(val, width)
    decoded_val = proquint.Proquint.decode(encoded_qint)
    assert (
        encoded_qint == qint
    ), f"did not encode {val} to {qint}; got {encoded_qint} ({decoded_val})"

# Previously failed test values -
# 4294967296
# 18446744073709551616
# 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
