def no_newlines_before_unit(): s = '1\nm' with assert_raises(TestFailed): # does not work parse_wrap_check(s, Syntax.pint_unit_simple) with assert_raises(TestFailed): parse_wrap_check(s, Syntax.valuewithunit_number_with_units)
def check_comments01(): " Single quotes " parse_wrap_check("""'ciao'""", Syntax.comment_string_simple) parse_wrap_check(""" "ciao" """, Syntax.comment_string_simple) parse_wrap_check("""'ciao'""", Syntax.comment_fun) parse_wrap_check("""'ciao'""", Syntax.comment_res) parse_wrap_check("""'ciao'""", Syntax.comment_var)
def check_shortcut1(): x = parse_wrap_check('requires x, y, z [Nat] "comment"', Syntax.res_shortcut5) rnames = [_.value for _ in get_odd_ops(unwrap_list(x.rnames))] assert_equal(rnames, ['x','y','z']) s = parse_wrap_check('provides x, y, z [Nat] "comment"', Syntax.fun_shortcut5) rnames = [_.value for _ in get_odd_ops(unwrap_list(s.fnames))] assert_equal(rnames, ['x','y','z'])
def check_shortcut1(): x = parse_wrap_check('requires x, y, z [Nat] "comment"', Syntax.res_shortcut5) rnames = [_.value for _ in get_odd_ops(unwrap_list(x.rnames))] assert_equal(rnames, ['x', 'y', 'z']) s = parse_wrap_check('provides x, y, z [Nat] "comment"', Syntax.fun_shortcut5) rnames = [_.value for _ in get_odd_ops(unwrap_list(s.fnames))] assert_equal(rnames, ['x', 'y', 'z'])
def check_comments15(): s = "gravity = 9.8 m/s^2 'Gravity on Earth'" parse_wrap_check(s, Syntax.setname_constant) # We don't think that division is allowed # in definitely_constant_value s = '(9.8 m/s^2) / 6 dimensionless' assert_syntax_error(s, Syntax.definitely_constant_value) s = "constant gravity = (9.8 m/s^2) / 6 dimensionless 'Gravity on Earth'" parse_wrap_check(s, Syntax.setname_constant) pass
def check_addmake1(): parse_wrap_check( """ addmake(root: code mcdp_lang_tests.syntax_misc.f) mcdp {} """, Syntax.ndpt_addmake) ndp = parse_ndp( """ addmake(root: code mcdp_lang_tests.syntax_misc.f) mcdp {} """) assert len(ndp.make) == 1 assert ndp.make[0][0] == 'root' from mcdp_lang.eval_ndp_imp import ImportedFunction assert isinstance(ndp.make[0][1], ImportedFunction)
def check_poset_geq(): parse_wrap_check('a>=b>=c', Syntax.finite_poset_chain_geq) parse_wrap_check('a<=b<=c', Syntax.finite_poset_chain_leq) s = """ poset { a >= b >= c } """ P = parse_poset(s) assert len(P.elements) == 3
def check_lang89h(): # TODO: rename parse_wrap_check('Rcomp:1', Syntax.space_custom_value1) parse_wrap_check('Rcomp:1.2', Syntax.space_custom_value1) s = """ mcdp { requires r [Nat] required r >= ceil(Rcomp:1.2) } """ print s dp = parse_ndp(s).get_dp() print dp.repr_long() check_isinstance(dp, Constant)
def check_nat1(): parse_wrap_check('1', Syntax.integer_or_float) parse_wrap_check('2', Syntax.nat_constant2) parse_wrap_check('3', Syntax.definitely_constant_value) parse_wrap_check('4', Syntax.constant_value) eval_constant_same_exactly('5', 'Nat:5')
def check_rcomp1(): parse_wrap_check('1.05', SyntaxBasics.floatnumber) parse_wrap_check('2.05', Syntax.rcomp_constant) parse_wrap_check('3.05', Syntax.definitely_constant_value) parse_wrap_check('4.05', Syntax.constant_value) eval_constant_same_exactly('5.05', 'Rcomp:5.05')
def special_letters_identifiers(): examples = [] # ustring, for identifier, letter in greek_letters_utf8.items(): if letter == 'π': continue example = (identifier, letter) examples.append(example) for num, subscript in subscripts_utf8.items(): identifier = 'x_%d' % num appears = 'x' + subscript example = (identifier, appears) examples.append(example) idn = SyntaxIdentifiers.get_idn() for identifier, appears in examples: res = parse_wrap_check(appears, idn) #print('- %r %r -> %r' % (identifier, appears, res)) # x = ' %s %s -> %s' % (identifier.decode('utf8'), # appears.decode('utf8'), # res.decode('utf8')) #print(x) assert_equal(res, identifier)
def check_spaces4(): parse_wrap_check('<5mm, 5mm, 5mm>', Syntax.tuple_of_constants) parse_wrap_check('step_up1 | {5 V} | {1.5 V} | 5 $ | 20 g | <5mm, 5mm, 5mm>', Syntax.catalogue_row) parse_ndp(""" catalogue { provides voltage [℘(V)] requires v_in [℘(V)] requires cost [$] requires mass [g] requires shape [m x m x m] step_up1 | {5 V} | {1.5 V} | 5 $ | 20 g | <5mm, 5mm, 5mm> step_up2 | {12 V} | {1.5 V} | 10 $ | 20 g | <5mm, 5mm, 5mm> step_up2 | {5 V, 12 V} | {1.5 V} | 10 $ | 20 g | <5mm, 5mm, 5mm> } """)
def check_lang89(): # TODO: rename parse_wrap_check('provided f, provided f, provided f', Syntax.rvalue_generic_op_ops) parse_wrap_check('required f, required f, required f', Syntax.fvalue_generic_op_ops) parse_wrap_check('op1(required f, required f, required f)', Syntax.fvalue_generic_op) parse_wrap_check('op1(provided f, provided f, provided f)', Syntax.rvalue_generic_op)
def check_comments02(): """ Triple quotes """ parse_wrap_check(""" '''ciao\n''' """, Syntax.comment_string_complex) parse_wrap_check(''' """ciao""" ''', Syntax.comment_string_complex) parse_wrap_check(""" '''ciao\n''' """, Syntax.comment_model) parse_wrap_check(''' """ciao""" ''', Syntax.comment_model) assert_syntax_error(""" '''ciao\n''' """, Syntax.comment_fun) assert_syntax_error(""" '''ciao\n''' """, Syntax.comment_var) assert_syntax_error(""" '''ciao\n''' """, Syntax.comment_res)
def check_lang_singlespace1(): # SingleElementPosetKeyword = namedtuplewhere('SingleElementPosetKeyword', 'keyword') # SingleElementPosetTag = namedtuplewhere('SingleElementPosetTag', 'value') # SingleElementPoset = namedtuplewhere('SingleElementPoset', 'keyword tag') p = parse_wrap_check('S(singleton)', Syntax.space_single_element_poset, CDP.SingleElementPoset(CDP.SingleElementPosetKeyword('S'), CDP.SingleElementPosetTag(value='singleton'))) print recursive_print(p)
def check_lang_singlespace1(): # SingleElementPosetKeyword = namedtuplewhere('SingleElementPosetKeyword', 'keyword') # SingleElementPosetTag = namedtuplewhere('SingleElementPosetTag', 'value') # SingleElementPoset = namedtuplewhere('SingleElementPoset', 'keyword tag') p = parse_wrap_check( 'S(singleton)', Syntax.space_single_element_poset, CDP.SingleElementPoset(CDP.SingleElementPosetKeyword('S'), CDP.SingleElementPosetTag(value='singleton'))) print recursive_print(p)
def power1(): parse_wrap_check('x^2', Syntax.rvalue_power_expr) parse_wrap_check('²', Syntax.superscripts) parse_wrap_check('x²', Syntax.rvalue_power_expr) parse_ndp(""" mcdp { provides f [dimensionless] requires r [dimensionless] (provided f)² <= required r } """)
def check_lang9_max(): parse_wrap_check("""provides x [dimensionless]""", Syntax.fun_statement) parse_wrap_check("""requires x [dimensionless]""", Syntax.res_statement) parse_wrap_check( """ provides x [dimensionless] requires r [dimensionless] """, Syntax.simple_dp_model_stats) parse_wrap_check( """dp { provides x [dimensionless] requires r [dimensionless] implemented-by load SimpleNonlinearity1 }""", Syntax.ndpt_simple_dp_model) # parse_wrap(Syntax.rvalue_binary, 'max(f, g)') parse_wrap(Syntax.rvalue, 'max(f, g)') parse_wrap(Syntax.constraint_expr_geq, 'hnlin.x >= max(f, g)')
def check_comments16(): parse_wrap_check('1 g', Syntax.definitely_constant_value) parse_wrap_check("'Number of constants'", Syntax.comment_con) parse_wrap_check("axx = 1.2 g", Syntax.setname_rvalue) parse_wrap_check("axx", Syntax.constant_name) # expr = Syntax.constant_name + Syntax.EQ + Syntax.definitely_constant_value # parse_wrap_check("axx = 1.2 g", expr) # def parse(t): # return CDPLanguage.SetNameConstant(t[0], t[1], t[2], t[3]) # expr2 = sp(expr, parse) # parse_wrap_check("axx = 1.2 g", expr2) parse_wrap_check("axx = 1.2 g", Syntax.setname_constant) parse_wrap_check("a = 1 g", Syntax.setname_constant) parse_wrap_check("a = 1 g 'Number of constants'", Syntax.setname_constant) parse_wrap_check("constant a = 1 g 'Number of constants'", Syntax.setname_constant) parse_wrap_check( "constant gravity = (9.8 m/s^2) / 6 dimensionless 'Gravity on Earth'", Syntax.setname_constant) s = """ mcdp { ' One example of documentation for the entire MCDP.' requires mass [kg] 'The mass that must be transported.' provides capacity [kWh] 'The capacity of the battery.' constant a = 1 g 'Number of constants' constant gravity = (9.8 m/s^2) / 6 dimensionless 'Gravity on Earth' variable x, y [Nat] 'constant ' }""" parse_ndp(s)
def check_namedproduct1(): parse_wrap_check("required in", Syntax.fvalue_new_resource2) parse_wrap_check("required in", Syntax.fvalue_operand) parse_wrap_check("required in", Syntax.fvalue) parse_wrap_check("(required in).dc", Syntax.fvalue_label_indexing3) parse_wrap_check("((required in).dc).connector", Syntax.fvalue_label_indexing3) parse_wrap_check( "((required in).dc).connector >= `USB_connectors: USB_Std_A", Syntax.line_expr)
def check_spaces3(): # changename parse_wrap_check('instance simple_cell', Syntax.dpinstance_from_type) parse_wrap_check('sub cell = instance simple_cell', Syntax.setname_ndp_instance1)
def p(s): c = Context() r = parse_wrap_check(s, Syntax.space) _x = eval_space(r, c)
def check_deriv02(): parse_wrap_check('deriv(a, `b)', Syntax.template_deriv)
def check_lang112(): # TODO: rename parse_wrap_check("required r >= required r", Syntax.constraint_invalid1a) parse_wrap_check("provided f >= provided f", Syntax.constraint_invalid2a) parse_wrap_check("required r <= required r", Syntax.constraint_invalid1b) parse_wrap_check("provided f <= provided f", Syntax.constraint_invalid2b) parse_wrap_check("required r >= required r", Syntax.line_expr) parse_wrap_check("provided f >= provided f", Syntax.line_expr) parse_wrap_check("required r <= required r", Syntax.line_expr) parse_wrap_check("provided f <= provided f", Syntax.line_expr) parse_wrap_check("f required by ob1 >= r provided by ob2", Syntax.constraint_invalid3a) parse_wrap_check("r provided by ob1 <= f required by ob1", Syntax.constraint_invalid3b) parse_wrap_check("f required by ob1 >= r provided by ob2", Syntax.line_expr) parse_wrap_check("r provided by ob1 <= f required by ob1", Syntax.line_expr) parse_wrap_check("provided f >= required r", Syntax.constraint_invalid3a) parse_wrap_check("required r <= provided f", Syntax.constraint_invalid3b) parse_wrap_check("provided f >= required r", Syntax.line_expr) parse_wrap_check("required r <= provided f", Syntax.line_expr)
def check_spaces_superscript1(): parse_wrap_check('m^2', Syntax.space_pint_unit) # ¹²³⁴⁵⁶⁷⁸⁹ parse_wrap_check('m¹', Syntax.space_pint_unit) parse_wrap_check('m²', Syntax.space_pint_unit) parse_wrap_check('m³', Syntax.space_pint_unit) parse_wrap_check('m⁴', Syntax.space_pint_unit) parse_wrap_check('m⁵', Syntax.space_pint_unit) parse_wrap_check('m⁶', Syntax.space_pint_unit) parse_wrap_check('m⁷', Syntax.space_pint_unit) parse_wrap_check('m⁸', Syntax.space_pint_unit) parse_wrap_check('m⁹', Syntax.space_pint_unit) eval_rvalue_as_constant('9.81 m/s²')
def check_comments16(): parse_wrap_check('1 g', Syntax.definitely_constant_value) parse_wrap_check("'Number of constants'", Syntax.comment_con) parse_wrap_check("axx = 1.2 g", Syntax.setname_rvalue) parse_wrap_check("axx", Syntax.constant_name) expr=Syntax.constant_name + Syntax.EQ + Syntax.definitely_constant_value parse_wrap_check("axx = 1.2 g", expr) def parse(t): return CDPLanguage.SetNameConstant(t[0], t[1], t[2]) expr2 = sp(expr, parse) parse_wrap_check("axx = 1.2 g", expr2) parse_wrap_check("axx = 1.2 g", Syntax.setname_constant) parse_wrap_check("a = 1 g", Syntax.setname_constant) parse_wrap_check("a = 1 g 'Number of constants'", Syntax.setname_constant) parse_wrap_check("constant a = 1 g 'Number of constants'", Syntax.setname_constant) parse_wrap_check( "constant gravity = (9.8 m/s^2) / 6 dimensionless 'Gravity on Earth'", Syntax.setname_constant) s = """ mcdp { ' One example of documentation for the entire MCDP.' requires mass [kg] 'The mass that must be transported.' provides capacity [kWh] 'The capacity of the battery.' constant a = 1 g 'Number of constants' constant gravity = (9.8 m/s^2) / 6 dimensionless 'Gravity on Earth' variable x, y [Nat] 'constant ' }""" parse_ndp(s)