Skip to content

Commit cdee829

Browse files
committed
floor linecap tests
1 parent 723b8e5 commit cdee829

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

tests/src/floor.rs

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,65 @@
11
use crate::{util, labels, playfield};
22

33
pub fn test() {
4+
test_floor();
5+
test_floor0();
6+
}
7+
8+
fn test_floor() {
9+
// check rows aren't pulled from the top in linecap floor mode
10+
11+
let mut emu = util::emulator(None);
12+
13+
for _ in 0..3 {
14+
emu.run_until_vblank();
15+
}
16+
17+
let practise_type = labels::get("practiseType") as usize;
18+
let game_mode = labels::get("gameMode") as usize;
19+
let main_loop = labels::get("mainLoop");
20+
let level_number = labels::get("levelNumber") as usize;
21+
22+
emu.memory.iram_raw[practise_type] = labels::get("MODE_TRANSITION") as _;
23+
emu.memory.iram_raw[level_number] = 19;
24+
emu.memory.iram_raw[game_mode] = 4;
25+
26+
emu.memory.iram_raw[labels::get("linecapFlag") as usize] = 1;
27+
emu.memory.iram_raw[labels::get("linecapHow") as usize] = labels::get("LINECAP_FLOOR") as u8 - 1;
28+
emu.memory.iram_raw[labels::get("linecapLevel") as usize] = 20;
29+
30+
emu.registers.pc = main_loop;
31+
32+
for _ in 0..5 {
33+
emu.run_until_vblank();
34+
}
35+
36+
// get some tetrises
37+
38+
for _ in 0..4 {
39+
40+
emu.memory.iram_raw[labels::get("currentPiece") as usize] = 0x11;
41+
emu.memory.iram_raw[labels::get("tetriminoX") as usize] = 0x5;
42+
emu.memory.iram_raw[labels::get("tetriminoY") as usize] = 0x11;
43+
emu.memory.iram_raw[labels::get("autorepeatY") as usize] = 0;
44+
emu.memory.iram_raw[labels::get("vramRow") as usize] = 0;
45+
46+
playfield::set_str(&mut emu,r##"
47+
##### ####
48+
##### ####
49+
##### ####
50+
##### ####"##);
51+
52+
for _ in 0..40 {
53+
emu.run_until_vblank();
54+
}
55+
}
56+
57+
for i in 0..40 {
58+
assert_eq!(emu.memory.iram_raw[i + labels::get("playfield") as usize], 0xEF);
59+
}
60+
}
61+
62+
fn test_floor0() {
463
// check floor 0 doesnt burn lines
564

665
let mut emu = util::emulator(None);
@@ -32,16 +91,15 @@ pub fn test() {
3291
emu.memory.iram_raw[labels::get("tetriminoX") as usize] = 0x5;
3392
emu.memory.iram_raw[labels::get("tetriminoY") as usize] = 0x11;
3493
emu.memory.iram_raw[labels::get("autorepeatY") as usize] = 0;
94+
emu.memory.iram_raw[labels::get("vramRow") as usize] = 0;
3595

3696
playfield::set_str(&mut emu,r##"
3797
##### ####
3898
##### ####
3999
##### ####
40100
##### ####"##);
41101

42-
emu.memory.iram_raw[labels::get("vramRow") as usize] = 0;
43-
44-
for _ in 0..20 {
102+
for _ in 0..40 {
45103
emu.run_until_vblank();
46104
}
47105

tests/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fn main() {
4343
// run tests
4444
if options.test {
4545
floor::test();
46-
println!("floor 0 works!");
46+
println!("floor works!");
4747
score::test();
4848
println!("score works!");
4949
score::test_render();

0 commit comments

Comments
 (0)