Skip to content

Defining constraints examples

Example: fully random example

OSC2 code: fully random
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)


extend top.main:
    tolerance: int

Example: fully directed example

OSC2 code: fully directed
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:
    my_speed: speed


    keep(my_speed == 50kph) # my_speed is set to 50 kph

Example: constrained random example

OSC2 code: constrained random
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:
    my_speed: speed


    keep(my_speed in [30..80]kph) # my_speed is restricted to a range

Example: simple Boolean constraint

OSC2 code: simple Boolean constraint
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:


    my_speed: speed with:
        keep(it in [30..80]kph)

Example: simple Boolean constraint with 'in'

OSC2 code: simple Boolean constraint with 'in'
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)


enum my_driving_style: [aggressive, assertive, normal, timid]

struct misc:
    dist: length with:
        keep(it in [2..4]m)
    i: int with:
        keep(it in [-1..1])

    ms: my_driving_style with:
        keep(it in [assertive, timid])

Example: compound Boolean constraint example 1

OSC2 code: compound Boolean constraint example 1
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:
    lawful_driver: bool
    legal_speed: speed
    current_speed: speed


    keep(lawful_driver => (current_speed <= legal_speed))

Example: compound Boolean constraint example 2

OSC2 code: compound Boolean constraint example 2
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:
    x: uint
    y: uint


    # both constraint expressions must evaluate to true
    keep(x <= 3 and x > y)

    # at least one constraint expression must evaluate to true
    keep(x <= 3 or x > y)

    # if the first expression evaluates to true, the second one must
    # also evaluate to true
    keep((x <= 3) => (x > y))

Example: list constraint

OSC2 code: list constraint
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)


actor my_car_convoy:
    first_car: vehicle
    cars: list of vehicle

    # the list will have between 2 and 10 items
    # the first item is first_car
    keep(soft cars.size() <= 10)
    keep(soft cars.size() >=  2)
    keep(cars[0] == first_car) # list indexing

Example: hard constraint

OSC2 code: hard constraint
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:


    current_speed: speed with:
        keep(it == 25kph)

Example: soft constraint example 1

OSC2 code: soft constraint example 1
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

scenario sut.scenario1:


    color: car_color with:
        keep(soft it!= green)

Example: soft with compound constraints

OSC2 code: soft with compound constraints
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    a: int
    b: int


    keep(soft a == 1 and b == 0)
    keep(soft a == 10)


    do sut.car.drive(duration: 5s)

Example: using soft when passing parameters

OSC2 code: using soft when passing parameters
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"
    set min_test_time = 0second


scenario top.foo:
  a: int

extend top.main:
  do foo(a: soft 123)

  on @start:
    call logger.log_info("foo.a: $(label(foo).a)")

Example: default constraints

OSC2 code: default constraints
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:

    do sut.car.drive(duration: 5s)


scenario sut.scenario1:
    b: uint
    c: uint

    keep(default b == 10)
    keep(default c == 20)

    keep(b == 1 and c == 2)      # contradiction
    keep(soft b == 1 and c == 2) # b and c get default values

    keep(b > 20) # contradiction
    keep(b > 5)  # b gets 10

    keep(b in [12..18]) # b gets 16
    keep(b == 7) # b gets 7
    keep(b == c) # b and c get 20

    do log_info("### b: $(b); c: $(c)")

Example: default constraint

OSC2 code: default constraint example
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"


scenario vehicle.foo:
    x: int with:
        keep(default it == 0)
    y: int with:
        keep(it!= x)


extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)

Example: soft constraint example 2

OSC2 code: soft constraint example 2
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)


scenario vehicle.foo:
    x: int with:
        keep(soft it == 0)
    y: int with:
        keep(it!= x)

Example: remove_default() constraint

OSC2 code: remove_default() constraint
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

extend test_config:
    set map = "$FTX_PACKAGES/maps/hooder.xodr"

extend top.main:
    do sut.car.drive(duration: 5s)


scenario vehicle.foo:
    x: int with:
        keep(default it == 0)
    y: int with:
        keep(it!= x)
    do drive(duration: 5s)

extend vehicle.foo:
    remove_default(x)
    keep(y == 0)


## Example: random distribution method examples

```msdl title="OSC2 code: random distribution method examples"

Example: user-defined distribution method example

OSC2 code: user-defined distribution method example