File: test_symtab.py

package info (click to toggle)
nmodl 0.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,992 kB
  • sloc: cpp: 28,492; javascript: 9,841; yacc: 2,804; python: 1,967; lex: 1,674; xml: 181; sh: 136; ansic: 37; makefile: 18; pascal: 7
file content (38 lines) | stat: -rw-r--r-- 1,472 bytes parent folder | download | duplicates (3)
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
# ***********************************************************************
# Copyright (C) 2018-2022 Blue Brain Project
#
# This file is part of NMODL distributed under the terms of the GNU
# Lesser General Public License. See top-level LICENSE file for details.
# ***********************************************************************

import io
from nmodl.dsl import ast, visitor, symtab

def test_symtab(ch_ast):
    v = symtab.SymtabVisitor()
    v.visit_program(ch_ast)
    s = ch_ast.get_symbol_table()
    m = s.lookup('m')
    assert m is not None
    assert m.get_name() == "m"
    assert m.has_all_properties(symtab.NmodlType.state_var | symtab.NmodlType.prime_name) is True

    mInf = s.lookup('mInf')
    assert mInf is not None
    assert mInf.get_name() == "mInf"
    assert mInf.has_any_property(symtab.NmodlType.range_var) is True
    assert mInf.has_any_property(symtab.NmodlType.local_var) is False

    variables = s.get_variables_with_properties(symtab.NmodlType.range_var, True)
    assert len(variables) == 2
    assert str(variables[0]) == "mInf [Properties : range assigned_definition]"


def test_visitor_python_io(ch_ast):
    lookup_visitor = visitor.AstLookupVisitor()
    eqs = lookup_visitor.lookup(ch_ast, ast.AstNodeType.DIFF_EQ_EXPRESSION)
    stream = io.StringIO()
    pv = visitor.NmodlPrintVisitor(stream)
    eqs[0].accept(pv)
    #  `del pv` is not required to have the ostream flushed
    assert stream.getvalue() == "m' = mInf-m"