Skip to content

Composition operators examples

Example: composition operator first_of

OSC2 code: composition operator first_of
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

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

scenario vehicle.two_trucks:
    truck1: box_truck
    truck2: box_truck
    truck1_path: internal_road
    truck2_path: internal_road
    truck1_drive_duration: time
    truck2_wait_duration: time
    truck2_startup_duration: time
    truck2_drive_duration: time
    event passed_meeting
    event truck1_stopped


    do first_of:
        parallel(overlap: any):
            truck1_drive: truck1.drive(duration: truck1_drive_duration) with:
                along(truck1_path)

            serial:
                truck2_wait: truck2.drive(duration: truck2_wait_duration) with:
                    along(truck2_path)
                    speed(0kph)
                truck2_startup: truck2.drive(duration: truck2_startup_duration)
                truck2_drive: truck2.drive(duration: truck2_drive_duration) with:
                    speed([10kph..15kph], at: start)
                    avoid_collisions(false)
        serial:
            wait @passed_meeting
            log_info("truck1 passed meeting point.")
        serial:
            wait @truck1_stopped
            log_info("truck1 stopped before meeting point.")


extend top.main:
    do sut.car.two_trucks(duration: 3s)

Example: composition operator parallel

OSC2 code: composition operator parallel
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

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

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


extend top.main:
    do p1: parallel(overlap:equal):
        car1.drive()
        environment.weather(kind: clear)

Example: composition operator parallel() used to describe consecutive actions

OSC2 code: composition operator parallel() used to describe consecutive actions
import "$FTX_BASIC/exe_platforms/sumo_ssp/config/sumo_config.osc"

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

extend top.main:
    car1: vehicle
    car2: vehicle


extend top.main:
    do s1: serial:
        p1: parallel(overlap:equal):
            car1.drive()
            environment.weather(kind: clear)
        p2: parallel(overlap:equal):
            car1.drive()
            environment.weather(kind: rain)

Example: primacy of first scenario in parallel()

OSC2 code: primacy of first scenario in parallel()
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.cut_in:
    i:int
scenario sut.rainstorm:
    i:int


scenario sut.cut_in_with_rain:
    do parallel(overlap:equal):
        cut_in()
        rainstorm()

Example: overlap:any

OSC2 code: overlap:any
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.cut_in:
    i:int
scenario sut.rainstorm:
    i:int


scenario sut.cut_in_with_rain:
    do parallel(overlap:any):
        rainstorm()
        cut_in()

Example: composition operator serial()

OSC2 code: composition operator serial()
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 top.first_scenario:
    car1: vehicle

scenario top.second_scenario:
    car1: vehicle


scenario sut.my_scenario:
    do serial():
        fs: top.first_scenario()
        w1: wait elapsed([3..5]second)
        ss: top.second_scenario()