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