def check_deriv05(): # Problem with names s = """ eversion(battery, mcdp { provides r = Nat: 5 battery = instance mcdp { requires r = Nat :2 } r required by battery <= Nat: 3 }) """ ex = "Function 'r' already exists in the big ndp" assert_parse_ndp_semantic_error(s, ex) s = """ eversion(battery, mcdp { requires r = Nat: 5 battery = instance mcdp { provides r = Nat :2 } r provided by battery >= Nat: 3 }) """ ex = "Resource 'r' already exists in the big ndp" assert_parse_ndp_semantic_error(s, ex)
def check_lang104(): # TODO: rename s = """mcdp { variable v1 [Nat] c1 = Nat: 2 undef = v1 + c1 }""" assert_parse_ndp_semantic_error(s, 'truly ambiguous')
def check_lang105(): # TODO: rename s = """mcdp { provides f [Nat] requires r [Nat] x = f + r }""" e = 'either as a functionality or as a resource' assert_parse_ndp_semantic_error(s, e)
def check_lang89j(): # TODO: rename s = """ mcdp { provides f [m] requires r [Nat] required r >= floor(provided f) / 5 m } """ assert_parse_ndp_semantic_error(s, "floor() is not Scott-continuous")
def check_variables05(): # This causes an error because it conflicts with r s = """ mcdp { provides f [Nat] requires r [Nat] variable r [Nat] } """ assert_parse_ndp_semantic_error(s, 'Conflict')
def check_lang83(): # TODO: rename """ Loss of monotonicty. """ s = """ mcdp { provides f1 [dimensionless] provides f2 [dimensionless] requires r [dimensionless] required r >= f1 - f2 } """ print assert_parse_ndp_semantic_error(s)
def check_lang89r(): # TODO: rename """ Conversion not possible """ s = """ mcdp { provides f [m] requires r1 [Nat] # cannot convert Nat to m requires r2 [m] provided f <= max(required r1, required r2) } """ expect = 'Could not convert R[m] to' # N might change to BB assert_parse_ndp_semantic_error(s, expect)
def check_variables07(): # This causes an error because it conflicts with a # name used for resource s = """ mcdp { provides f [Nat] requires r [Nat] x = provided f variable x [Nat] } """ print assert_parse_ndp_semantic_error(s, 'already used as a resource')
def check_variables06(): # This causes an error because it is repeated s = """ mcdp { provides f [Nat] requires r [Nat] variable x [Nat] variable x [Nat] } """ expect = "Variable name 'x' already used once" print assert_parse_ndp_semantic_error(s, expect)
def check_variables08(): # This causes an error because it conflicts with a # name used for functionality s = """ mcdp { provides f [Nat] requires r [Nat] x = required r variable x [Nat] } """ print assert_parse_ndp_semantic_error(s, 'already used as a functionality')
def check_lang_namedtuple4(): s = """ mcdp { provides capability [ product(weight: g, energy: J) ] (capability).weight <= 1g # (capability).energy <= 1J } """ assert_parse_ndp_semantic_error(s, contains="Missing value 'energy'")
def check_lang89r(): # TODO: rename """ Conversion not possible """ s = """ mcdp { provides f [m] requires r1 [Nat] # cannot convert Nat to m requires r2 [m] provided f <= max(required r1, required r2) } """ expect = 'Could not convert R[m] to N' assert_parse_ndp_semantic_error(s, expect)
def check_deriv04(): s = """ eversion(not_existent, mcdp { battery = instance mcdp { requires mass [g] provides energy [J] specific_energy = 0.1 J / g provided energy <= required mass * specific_energy } mass required by battery <= 2 g energy provided by battery >= 5 J }) """ ex = "Could not find 'not_existent' as a sub model" assert_parse_ndp_semantic_error(s, ex)
def check_lang114(): # TODO: rename s = """ mcdp { provides f [Nat] requires r [Nat] required r >= required r } """ expect = 'Both sides are functionalities.' assert_parse_ndp_semantic_error(s, expect) s = """ mcdp { provides f [Nat] requires r [Nat] provided f >= provided f } """ expect = 'Both sides are resources.' assert_parse_ndp_semantic_error(s, expect) s = """ mcdp { provides f [Nat] requires r [Nat] provided f >= required r } """ expect = 'Functionality and resources are on the wrong side of the inequality.' assert_parse_ndp_semantic_error(s, expect)
def check_tuples9(): """ unknown name """ s = (""" mcdp { requires r [ product(a:J, b:g) ] take(required r, x) >= 1 J } """) assert_parse_ndp_semantic_error(s) """ out of bounds """ s = """ mcdp { requires r [ J x g] take(required r, 2) >= 1 J } """ assert_parse_ndp_semantic_error(s)
def check_variables14(): s = """ mcdp { provides z [Nat] variable x, y [Nat] x + y >= ceil(sqrt(x)) + ceil(sqrt(y)) + provided z requires x, notfound } """ expect = "Could not find required resource expression 'notfound'" print assert_parse_ndp_semantic_error(s, expect) s = """ mcdp { variable x [Nat] x >= Nat: 0 requires x [Nat] } """ expect = "The name 'x' is already used by a variable" print assert_parse_ndp_semantic_error(s, expect) s = """ mcdp { variable x [Nat] x <= Nat: 0 provides x [Nat] } """ expect = "The name 'x' is already used by a variable" print assert_parse_ndp_semantic_error(s, expect)