aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/pyunit/dom/Expressions.py
blob: a7afb30baf419ffa8159e382f5ebd120f1677546 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from pathlib  import Path
from textwrap import dedent
from unittest import TestCase

from pyGHDL.dom.DesignUnit import Package

from pyGHDL.dom import Expression
from pyGHDL.dom.NonStandard       import Design, Document
from pyGHDL.dom.Symbol import SimpleObjectOrFunctionCallSymbol
from pyGHDL.dom.Object import Constant
from pyGHDL.dom.Expression import InverseExpression

if __name__ == "__main__":
    print("ERROR: you called a testcase declaration file as an executable module.")
    print("Use: 'python -m unitest <testcase module>'")
    exit(1)


class Expressions(TestCase):
    _root = Path(__file__).resolve().parent.parent

    def test_NotExpression(self):
        self._filename: Path = self._root / "{className}.vhdl".format(className=self.__class__.__name__)

        sourceCode = dedent("""\
            package package_1 is
              constant c0 : boolean := not true;
            end package;
            """)

        with self._filename.open(mode="w", encoding="utf-8") as file:
            file.write(sourceCode)

        design = Design()
        document = Document(self._filename)
        design.Documents.append(document)

        package: Package = design.Documents[0].Packages[0]
        item: Constant = package.DeclaredItems[0]
        default: Expression = item.DefaultExpression
        self.assertTrue(isinstance(default, InverseExpression))
        self.assertTrue(isinstance(default.Operand, SimpleObjectOrFunctionCallSymbol))
        self.assertTrue(default.Operand.SymbolName == "true")

    # def test_Aggregare(self):
    #     self._filename: Path = self._root / "{className}.vhdl".format(className=self.__class__.__name__)
    #
    #     sourceCode = dedent("""\
    #         package package_1 is
    #           constant c0 : integer_vector := (0, 1, 2); 0 =>);
    #           constant c1 : integer_vector := (0 => 0, 1 => 1, 2 => 2);
    #           constant c3 : integer_vector := (a => 0, b => 1, c => 2);
    #           constant c3 : integer_vector := (0 to 2 => 3, 3 to 4 => 2);
    #           constant c2 : integer_vector := (others => 0);
    #         end package;
    #         """)
    #
    #     with self._filename.open(mode="w", encoding="utf-8") as file:
    #         file.write(sourceCode)
    #
    #     design = Design()
    #     document = Document(self._filename)
    #     design.Documents.append(document)
    #
    #     package: Package = design.Documents[0].Packages[0]
    #     item: Constant = package.DeclaredItems[0]
    #     default: Expression = item.DefaultExpression
    #     self.assertTrue(isinstance(default, InverseExpression))
    #     self.assertTrue(isinstance(default.Operand, SimpleObjectOrFunctionCallSymbol))
    #     self.assertTrue(default.Operand.SymbolName == "true")