[INFO] cloning repository https://github.com/Awfa/advent_of_code_2019 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Awfa/advent_of_code_2019" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAwfa%2Fadvent_of_code_2019", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAwfa%2Fadvent_of_code_2019'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 2d75360aabe9fa7e9ad65021d8a2d38e926db8b3 [INFO] checking Awfa/advent_of_code_2019 against try#8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8 for pr-82565 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAwfa%2Fadvent_of_code_2019" "/workspace/builds/worker-4/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/Awfa/advent_of_code_2019 on toolchain 8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/Awfa/advent_of_code_2019 [INFO] finished tweaking git repo https://github.com/Awfa/advent_of_code_2019 [INFO] tweaked toml for git repo https://github.com/Awfa/advent_of_code_2019 written to /workspace/builds/worker-4/source/Cargo.toml [INFO] crate git repo https://github.com/Awfa/advent_of_code_2019 already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded unicode-xid v0.2.0 [INFO] [stderr] Downloaded proc-macro2 v1.0.6 [INFO] [stderr] Downloaded quote v1.0.2 [INFO] [stderr] Downloaded syn v1.0.11 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:f2f6bcd4b43ebee4e173f653a26493129bdb64017c85f916b780ca7fbdbaa79d" "/opt/rustwide/cargo-home/bin/cargo" "+8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 4e4feebf51c8f2610ab3a7ee46c21695b35b399a223fb3f776863a9e6309a5f5 [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "4e4feebf51c8f2610ab3a7ee46c21695b35b399a223fb3f776863a9e6309a5f5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "4e4feebf51c8f2610ab3a7ee46c21695b35b399a223fb3f776863a9e6309a5f5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4e4feebf51c8f2610ab3a7ee46c21695b35b399a223fb3f776863a9e6309a5f5", kill_on_drop: false }` [INFO] [stdout] 4e4feebf51c8f2610ab3a7ee46c21695b35b399a223fb3f776863a9e6309a5f5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:f2f6bcd4b43ebee4e173f653a26493129bdb64017c85f916b780ca7fbdbaa79d" "/opt/rustwide/cargo-home/bin/cargo" "+8e3afc79c11f48cb3acd1be5b3b7de98fe3f93a8" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e49676c6bb997ab32c67b08c29f95a4d6367ceece5aef018647ace9075d99bec [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "e49676c6bb997ab32c67b08c29f95a4d6367ceece5aef018647ace9075d99bec", kill_on_drop: false }` [INFO] [stderr] Compiling unicode-xid v0.2.0 [INFO] [stderr] Compiling proc-macro2 v1.0.6 [INFO] [stderr] Compiling quote v1.0.2 [INFO] [stderr] Compiling syn v1.0.11 [INFO] [stderr] Compiling opcode-macro v0.1.0 (/opt/rustwide/workdir/opcode-macro) [INFO] [stdout] warning: field is never read: `separator` [INFO] [stdout] --> opcode-macro/src/lib.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 132 | separator: Token![:], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `keyword` [INFO] [stdout] --> opcode-macro/src/lib.rs:148:9 [INFO] [stdout] | [INFO] [stdout] 148 | keyword: kw::ReadOnly [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `keyword` [INFO] [stdout] --> opcode-macro/src/lib.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | keyword: kw::Writable [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `separator` [INFO] [stdout] --> opcode-macro/src/lib.rs:175:9 [INFO] [stdout] | [INFO] [stdout] 175 | separator: Token![:], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `separator` [INFO] [stdout] --> opcode-macro/src/lib.rs:183:9 [INFO] [stdout] | [INFO] [stdout] 183 | separator: Token![:], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 5 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking advent_of_code_2019 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] pub enum OpCode [INFO] [stdout] { [INFO] [stdout] Add, Multiply, Input, Output, JumpIfTrue, JumpIfFalse, LessThan, Equals, [INFO] [stdout] End [INFO] [stdout] } impl OpCode [INFO] [stdout] { [INFO] [stdout] fn [INFO] [stdout] get_current_instruction(memory : & [EmulatorMemoryType], [INFO] [stdout] instruction_pointer : usize) -> Result < [INFO] [stdout] (OpCode, impl Iterator < Item = Result < ParameterMode, EmulatorError >>), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] let instruction_value = * memory . get(instruction_pointer) . [INFO] [stdout] ok_or(EmulatorError :: InstructionPointerOutOfBounds [INFO] [stdout] { position : instruction_pointer, }) ? ; let instruction = [INFO] [stdout] match(instruction_value % 100) [INFO] [stdout] { [INFO] [stdout] 1 => Ok(OpCode :: Add), 2 => Ok(OpCode :: Multiply), 3 => [INFO] [stdout] Ok(OpCode :: Input), 4 => Ok(OpCode :: Output), 5 => [INFO] [stdout] Ok(OpCode :: JumpIfTrue), 6 => Ok(OpCode :: JumpIfFalse), 7 => [INFO] [stdout] Ok(OpCode :: LessThan), 8 => Ok(OpCode :: Equals), 99 => [INFO] [stdout] Ok(OpCode :: End), _ => [INFO] [stdout] Err(EmulatorError :: InvalidInstruction [INFO] [stdout] { [INFO] [stdout] value_found : instruction_value, position : [INFO] [stdout] instruction_pointer [INFO] [stdout] }) [INFO] [stdout] } ? ; let parameter_mode_iterator = [INFO] [stdout] { [INFO] [stdout] let mut parameter_mode_digits = instruction_value / 100 ; std :: [INFO] [stdout] iter :: [INFO] [stdout] from_fn(move || [INFO] [stdout] { [INFO] [stdout] let parameter_mode_digit = parameter_mode_digits % 10 [INFO] [stdout] ; let result = match parameter_mode_digit [INFO] [stdout] { [INFO] [stdout] 0 => Ok(ParameterMode :: Position), 1 => [INFO] [stdout] Ok(ParameterMode :: Immediate), _ => [INFO] [stdout] Err(EmulatorError :: InvalidParameterMode [INFO] [stdout] { [INFO] [stdout] value_found : parameter_mode_digit, [INFO] [stdout] position : instruction_pointer [INFO] [stdout] }), [INFO] [stdout] } ; parameter_mode_digits /= 10 ; Some(result) [INFO] [stdout] }) [INFO] [stdout] } ; Ok((instruction, parameter_mode_iterator)) [INFO] [stdout] } fn to_opcode(& self) -> EmulatorMemoryType [INFO] [stdout] { [INFO] [stdout] match self [INFO] [stdout] { [INFO] [stdout] OpCode :: Add => 1, OpCode :: Multiply => 2, OpCode :: Input => 3, [INFO] [stdout] OpCode :: Output => 4, OpCode :: JumpIfTrue => 5, OpCode :: [INFO] [stdout] JumpIfFalse => 6, OpCode :: LessThan => 7, OpCode :: Equals => 8, [INFO] [stdout] OpCode :: End => 99, [INFO] [stdout] } [INFO] [stdout] } fn [INFO] [stdout] handle_add(addend1 : EmulatorMemoryType, addend2 : EmulatorMemoryType, [INFO] [stdout] dest : & mut EmulatorMemoryType) -> Result < (), EmulatorError [INFO] [stdout] > { Ok({ * dest = addend1 + addend2 ; }) } fn [INFO] [stdout] handle_multiply(factor1 : EmulatorMemoryType, factor2 : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > { Ok({ * dest = factor1 * factor2 ; }) } fn [INFO] [stdout] handle_input < I : Iterator < Item = Result < EmulatorMemoryType, [INFO] [stdout] EmulatorError >> > (input_iter : & mut I, dest : & mut EmulatorMemoryType) [INFO] [stdout] -> Result < (), EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] * dest = input_iter . next() . [INFO] [stdout] ok_or(EmulatorError :: InputNonExistent) ? ? ; [INFO] [stdout] }) [INFO] [stdout] } fn handle_output(value : EmulatorMemoryType) -> Result < [INFO] [stdout] EmulatorMemoryType, EmulatorError > { Ok({ value }) } fn [INFO] [stdout] handle_jumpiftrue(new_instruction_pointer : & mut Option < [INFO] [stdout] EmulatorMemoryType >, value : EmulatorMemoryType, [INFO] [stdout] new_address : EmulatorMemoryType) -> Result < (), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] if value != 0 [INFO] [stdout] { * new_instruction_pointer = Some(new_address) ; } [INFO] [stdout] }) [INFO] [stdout] } fn [INFO] [stdout] handle_jumpiffalse(new_instruction_pointer : & mut Option < [INFO] [stdout] EmulatorMemoryType >, value : EmulatorMemoryType, [INFO] [stdout] new_address : EmulatorMemoryType) -> Result < (), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] if value == 0 [INFO] [stdout] { * new_instruction_pointer = Some(new_address) ; } [INFO] [stdout] }) [INFO] [stdout] } fn [INFO] [stdout] handle_lessthan(left_side : EmulatorMemoryType, right_side : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > [INFO] [stdout] { Ok({ * dest = if left_side < right_side { 1 } else { 0 } ; }) } fn [INFO] [stdout] handle_equals(left_side : EmulatorMemoryType, right_side : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > [INFO] [stdout] { Ok({ * dest = if left_side == right_side { 1 } else { 0 } ; }) } fn [INFO] [stdout] handle_end() -> Result < (), EmulatorError > { Ok({ }) } fn run < I : [INFO] [stdout] Iterator < Item = Result < EmulatorMemoryType, EmulatorError >> > [INFO] [stdout] (memory : & mut [EmulatorMemoryType], instruction_pointer : usize, [INFO] [stdout] input_iter : & mut I) -> Result < [INFO] [stdout] (Option < usize >, Option < EmulatorMemoryType >), EmulatorError > [INFO] [stdout] { [INFO] [stdout] let(instruction, mut parameter_mode_iterator) = OpCode :: [INFO] [stdout] get_current_instruction(memory, instruction_pointer) ? ; let mut [INFO] [stdout] new_instruction_pointer = None ; match instruction [INFO] [stdout] { [INFO] [stdout] OpCode :: Add => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let addend1 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let addend2 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: handle_add(addend1, addend2, dest) [INFO] [stdout] ? ; Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Multiply => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let factor1 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let factor2 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_multiply(factor1, factor2, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Input => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 1usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 1usize, found : instruction_pointer + 1 + 1usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 0usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: handle_input(input_iter, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 2usize), None)) [INFO] [stdout] }, OpCode :: Output => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 1usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 1usize, found : instruction_pointer + 1 + 1usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let output : EmulatorMemoryType = OpCode :: [INFO] [stdout] handle_output(value) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 2usize), Some(output))) [INFO] [stdout] }, OpCode :: JumpIfTrue => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 2usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 2usize, found : instruction_pointer + 1 + 2usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let new_address : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_jumpiftrue(& mut new_instruction_pointer, value, [INFO] [stdout] new_address) ? ; [INFO] [stdout] Ok((Some(new_instruction_pointer . [INFO] [stdout] map(| value | std :: convert :: TryInto :: < usize > [INFO] [stdout] :: try_into(value) . [INFO] [stdout] or(Err(EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { value_found : value, position : 0 }))) . [INFO] [stdout] unwrap_or(Ok(instruction_pointer + 3usize)) ?), [INFO] [stdout] None)) [INFO] [stdout] }, OpCode :: JumpIfFalse => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 2usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 2usize, found : instruction_pointer + 1 + 2usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let new_address : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_jumpiffalse(& mut new_instruction_pointer, value, [INFO] [stdout] new_address) ? ; [INFO] [stdout] Ok((Some(new_instruction_pointer . [INFO] [stdout] map(| value | std :: convert :: TryInto :: < usize > [INFO] [stdout] :: try_into(value) . [INFO] [stdout] or(Err(EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { value_found : value, position : 0 }))) . [INFO] [stdout] unwrap_or(Ok(instruction_pointer + 3usize)) ?), [INFO] [stdout] None)) [INFO] [stdout] }, OpCode :: LessThan => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let left_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let right_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_lessthan(left_side, right_side, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Equals => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let left_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let right_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_equals(left_side, right_side, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: End => [INFO] [stdout] { let _ : () = OpCode :: handle_end() ? ; Ok((None, None)) } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] pub enum OpCode [INFO] [stdout] { [INFO] [stdout] Add, Multiply, Input, Output, JumpIfTrue, JumpIfFalse, LessThan, Equals, [INFO] [stdout] End [INFO] [stdout] } impl OpCode [INFO] [stdout] { [INFO] [stdout] fn [INFO] [stdout] get_current_instruction(memory : & [EmulatorMemoryType], [INFO] [stdout] instruction_pointer : usize) -> Result < [INFO] [stdout] (OpCode, impl Iterator < Item = Result < ParameterMode, EmulatorError >>), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] let instruction_value = * memory . get(instruction_pointer) . [INFO] [stdout] ok_or(EmulatorError :: InstructionPointerOutOfBounds [INFO] [stdout] { position : instruction_pointer, }) ? ; let instruction = [INFO] [stdout] match(instruction_value % 100) [INFO] [stdout] { [INFO] [stdout] 1 => Ok(OpCode :: Add), 2 => Ok(OpCode :: Multiply), 3 => [INFO] [stdout] Ok(OpCode :: Input), 4 => Ok(OpCode :: Output), 5 => [INFO] [stdout] Ok(OpCode :: JumpIfTrue), 6 => Ok(OpCode :: JumpIfFalse), 7 => [INFO] [stdout] Ok(OpCode :: LessThan), 8 => Ok(OpCode :: Equals), 99 => [INFO] [stdout] Ok(OpCode :: End), _ => [INFO] [stdout] Err(EmulatorError :: InvalidInstruction [INFO] [stdout] { [INFO] [stdout] value_found : instruction_value, position : [INFO] [stdout] instruction_pointer [INFO] [stdout] }) [INFO] [stdout] } ? ; let parameter_mode_iterator = [INFO] [stdout] { [INFO] [stdout] let mut parameter_mode_digits = instruction_value / 100 ; std :: [INFO] [stdout] iter :: [INFO] [stdout] from_fn(move || [INFO] [stdout] { [INFO] [stdout] let parameter_mode_digit = parameter_mode_digits % 10 [INFO] [stdout] ; let result = match parameter_mode_digit [INFO] [stdout] { [INFO] [stdout] 0 => Ok(ParameterMode :: Position), 1 => [INFO] [stdout] Ok(ParameterMode :: Immediate), _ => [INFO] [stdout] Err(EmulatorError :: InvalidParameterMode [INFO] [stdout] { [INFO] [stdout] value_found : parameter_mode_digit, [INFO] [stdout] position : instruction_pointer [INFO] [stdout] }), [INFO] [stdout] } ; parameter_mode_digits /= 10 ; Some(result) [INFO] [stdout] }) [INFO] [stdout] } ; Ok((instruction, parameter_mode_iterator)) [INFO] [stdout] } fn to_opcode(& self) -> EmulatorMemoryType [INFO] [stdout] { [INFO] [stdout] match self [INFO] [stdout] { [INFO] [stdout] OpCode :: Add => 1, OpCode :: Multiply => 2, OpCode :: Input => 3, [INFO] [stdout] OpCode :: Output => 4, OpCode :: JumpIfTrue => 5, OpCode :: [INFO] [stdout] JumpIfFalse => 6, OpCode :: LessThan => 7, OpCode :: Equals => 8, [INFO] [stdout] OpCode :: End => 99, [INFO] [stdout] } [INFO] [stdout] } fn [INFO] [stdout] handle_add(addend1 : EmulatorMemoryType, addend2 : EmulatorMemoryType, [INFO] [stdout] dest : & mut EmulatorMemoryType) -> Result < (), EmulatorError [INFO] [stdout] > { Ok({ * dest = addend1 + addend2 ; }) } fn [INFO] [stdout] handle_multiply(factor1 : EmulatorMemoryType, factor2 : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > { Ok({ * dest = factor1 * factor2 ; }) } fn [INFO] [stdout] handle_input < I : Iterator < Item = Result < EmulatorMemoryType, [INFO] [stdout] EmulatorError >> > (input_iter : & mut I, dest : & mut EmulatorMemoryType) [INFO] [stdout] -> Result < (), EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] * dest = input_iter . next() . [INFO] [stdout] ok_or(EmulatorError :: InputNonExistent) ? ? ; [INFO] [stdout] }) [INFO] [stdout] } fn handle_output(value : EmulatorMemoryType) -> Result < [INFO] [stdout] EmulatorMemoryType, EmulatorError > { Ok({ value }) } fn [INFO] [stdout] handle_jumpiftrue(new_instruction_pointer : & mut Option < [INFO] [stdout] EmulatorMemoryType >, value : EmulatorMemoryType, [INFO] [stdout] new_address : EmulatorMemoryType) -> Result < (), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] if value != 0 [INFO] [stdout] { * new_instruction_pointer = Some(new_address) ; } [INFO] [stdout] }) [INFO] [stdout] } fn [INFO] [stdout] handle_jumpiffalse(new_instruction_pointer : & mut Option < [INFO] [stdout] EmulatorMemoryType >, value : EmulatorMemoryType, [INFO] [stdout] new_address : EmulatorMemoryType) -> Result < (), [INFO] [stdout] EmulatorError > [INFO] [stdout] { [INFO] [stdout] Ok({ [INFO] [stdout] if value == 0 [INFO] [stdout] { * new_instruction_pointer = Some(new_address) ; } [INFO] [stdout] }) [INFO] [stdout] } fn [INFO] [stdout] handle_lessthan(left_side : EmulatorMemoryType, right_side : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > [INFO] [stdout] { Ok({ * dest = if left_side < right_side { 1 } else { 0 } ; }) } fn [INFO] [stdout] handle_equals(left_side : EmulatorMemoryType, right_side : [INFO] [stdout] EmulatorMemoryType, dest : & mut EmulatorMemoryType) -> [INFO] [stdout] Result < (), EmulatorError > [INFO] [stdout] { Ok({ * dest = if left_side == right_side { 1 } else { 0 } ; }) } fn [INFO] [stdout] handle_end() -> Result < (), EmulatorError > { Ok({ }) } fn run < I : [INFO] [stdout] Iterator < Item = Result < EmulatorMemoryType, EmulatorError >> > [INFO] [stdout] (memory : & mut [EmulatorMemoryType], instruction_pointer : usize, [INFO] [stdout] input_iter : & mut I) -> Result < [INFO] [stdout] (Option < usize >, Option < EmulatorMemoryType >), EmulatorError > [INFO] [stdout] { [INFO] [stdout] let(instruction, mut parameter_mode_iterator) = OpCode :: [INFO] [stdout] get_current_instruction(memory, instruction_pointer) ? ; let mut [INFO] [stdout] new_instruction_pointer = None ; match instruction [INFO] [stdout] { [INFO] [stdout] OpCode :: Add => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let addend1 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let addend2 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: handle_add(addend1, addend2, dest) [INFO] [stdout] ? ; Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Multiply => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let factor1 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let factor2 : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_multiply(factor1, factor2, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Input => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 1usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 1usize, found : instruction_pointer + 1 + 1usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 0usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: handle_input(input_iter, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 2usize), None)) [INFO] [stdout] }, OpCode :: Output => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 1usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 1usize, found : instruction_pointer + 1 + 1usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let output : EmulatorMemoryType = OpCode :: [INFO] [stdout] handle_output(value) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 2usize), Some(output))) [INFO] [stdout] }, OpCode :: JumpIfTrue => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 2usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 2usize, found : instruction_pointer + 1 + 2usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let new_address : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_jumpiftrue(& mut new_instruction_pointer, value, [INFO] [stdout] new_address) ? ; [INFO] [stdout] Ok((Some(new_instruction_pointer . [INFO] [stdout] map(| value | std :: convert :: TryInto :: < usize > [INFO] [stdout] :: try_into(value) . [INFO] [stdout] or(Err(EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { value_found : value, position : 0 }))) . [INFO] [stdout] unwrap_or(Ok(instruction_pointer + 3usize)) ?), [INFO] [stdout] None)) [INFO] [stdout] }, OpCode :: JumpIfFalse => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 2usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 2usize, found : instruction_pointer + 1 + 2usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let value : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let new_address : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_jumpiffalse(& mut new_instruction_pointer, value, [INFO] [stdout] new_address) ? ; [INFO] [stdout] Ok((Some(new_instruction_pointer . [INFO] [stdout] map(| value | std :: convert :: TryInto :: < usize > [INFO] [stdout] :: try_into(value) . [INFO] [stdout] or(Err(EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { value_found : value, position : 0 }))) . [INFO] [stdout] unwrap_or(Ok(instruction_pointer + 3usize)) ?), [INFO] [stdout] None)) [INFO] [stdout] }, OpCode :: LessThan => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let left_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let right_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_lessthan(left_side, right_side, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: Equals => [INFO] [stdout] { [INFO] [stdout] if instruction_pointer + 1 + 3usize >= memory . len() [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: NotEnoughParametersForInstruction [INFO] [stdout] { [INFO] [stdout] instruction : instruction . to_opcode(), expected [INFO] [stdout] : 3usize, found : instruction_pointer + 1 + 3usize [INFO] [stdout] - memory . len(), [INFO] [stdout] }) [INFO] [stdout] } let left_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 0usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 0usize + 1] } [INFO] [stdout] } ; let right_side : EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 1usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] * memory . get(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { memory [instruction_pointer + 1usize + 1] } [INFO] [stdout] } ; let dest : & mut EmulatorMemoryType = match [INFO] [stdout] parameter_mode_iterator . next() . unwrap() ? [INFO] [stdout] { [INFO] [stdout] ParameterMode :: Position => [INFO] [stdout] { [INFO] [stdout] let parameter_location = instruction_pointer + 2usize [INFO] [stdout] + 1 ; let address = memory [parameter_location] ; let [INFO] [stdout] error = EmulatorError :: InvalidMemoryLocation [INFO] [stdout] { [INFO] [stdout] value_found : address, position : [INFO] [stdout] parameter_location, [INFO] [stdout] } ; let address_converted = std :: convert :: TryInto [INFO] [stdout] :: < usize > :: try_into(address) . or(Err(error)) ? ; [INFO] [stdout] memory . get_mut(address_converted) . ok_or(error) ? [INFO] [stdout] }, ParameterMode :: Immediate => [INFO] [stdout] { [INFO] [stdout] return [INFO] [stdout] Err(EmulatorError :: [INFO] [stdout] UnexpectedParameterModeForWritable [INFO] [stdout] { [INFO] [stdout] value_found : 1, position : [INFO] [stdout] instruction_pointer + 2usize + 1, [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] } ; let _ : () = OpCode :: [INFO] [stdout] handle_equals(left_side, right_side, dest) ? ; [INFO] [stdout] Ok((Some(instruction_pointer + 4usize), None)) [INFO] [stdout] }, OpCode :: End => [INFO] [stdout] { let _ : () = OpCode :: handle_end() ? ; Ok((None, None)) } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 20.48s [INFO] running `Command { std: "docker" "inspect" "e49676c6bb997ab32c67b08c29f95a4d6367ceece5aef018647ace9075d99bec", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e49676c6bb997ab32c67b08c29f95a4d6367ceece5aef018647ace9075d99bec", kill_on_drop: false }` [INFO] [stdout] e49676c6bb997ab32c67b08c29f95a4d6367ceece5aef018647ace9075d99bec