Skip to content

Commit 12c7db1

Browse files
queen-attack: predefined errors (#247)
1 parent 61ff770 commit 12c7db1

4 files changed

Lines changed: 15 additions & 10 deletions

File tree

exercises/practice/queen-attack/.meta/example.factor

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
USING: accessors kernel locals math ;
22
IN: queen-attack
33

4+
ERROR: row-not-on-board ;
5+
ERROR: column-not-on-board ;
6+
47
TUPLE: queen row column ;
58

69
:: <queen> ( row column -- queen )
7-
row 0 < [ "row not positive" throw ] when
8-
row 7 > [ "row not on board" throw ] when
9-
column 0 < [ "column not positive" throw ] when
10-
column 7 > [ "column not on board" throw ] when
10+
row 0 < row 7 > or [ row-not-on-board ] when
11+
column 0 < column 7 > or [ column-not-on-board ] when
1112
row column queen boa ;
1213

1314
:: can-attack? ( queen1 queen2 -- ? )

exercises/practice/queen-attack/.meta/generator.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ function gen_test_case(case)
1010
column = Int(pos["column"])
1111
expected = case["expected"]
1212
if expected isa AbstractDict
13-
msg = expected["error"]
14-
return """[ $(row) $(column) <queen> ]\n[ "$(escape_factor(msg))" = ] must-fail-with"""
13+
pred = occursin("row", expected["error"]) ?
14+
"row-not-on-board?" : "column-not-on-board?"
15+
return """[ $(row) $(column) <queen> ]\n[ $(pred) ] must-fail-with"""
1516
else
1617
return """[ $(row) $(column) <queen> drop ] must-not-fail"""
1718
end

exercises/practice/queen-attack/queen-attack/queen-attack-tests.factor

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ STOP-HERE
88

99
"queen must have positive row" description
1010
[ -2 2 <queen> ]
11-
[ "row not positive" = ] must-fail-with
11+
[ row-not-on-board? ] must-fail-with
1212

1313
"queen must have row on board" description
1414
[ 8 4 <queen> ]
15-
[ "row not on board" = ] must-fail-with
15+
[ row-not-on-board? ] must-fail-with
1616

1717
"queen must have positive column" description
1818
[ 2 -2 <queen> ]
19-
[ "column not positive" = ] must-fail-with
19+
[ column-not-on-board? ] must-fail-with
2020

2121
"queen must have column on board" description
2222
[ 4 8 <queen> ]
23-
[ "column not on board" = ] must-fail-with
23+
[ column-not-on-board? ] must-fail-with
2424

2525
"cannot attack" description
2626
{ f } [ 2 4 <queen> 6 6 <queen> can-attack? ] unit-test

exercises/practice/queen-attack/queen-attack/queen-attack.factor

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
USING: kernel ;
22
IN: queen-attack
33

4+
ERROR: row-not-on-board ;
5+
ERROR: column-not-on-board ;
6+
47
: <queen> ( row column -- queen )
58
"unimplemented" throw ;
69

0 commit comments

Comments
 (0)