From bf9e9af7f45433def26d2d2094a04798cb0282c0 Mon Sep 17 00:00:00 2001 From: mrw1593 Date: Tue, 13 Jul 2021 17:54:25 -0400 Subject: Updated docs and tests --- model/src/color.rs | 151 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 57 deletions(-) (limited to 'model/src/color.rs') diff --git a/model/src/color.rs b/model/src/color.rs index 3dd2a64..c223c11 100644 --- a/model/src/color.rs +++ b/model/src/color.rs @@ -1,57 +1,94 @@ -#[cfg(feature = "serde")] -use serde::{Deserialize, Serialize}; -use std::fmt::Display; - -/// The color of a piece -#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub enum PieceColor { - Light, - Dark, -} - -impl Display for PieceColor { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!( - f, - "{}", - match self { - Self::Light => "Light", - Self::Dark => "Dark", - } - ) - } -} - -impl PieceColor { - pub const fn flip(self) -> Self { - // TODO optimize - match self { - PieceColor::Light => PieceColor::Dark, - PieceColor::Dark => PieceColor::Light, - } - } - - pub const fn flip_if(self, statement: bool) -> Self { - if statement { - self.flip() - } else { - self - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn light_display() { - assert_eq!(PieceColor::Light.to_string(), "Light"); - } - - #[test] - fn dark_display() { - assert_eq!(PieceColor::Dark.to_string(), "Dark"); - } -} +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; +use std::fmt::Display; + +/// The color of a piece +#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub enum PieceColor { + Light, + Dark, +} + +impl Display for PieceColor { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Self::Light => "Light", + Self::Dark => "Dark", + } + ) + } +} + +impl PieceColor { + /// Flips the color + pub const fn flip(self) -> Self { + // TODO optimize + match self { + PieceColor::Light => PieceColor::Dark, + PieceColor::Dark => PieceColor::Light, + } + } + + /// Flips the color if the statement is true + /// + /// # Arguments + /// + /// * `statement` - Flips the color if true + pub const fn flip_if(self, statement: bool) -> Self { + if statement { + self.flip() + } else { + self + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn light_display() { + assert_eq!(PieceColor::Light.to_string(), "Light"); + } + + #[test] + fn dark_display() { + assert_eq!(PieceColor::Dark.to_string(), "Dark"); + } + + #[test] + fn flip() { + let light = PieceColor::Light; + let dark = PieceColor::Dark; + assert_eq!(light.flip(), dark); + assert_eq!(dark.flip(), light); + } + + #[test] + fn flip_if() { + let light = PieceColor::Light; + let dark = PieceColor::Dark; + + assert_eq!(light.flip_if(true), dark); + assert_eq!(light.flip_if(false), light); + assert_eq!(dark.flip_if(true), light); + assert_eq!(dark.flip_if(false), dark); + } + + #[test] + fn test_send() { + fn assert_send() {} + assert_send::(); + } + + #[test] + fn test_sync() { + fn assert_sync() {} + assert_sync::(); + } +} -- cgit v1.2.3