Решение на (Floating) Points and Vectors от Димитър Михайлов
Обратно към всички решения
Към профила на Димитър Михайлов
Резултати
- 12 точки от тестове
- 0 бонус точки
- 12 точки общо
- 9 успешни тест(а)
- 6 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20190123-22631-1q3dcd9/solution)
warning: function is never used: `main`
--> src/lib.rs:146:1
|
146 | fn main() {
| ^^^^^^^^^
|
= note: #[warn(dead_code)] on by default
Finished dev [unoptimized + debuginfo] target(s) in 5.19s
Running target/debug/deps/solution-2e785d603b538f71
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-29808948fb50ed3a
running 15 tests
test solution_test::test_equailty_symmetry ... FAILED
test solution_test::test_equality_basic ... ok
test solution_test::test_equality_floating ... FAILED
test solution_test::test_line_constructors ... ok
test solution_test::test_line_equality_by_points ... FAILED
test solution_test::test_line_equality_by_points_and_vectors ... ok
test solution_test::test_line_equality_by_vectors ... FAILED
test solution_test::test_line_validity ... ok
test solution_test::test_number_by_vector ... ok
test solution_test::test_number_vector_multiplication_with_precision ... FAILED
test solution_test::test_point_distance ... FAILED
test solution_test::test_points_minus_points ... ok
test solution_test::test_points_plus_vectors ... ok
test solution_test::test_vector_by_vector ... ok
test solution_test::test_vector_by_vector_cross ... ok
failures:
---- solution_test::test_equailty_symmetry stdout ----
thread 'solution_test::test_equailty_symmetry' panicked at 'assertion failed: `(left == right)`
left: `Point { x: 0.0, y: 0.0, z: 0.0 }`,
right: `Point { x: 0.0000000000000000002220446049250313, y: 0.0, z: 0.0 }`', tests/solution_test.rs:63:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.
---- solution_test::test_equality_floating stdout ----
thread 'solution_test::test_equality_floating' panicked at 'assertion failed: `(left == right)`
left: `Point { x: 0.30000000000000004, y: 0.0, z: 0.0 }`,
right: `Point { x: 0.3, y: 0.0, z: 0.0 }`', tests/solution_test.rs:40:5
---- solution_test::test_line_equality_by_points stdout ----
thread 'solution_test::test_line_equality_by_points' panicked at 'assertion failed: `(left == right)`
left: `Some(Line { point: Point { x: 0.0, y: 0.0, z: 0.0 }, vector: Vector { x: 0.1, y: 0.1, z: 0.1 } })`,
right: `Some(Line { point: Point { x: 0.1, y: 0.1, z: 0.1 }, vector: Vector { x: -0.1, y: -0.1, z: -0.1 } })`', tests/solution_test.rs:206:5
---- solution_test::test_line_equality_by_vectors stdout ----
thread 'solution_test::test_line_equality_by_vectors' panicked at 'assertion failed: `(left == right)`
left: `Some(Line { point: Point { x: 0.0, y: 0.4, z: 0.0 }, vector: Vector { x: 0.1, y: -0.2, z: 0.5 } })`,
right: `Some(Line { point: Point { x: 0.0000000000000000002220446049250313, y: 0.4, z: 0.0000000000000000002220446049250313 }, vector: Vector { x: 0.1, y: -0.2, z: 0.5 } })`', tests/solution_test.rs:230:5
---- solution_test::test_number_vector_multiplication_with_precision stdout ----
thread 'solution_test::test_number_vector_multiplication_with_precision' panicked at 'assertion failed: `(left == right)`
left: `Vector { x: 0.0000000000000000002220446049250313, y: 0.0000000000000000002220446049250313, z: 0.0000000000000000002220446049250313 }`,
right: `Vector { x: 0.0, y: 0.0, z: 0.0 }`', tests/solution_test.rs:145:5
---- solution_test::test_point_distance stdout ----
thread 'solution_test::test_point_distance' panicked at 'assertion failed: (line.distance(p1) - 2.0f64.sqrt() / 2.0).abs() < EPS * 1000.0', tests/solution_test.rs:183:5
failures:
solution_test::test_equailty_symmetry
solution_test::test_equality_floating
solution_test::test_line_equality_by_points
solution_test::test_line_equality_by_vectors
solution_test::test_number_vector_multiplication_with_precision
solution_test::test_point_distance
test result: FAILED. 9 passed; 6 failed; 0 ignored; 0 measured; 0 filtered out
error: test failed, to rerun pass '--test solution_test'
История (1 версия и 6 коментара)
Димитър качи първо решение на 26.11.2018 16:20 (преди над 4 години)
Име, което започва с
_
обикновено се използва за променлива, която не се използва. Още, ако бяхаx, y, z
, щеше да можеш да напишеш доста краткотоPoint { x, y, z }
-- ако имената на локалните променливи са същите като ключовете, може да се съкратиfoo: foo
на простоfoo
.Част от тестовете вероятно fail-ват заради това сравнение. Част от задачата беше да сравнявате floating-point числа с определена точност, вместо с директно сравнение. Погледни някое от другите домашни за това как би станало правилно (за нашите цели) решение.
Може и да разгледаш approx пакета за по-подробно описание на проблема и възможните му решения.
Това не ми изглежда правилно, но не съм задълбавал в логиката. Първото условие обаче със сигурност ще е проблем -- Напълно е възможно началото на една права и това на друга права да са различни точки, но да са една и съща права. Примерно:
Това са една и съща права. Едната започва от нулевата точка и има още една точка в (1, 1, 1). Другата започва от (1, 1, 1) и има вектор, който сочи наобратно -- което я прави идентична с първата. Твоето сравнение на
self.point != other.point
директно би върнало false.