import unittest

from migen import *
from migen.test.support import SimCase


class ConstantCase(SimCase, unittest.TestCase):
    class TestBench(Module):
        def __init__(self):
            self.sigs = [
                (Signal(3), Constant(0), 0),
                (Signal(3), Constant(5), 5),
                (Signal(3), Constant(1, 2), 1),
                (Signal(3), Constant(-1, 7), 7),
                (Signal(3), Constant(0b10101)[:3], 0b101),
                (Signal(3), Constant(0b10101)[1:4], 0b10),
                (Signal(4), Constant(0b1100)[::-1], 0b0011),
            ]
            self.comb += [a.eq(b) for a, b, c in self.sigs]

    def test_comparisons(self):
        def gen():
            for s, l, v in self.tb.sigs:
                s = yield s
                self.assertEqual(
                    s, int(v),
                    "got {}, want {} from literal {}".format(
                        s, v, l))
        self.run_with(gen())