[INFO] updating cached repository https://github.com/bhase/raytracerchallenge [INFO] running `"git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "-c" "remote.origin.fetch=refs/heads/*:refs/heads/*" "fetch" "origin" "--force" "--prune"` [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e8ae197a78c408803ba0318af7c813218e1003e6 [INFO] testing bhase/raytracerchallenge against beta-2020-06-03 for beta-1.45-1 [INFO] running `"git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbhase%2Fraytracerchallenge" "/workspace/builds/worker-2/source"` [INFO] [stderr] Cloning into '/workspace/builds/worker-2/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/bhase/raytracerchallenge on toolchain beta-2020-06-03 [INFO] running `"/workspace/cargo-home/bin/cargo" "+beta-2020-06-03" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started tweaking git repo https://github.com/bhase/raytracerchallenge [INFO] removed 0 missing tests [INFO] finished tweaking git repo https://github.com/bhase/raytracerchallenge [INFO] tweaked toml for git repo https://github.com/bhase/raytracerchallenge written to /workspace/builds/worker-2/source/Cargo.toml [INFO] crate git repo https://github.com/bhase/raytracerchallenge already has a lockfile, it will not be regenerated [INFO] running `"/workspace/cargo-home/bin/cargo" "+beta-2020-06-03" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/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" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2020-06-03" "build" "--frozen"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 8c92351360b8b57fbed9e2bf268f221d2642499c0ab7d11e4d7b070073817e7c [INFO] running `"docker" "start" "-a" "8c92351360b8b57fbed9e2bf268f221d2642499c0ab7d11e4d7b070073817e7c"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Compiling raytracer_challenge v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.04s [INFO] running `"docker" "inspect" "8c92351360b8b57fbed9e2bf268f221d2642499c0ab7d11e4d7b070073817e7c"` [INFO] running `"docker" "rm" "-f" "8c92351360b8b57fbed9e2bf268f221d2642499c0ab7d11e4d7b070073817e7c"` [INFO] [stdout] 8c92351360b8b57fbed9e2bf268f221d2642499c0ab7d11e4d7b070073817e7c [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/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" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2020-06-03" "test" "--frozen" "--no-run"` [INFO] [stdout] f68e297d5de426c898a62b9b8afde776e980eec6dc6cfc7128def06520d34668 [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `"docker" "start" "-a" "f68e297d5de426c898a62b9b8afde776e980eec6dc6cfc7128def06520d34668"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Compiling utf8-ranges v1.0.1 [INFO] [stderr] Compiling crossbeam-utils v0.5.0 [INFO] [stderr] Compiling same-file v1.0.3 [INFO] [stderr] Compiling pest v1.0.6 [INFO] [stderr] Compiling pathdiff v0.1.0 [INFO] [stderr] Compiling termcolor v0.3.6 [INFO] [stderr] Compiling term_size v0.3.1 [INFO] [stderr] Compiling atty v0.2.11 [INFO] [stderr] Compiling memchr v2.1.0 [INFO] [stderr] Compiling owning_ref v0.3.3 [INFO] [stderr] Compiling regex-syntax v0.6.2 [INFO] [stderr] Compiling log v0.4.5 [INFO] [stderr] Compiling smallvec v0.6.5 [INFO] [stderr] Compiling derive_builder_core v0.2.0 [INFO] [stderr] Compiling parking_lot_core v0.3.1 [INFO] [stderr] Compiling textwrap v0.10.0 [INFO] [stderr] Compiling walkdir v2.2.5 [INFO] [stderr] Compiling crossbeam-epoch v0.6.0 [INFO] [stderr] Compiling lock_api v0.1.4 [INFO] [stderr] Compiling clap v2.32.0 [INFO] [stderr] Compiling pest_derive v1.0.8 [INFO] [stderr] Compiling derive_builder v0.5.1 [INFO] [stderr] Compiling parking_lot v0.6.4 [INFO] [stderr] Compiling aho-corasick v0.6.8 [INFO] [stderr] Compiling crossbeam-channel v0.2.6 [INFO] [stderr] Compiling regex v1.0.5 [INFO] [stderr] Compiling gherkin_rust v0.4.1 [INFO] [stderr] Compiling globset v0.4.2 [INFO] [stderr] Compiling ignore v0.4.4 [INFO] [stderr] Compiling globwalk v0.5.0 [INFO] [stderr] Compiling cucumber_rust v0.5.0 [INFO] [stderr] Compiling raytracer_challenge v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 48.54s [INFO] running `"docker" "inspect" "f68e297d5de426c898a62b9b8afde776e980eec6dc6cfc7128def06520d34668"` [INFO] running `"docker" "rm" "-f" "f68e297d5de426c898a62b9b8afde776e980eec6dc6cfc7128def06520d34668"` [INFO] [stdout] f68e297d5de426c898a62b9b8afde776e980eec6dc6cfc7128def06520d34668 [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/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" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2020-06-03" "test" "--frozen"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 9e783eac4001fb9c7c9e29a7df69180e5d8646a7ac1c372c274e46a640787092 [INFO] running `"docker" "start" "-a" "9e783eac4001fb9c7c9e29a7df69180e5d8646a7ac1c372c274e46a640787092"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 0.43s [INFO] [stderr] Running /opt/rustwide/target/debug/deps/raytracer_challenge-3fddd4b4b96d7c69 [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [INFO] [stdout] [INFO] [stderr] Running /opt/rustwide/target/debug/deps/raytracer-aab2ec6a338cac10 [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [INFO] [stdout] [INFO] [stderr] Running /opt/rustwide/target/debug/deps/cucumber-3a53f164351f04e4 [INFO] [stdout] [Cucumber v0.5.0] [INFO] [stdout] [INFO] [stdout] Feature: Tuples, Vectors, and Points  features/tuples.feature:1:1 [INFO] [stdout]  [INFO] [stdout]  Scenario: A tuple with w=1.0 is a point  features/tuples.feature:3:11 [INFO] [stdout]  ✔ Given a := tuple(4.3, -4.2, 3.1, 1.0)  features/tuples.feature:4:3 [INFO] [stdout]  ✔ Then a.x = 4.3  features/tuples.feature:5:3 [INFO] [stdout]  ✔ And a.y = -4.2  features/tuples.feature:6:5 [INFO] [stdout]  ✔ And a.z = 3.1  features/tuples.feature:7:5 [INFO] [stdout]  ✔ And a.w = 1.0  features/tuples.feature:8:5 [INFO] [stdout]  ✔ And a is a point  features/tuples.feature:9:5 [INFO] [stdout]  ✔ And a is not a vector  features/tuples.feature:10:5 [INFO] [stdout]  [INFO] [stdout]  Scenario: A tuple with w=0 is a vector  features/tuples.feature:12:11 [INFO] [stdout]  ✔ Given a := tuple(4.3, -4.2, 3.1, 0.0)  features/tuples.feature:13:3 [INFO] [stdout]  ✔ Then a.x = 4.3  features/tuples.feature:14:3 [INFO] [stdout]  ✔ And a.y = -4.2  features/tuples.feature:15:5 [INFO] [stdout]  ✔ And a.z = 3.1  features/tuples.feature:16:5 [INFO] [stdout]  ✔ And a.w = 0.0  features/tuples.feature:17:5 [INFO] [stdout]  ✔ And a is not a point  features/tuples.feature:18:5 [INFO] [stdout]  ✔ And a is a vector  features/tuples.feature:19:5 [INFO] [stdout]  [INFO] [stdout]  Scenario: "point" describes tuples with w=1  features/tuples.feature:21:11 [INFO] [stdout]  ✔ Given p := point(4, -4, 3)  features/tuples.feature:22:3 [INFO] [stdout]  ✔ Then p = tuple(4, -4, 3, 1)  features/tuples.feature:23:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: "vector" describes tuples with w=0  features/tuples.feature:25:11 [INFO] [stdout]  ✔ Given v := vector(4, -4, 3)  features/tuples.feature:26:3 [INFO] [stdout]  ✔ Then v = tuple(4, -4, 3, 0)  features/tuples.feature:27:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Adding two tuples  features/tuples.feature:29:11 [INFO] [stdout]  ✔ Given a1 := tuple(3, -2, 5, 1)  features/tuples.feature:30:3 [INFO] [stdout]  ✔ And a2 := tuple(-2, 3, 1, 0)  features/tuples.feature:31:5 [INFO] [stdout]  ✔ Then a1 + a2 = tuple(1, 1, 6, 1)  features/tuples.feature:32:4 [INFO] [stdout]  [INFO] [stdout]  Scenario: Subtracting two points  features/tuples.feature:34:11 [INFO] [stdout]  ✔ Given p1 := point(3, 2, 1)  features/tuples.feature:35:3 [INFO] [stdout]  ✔ And p2 := point(5, 6, 7)  features/tuples.feature:36:5 [INFO] [stdout]  ✔ Then p1 - p2 = vector(-2, -4, -6)  features/tuples.feature:37:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Subtracting a vector from a point  features/tuples.feature:39:11 [INFO] [stdout]  ✔ Given p := point(3, 2, 1)  features/tuples.feature:40:3 [INFO] [stdout]  ✔ And v := vector(5, 6, 7)  features/tuples.feature:41:5 [INFO] [stdout]  ✔ Then p - v = point(-2, -4, -6)  features/tuples.feature:42:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Subtracting two vectors  features/tuples.feature:44:11 [INFO] [stdout]  ✔ Given v1 := vector(3, 2, 1)  features/tuples.feature:45:3 [INFO] [stdout]  ✔ And v2 := vector(5, 6, 7)  features/tuples.feature:46:5 [INFO] [stdout]  ✔ Then v1 - v2 = vector(-2, -4, -6)  features/tuples.feature:47:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Subtracting a vector from the zero vector [INFO] [stdout]  features/tuples.feature:49:11 [INFO] [stdout]  ✔ Given zero := vector(0, 0, 0)  features/tuples.feature:50:3 [INFO] [stdout]  ✔ And v2 := vector(1, -2, 3)  features/tuples.feature:51:5 [INFO] [stdout]  ✔ Then zero - v2 = vector(-1, 2, -3)  features/tuples.feature:52:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Negating a tuple  features/tuples.feature:54:11 [INFO] [stdout]  ✔ Given a := tuple(1, -2, 3, -4)  features/tuples.feature:55:3 [INFO] [stdout]  ✔ Then -a = tuple(-1, 2, -3, 4)  features/tuples.feature:56:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Multiplying a tuple by a scalar  features/tuples.feature:58:11 [INFO] [stdout]  ✔ Given a := tuple(1, -2, 3, -4)  features/tuples.feature:59:3 [INFO] [stdout]  ✔ Then a * 3.5 = tuple(3.5, -7, 10.5, -14)  features/tuples.feature:60:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Multiplying a tuple by a fraction  features/tuples.feature:62:11 [INFO] [stdout]  ✔ Given a := tuple(1, -2, 3, -4)  features/tuples.feature:63:3 [INFO] [stdout]  ✔ Then a * 0.5 = tuple(0.5, -1, 1.5, -2)  features/tuples.feature:64:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Dividing a tuple by a scalar  features/tuples.feature:66:11 [INFO] [stdout]  ✔ Given a := tuple(1, -2, 3, -4)  features/tuples.feature:67:3 [INFO] [stdout]  ✔ Then a / 2 = tuple(0.5, -1, 1.5, -2)  features/tuples.feature:68:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Magnitude of vector(1, 0, 0)  features/tuples.feature:70:11 [INFO] [stdout]  ✔ Given v := vector(1, 0, 0)  features/tuples.feature:71:3 [INFO] [stdout]  ✔ Then magnitude(v) = 1  features/tuples.feature:72:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Magnitude of vector(0, 1, 0)  features/tuples.feature:74:11 [INFO] [stdout]  ✔ Given v := vector(0, 1, 0)  features/tuples.feature:75:3 [INFO] [stdout]  ✔ Then magnitude(v) = 1  features/tuples.feature:76:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Magnitude of vector(0, 0, 1)  features/tuples.feature:78:11 [INFO] [stdout]  ✔ Given v := vector(0, 0, 1)  features/tuples.feature:79:3 [INFO] [stdout]  ✔ Then magnitude(v) = 1  features/tuples.feature:80:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Magnitude of vector(1, 2, 3)  features/tuples.feature:82:11 [INFO] [stdout]  ✔ Given v := vector(1, 2, 3)  features/tuples.feature:83:3 [INFO] [stdout]  ✔ Then magnitude(v) = √14  features/tuples.feature:84:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Magnitude of vector(-1, -2, -3)  features/tuples.feature:86:11 [INFO] [stdout]  ✔ Given v := vector(-1, -2, -3)  features/tuples.feature:87:3 [INFO] [stdout]  ✔ Then magnitude(v) = √14  features/tuples.feature:88:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Normalizing vector(4, 0, 0) gives (1, 0, 0) [INFO] [stdout]  features/tuples.feature:90:11 [INFO] [stdout]  ✔ Given v := vector(4, 0, 0)  features/tuples.feature:91:3 [INFO] [stdout]  ✔ Then normalize(v) = vector(1, 0, 0)  features/tuples.feature:92:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: Normalizing vector(1, 2, 3)  features/tuples.feature:94:11 [INFO] [stdout]  ✔ Given v := vector(1, 2, 3)  features/tuples.feature:95:3 [INFO] [stdout]  ✔ Then normalize(v) = approximately vector(0.26726, 0.53452, 0.80178) [INFO] [stdout]  features/tuples.feature:97:3 [INFO] [stdout]  [INFO] [stdout]  Scenario: The magnitude of a normalized vector  features/tuples.feature:99:11 [INFO] [stdout]  ✔ Given v := vector(1, 2, 3)  features/tuples.feature:100:3 [INFO] [stdout]  - When norm := normalize(v)  features/tuples.feature:101:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then magnitude(norm) = 1  features/tuples.feature:102:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: The dot product of two tuples  features/tuples.feature:104:11 [INFO] [stdout]  - Given a := vector(1, 2, 3)  features/tuples.feature:105:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And b := vector(2, 3, 4)  features/tuples.feature:106:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then a dot b = 20  features/tuples.feature:107:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Cross product of two vectors  features/tuples.feature:109:11 [INFO] [stdout]  - Given a := vector(1, 2, 3)  features/tuples.feature:110:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And b := vector(2, 3, 4)  features/tuples.feature:111:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then a cross b = vector(-1, 2, -1)  features/tuples.feature:112:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And b cross a = vector(1, -2, 1)  features/tuples.feature:113:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Colors are (red, green, blue) tuples  features/tuples.feature:115:11 [INFO] [stdout]  - Given c := color(-0.5, 0.4, 1.7)  features/tuples.feature:116:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then c.red = -0.5  features/tuples.feature:117:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And c.green = 0.4  features/tuples.feature:118:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And c.blue = 1.7  features/tuples.feature:119:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Adding colors  features/tuples.feature:121:11 [INFO] [stdout]  - Given c1 := color(0.9, 0.6, 0.75)  features/tuples.feature:122:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And c2 := color(0.7, 0.1, 0.25)  features/tuples.feature:123:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then c1 + c2 = color(1.6, 0.7, 1.0)  features/tuples.feature:124:4 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Subtracting colors  features/tuples.feature:126:11 [INFO] [stdout]  - Given c1 := color(0.9, 0.6, 0.75)  features/tuples.feature:127:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And c2 := color(0.7, 0.1, 0.25)  features/tuples.feature:128:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then c1 - c2 = color(0.2, 0.5, 0.5)  features/tuples.feature:129:4 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Multiplying a color by a scalar  features/tuples.feature:131:11 [INFO] [stdout]  - Given c := color(0.2, 0.3, 0.4)  features/tuples.feature:132:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then c * 2 = color(0.4, 0.6, 0.8)  features/tuples.feature:133:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Multiplying colors  features/tuples.feature:135:11 [INFO] [stdout]  - Given c1 := color(1, 0.2, 0.4)  features/tuples.feature:136:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - And c2 := color(0.9, 1, 0.1)  features/tuples.feature:137:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then c1 * c2 = color(0.9, 0.2, 0.04)  features/tuples.feature:138:4 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Reflecting a vector approaching at 45° [INFO] [stdout]  features/tuples.feature:140:11 [INFO] [stdout]  ✔ Given v := vector(1, -1, 0)  features/tuples.feature:141:3 [INFO] [stdout]  - And n := vector(0, 1, 0)  features/tuples.feature:142:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - When r := reflect(v, n)  features/tuples.feature:143:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then r = vector(1, 1, 0)  features/tuples.feature:144:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout]  Scenario: Reflecting a vector off a slanted surface [INFO] [stdout]  features/tuples.feature:146:11 [INFO] [stdout]  ✔ Given v := vector(0, -1, 0)  features/tuples.feature:147:3 [INFO] [stdout]  - And n := vector(√2/2, √2/2, 0)  features/tuples.feature:148:5 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - When r := reflect(v, n)  features/tuples.feature:149:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout]  - Then r = vector(1, 0, 0)  features/tuples.feature:150:3 [INFO] [stdout]  ⚡ Not yet implemented (skipped) [INFO] [stdout] [INFO] [stdout] 1 features [INFO] [stdout] 30 scenarios (10 skipped, 20 passed) [INFO] [stdout] 88 steps (30 skipped, 58 passed) [INFO] [stdout]  [INFO] [stderr] Doc-tests raytracer_challenge [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [INFO] [stdout] [INFO] running `"docker" "inspect" "9e783eac4001fb9c7c9e29a7df69180e5d8646a7ac1c372c274e46a640787092"` [INFO] running `"docker" "rm" "-f" "9e783eac4001fb9c7c9e29a7df69180e5d8646a7ac1c372c274e46a640787092"` [INFO] [stdout] 9e783eac4001fb9c7c9e29a7df69180e5d8646a7ac1c372c274e46a640787092