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)
Exemple #2
0
def check_lang104(): # TODO: rename
    s = """mcdp {
      variable v1 [Nat]
      c1 = Nat: 2
      undef = v1 + c1
    }"""
    
    assert_parse_ndp_semantic_error(s, 'truly ambiguous')
Exemple #3
0
def check_lang104():  # TODO: rename
    s = """mcdp {
      variable v1 [Nat]
      c1 = Nat: 2
      undef = v1 + c1
    }"""

    assert_parse_ndp_semantic_error(s, 'truly ambiguous')
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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")
Exemple #7
0
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')
Exemple #8
0
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)
Exemple #9
0
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")
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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')
Exemple #13
0
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)
Exemple #14
0
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')
Exemple #15
0
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'")
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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)