Skip to content

Commit 841e9b3

Browse files
committed
Update draw tests and fix drawbuffer_len never being cleared
1 parent b569cf1 commit 841e9b3

File tree

2 files changed

+125
-24
lines changed

2 files changed

+125
-24
lines changed

src/vm/instructions.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,7 @@ impl InstructionTrait for DrawFlush {
743743
InstructionResult::Ok
744744
};
745745
state.drawbuffer.clear();
746+
state.drawbuffer_len = 0;
746747
result
747748
}
748749
}

src/vm/mod.rs

Lines changed: 124 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2816,35 +2816,135 @@ mod tests {
28162816

28172817
#[test]
28182818
fn test_draw() {
2819+
let tests = [
2820+
("draw clear 10 20 30", DrawCommand::Clear {
2821+
r: 10,
2822+
g: 20,
2823+
b: 30,
2824+
}),
2825+
("draw color 10 20 30 40", DrawCommand::Color {
2826+
r: 10,
2827+
g: 20,
2828+
b: 30,
2829+
a: 40,
2830+
}),
2831+
("draw col %[black]", DrawCommand::Color {
2832+
r: 0,
2833+
g: 0,
2834+
b: 0,
2835+
a: 255,
2836+
}),
2837+
("draw col %[royal]", DrawCommand::Color {
2838+
r: 0x41,
2839+
g: 0x69,
2840+
b: 0xe1,
2841+
a: 0xff,
2842+
}),
2843+
("draw stroke 5", DrawCommand::Stroke { width: 5 }),
2844+
("draw line 10 20 30 40", DrawCommand::Line {
2845+
x1: 10,
2846+
y1: 20,
2847+
x2: 30,
2848+
y2: 40,
2849+
}),
2850+
("draw rect 10 20 30 40", DrawCommand::Rect {
2851+
x: 10,
2852+
y: 20,
2853+
width: 30,
2854+
height: 40,
2855+
fill: true,
2856+
}),
2857+
("draw lineRect 10 20 30 40", DrawCommand::Rect {
2858+
x: 10,
2859+
y: 20,
2860+
width: 30,
2861+
height: 40,
2862+
fill: false,
2863+
}),
2864+
("draw poly 10 20 30 40 359", DrawCommand::Poly {
2865+
x: 10,
2866+
y: 20,
2867+
sides: 30,
2868+
radius: 40,
2869+
rotation: 359,
2870+
fill: true,
2871+
}),
2872+
("draw linePoly 10 20 30 40 359", DrawCommand::Poly {
2873+
x: 10,
2874+
y: 20,
2875+
sides: 30,
2876+
radius: 40,
2877+
rotation: 359,
2878+
fill: false,
2879+
}),
2880+
("draw triangle 10 20 30 40 50 60", DrawCommand::Triangle {
2881+
x1: 10,
2882+
y1: 20,
2883+
x2: 30,
2884+
y2: 40,
2885+
x3: 50,
2886+
y3: 60,
2887+
}),
2888+
("draw image 10 20 @copper 30 359", DrawCommand::Image {
2889+
x: 10,
2890+
y: 20,
2891+
image: Some(Content::Item(content::items::FROM_NAME["copper"])),
2892+
size: 30,
2893+
rotation: 359,
2894+
}),
2895+
("draw print 10 20 @bottomLeft", DrawCommand::Print {
2896+
x: 10,
2897+
y: 20,
2898+
alignment: TextAlignment::BOTTOM_LEFT,
2899+
text: u16str!("a\nb").into(),
2900+
}),
2901+
("draw translate 10 20", DrawCommand::Translate {
2902+
x: 10,
2903+
y: 20,
2904+
}),
2905+
("draw scale 10 20", DrawCommand::Scale {
2906+
x: 10 * 20,
2907+
y: 20 * 20,
2908+
}),
2909+
("draw rotate 359", DrawCommand::Rotate { degrees: 359 }),
2910+
("draw reset", DrawCommand::Reset),
2911+
];
2912+
28192913
let mut vm = single_processor_vm(
28202914
HYPER_PROCESSOR,
2821-
"
2822-
draw clear 0 0 0
2823-
draw color 0 0 0 255
2824-
draw col 0
2825-
draw stroke 0
2826-
draw line 0 0 0 255
2827-
draw rect 0 0 0 255
2828-
draw lineRect 0 0 0 255
2829-
draw poly 0 0 0 255 0
2830-
draw linePoly 0 0 0 255 0
2831-
draw triangle 0 0 0 255 0 0
2832-
draw image 0 0 @copper 32 0
2833-
draw print 0 0 @bottomLeft
2834-
draw translate 0 0
2835-
draw scale 0 0
2836-
draw rotate 0
2837-
draw reset
2838-
2839-
draw triangle var1 var2 var3 var4 var5 var6
2840-
2841-
drawflush display1
2842-
stop
2843-
",
2915+
&format!(
2916+
r#"
2917+
print "a\nb"
2918+
2919+
{}
2920+
2921+
wait 0.5
2922+
2923+
draw triangle var1 var2 var3 var4 var5 var6
2924+
2925+
drawflush display1
2926+
stop
2927+
"#,
2928+
tests.iter().map(|v| v.0).join("\n"),
2929+
),
28442930
);
2845-
run(&mut vm, 1, true);
2931+
2932+
vm.do_tick(Duration::ZERO);
2933+
2934+
with_processor(&mut vm, (0, 0), |processor| {
2935+
assert_eq!(processor.state.drawbuffer_len, tests.len() + 1);
2936+
assert_eq!(
2937+
processor.state.drawbuffer,
2938+
tests.into_iter().map(|v| v.1).collect_vec()
2939+
);
2940+
assert_eq!(processor.state.printbuffer, U16String::new());
2941+
});
2942+
2943+
vm.do_tick(Duration::from_secs(1));
28462944

28472945
let processor = take_processor(&mut vm, (0, 0));
2946+
assert_eq!(processor.state.drawbuffer_len, 0);
2947+
assert_eq!(processor.state.drawbuffer, vec![]);
28482948
for name in [
28492949
u16str!("var1"),
28502950
u16str!("var2"),

0 commit comments

Comments
 (0)