From 495c64249c06d7ffd2d52b74d778ff4c0719991f Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Thu, 24 Jun 2021 10:51:35 -0700 Subject: [PATCH] Implement most basic tuple --- rtchallenge/src/lib.rs | 1 + rtchallenge/src/main.rs | 3 +++ rtchallenge/src/tuples.rs | 47 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 rtchallenge/src/lib.rs create mode 100644 rtchallenge/src/main.rs create mode 100644 rtchallenge/src/tuples.rs diff --git a/rtchallenge/src/lib.rs b/rtchallenge/src/lib.rs new file mode 100644 index 0000000..921850a --- /dev/null +++ b/rtchallenge/src/lib.rs @@ -0,0 +1 @@ +mod tuples; diff --git a/rtchallenge/src/main.rs b/rtchallenge/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/rtchallenge/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/rtchallenge/src/tuples.rs b/rtchallenge/src/tuples.rs new file mode 100644 index 0000000..58f2540 --- /dev/null +++ b/rtchallenge/src/tuples.rs @@ -0,0 +1,47 @@ +struct Tuple { + x: f32, + y: f32, + z: f32, + w: f32, +} + +impl Tuple { + fn is_point(&self) -> bool { + self.w == 1.0 + } + + fn is_vector(&self) -> bool { + self.w == 0.0 + } +} + +fn tuple(x: f32, y: f32, z: f32, w: f32) -> Tuple { + Tuple { x, y, z, w } +} + +#[cfg(test)] +mod tests { + use super::tuple; + #[test] + fn point() { + // A tuple with w = 1 is a point + let a = tuple(4.3, -4.2, 3.1, 1.0); + assert_eq!(a.x, 4.3); + assert_eq!(a.y, -4.2); + assert_eq!(a.z, 3.1); + assert_eq!(a.w, 1.0); + assert!(a.is_point()); + assert!(!a.is_vector()); + } + #[test] + fn vector() { + // A tuple with w = 0 is a point + let a = tuple(4.3, -4.2, 3.1, 0.0); + assert_eq!(a.x, 4.3); + assert_eq!(a.y, -4.2); + assert_eq!(a.z, 3.1); + assert_eq!(a.w, 0.0); + assert!(!a.is_point()); + assert!(a.is_vector()); + } +}