Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

react immediately to wakeups #1736

Merged
merged 18 commits into from
Mar 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion data/scenarios/Challenges/Sokoban/_foresight/solution.sw
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def firstLeg =
pushUntilBarrier;

wait 4;
move;
moveUntilBlocked;
doN 5 (turn left; moveUntilBlocked);

turn right;
Expand Down
1 change: 0 additions & 1 deletion data/scenarios/Challenges/_combo-lock/solution.sw
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ def moveToLock =
end;

def cycleCombos = \n.
wait 1;
entityNorth <- scan north;
let hasGate = case entityNorth (\_. false) (\x. x == "gate") in
if hasGate {
Expand Down
2 changes: 2 additions & 0 deletions data/scenarios/Testing/00-ORDER.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ Achievements
1341-command-count.yaml
1355-combustion.yaml
1379-single-world-portal-reorientation.yaml
1322-wait-with-instant.yaml
1598-detect-entity-change.yaml
1399-backup-command.yaml
1430-built-robot-ownership.yaml
1536-custom-unwalkable-entities.yaml
Expand Down
72 changes: 72 additions & 0 deletions data/scenarios/Testing/1322-wait-with-instant.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
version: 1
name: Using wait with instant
author: Karl Ostmo
description: |
Observe timing of (instant $ wait 1)
interspersed with other commands
creative: false
seed: 0
objectives:
- goal:
- |
Hare must win by three cells
condition: |
h <- robotnamed "hare";
hareloc <- as h {whereami};

t <- robotnamed "tortoise";
tortoiseloc <- as t {whereami};

let xDiff = fst hareloc - fst tortoiseloc in

return $ fst hareloc == 0 && xDiff == 3;
solution: |
noop;
robots:
- name: base
dir: [1, 0]
display:
invisible: true
devices:
- hourglass
- logger
- name: tortoise
system: true
display:
invisible: false
attr: green
dir: [1, 0]
program: |
move; move;
move; move;
move; move;
- name: hare
system: true
display:
invisible: false
attr: snow
dir: [1, 0]
program: |
instant (
move; move;
wait 1;
move; move;
wait 1;
move; move;
);
world:
dsl: |
{blank}
upperleft: [-6, 2]
offset: false
palette:
'.': [grass, erase]
'd': [dirt, erase]
'B': [grass, erase, base]
'T': [grass, erase, tortoise]
'H': [grass, erase, hare]
map: |
B.....d.
T.....d.
H.....d.
......d.
94 changes: 94 additions & 0 deletions data/scenarios/Testing/1598-detect-entity-change.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
version: 1
name: Entity change detection
author: Karl Ostmo
description: |
Ensure that a change to an entity can be observed
by a system robot within a single tick.

In this scenario, the base will first `swap` the
existing `dial (R)`{=entity} with a `dial (G)`{=entity},
then immediately `swap` again with a `dial (B)`{=entity}.

The system robot should be able to detect the presence
of the `dial (G)`{=entity} before it is `swap`ped a second time.
creative: false
seed: 0
objectives:
- goal:
- |
Turn the light green
condition: |
as base {has "flower"};
prerequisite:
not: blue_light
- id: blue_light
teaser: No blue light
optional: true
goal:
- |
Turn the light blue
condition: |
r <- robotnamed "lockbot";
as r {ishere "dial (B)"};
robots:
- name: base
dir: [1, 0]
display:
invisible: true
devices:
- hourglass
- fast grabber
- logger
- treads
inventory:
- [1, "dial (R)"]
- [1, "dial (G)"]
- [1, "dial (B)"]
- name: lockbot
system: true
display:
invisible: true
dir: [1, 0]
program: |
run "scenarios/Testing/_1598-detect-entity-change/setup.sw"
inventory:
- [1, flower]
solution: |
wait 2;
move;
move;
swap "dial (G)";
swap "dial (B)";
entities:
- name: "dial (R)"
display:
char: '•'
attr: red
description:
- A red dial
properties: [known, pickable]
- name: "dial (G)"
display:
char: '•'
attr: green
description:
- A green dial
properties: [known, pickable]
- name: "dial (B)"
display:
char: '•'
attr: blue
description:
- A blue dial
properties: [known, pickable]
world:
dsl: |
{blank}
upperleft: [-1, -1]
offset: false
palette:
'.': [grass, erase]
'B': [grass, erase, base]
'c': [grass, dial (R), lockbot]
map: |
B.c
17 changes: 17 additions & 0 deletions data/scenarios/Testing/_1598-detect-entity-change/setup.sw
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
def doUntilCorrect =
herenow <- ishere "dial (G)";
if herenow {
give base "flower";
} {
watch down;
wait 1000;
doUntilCorrect;
}
end;

def go =
instant $
doUntilCorrect;
end;

go;
25 changes: 25 additions & 0 deletions scripts/benchmark-against-ancestor.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash -xe

# Requires that the working tree be clean.

REFERENCE_COMMIT=${1:-HEAD~}

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd $SCRIPT_DIR/..

if git diff --quiet --exit-code
then
echo "Working tree is clean. Starting benchmarks..."
else
echo "Working tree is dirty! Quitting."
exit 1
fi

BASELINE_OUTPUT=baseline.csv

git checkout $REFERENCE_COMMIT

scripts/run-benchmarks.sh "--csv $BASELINE_OUTPUT"

git switch -
scripts/run-benchmarks.sh "--baseline $BASELINE_OUTPUT --fail-if-slower 3"
19 changes: 1 addition & 18 deletions scripts/benchmark-against-parent.sh
Original file line number Diff line number Diff line change
@@ -1,23 +1,6 @@
#!/bin/bash -xe

# Requires that the working tree be clean.

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd $SCRIPT_DIR/..

if git diff --quiet --exit-code
then
echo "Working tree is clean. Starting benchmarks..."
else
echo "Working tree is dirty! Quitting."
exit 1
fi

BASELINE_OUTPUT=baseline.csv

git checkout HEAD~

scripts/run-benchmarks.sh "--csv $BASELINE_OUTPUT"

git switch -
scripts/run-benchmarks.sh "--baseline $BASELINE_OUTPUT --fail-if-slower 3"
scripts/benchmark-against-ancestor.sh HEAD~
Loading
Loading