From 64b18662d53f2badd2035236dedb7660b6217cb1 Mon Sep 17 00:00:00 2001 From: transistor Date: Mon, 15 May 2023 21:13:52 -0700 Subject: [PATCH] Added Z80 timings, and enabled check in rad tests --- emulator/cpus/z80/src/decode.rs | 7 +- emulator/cpus/z80/src/execute.rs | 45 +- emulator/cpus/z80/src/instructions.rs | 10 + emulator/cpus/z80/src/lib.rs | 5 +- emulator/cpus/z80/src/state.rs | 6 +- emulator/cpus/z80/src/timing.rs | 299 ++++++++ tests/rad_tests/latest.txt | 10 +- ...5-13-7-without-undoc-fixed-refresh-sim.txt | 647 ++++++++++++++++++ ...14-without-undoc-fixed-memory-wrapping.txt | 647 ++++++++++++++++++ tests/rad_tests/run_all.sh | 2 +- 10 files changed, 1650 insertions(+), 28 deletions(-) create mode 100644 emulator/cpus/z80/src/timing.rs create mode 100644 tests/rad_tests/progress/2023-05-13-7-without-undoc-fixed-refresh-sim.txt create mode 100644 tests/rad_tests/progress/2023-05-14-without-undoc-fixed-memory-wrapping.txt diff --git a/emulator/cpus/z80/src/decode.rs b/emulator/cpus/z80/src/decode.rs index 85cefbf..1843acf 100644 --- a/emulator/cpus/z80/src/decode.rs +++ b/emulator/cpus/z80/src/decode.rs @@ -9,7 +9,6 @@ pub struct Z80Decoder { pub start: u16, pub end: u16, pub instruction: Instruction, - pub execution_time: u16, } impl Default for Z80Decoder { @@ -19,7 +18,6 @@ impl Default for Z80Decoder { start: 0, end: 0, instruction: Instruction::NOP, - execution_time: 0, } } } @@ -29,7 +27,6 @@ impl Z80Decoder { self.clock = clock; self.start = start; self.end = start; - self.execution_time = 0; self.instruction = self.decode_one(memory)?; Ok(()) } @@ -509,20 +506,18 @@ impl Z80Decoder { fn read_instruction_byte(&mut self, device: &mut dyn Addressable) -> Result { let byte = device.read_u8(self.clock, self.end as Address)?; self.end = self.end.wrapping_add(1); - self.execution_time += 4; Ok(byte) } fn read_instruction_word(&mut self, device: &mut dyn Addressable) -> Result { let word = device.read_leu16(self.clock, self.end as Address)?; self.end = self.end.wrapping_add(2); - self.execution_time += 8; Ok(word) } pub fn format_instruction_bytes(&mut self, memory: &mut dyn Addressable) -> String { let ins_data: String = - (0..(self.end - self.start)).map(|offset| + (0..self.end.saturating_sub(self.start)).map(|offset| format!("{:02x} ", memory.read_u8(self.clock, (self.start + offset) as Address).unwrap()) ).collect(); ins_data diff --git a/emulator/cpus/z80/src/execute.rs b/emulator/cpus/z80/src/execute.rs index ff346a0..98cd016 100644 --- a/emulator/cpus/z80/src/execute.rs +++ b/emulator/cpus/z80/src/execute.rs @@ -1,8 +1,9 @@ -use moa_core::{System, Error, ErrorType, ClockDuration, Address, Steppable, Addressable, Interruptable, Debuggable, Transmutable, read_beu16, write_beu16}; +use moa_core::{System, Error, ErrorType, ClockTime, ClockDuration, Address, Steppable, Addressable, Interruptable, Debuggable, Transmutable, read_beu16, write_beu16}; use crate::instructions::{Condition, Instruction, LoadTarget, Target, Register, InterruptMode, RegisterPair, IndexRegister, SpecialRegister, IndexRegisterHalf, Size, Direction, UndocumentedCopy}; use crate::state::{Z80, Status, Flags}; +use crate::timing::Z80InstructionCycles; const DEV_NAME: &str = "z80-cpu"; @@ -53,9 +54,24 @@ impl Transmutable for Z80 { } +#[derive(Clone)] +pub struct Z80Executor { + pub current_clock: ClockTime, + pub took_branch: bool, +} + +impl Z80Executor { + pub fn at_time(current_clock: ClockTime) -> Self { + Self { + current_clock, + took_branch: false, + } + } +} + impl Z80 { pub fn step_internal(&mut self, system: &System) -> Result { - self.current_clock = system.clock; + self.executor = Z80Executor::at_time(system.clock); match self.state.status { Status::Init => self.init(), Status::Halted => Err(Error::new("CPU stopped")), @@ -63,7 +79,6 @@ impl Z80 { match self.cycle_one(system) { Ok(clocks) => Ok(clocks), Err(Error { err: ErrorType::Processor, .. }) => { - //self.exception(system, native as u8, false)?; Ok(4) }, Err(err) => Err(err), @@ -86,13 +101,13 @@ impl Z80 { pub fn cycle_one(&mut self, system: &System) -> Result { self.decode_next()?; self.execute_current()?; - //self.check_pending_interrupts(system)?; self.check_breakpoints(system); - Ok(self.decoder.execution_time) + Ok(Z80InstructionCycles::from_instruction(&self.decoder.instruction)? + .calculate_cycles(self.executor.took_branch)) } pub fn decode_next(&mut self) -> Result<(), Error> { - self.decoder.decode_at(&mut self.port, self.current_clock, self.state.pc)?; + self.decoder.decode_at(&mut self.port, self.executor.current_clock, self.state.pc)?; self.increment_refresh(self.decoder.end.saturating_sub(self.decoder.start) as u8); self.state.pc = self.decoder.end; Ok(()) @@ -279,6 +294,7 @@ impl Z80 { fn execute_callcc(&mut self, cond: Condition, addr: u16) -> Result<(), Error> { if self.get_current_condition(cond) { + self.executor.took_branch = true; self.push_word(self.decoder.end)?; self.state.pc = addr; } @@ -395,6 +411,7 @@ impl Z80 { self.set_register_value(Register::B, result); if result != 0 { + self.executor.took_branch = true; self.state.pc = self.state.pc.wrapping_add_signed(offset as i16); } Ok(()) @@ -528,6 +545,7 @@ impl Z80 { fn execute_jpcc(&mut self, cond: Condition, addr: u16) -> Result<(), Error> { if self.get_current_condition(cond) { + self.executor.took_branch = true; self.state.pc = addr; } Ok(()) @@ -540,6 +558,7 @@ impl Z80 { fn execute_jrcc(&mut self, cond: Condition, offset: i8) -> Result<(), Error> { if self.get_current_condition(cond) { + self.executor.took_branch = true; self.state.pc = self.state.pc.wrapping_add_signed(offset as i16); } Ok(()) @@ -593,6 +612,7 @@ impl Z80 { if (self.decoder.instruction == Instruction::LDIR || self.decoder.instruction == Instruction::LDDR) && count != 0 { + self.executor.took_branch = true; self.state.pc -= 2; } Ok(()) @@ -685,6 +705,7 @@ impl Z80 { fn execute_retcc(&mut self, cond: Condition) -> Result<(), Error> { if self.get_current_condition(cond) { + self.executor.took_branch = true; self.state.pc = self.pop_word()?; } Ok(()) @@ -1083,28 +1104,28 @@ impl Z80 { fn read_port_u8(&mut self, addr: u16) -> Result { self.increment_refresh(1); - self.port.read_u8(self.current_clock, addr as Address) + self.port.read_u8(self.executor.current_clock, addr as Address) } fn write_port_u8(&mut self, addr: u16, value: u8) -> Result<(), Error> { self.increment_refresh(1); - self.port.write_u8(self.current_clock, addr as Address, value) + self.port.write_u8(self.executor.current_clock, addr as Address, value) } fn read_port_u16(&mut self, addr: u16) -> Result { self.increment_refresh(2); - self.port.read_leu16(self.current_clock, addr as Address) + self.port.read_leu16(self.executor.current_clock, addr as Address) } fn write_port_u16(&mut self, addr: u16, value: u16) -> Result<(), Error> { self.increment_refresh(2); - self.port.write_leu16(self.current_clock, addr as Address, value) + self.port.write_leu16(self.executor.current_clock, addr as Address, value) } fn read_ioport_value(&mut self, upper: u8, lower: u8) -> Result { let addr = ((upper as Address) << 8) | (lower as Address); if let Some(io) = self.ioport.as_mut() { - Ok(io.read_u8(self.current_clock, addr)?) + Ok(io.read_u8(self.executor.current_clock, addr)?) } else { Ok(0) } @@ -1113,7 +1134,7 @@ impl Z80 { fn write_ioport_value(&mut self, upper: u8, lower: u8, value: u8) -> Result<(), Error> { let addr = ((upper as Address) << 8) | (lower as Address); if let Some(io) = self.ioport.as_mut() { - io.write_u8(self.current_clock, addr, value)? + io.write_u8(self.executor.current_clock, addr, value)? } Ok(()) } diff --git a/emulator/cpus/z80/src/instructions.rs b/emulator/cpus/z80/src/instructions.rs index 0581c7f..478f277 100644 --- a/emulator/cpus/z80/src/instructions.rs +++ b/emulator/cpus/z80/src/instructions.rs @@ -201,4 +201,14 @@ impl From for InterruptMode { } } +impl RegisterPair { + pub(crate) fn is_index_reg(&self) -> bool { + match self { + RegisterPair::IX | + RegisterPair::IY => true, + _ => false, + } + } +} + diff --git a/emulator/cpus/z80/src/lib.rs b/emulator/cpus/z80/src/lib.rs index 83033c9..c08381a 100644 --- a/emulator/cpus/z80/src/lib.rs +++ b/emulator/cpus/z80/src/lib.rs @@ -1,9 +1,10 @@ -pub mod state; +pub mod debugger; pub mod decode; pub mod execute; -pub mod debugger; pub mod instructions; +pub mod state; +pub mod timing; pub use self::state::{Z80, Z80Type}; diff --git a/emulator/cpus/z80/src/state.rs b/emulator/cpus/z80/src/state.rs index cf2b4e9..c463bca 100644 --- a/emulator/cpus/z80/src/state.rs +++ b/emulator/cpus/z80/src/state.rs @@ -3,6 +3,7 @@ use moa_core::{ClockTime, Address, BusPort, Signal, Frequency}; use crate::decode::Z80Decoder; use crate::debugger::Z80Debugger; +use crate::execute::Z80Executor; use crate::instructions::{Register, InterruptMode}; @@ -93,11 +94,11 @@ pub struct Z80 { pub state: Z80State, pub decoder: Z80Decoder, pub debugger: Z80Debugger, + pub executor: Z80Executor, pub port: BusPort, pub ioport: Option, pub reset: Signal, pub bus_request: Signal, - pub current_clock: ClockTime, } impl Z80 { @@ -108,11 +109,11 @@ impl Z80 { state: Z80State::default(), decoder: Z80Decoder::default(), debugger: Z80Debugger::default(), + executor: Z80Executor::at_time(ClockTime::START), port, ioport, reset: Signal::new(false), bus_request: Signal::new(false), - current_clock: ClockTime::START, } } @@ -121,6 +122,7 @@ impl Z80 { self.state = Z80State::default(); self.decoder = Z80Decoder::default(); self.debugger = Z80Debugger::default(); + self.executor = Z80Executor::at_time(ClockTime::START); } pub fn dump_state(&mut self, clock: ClockTime) { diff --git a/emulator/cpus/z80/src/timing.rs b/emulator/cpus/z80/src/timing.rs new file mode 100644 index 0000000..2211b36 --- /dev/null +++ b/emulator/cpus/z80/src/timing.rs @@ -0,0 +1,299 @@ + +use moa_core::Error; + +use crate::instructions::{Instruction, Target, LoadTarget, RegisterPair}; + +pub enum Z80InstructionCycles { + Single(u16), + Branch { + taken: u16, + not_taken: u16 + }, + Repeating { + repeating: u16, + terminating: u16, + }, +} + +impl Z80InstructionCycles { + pub fn calculate_cycles(&self, took_branch: bool) -> u16 { + match self { + Z80InstructionCycles::Single(cycles) => *cycles, + + Z80InstructionCycles::Branch { taken, not_taken } => if took_branch { *taken } else { *not_taken }, + + Z80InstructionCycles::Repeating { repeating, terminating } => if took_branch { *repeating } else { *terminating }, + } + } + + pub fn from_instruction(instruction: &Instruction) -> Result { + let cycles = match instruction { + Instruction::ADCa(target) | + Instruction::ADDa(target) | + Instruction::AND(target) | + Instruction::CP(target) | + Instruction::SBCa(target) | + Instruction::SUB(target) | + Instruction::OR(target) | + Instruction::XOR(target) => { + match target { + // TODO the undocumented DD version of this instruction is actually 8 cycles + Target::DirectReg(_) => 4, + Target::IndirectReg(_) => 7, + Target::Immediate(_) => 7, + Target::IndirectOffset(_, _) => 19, + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::ADC16(_, _) | + Instruction::SBC16(_, _) => 15, + + Instruction::ADD16(dest_pair, _) => { + if !dest_pair.is_index_reg() { + 11 + } else { + 15 + } + }, + + Instruction::BIT(_, target) => { + match target { + Target::DirectReg(_) => 8, + Target::IndirectReg(_) => 12, + Target::IndirectOffset(_, _) => 20, + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::CALL(_) => 17, + + Instruction::CALLcc(_, _) => { + return Ok(Z80InstructionCycles::Branch { + taken: 17, + not_taken: 10, + }); + }, + + Instruction::CCF => 4, + + Instruction::CPD | + Instruction::CPI | + Instruction::IND | + Instruction::INI | + Instruction::LDD | + Instruction::LDI | + Instruction::OUTD | + Instruction::OUTI => 16, + + Instruction::CPDR | + Instruction::CPIR | + Instruction::INDR | + Instruction::INIR | + Instruction::LDDR | + Instruction::LDIR | + Instruction::OTDR | + Instruction::OTIR => { + return Ok(Z80InstructionCycles::Repeating { + repeating: 21, + terminating: 16, + }) + }, + + Instruction::CPL => 4, + Instruction::DAA => 4, + + Instruction::DEC8(target) | + Instruction::INC8(target) => { + // TODO the undocumented DD version of this instruction is actually 8 cycles + match target { + Target::DirectReg(_) => 4, + Target::IndirectReg(_) => 11, + Target::IndirectOffset(_, _) => 23, + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::DEC16(regpair) | + Instruction::INC16(regpair) => { + if !regpair.is_index_reg() { + 6 + } else { + 10 + } + }, + + Instruction::DI | + Instruction::EI => 4, + + Instruction::DJNZ(_) => { + return Ok(Z80InstructionCycles::Branch { + taken: 13, + not_taken: 8, + }); + }, + + Instruction::EXX => 4, + Instruction::EXafaf => 4, + Instruction::EXhlde => 4, + Instruction::EXsp(regpair) => { + if !regpair.is_index_reg() { + 19 + } else { + 23 + } + }, + + Instruction::HALT => 4, + Instruction::IM(_) => 8, + + Instruction::INic(_) | + Instruction::INicz | + Instruction::OUTic(_) | + Instruction::OUTicz => 12, + + Instruction::INx(_) | + Instruction::OUTx(_) => 11, + + Instruction::JP(_) => 10, + Instruction::JR(_) => 12, + + Instruction::JPIndirect(regpair) => { + if !regpair.is_index_reg() { + 4 + } else { + 8 + } + }, + + Instruction::JPcc(_, _) => 10, + + Instruction::JRcc(_, _) => { + return Ok(Z80InstructionCycles::Branch { + taken: 12, + not_taken: 7, + }); + }, + + Instruction::LD(dest, src) => { + // TODO the undocumented DD version of this instruction is actually 8 cycles + match (dest, src) { + // 8-Bit Operations + + (LoadTarget::DirectRegByte(_), LoadTarget::DirectRegByte(_)) => 4, + + (LoadTarget::DirectRegByte(_), LoadTarget::ImmediateByte(_)) => 7, + (LoadTarget::IndirectRegByte(_), LoadTarget::ImmediateByte(_)) => 10, + + (LoadTarget::IndirectOffsetByte(_, _), _) | + (_, LoadTarget::IndirectOffsetByte(_, _)) => 19, + + (_, LoadTarget::IndirectRegByte(_)) | + (LoadTarget::IndirectRegByte(_), _) => 7, + + (_, LoadTarget::IndirectByte(_)) | + (LoadTarget::IndirectByte(_), _) => 13, + + // 16-Bit Operations + + (LoadTarget::DirectRegWord(regpair), LoadTarget::ImmediateWord(_)) | + (LoadTarget::ImmediateWord(_), LoadTarget::DirectRegWord(regpair)) => { + if !regpair.is_index_reg() { + 10 + } else { + 14 + } + }, + + (LoadTarget::DirectRegWord(_), LoadTarget::DirectRegWord(regpair)) => { + if !regpair.is_index_reg() { + 6 + } else { + 10 + } + }, + + (LoadTarget::IndirectWord(_), LoadTarget::DirectRegWord(RegisterPair::HL)) | + (LoadTarget::DirectRegWord(RegisterPair::HL), LoadTarget::IndirectWord(_)) => 16, + + (LoadTarget::IndirectWord(_), _) | + (_, LoadTarget::IndirectWord(_)) => 20, + + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::LDsr(_, _) => 9, + + Instruction::NEG => 8, + Instruction::NOP => 4, + + + Instruction::POP(regpair) => { + if !regpair.is_index_reg() { + 10 + } else { + 14 + } + }, + Instruction::PUSH(regpair) => { + if !regpair.is_index_reg() { + 11 + } else { + 15 + } + }, + + Instruction::RES(_, target, _) | + Instruction::SET(_, target, _) => { + match target { + Target::DirectReg(_) => 8, + Target::IndirectReg(_) => 15, + Target::IndirectOffset(_, _) => 23, + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::RET => 10, + Instruction::RETI => 14, + Instruction::RETN => 14, + + Instruction::RETcc(_) => { + return Ok(Z80InstructionCycles::Branch { + taken: 11, + not_taken: 5, + }); + }, + + Instruction::RL(target, _) | + Instruction::RLC(target, _) | + Instruction::RR(target, _) | + Instruction::RRC(target, _) | + Instruction::SLA(target, _) | + Instruction::SLL(target, _) | + Instruction::SRA(target, _) | + Instruction::SRL(target, _) => { + match target { + Target::DirectReg(_) => 8, + Target::IndirectReg(_) => 15, + Target::IndirectOffset(_, _) => 23, + _ => return Err(Error::new(format!("unexpected instruction: {:?}", instruction))), + } + }, + + Instruction::RLA | + Instruction::RLCA | + Instruction::RRA | + Instruction::RRCA => 4, + + Instruction::RLD => 18, + Instruction::RRD => 18, + + Instruction::RST(_) => 11, + + Instruction::SCF => 4, + }; + Ok(Z80InstructionCycles::Single(cycles)) + } +} + diff --git a/tests/rad_tests/latest.txt b/tests/rad_tests/latest.txt index 81889aa..9021420 100644 --- a/tests/rad_tests/latest.txt +++ b/tests/rad_tests/latest.txt @@ -1,4 +1,4 @@ -Last run on 2023-05-14 at commit aaa7952dd0cf0ab6e33946ce0ae1aa91920e5405 +Last run on 2023-05-15 at commit f205e231b62d62c72186c1d9f5277e2bce693380 00.json completed, all passed! 01.json completed, all passed! @@ -568,7 +568,7 @@ ed 73.json completed, all passed! ed 74.json completed, all passed! ed 75.json completed, all passed! ed 76.json completed, all passed! -ed 77.json completed, all passed! +ed 77.json completed: 0 passed, 1000 FAILED ed 78.json completed, all passed! ed 79.json completed, all passed! ed 7a.json completed, all passed! @@ -576,7 +576,7 @@ ed 7b.json completed, all passed! ed 7c.json completed, all passed! ed 7d.json completed, all passed! ed 7e.json completed, all passed! -ed 7f.json completed, all passed! +ed 7f.json completed: 0 passed, 1000 FAILED ed a0.json completed, all passed! ed a1.json completed: 0 passed, 1000 FAILED ed a2.json completed: 13 passed, 987 FAILED @@ -643,5 +643,5 @@ fd f9.json completed, all passed! fe.json completed, all passed! ff.json completed, all passed! -passed: 629560, failed: 12440, total 98% -completed in 0m 32s +passed: 627560, failed: 14440, total 98% +completed in 0m 35s diff --git a/tests/rad_tests/progress/2023-05-13-7-without-undoc-fixed-refresh-sim.txt b/tests/rad_tests/progress/2023-05-13-7-without-undoc-fixed-refresh-sim.txt new file mode 100644 index 0000000..ab51c64 --- /dev/null +++ b/tests/rad_tests/progress/2023-05-13-7-without-undoc-fixed-refresh-sim.txt @@ -0,0 +1,647 @@ +Last run on 2023-05-13 at commit f3d1fd0ae2410a164c92150cc3caa0f525cbb4b7 + +00.json completed, all passed! +01.json completed, all passed! +02.json completed, all passed! +03.json completed, all passed! +04.json completed, all passed! +05.json completed, all passed! +06.json completed, all passed! +07.json completed, all passed! +08.json completed, all passed! +09.json completed, all passed! +0a.json completed, all passed! +0b.json completed, all passed! +0c.json completed, all passed! +0d.json completed, all passed! +0e.json completed, all passed! +0f.json completed, all passed! +10.json completed, all passed! +100.json completed, all passed! +101.json completed, all passed! +11.json completed, all passed! +12.json completed, all passed! +13.json completed, all passed! +14.json completed, all passed! +15.json completed, all passed! +16.json completed, all passed! +17.json completed, all passed! +18.json completed, all passed! +19.json completed, all passed! +1a.json completed, all passed! +1b.json completed, all passed! +1c.json completed, all passed! +1d.json completed, all passed! +1e.json completed, all passed! +1f.json completed, all passed! +20.json completed, all passed! +21.json completed, all passed! +22.json completed: 999 passed, 1 FAILED +23.json completed, all passed! +24.json completed, all passed! +25.json completed, all passed! +26.json completed, all passed! +27.json completed: 0 passed, 1000 FAILED +28.json completed, all passed! +29.json completed, all passed! +2a.json completed, all passed! +2b.json completed, all passed! +2c.json completed, all passed! +2d.json completed, all passed! +2e.json completed, all passed! +2f.json completed, all passed! +30.json completed, all passed! +31.json completed, all passed! +32.json completed, all passed! +33.json completed, all passed! +34.json completed, all passed! +35.json completed, all passed! +36.json completed, all passed! +37.json completed, all passed! +38.json completed, all passed! +39.json completed, all passed! +3a.json completed, all passed! +3b.json completed, all passed! +3c.json completed, all passed! +3d.json completed, all passed! +3e.json completed, all passed! +3f.json completed, all passed! +40.json completed, all passed! +41.json completed, all passed! +42.json completed, all passed! +43.json completed, all passed! +44.json completed, all passed! +45.json completed, all passed! +46.json completed, all passed! +47.json completed, all passed! +48.json completed, all passed! +49.json completed, all passed! +4a.json completed, all passed! +4b.json completed, all passed! +4c.json completed, all passed! +4d.json completed, all passed! +4e.json completed, all passed! +4f.json completed, all passed! +50.json completed, all passed! +51.json completed, all passed! +52.json completed, all passed! +53.json completed, all passed! +54.json completed, all passed! +55.json completed, all passed! +56.json completed, all passed! +57.json completed, all passed! +58.json completed, all passed! +59.json completed, all passed! +5a.json completed, all passed! +5b.json completed, all passed! +5c.json completed, all passed! +5d.json completed, all passed! +5e.json completed, all passed! +5f.json completed, all passed! +60.json completed, all passed! +61.json completed, all passed! +62.json completed, all passed! +63.json completed, all passed! +64.json completed, all passed! +65.json completed, all passed! +66.json completed, all passed! +67.json completed, all passed! +68.json completed, all passed! +69.json completed, all passed! +6a.json completed, all passed! +6b.json completed, all passed! +6c.json completed, all passed! +6d.json completed, all passed! +6e.json completed, all passed! +6f.json completed, all passed! +70.json completed, all passed! +71.json completed, all passed! +72.json completed, all passed! +73.json completed, all passed! +74.json completed, all passed! +75.json completed, all passed! +76.json completed, all passed! +77.json completed, all passed! +78.json completed, all passed! +79.json completed, all passed! +7a.json completed, all passed! +7b.json completed, all passed! +7c.json completed, all passed! +7d.json completed, all passed! +7e.json completed, all passed! +7f.json completed, all passed! +80.json completed, all passed! +81.json completed, all passed! +82.json completed, all passed! +83.json completed, all passed! +84.json completed, all passed! +85.json completed, all passed! +86.json completed, all passed! +87.json completed, all passed! +88.json completed, all passed! +89.json completed, all passed! +8a.json completed, all passed! +8b.json completed, all passed! +8c.json completed, all passed! +8d.json completed, all passed! +8e.json completed, all passed! +8f.json completed, all passed! +90.json completed, all passed! +91.json completed, all passed! +92.json completed, all passed! +93.json completed, all passed! +94.json completed, all passed! +95.json completed, all passed! +96.json completed, all passed! +97.json completed, all passed! +98.json completed, all passed! +99.json completed, all passed! +9a.json completed, all passed! +9b.json completed, all passed! +9c.json completed, all passed! +9d.json completed, all passed! +9e.json completed, all passed! +9f.json completed, all passed! +a0.json completed, all passed! +a1.json completed, all passed! +a2.json completed, all passed! +a3.json completed, all passed! +a4.json completed, all passed! +a5.json completed, all passed! +a6.json completed, all passed! +a7.json completed, all passed! +a8.json completed, all passed! +a9.json completed, all passed! +aa.json completed, all passed! +ab.json completed, all passed! +ac.json completed, all passed! +ad.json completed, all passed! +ae.json completed, all passed! +af.json completed, all passed! +b0.json completed, all passed! +b1.json completed, all passed! +b2.json completed, all passed! +b3.json completed, all passed! +b4.json completed, all passed! +b5.json completed, all passed! +b6.json completed, all passed! +b7.json completed, all passed! +b8.json completed, all passed! +b9.json completed, all passed! +ba.json completed, all passed! +bb.json completed, all passed! +bc.json completed, all passed! +bd.json completed, all passed! +be.json completed, all passed! +bf.json completed, all passed! +c0.json completed, all passed! +c1.json completed, all passed! +c2.json completed, all passed! +c3.json completed, all passed! +c4.json completed, all passed! +c5.json completed, all passed! +c6.json completed, all passed! +c7.json completed, all passed! +c8.json completed, all passed! +c9.json completed, all passed! +ca.json completed, all passed! +cb 00.json completed, all passed! +cb 01.json completed, all passed! +cb 02.json completed, all passed! +cb 03.json completed, all passed! +cb 04.json completed, all passed! +cb 05.json completed, all passed! +cb 06.json completed, all passed! +cb 07.json completed, all passed! +cb 08.json completed, all passed! +cb 09.json completed, all passed! +cb 0a.json completed, all passed! +cb 0b.json completed, all passed! +cb 0c.json completed, all passed! +cb 0d.json completed, all passed! +cb 0e.json completed, all passed! +cb 0f.json completed, all passed! +cb 10.json completed, all passed! +cb 11.json completed, all passed! +cb 12.json completed, all passed! +cb 13.json completed, all passed! +cb 14.json completed, all passed! +cb 15.json completed, all passed! +cb 16.json completed, all passed! +cb 17.json completed, all passed! +cb 18.json completed, all passed! +cb 19.json completed, all passed! +cb 1a.json completed, all passed! +cb 1b.json completed, all passed! +cb 1c.json completed, all passed! +cb 1d.json completed, all passed! +cb 1e.json completed, all passed! +cb 1f.json completed, all passed! +cb 20.json completed, all passed! +cb 21.json completed, all passed! +cb 22.json completed, all passed! +cb 23.json completed, all passed! +cb 24.json completed, all passed! +cb 25.json completed, all passed! +cb 26.json completed, all passed! +cb 27.json completed, all passed! +cb 28.json completed, all passed! +cb 29.json completed, all passed! +cb 2a.json completed, all passed! +cb 2b.json completed, all passed! +cb 2c.json completed, all passed! +cb 2d.json completed, all passed! +cb 2e.json completed, all passed! +cb 2f.json completed, all passed! +cb 38.json completed, all passed! +cb 39.json completed, all passed! +cb 3a.json completed, all passed! +cb 3b.json completed, all passed! +cb 3c.json completed, all passed! +cb 3d.json completed, all passed! +cb 3e.json completed, all passed! +cb 3f.json completed, all passed! +cb 40.json completed, all passed! +cb 41.json completed, all passed! +cb 42.json completed, all passed! +cb 43.json completed, all passed! +cb 44.json completed, all passed! +cb 45.json completed, all passed! +cb 46.json completed, all passed! +cb 47.json completed, all passed! +cb 48.json completed, all passed! +cb 49.json completed, all passed! +cb 4a.json completed, all passed! +cb 4b.json completed, all passed! +cb 4c.json completed, all passed! +cb 4d.json completed, all passed! +cb 4e.json completed, all passed! +cb 4f.json completed, all passed! +cb 50.json completed, all passed! +cb 51.json completed, all passed! +cb 52.json completed, all passed! +cb 53.json completed, all passed! +cb 54.json completed, all passed! +cb 55.json completed, all passed! +cb 56.json completed, all passed! +cb 57.json completed, all passed! +cb 58.json completed, all passed! +cb 59.json completed, all passed! +cb 5a.json completed, all passed! +cb 5b.json completed, all passed! +cb 5c.json completed, all passed! +cb 5d.json completed, all passed! +cb 5e.json completed, all passed! +cb 5f.json completed, all passed! +cb 60.json completed, all passed! +cb 61.json completed, all passed! +cb 62.json completed, all passed! +cb 63.json completed, all passed! +cb 64.json completed, all passed! +cb 65.json completed, all passed! +cb 66.json completed, all passed! +cb 67.json completed, all passed! +cb 68.json completed, all passed! +cb 69.json completed, all passed! +cb 6a.json completed, all passed! +cb 6b.json completed, all passed! +cb 6c.json completed, all passed! +cb 6d.json completed, all passed! +cb 6e.json completed, all passed! +cb 6f.json completed, all passed! +cb 70.json completed, all passed! +cb 71.json completed, all passed! +cb 72.json completed, all passed! +cb 73.json completed, all passed! +cb 74.json completed, all passed! +cb 75.json completed, all passed! +cb 76.json completed, all passed! +cb 77.json completed, all passed! +cb 78.json completed, all passed! +cb 79.json completed, all passed! +cb 7a.json completed, all passed! +cb 7b.json completed, all passed! +cb 7c.json completed, all passed! +cb 7d.json completed, all passed! +cb 7e.json completed, all passed! +cb 7f.json completed, all passed! +cb 80.json completed, all passed! +cb 81.json completed, all passed! +cb 82.json completed, all passed! +cb 83.json completed, all passed! +cb 84.json completed, all passed! +cb 85.json completed, all passed! +cb 86.json completed, all passed! +cb 87.json completed, all passed! +cb 88.json completed, all passed! +cb 89.json completed, all passed! +cb 8a.json completed, all passed! +cb 8b.json completed, all passed! +cb 8c.json completed, all passed! +cb 8d.json completed, all passed! +cb 8e.json completed, all passed! +cb 8f.json completed, all passed! +cb 90.json completed, all passed! +cb 91.json completed, all passed! +cb 92.json completed, all passed! +cb 93.json completed, all passed! +cb 94.json completed, all passed! +cb 95.json completed, all passed! +cb 96.json completed, all passed! +cb 97.json completed, all passed! +cb 98.json completed, all passed! +cb 99.json completed, all passed! +cb 9a.json completed, all passed! +cb 9b.json completed, all passed! +cb 9c.json completed, all passed! +cb 9d.json completed, all passed! +cb 9e.json completed, all passed! +cb 9f.json completed, all passed! +cb a0.json completed, all passed! +cb a1.json completed, all passed! +cb a2.json completed, all passed! +cb a3.json completed, all passed! +cb a4.json completed, all passed! +cb a5.json completed, all passed! +cb a6.json completed, all passed! +cb a7.json completed, all passed! +cb a8.json completed, all passed! +cb a9.json completed, all passed! +cb aa.json completed, all passed! +cb ab.json completed, all passed! +cb ac.json completed, all passed! +cb ad.json completed, all passed! +cb ae.json completed, all passed! +cb af.json completed, all passed! +cb b0.json completed, all passed! +cb b1.json completed, all passed! +cb b2.json completed, all passed! +cb b3.json completed, all passed! +cb b4.json completed, all passed! +cb b5.json completed, all passed! +cb b6.json completed, all passed! +cb b7.json completed, all passed! +cb b8.json completed, all passed! +cb b9.json completed, all passed! +cb ba.json completed, all passed! +cb bb.json completed, all passed! +cb bc.json completed, all passed! +cb bd.json completed, all passed! +cb be.json completed, all passed! +cb bf.json completed, all passed! +cb c0.json completed, all passed! +cb c1.json completed, all passed! +cb c2.json completed, all passed! +cb c3.json completed, all passed! +cb c4.json completed, all passed! +cb c5.json completed, all passed! +cb c6.json completed, all passed! +cb c7.json completed, all passed! +cb c8.json completed, all passed! +cb c9.json completed, all passed! +cb ca.json completed, all passed! +cb cb.json completed, all passed! +cb cc.json completed, all passed! +cb cd.json completed, all passed! +cb ce.json completed, all passed! +cb cf.json completed, all passed! +cb d0.json completed, all passed! +cb d1.json completed, all passed! +cb d2.json completed, all passed! +cb d3.json completed, all passed! +cb d4.json completed, all passed! +cb d5.json completed, all passed! +cb d6.json completed, all passed! +cb d7.json completed, all passed! +cb d8.json completed, all passed! +cb d9.json completed, all passed! +cb da.json completed, all passed! +cb db.json completed, all passed! +cb dc.json completed, all passed! +cb dd.json completed, all passed! +cb de.json completed, all passed! +cb df.json completed, all passed! +cb e0.json completed, all passed! +cb e1.json completed, all passed! +cb e2.json completed, all passed! +cb e3.json completed, all passed! +cb e4.json completed, all passed! +cb e5.json completed, all passed! +cb e6.json completed, all passed! +cb e7.json completed, all passed! +cb e8.json completed, all passed! +cb e9.json completed, all passed! +cb ea.json completed, all passed! +cb eb.json completed, all passed! +cb ec.json completed, all passed! +cb ed.json completed, all passed! +cb ee.json completed, all passed! +cb ef.json completed, all passed! +cb f0.json completed, all passed! +cb f1.json completed, all passed! +cb f2.json completed, all passed! +cb f3.json completed, all passed! +cb f4.json completed, all passed! +cb f5.json completed, all passed! +cb f6.json completed, all passed! +cb f7.json completed, all passed! +cb f8.json completed, all passed! +cb f9.json completed, all passed! +cb fa.json completed, all passed! +cb fb.json completed, all passed! +cb fc.json completed, all passed! +cb fd.json completed, all passed! +cb fe.json completed, all passed! +cb ff.json completed, all passed! +cc.json completed, all passed! +cd.json completed, all passed! +ce.json completed, all passed! +cf.json completed, all passed! +d0.json completed, all passed! +d1.json completed, all passed! +d2.json completed, all passed! +d3.json completed, all passed! +d4.json completed, all passed! +d5.json completed, all passed! +d6.json completed, all passed! +d7.json completed, all passed! +d8.json completed, all passed! +d9.json completed, all passed! +da.json completed, all passed! +db.json completed, all passed! +dc.json completed, all passed! +dd 09.json completed, all passed! +dd 19.json completed, all passed! +dd 29.json completed, all passed! +dd 36.json completed, all passed! +dd 39.json completed, all passed! +dd 46.json completed, all passed! +dd 4e.json completed, all passed! +dd 56.json completed, all passed! +dd 5e.json completed, all passed! +dd 66.json completed, all passed! +dd 6e.json completed, all passed! +dd 70.json completed, all passed! +dd 71.json completed, all passed! +dd 72.json completed, all passed! +dd 73.json completed, all passed! +dd 74.json completed, all passed! +dd 75.json completed, all passed! +dd 77.json completed, all passed! +dd 7e.json completed, all passed! +dd 86.json completed, all passed! +dd 8e.json completed, all passed! +dd 96.json completed, all passed! +dd 9e.json completed, all passed! +dd a6.json completed, all passed! +dd ae.json completed, all passed! +dd b6.json completed, all passed! +dd be.json completed, all passed! +dd e1.json completed, all passed! +dd e3.json completed, all passed! +dd e5.json completed, all passed! +dd e9.json completed, all passed! +dd f9.json completed, all passed! +de.json completed, all passed! +df.json completed, all passed! +e0.json completed, all passed! +e1.json completed, all passed! +e2.json completed, all passed! +e3.json completed, all passed! +e4.json completed, all passed! +e5.json completed, all passed! +e6.json completed, all passed! +e7.json completed, all passed! +e8.json completed, all passed! +e9.json completed, all passed! +ea.json completed, all passed! +eb.json completed, all passed! +ec.json completed, all passed! +ed 40.json completed, all passed! +ed 41.json completed, all passed! +ed 42.json completed, all passed! +ed 43.json completed, all passed! +ed 44.json completed, all passed! +ed 45.json completed, all passed! +ed 46.json completed, all passed! +ed 47.json completed, all passed! +ed 48.json completed, all passed! +ed 49.json completed, all passed! +ed 4a.json completed, all passed! +ed 4b.json completed, all passed! +ed 4c.json completed, all passed! +ed 4d.json completed, all passed! +ed 4e.json completed, all passed! +ed 4f.json completed, all passed! +ed 50.json completed, all passed! +ed 51.json completed, all passed! +ed 52.json completed, all passed! +ed 53.json completed, all passed! +ed 54.json completed, all passed! +ed 55.json completed, all passed! +ed 56.json completed, all passed! +ed 57.json completed, all passed! +ed 58.json completed, all passed! +ed 59.json completed, all passed! +ed 5a.json completed, all passed! +ed 5b.json completed, all passed! +ed 5c.json completed, all passed! +ed 5d.json completed, all passed! +ed 5e.json completed, all passed! +ed 5f.json completed, all passed! +ed 60.json completed, all passed! +ed 61.json completed, all passed! +ed 62.json completed, all passed! +ed 64.json completed, all passed! +ed 65.json completed, all passed! +ed 66.json completed, all passed! +ed 67.json completed: 0 passed, 1000 FAILED +ed 68.json completed, all passed! +ed 69.json completed, all passed! +ed 6a.json completed, all passed! +ed 6c.json completed, all passed! +ed 6d.json completed, all passed! +ed 6e.json completed, all passed! +ed 6f.json completed: 0 passed, 1000 FAILED +ed 72.json completed, all passed! +ed 73.json completed, all passed! +ed 74.json completed, all passed! +ed 75.json completed, all passed! +ed 76.json completed, all passed! +ed 77.json completed, all passed! +ed 78.json completed, all passed! +ed 79.json completed, all passed! +ed 7a.json completed, all passed! +ed 7b.json completed, all passed! +ed 7c.json completed, all passed! +ed 7d.json completed, all passed! +ed 7e.json completed, all passed! +ed 7f.json completed, all passed! +ed a0.json completed, all passed! +ed a1.json completed: 0 passed, 1000 FAILED +ed a2.json completed: 0 passed, 1000 FAILED +ed a3.json completed: 0 passed, 1000 FAILED +ed a8.json completed, all passed! +ed a9.json completed: 0 passed, 1000 FAILED +ed aa.json completed: 0 passed, 1000 FAILED +ed ab.json completed: 0 passed, 1000 FAILED +ed b0.json completed, all passed! +ed b1.json completed: 0 passed, 1000 FAILED +ed b2.json completed: 0 passed, 1000 FAILED +ed b3.json completed: 0 passed, 1000 FAILED +ed b8.json completed, all passed! +ed b9.json completed: 0 passed, 1000 FAILED +ed ba.json completed: 0 passed, 1000 FAILED +ed bb.json completed: 0 passed, 1000 FAILED +ee.json completed, all passed! +ef.json completed, all passed! +f0.json completed, all passed! +f1.json completed, all passed! +f2.json completed, all passed! +f3.json completed, all passed! +f4.json completed, all passed! +f5.json completed, all passed! +f6.json completed, all passed! +f7.json completed, all passed! +f8.json completed, all passed! +f9.json completed, all passed! +fa.json completed, all passed! +fb.json completed, all passed! +fc.json completed, all passed! +fd 09.json completed, all passed! +fd 19.json completed, all passed! +fd 29.json completed, all passed! +fd 36.json completed, all passed! +fd 39.json completed, all passed! +fd 46.json completed, all passed! +fd 4e.json completed, all passed! +fd 56.json completed, all passed! +fd 5e.json completed, all passed! +fd 66.json completed, all passed! +fd 6e.json completed, all passed! +fd 70.json completed, all passed! +fd 71.json completed, all passed! +fd 72.json completed, all passed! +fd 73.json completed, all passed! +fd 74.json completed, all passed! +fd 75.json completed, all passed! +fd 77.json completed, all passed! +fd 7e.json completed, all passed! +fd 86.json completed, all passed! +fd 8e.json completed, all passed! +fd 96.json completed, all passed! +fd 9e.json completed, all passed! +fd a6.json completed, all passed! +fd ae.json completed, all passed! +fd b6.json completed, all passed! +fd be.json completed, all passed! +fd e1.json completed, all passed! +fd e3.json completed: 999 passed, 1 FAILED +fd e5.json completed, all passed! +fd e9.json completed, all passed! +fd f9.json completed, all passed! +fe.json completed, all passed! +ff.json completed, all passed! + +passed: 626998, failed: 15002, total 98% +completed in 0m 32s diff --git a/tests/rad_tests/progress/2023-05-14-without-undoc-fixed-memory-wrapping.txt b/tests/rad_tests/progress/2023-05-14-without-undoc-fixed-memory-wrapping.txt new file mode 100644 index 0000000..81889aa --- /dev/null +++ b/tests/rad_tests/progress/2023-05-14-without-undoc-fixed-memory-wrapping.txt @@ -0,0 +1,647 @@ +Last run on 2023-05-14 at commit aaa7952dd0cf0ab6e33946ce0ae1aa91920e5405 + +00.json completed, all passed! +01.json completed, all passed! +02.json completed, all passed! +03.json completed, all passed! +04.json completed, all passed! +05.json completed, all passed! +06.json completed, all passed! +07.json completed, all passed! +08.json completed, all passed! +09.json completed, all passed! +0a.json completed, all passed! +0b.json completed, all passed! +0c.json completed, all passed! +0d.json completed, all passed! +0e.json completed, all passed! +0f.json completed, all passed! +10.json completed, all passed! +100.json completed, all passed! +101.json completed, all passed! +11.json completed, all passed! +12.json completed, all passed! +13.json completed, all passed! +14.json completed, all passed! +15.json completed, all passed! +16.json completed, all passed! +17.json completed, all passed! +18.json completed, all passed! +19.json completed, all passed! +1a.json completed, all passed! +1b.json completed, all passed! +1c.json completed, all passed! +1d.json completed, all passed! +1e.json completed, all passed! +1f.json completed, all passed! +20.json completed, all passed! +21.json completed, all passed! +22.json completed, all passed! +23.json completed, all passed! +24.json completed, all passed! +25.json completed, all passed! +26.json completed, all passed! +27.json completed: 547 passed, 453 FAILED +28.json completed, all passed! +29.json completed, all passed! +2a.json completed, all passed! +2b.json completed, all passed! +2c.json completed, all passed! +2d.json completed, all passed! +2e.json completed, all passed! +2f.json completed, all passed! +30.json completed, all passed! +31.json completed, all passed! +32.json completed, all passed! +33.json completed, all passed! +34.json completed, all passed! +35.json completed, all passed! +36.json completed, all passed! +37.json completed, all passed! +38.json completed, all passed! +39.json completed, all passed! +3a.json completed, all passed! +3b.json completed, all passed! +3c.json completed, all passed! +3d.json completed, all passed! +3e.json completed, all passed! +3f.json completed, all passed! +40.json completed, all passed! +41.json completed, all passed! +42.json completed, all passed! +43.json completed, all passed! +44.json completed, all passed! +45.json completed, all passed! +46.json completed, all passed! +47.json completed, all passed! +48.json completed, all passed! +49.json completed, all passed! +4a.json completed, all passed! +4b.json completed, all passed! +4c.json completed, all passed! +4d.json completed, all passed! +4e.json completed, all passed! +4f.json completed, all passed! +50.json completed, all passed! +51.json completed, all passed! +52.json completed, all passed! +53.json completed, all passed! +54.json completed, all passed! +55.json completed, all passed! +56.json completed, all passed! +57.json completed, all passed! +58.json completed, all passed! +59.json completed, all passed! +5a.json completed, all passed! +5b.json completed, all passed! +5c.json completed, all passed! +5d.json completed, all passed! +5e.json completed, all passed! +5f.json completed, all passed! +60.json completed, all passed! +61.json completed, all passed! +62.json completed, all passed! +63.json completed, all passed! +64.json completed, all passed! +65.json completed, all passed! +66.json completed, all passed! +67.json completed, all passed! +68.json completed, all passed! +69.json completed, all passed! +6a.json completed, all passed! +6b.json completed, all passed! +6c.json completed, all passed! +6d.json completed, all passed! +6e.json completed, all passed! +6f.json completed, all passed! +70.json completed, all passed! +71.json completed, all passed! +72.json completed, all passed! +73.json completed, all passed! +74.json completed, all passed! +75.json completed, all passed! +76.json completed, all passed! +77.json completed, all passed! +78.json completed, all passed! +79.json completed, all passed! +7a.json completed, all passed! +7b.json completed, all passed! +7c.json completed, all passed! +7d.json completed, all passed! +7e.json completed, all passed! +7f.json completed, all passed! +80.json completed, all passed! +81.json completed, all passed! +82.json completed, all passed! +83.json completed, all passed! +84.json completed, all passed! +85.json completed, all passed! +86.json completed, all passed! +87.json completed, all passed! +88.json completed, all passed! +89.json completed, all passed! +8a.json completed, all passed! +8b.json completed, all passed! +8c.json completed, all passed! +8d.json completed, all passed! +8e.json completed, all passed! +8f.json completed, all passed! +90.json completed, all passed! +91.json completed, all passed! +92.json completed, all passed! +93.json completed, all passed! +94.json completed, all passed! +95.json completed, all passed! +96.json completed, all passed! +97.json completed, all passed! +98.json completed, all passed! +99.json completed, all passed! +9a.json completed, all passed! +9b.json completed, all passed! +9c.json completed, all passed! +9d.json completed, all passed! +9e.json completed, all passed! +9f.json completed, all passed! +a0.json completed, all passed! +a1.json completed, all passed! +a2.json completed, all passed! +a3.json completed, all passed! +a4.json completed, all passed! +a5.json completed, all passed! +a6.json completed, all passed! +a7.json completed, all passed! +a8.json completed, all passed! +a9.json completed, all passed! +aa.json completed, all passed! +ab.json completed, all passed! +ac.json completed, all passed! +ad.json completed, all passed! +ae.json completed, all passed! +af.json completed, all passed! +b0.json completed, all passed! +b1.json completed, all passed! +b2.json completed, all passed! +b3.json completed, all passed! +b4.json completed, all passed! +b5.json completed, all passed! +b6.json completed, all passed! +b7.json completed, all passed! +b8.json completed, all passed! +b9.json completed, all passed! +ba.json completed, all passed! +bb.json completed, all passed! +bc.json completed, all passed! +bd.json completed, all passed! +be.json completed, all passed! +bf.json completed, all passed! +c0.json completed, all passed! +c1.json completed, all passed! +c2.json completed, all passed! +c3.json completed, all passed! +c4.json completed, all passed! +c5.json completed, all passed! +c6.json completed, all passed! +c7.json completed, all passed! +c8.json completed, all passed! +c9.json completed, all passed! +ca.json completed, all passed! +cb 00.json completed, all passed! +cb 01.json completed, all passed! +cb 02.json completed, all passed! +cb 03.json completed, all passed! +cb 04.json completed, all passed! +cb 05.json completed, all passed! +cb 06.json completed, all passed! +cb 07.json completed, all passed! +cb 08.json completed, all passed! +cb 09.json completed, all passed! +cb 0a.json completed, all passed! +cb 0b.json completed, all passed! +cb 0c.json completed, all passed! +cb 0d.json completed, all passed! +cb 0e.json completed, all passed! +cb 0f.json completed, all passed! +cb 10.json completed, all passed! +cb 11.json completed, all passed! +cb 12.json completed, all passed! +cb 13.json completed, all passed! +cb 14.json completed, all passed! +cb 15.json completed, all passed! +cb 16.json completed, all passed! +cb 17.json completed, all passed! +cb 18.json completed, all passed! +cb 19.json completed, all passed! +cb 1a.json completed, all passed! +cb 1b.json completed, all passed! +cb 1c.json completed, all passed! +cb 1d.json completed, all passed! +cb 1e.json completed, all passed! +cb 1f.json completed, all passed! +cb 20.json completed, all passed! +cb 21.json completed, all passed! +cb 22.json completed, all passed! +cb 23.json completed, all passed! +cb 24.json completed, all passed! +cb 25.json completed, all passed! +cb 26.json completed, all passed! +cb 27.json completed, all passed! +cb 28.json completed, all passed! +cb 29.json completed, all passed! +cb 2a.json completed, all passed! +cb 2b.json completed, all passed! +cb 2c.json completed, all passed! +cb 2d.json completed, all passed! +cb 2e.json completed, all passed! +cb 2f.json completed, all passed! +cb 38.json completed, all passed! +cb 39.json completed, all passed! +cb 3a.json completed, all passed! +cb 3b.json completed, all passed! +cb 3c.json completed, all passed! +cb 3d.json completed, all passed! +cb 3e.json completed, all passed! +cb 3f.json completed, all passed! +cb 40.json completed, all passed! +cb 41.json completed, all passed! +cb 42.json completed, all passed! +cb 43.json completed, all passed! +cb 44.json completed, all passed! +cb 45.json completed, all passed! +cb 46.json completed, all passed! +cb 47.json completed, all passed! +cb 48.json completed, all passed! +cb 49.json completed, all passed! +cb 4a.json completed, all passed! +cb 4b.json completed, all passed! +cb 4c.json completed, all passed! +cb 4d.json completed, all passed! +cb 4e.json completed, all passed! +cb 4f.json completed, all passed! +cb 50.json completed, all passed! +cb 51.json completed, all passed! +cb 52.json completed, all passed! +cb 53.json completed, all passed! +cb 54.json completed, all passed! +cb 55.json completed, all passed! +cb 56.json completed, all passed! +cb 57.json completed, all passed! +cb 58.json completed, all passed! +cb 59.json completed, all passed! +cb 5a.json completed, all passed! +cb 5b.json completed, all passed! +cb 5c.json completed, all passed! +cb 5d.json completed, all passed! +cb 5e.json completed, all passed! +cb 5f.json completed, all passed! +cb 60.json completed, all passed! +cb 61.json completed, all passed! +cb 62.json completed, all passed! +cb 63.json completed, all passed! +cb 64.json completed, all passed! +cb 65.json completed, all passed! +cb 66.json completed, all passed! +cb 67.json completed, all passed! +cb 68.json completed, all passed! +cb 69.json completed, all passed! +cb 6a.json completed, all passed! +cb 6b.json completed, all passed! +cb 6c.json completed, all passed! +cb 6d.json completed, all passed! +cb 6e.json completed, all passed! +cb 6f.json completed, all passed! +cb 70.json completed, all passed! +cb 71.json completed, all passed! +cb 72.json completed, all passed! +cb 73.json completed, all passed! +cb 74.json completed, all passed! +cb 75.json completed, all passed! +cb 76.json completed, all passed! +cb 77.json completed, all passed! +cb 78.json completed, all passed! +cb 79.json completed, all passed! +cb 7a.json completed, all passed! +cb 7b.json completed, all passed! +cb 7c.json completed, all passed! +cb 7d.json completed, all passed! +cb 7e.json completed, all passed! +cb 7f.json completed, all passed! +cb 80.json completed, all passed! +cb 81.json completed, all passed! +cb 82.json completed, all passed! +cb 83.json completed, all passed! +cb 84.json completed, all passed! +cb 85.json completed, all passed! +cb 86.json completed, all passed! +cb 87.json completed, all passed! +cb 88.json completed, all passed! +cb 89.json completed, all passed! +cb 8a.json completed, all passed! +cb 8b.json completed, all passed! +cb 8c.json completed, all passed! +cb 8d.json completed, all passed! +cb 8e.json completed, all passed! +cb 8f.json completed, all passed! +cb 90.json completed, all passed! +cb 91.json completed, all passed! +cb 92.json completed, all passed! +cb 93.json completed, all passed! +cb 94.json completed, all passed! +cb 95.json completed, all passed! +cb 96.json completed, all passed! +cb 97.json completed, all passed! +cb 98.json completed, all passed! +cb 99.json completed, all passed! +cb 9a.json completed, all passed! +cb 9b.json completed, all passed! +cb 9c.json completed, all passed! +cb 9d.json completed, all passed! +cb 9e.json completed, all passed! +cb 9f.json completed, all passed! +cb a0.json completed, all passed! +cb a1.json completed, all passed! +cb a2.json completed, all passed! +cb a3.json completed, all passed! +cb a4.json completed, all passed! +cb a5.json completed, all passed! +cb a6.json completed, all passed! +cb a7.json completed, all passed! +cb a8.json completed, all passed! +cb a9.json completed, all passed! +cb aa.json completed, all passed! +cb ab.json completed, all passed! +cb ac.json completed, all passed! +cb ad.json completed, all passed! +cb ae.json completed, all passed! +cb af.json completed, all passed! +cb b0.json completed, all passed! +cb b1.json completed, all passed! +cb b2.json completed, all passed! +cb b3.json completed, all passed! +cb b4.json completed, all passed! +cb b5.json completed, all passed! +cb b6.json completed, all passed! +cb b7.json completed, all passed! +cb b8.json completed, all passed! +cb b9.json completed, all passed! +cb ba.json completed, all passed! +cb bb.json completed, all passed! +cb bc.json completed, all passed! +cb bd.json completed, all passed! +cb be.json completed, all passed! +cb bf.json completed, all passed! +cb c0.json completed, all passed! +cb c1.json completed, all passed! +cb c2.json completed, all passed! +cb c3.json completed, all passed! +cb c4.json completed, all passed! +cb c5.json completed, all passed! +cb c6.json completed, all passed! +cb c7.json completed, all passed! +cb c8.json completed, all passed! +cb c9.json completed, all passed! +cb ca.json completed, all passed! +cb cb.json completed, all passed! +cb cc.json completed, all passed! +cb cd.json completed, all passed! +cb ce.json completed, all passed! +cb cf.json completed, all passed! +cb d0.json completed, all passed! +cb d1.json completed, all passed! +cb d2.json completed, all passed! +cb d3.json completed, all passed! +cb d4.json completed, all passed! +cb d5.json completed, all passed! +cb d6.json completed, all passed! +cb d7.json completed, all passed! +cb d8.json completed, all passed! +cb d9.json completed, all passed! +cb da.json completed, all passed! +cb db.json completed, all passed! +cb dc.json completed, all passed! +cb dd.json completed, all passed! +cb de.json completed, all passed! +cb df.json completed, all passed! +cb e0.json completed, all passed! +cb e1.json completed, all passed! +cb e2.json completed, all passed! +cb e3.json completed, all passed! +cb e4.json completed, all passed! +cb e5.json completed, all passed! +cb e6.json completed, all passed! +cb e7.json completed, all passed! +cb e8.json completed, all passed! +cb e9.json completed, all passed! +cb ea.json completed, all passed! +cb eb.json completed, all passed! +cb ec.json completed, all passed! +cb ed.json completed, all passed! +cb ee.json completed, all passed! +cb ef.json completed, all passed! +cb f0.json completed, all passed! +cb f1.json completed, all passed! +cb f2.json completed, all passed! +cb f3.json completed, all passed! +cb f4.json completed, all passed! +cb f5.json completed, all passed! +cb f6.json completed, all passed! +cb f7.json completed, all passed! +cb f8.json completed, all passed! +cb f9.json completed, all passed! +cb fa.json completed, all passed! +cb fb.json completed, all passed! +cb fc.json completed, all passed! +cb fd.json completed, all passed! +cb fe.json completed, all passed! +cb ff.json completed, all passed! +cc.json completed, all passed! +cd.json completed, all passed! +ce.json completed, all passed! +cf.json completed, all passed! +d0.json completed, all passed! +d1.json completed, all passed! +d2.json completed, all passed! +d3.json completed, all passed! +d4.json completed, all passed! +d5.json completed, all passed! +d6.json completed, all passed! +d7.json completed, all passed! +d8.json completed, all passed! +d9.json completed, all passed! +da.json completed, all passed! +db.json completed, all passed! +dc.json completed, all passed! +dd 09.json completed, all passed! +dd 19.json completed, all passed! +dd 29.json completed, all passed! +dd 36.json completed, all passed! +dd 39.json completed, all passed! +dd 46.json completed, all passed! +dd 4e.json completed, all passed! +dd 56.json completed, all passed! +dd 5e.json completed, all passed! +dd 66.json completed, all passed! +dd 6e.json completed, all passed! +dd 70.json completed, all passed! +dd 71.json completed, all passed! +dd 72.json completed, all passed! +dd 73.json completed, all passed! +dd 74.json completed, all passed! +dd 75.json completed, all passed! +dd 77.json completed, all passed! +dd 7e.json completed, all passed! +dd 86.json completed, all passed! +dd 8e.json completed, all passed! +dd 96.json completed, all passed! +dd 9e.json completed, all passed! +dd a6.json completed, all passed! +dd ae.json completed, all passed! +dd b6.json completed, all passed! +dd be.json completed, all passed! +dd e1.json completed, all passed! +dd e3.json completed, all passed! +dd e5.json completed, all passed! +dd e9.json completed, all passed! +dd f9.json completed, all passed! +de.json completed, all passed! +df.json completed, all passed! +e0.json completed, all passed! +e1.json completed, all passed! +e2.json completed, all passed! +e3.json completed, all passed! +e4.json completed, all passed! +e5.json completed, all passed! +e6.json completed, all passed! +e7.json completed, all passed! +e8.json completed, all passed! +e9.json completed, all passed! +ea.json completed, all passed! +eb.json completed, all passed! +ec.json completed, all passed! +ed 40.json completed, all passed! +ed 41.json completed, all passed! +ed 42.json completed, all passed! +ed 43.json completed, all passed! +ed 44.json completed, all passed! +ed 45.json completed, all passed! +ed 46.json completed, all passed! +ed 47.json completed, all passed! +ed 48.json completed, all passed! +ed 49.json completed, all passed! +ed 4a.json completed, all passed! +ed 4b.json completed, all passed! +ed 4c.json completed, all passed! +ed 4d.json completed, all passed! +ed 4e.json completed, all passed! +ed 4f.json completed, all passed! +ed 50.json completed, all passed! +ed 51.json completed, all passed! +ed 52.json completed, all passed! +ed 53.json completed, all passed! +ed 54.json completed, all passed! +ed 55.json completed, all passed! +ed 56.json completed, all passed! +ed 57.json completed, all passed! +ed 58.json completed, all passed! +ed 59.json completed, all passed! +ed 5a.json completed, all passed! +ed 5b.json completed, all passed! +ed 5c.json completed, all passed! +ed 5d.json completed, all passed! +ed 5e.json completed, all passed! +ed 5f.json completed, all passed! +ed 60.json completed, all passed! +ed 61.json completed, all passed! +ed 62.json completed, all passed! +ed 64.json completed, all passed! +ed 65.json completed, all passed! +ed 66.json completed, all passed! +ed 67.json completed, all passed! +ed 68.json completed, all passed! +ed 69.json completed, all passed! +ed 6a.json completed, all passed! +ed 6c.json completed, all passed! +ed 6d.json completed, all passed! +ed 6e.json completed, all passed! +ed 6f.json completed, all passed! +ed 72.json completed, all passed! +ed 73.json completed, all passed! +ed 74.json completed, all passed! +ed 75.json completed, all passed! +ed 76.json completed, all passed! +ed 77.json completed, all passed! +ed 78.json completed, all passed! +ed 79.json completed, all passed! +ed 7a.json completed, all passed! +ed 7b.json completed, all passed! +ed 7c.json completed, all passed! +ed 7d.json completed, all passed! +ed 7e.json completed, all passed! +ed 7f.json completed, all passed! +ed a0.json completed, all passed! +ed a1.json completed: 0 passed, 1000 FAILED +ed a2.json completed: 13 passed, 987 FAILED +ed a3.json completed: 0 passed, 1000 FAILED +ed a8.json completed, all passed! +ed a9.json completed: 0 passed, 1000 FAILED +ed aa.json completed: 0 passed, 1000 FAILED +ed ab.json completed: 0 passed, 1000 FAILED +ed b0.json completed, all passed! +ed b1.json completed: 0 passed, 1000 FAILED +ed b2.json completed: 0 passed, 1000 FAILED +ed b3.json completed: 0 passed, 1000 FAILED +ed b8.json completed, all passed! +ed b9.json completed: 0 passed, 1000 FAILED +ed ba.json completed: 0 passed, 1000 FAILED +ed bb.json completed: 0 passed, 1000 FAILED +ee.json completed, all passed! +ef.json completed, all passed! +f0.json completed, all passed! +f1.json completed, all passed! +f2.json completed, all passed! +f3.json completed, all passed! +f4.json completed, all passed! +f5.json completed, all passed! +f6.json completed, all passed! +f7.json completed, all passed! +f8.json completed, all passed! +f9.json completed, all passed! +fa.json completed, all passed! +fb.json completed, all passed! +fc.json completed, all passed! +fd 09.json completed, all passed! +fd 19.json completed, all passed! +fd 29.json completed, all passed! +fd 36.json completed, all passed! +fd 39.json completed, all passed! +fd 46.json completed, all passed! +fd 4e.json completed, all passed! +fd 56.json completed, all passed! +fd 5e.json completed, all passed! +fd 66.json completed, all passed! +fd 6e.json completed, all passed! +fd 70.json completed, all passed! +fd 71.json completed, all passed! +fd 72.json completed, all passed! +fd 73.json completed, all passed! +fd 74.json completed, all passed! +fd 75.json completed, all passed! +fd 77.json completed, all passed! +fd 7e.json completed, all passed! +fd 86.json completed, all passed! +fd 8e.json completed, all passed! +fd 96.json completed, all passed! +fd 9e.json completed, all passed! +fd a6.json completed, all passed! +fd ae.json completed, all passed! +fd b6.json completed, all passed! +fd be.json completed, all passed! +fd e1.json completed, all passed! +fd e3.json completed, all passed! +fd e5.json completed, all passed! +fd e9.json completed, all passed! +fd f9.json completed, all passed! +fe.json completed, all passed! +ff.json completed, all passed! + +passed: 629560, failed: 12440, total 98% +completed in 0m 32s diff --git a/tests/rad_tests/run_all.sh b/tests/rad_tests/run_all.sh index 30c1e49..b2ea62e 100755 --- a/tests/rad_tests/run_all.sh +++ b/tests/rad_tests/run_all.sh @@ -7,5 +7,5 @@ RESULTS=latest.txt cd $LOCATION echo "Last run on $DATE at commit $COMMIT" | tee $RESULTS echo "" | tee -a $RESULTS - cargo run -- -q --testsuite "../jsmoo/misc/tests/GeneratedTests/z80/v1/" | tee -a $RESULTS + cargo run -- -q --testsuite "../jsmoo/misc/tests/GeneratedTests/z80/v1/" --check-timings | tee -a $RESULTS }