Skip to content

Commit

Permalink
added howto + test
Browse files Browse the repository at this point in the history
  • Loading branch information
goto40 committed Oct 17, 2018
1 parent 981b0ed commit b46d3bd
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
13 changes: 13 additions & 0 deletions docs/howto.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,16 @@ concrete DSL. These DLS reference each other.

* Unittest
[tests/functional/test_metamodel/test_multi_metamodel_refs.py](https://github.com/igordejanovic/textX/blob/master/tests/functional/test_metamodel/test_multi_metamodel_refs.py),

## Enable and distinguish float and int values for attributes

* Model text:

x1 = 1
x2 = -1
y1 = 1.0
y2 = 1.1e-2
y3 = -1.1e+2

* Unittest
[tests/functional/examples/test_modeling_float_int_variables.py](https://github.com/igordejanovic/textX/blob/master/tests/functional/examples/test_modeling_float_int_variables.py),
39 changes: 39 additions & 0 deletions tests/functional/examples/test_modeling_float_int_variables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from textx import metamodel_from_str


def test_int_and_floats():
grammar = '''
Model: vars+=Var;
Var: name=ID '=' value=Val;
Val: O_FLOAT|O_INT; // order matters: float first!
O_INT: intVal=MYINT;
O_FLOAT: floatVal=MYFLOAT;
MYINT: /\-?\d+/;
MYFLOAT: /\-?\d+.\d+([eE][-+]?\d+)?/;
'''
model_text = '''
x1 = 1
x2 = -1
y1 = 1.0
y2 = 1.1e-2
y3 = -1.1e+2
'''

mm = metamodel_from_str(grammar)
mm.register_obj_processors({
"MYINT": lambda x: int(x),
"MYFLOAT": lambda x: float(x)
})
m = mm.model_from_str(model_text)

assert 'O_INT' == m.vars[0].value.__class__.__name__
assert 'O_INT' == m.vars[1].value.__class__.__name__
assert 'O_FLOAT' == m.vars[2].value.__class__.__name__
assert 'O_FLOAT' == m.vars[3].value.__class__.__name__
assert 'O_FLOAT' == m.vars[4].value.__class__.__name__

assert 1 == m.vars[0].value.intVal
assert -1 == m.vars[1].value.intVal
assert abs(1.0 - m.vars[2].value.floatVal) < 1e-5
assert abs(1.1e-2 - m.vars[3].value.floatVal) < 1e-5
assert abs(-1.1e+2 - m.vars[4].value.floatVal) < 1e-5

0 comments on commit b46d3bd

Please sign in to comment.