@@ -7,24 +7,30 @@ pub fn test() {
7
7
}
8
8
9
9
fn test_standard ( ) {
10
- let mut emu = util:: emulator ( None ) ;
10
+ let boot = || {
11
+ let mut emu = util:: emulator ( None ) ;
11
12
12
- util:: run_n_vblanks ( & mut emu, 4 ) ;
13
+ util:: run_n_vblanks ( & mut emu, 4 ) ;
13
14
14
- let hz_flag = labels:: get ( "hzFlag" ) as usize ;
15
- let game_mode = labels:: get ( "gameMode" ) as usize ;
16
- let main_loop = labels:: get ( "mainLoop" ) ;
17
- let level_number = labels:: get ( "levelNumber" ) as usize ;
15
+ let hz_flag = labels:: get ( "hzFlag" ) as usize ;
16
+ let game_mode = labels:: get ( "gameMode" ) as usize ;
17
+ let main_loop = labels:: get ( "mainLoop" ) ;
18
+ let level_number = labels:: get ( "levelNumber" ) as usize ;
18
19
19
- // turn on hz display
20
- emu. memory . iram_raw [ hz_flag] = 1 ;
21
- // trick game into thinking it should start an a-type run
22
- emu. memory . iram_raw [ level_number] = 29 ;
23
- emu. memory . iram_raw [ game_mode] = 4 ;
24
- emu. registers . pc = main_loop;
20
+ // turn on hz display
21
+ emu. memory . iram_raw [ hz_flag] = 1 ;
22
+ // trick game into thinking it should start an a-type run
23
+ emu. memory . iram_raw [ level_number] = 29 ;
24
+ emu. memory . iram_raw [ game_mode] = 4 ;
25
+ emu. registers . pc = main_loop;
25
26
26
- // wait for piece to become active
27
- util:: run_n_vblanks ( & mut emu, 5 ) ;
27
+ // wait for piece to become active
28
+ util:: run_n_vblanks ( & mut emu, 5 ) ;
29
+
30
+ emu
31
+ } ;
32
+
33
+ let mut emu = boot ( ) ;
28
34
// test left input sequence with delay of 5
29
35
run_input_string ( & mut emu, ".....L.L..L.L." ) ;
30
36
assert_hz_display ( & mut emu, HzSpeed ( 25 , 75 ) , 4 , 5 , Dir :: Left ) ;
@@ -53,6 +59,21 @@ fn test_standard() {
53
59
util:: run_n_vblanks ( & mut emu, 2 +12 -4 ) ;
54
60
run_input_string ( & mut emu, "L....." ) ;
55
61
assert_hz_display ( & mut emu, HzSpeed ( 18 , 3 ) , 4 , -1 , Dir :: Right ) ;
62
+
63
+ // check L+U etc is counted as a tap
64
+ let mut emu = boot ( ) ;
65
+ {
66
+ use crate :: input:: * ;
67
+ run_input_string ( & mut emu, "LB.L.LL." ) ;
68
+ util:: set_controller_raw ( & mut emu, LEFT + UP ) ;
69
+ emu. run_until_vblank ( ) ;
70
+ emu. run_until_vblank ( ) ;
71
+ run_input_string ( & mut emu, "." ) ;
72
+ util:: set_controller_raw ( & mut emu, LEFT + UP ) ;
73
+ emu. run_until_vblank ( ) ;
74
+ emu. run_until_vblank ( ) ;
75
+ }
76
+ assert_hz_display ( & mut emu, HzSpeed ( 21 , 85 ) , 5 , 0 , Dir :: Left ) ;
56
77
}
57
78
58
79
fn test_tspin ( ) {
0 commit comments