moved to relative float equivalence
This commit is contained in:
27
tuples/Cargo.lock
generated
27
tuples/Cargo.lock
generated
@@ -1,5 +1,32 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
|
[[package]]
|
||||||
|
name = "approx"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tuples"
|
name = "tuples"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"approx",
|
||||||
|
]
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ edition = "2018"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
approx = "0.4"
|
||||||
|
|||||||
@@ -1,4 +1,18 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate approx;
|
||||||
|
|
||||||
|
use std::f32;
|
||||||
|
|
||||||
type PointVector = (f32, f32, f32, f32);
|
type PointVector = (f32, f32, f32, f32);
|
||||||
|
type Dimensions = (f32, f32, f32);
|
||||||
|
|
||||||
|
fn point(dims: Dimensions) -> PointVector {
|
||||||
|
(dims.0, dims.1, dims.2, 1.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vector(dims: Dimensions) -> PointVector {
|
||||||
|
(dims.0, dims.1, dims.2, 0.0)
|
||||||
|
}
|
||||||
|
|
||||||
fn tuple_x(tuple: PointVector) -> f32 {
|
fn tuple_x(tuple: PointVector) -> f32 {
|
||||||
tuple.0
|
tuple.0
|
||||||
@@ -13,10 +27,10 @@ fn tuple_z(tuple: PointVector) -> f32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn tuple_is_point(tuple: PointVector) -> bool {
|
fn tuple_is_point(tuple: PointVector) -> bool {
|
||||||
tuple.3 == 1.0
|
relative_eq!(1.0, tuple.3)
|
||||||
}
|
}
|
||||||
fn tuple_is_vector(tuple: PointVector) -> bool {
|
fn tuple_is_vector(tuple: PointVector) -> bool {
|
||||||
tuple.3 == 0.0
|
relative_eq!(0.0, tuple.3)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -27,21 +41,33 @@ mod tests {
|
|||||||
fn get_point() {
|
fn get_point() {
|
||||||
let tuple = (4.3, -4.2, 3.1, 1.0);
|
let tuple = (4.3, -4.2, 3.1, 1.0);
|
||||||
|
|
||||||
assert_eq!( 4.3, tuple_x(tuple));
|
assert_relative_eq!( 4.3, tuple_x(tuple));
|
||||||
assert_eq!(-4.2, tuple_y(tuple));
|
assert_relative_eq!(-4.2, tuple_y(tuple));
|
||||||
assert_eq!( 3.1, tuple_z(tuple));
|
assert_relative_eq!( 3.1, tuple_z(tuple));
|
||||||
assert_eq!(true, tuple_is_point(tuple));
|
assert_eq!(true, tuple_is_point(tuple));
|
||||||
assert_eq!(false, tuple_is_vector(tuple));
|
assert_eq!(false, tuple_is_vector(tuple));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn create_point() {
|
||||||
|
let point = point((4.0, -4.0, 3.0));
|
||||||
|
assert_eq!(true, tuple_is_point(point));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn get_vector() {
|
fn get_vector() {
|
||||||
let tuple = (4.3, -4.2, 3.1, 0.0);
|
let tuple = (4.3, -4.2, 3.1, 0.0);
|
||||||
|
|
||||||
assert_eq!( 4.3, tuple_x(tuple));
|
assert_relative_eq!( 4.3, tuple_x(tuple));
|
||||||
assert_eq!(-4.2, tuple_y(tuple));
|
assert_relative_eq!(-4.2, tuple_y(tuple));
|
||||||
assert_eq!( 3.1, tuple_z(tuple));
|
assert_relative_eq!( 3.1, tuple_z(tuple));
|
||||||
assert_eq!(false, tuple_is_point(tuple));
|
assert_eq!(false, tuple_is_point(tuple));
|
||||||
assert_eq!(true, tuple_is_vector(tuple));
|
assert_eq!(true, tuple_is_vector(tuple));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn create_vector() {
|
||||||
|
let vector = vector((4.0, -4.0, 3.0));
|
||||||
|
assert_eq!(true, tuple_is_vector(vector));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user