From 4cb8ec44d6b0c301be4fa0f8847b25a067eeee60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Hauspie?= <michael.hauspie@univ-lille.fr>
Date: Mon, 28 Nov 2022 22:27:20 +0100
Subject: [PATCH] Refactor to make a board module with a tictactoe submodule

---
 src/board/mod.rs                     |  3 +++
 src/{board.rs => board/tictactoe.rs} | 37 ++++++++++++++++------------
 src/main.rs                          |  4 +--
 3 files changed, 26 insertions(+), 18 deletions(-)
 create mode 100644 src/board/mod.rs
 rename src/{board.rs => board/tictactoe.rs} (72%)

diff --git a/src/board/mod.rs b/src/board/mod.rs
new file mode 100644
index 0000000..80b24fb
--- /dev/null
+++ b/src/board/mod.rs
@@ -0,0 +1,3 @@
+//! A module that implements several board games
+
+pub mod tictactoe;
diff --git a/src/board.rs b/src/board/tictactoe.rs
similarity index 72%
rename from src/board.rs
rename to src/board/tictactoe.rs
index 0900f91..2b9a6b4 100644
--- a/src/board.rs
+++ b/src/board/tictactoe.rs
@@ -1,5 +1,5 @@
-
 #[derive(Clone, Copy, Debug, PartialEq)]
+/// A Tictactoe square
 pub enum Square {
     Empty,
     Cross,
@@ -16,11 +16,12 @@ impl std::fmt::Display for Square {
     }
 }
 
-pub struct Board {
+/// A TicTacToe board
+pub struct TicTacToe {
     board: [Square; 9],
 }
 
-impl Board {
+impl TicTacToe {
     /// Creates a new empty board
     pub fn new() -> Self {
         Self {
@@ -34,14 +35,18 @@ impl Board {
     }
 }
 
-impl std::fmt::Display for Board {
+impl std::fmt::Display for TicTacToe {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        writeln!(f, " A   B   C")?;
         for row in 0..3 {
-            writeln!(f, " {} | {} | {}",
-                    self.board[row * 3],
-                    self.board[row * 3 + 1],
-                    self.board[row * 3 + 2],
-                )?;
+            writeln!(
+                f,
+                " {} | {} | {}   {}",
+                self.board[row * 3],
+                self.board[row * 3 + 1],
+                self.board[row * 3 + 2],
+                row + 1,
+            )?;
             if row == 0 || row == 1 {
                 writeln!(f, "---+---+---")?;
             }
@@ -53,10 +58,10 @@ impl std::fmt::Display for Board {
 #[cfg(test)]
 mod tests {
     use super::*;
-    
+
     #[test]
     fn new_board_squares_are_empty() {
-        let board = Board::new();
+        let board = TicTacToe::new();
 
         for square in board.board {
             assert_eq!(square, Square::Empty);
@@ -65,13 +70,14 @@ mod tests {
 
     #[test]
     fn empty_board_to_string() {
-        let expected = " . | . | .
+        let expected = " A   B   C
+ . | . | .   1
 ---+---+---
- . | . | .
+ . | . | .   2
 ---+---+---
- . | . | .
+ . | . | .   3
 ";
-        assert_eq!(expected, format!("{}", Board::new()));
+        assert_eq!(expected, format!("{}", TicTacToe::new()));
     }
 
     #[test]
@@ -86,5 +92,4 @@ mod tests {
     fn circle_square_to_string_big_o() {
         assert_eq!("O", format!("{}", Square::Circle));
     }
-
 }
diff --git a/src/main.rs b/src/main.rs
index a91e144..3b1cd9c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,9 +1,9 @@
 mod board;
 
-use board::Board;
+use board::tictactoe::TicTacToe;
     
 fn main() {
-    let board = Board::new();
+    let board = TicTacToe::new();
 
     board.display();
 }
-- 
GitLab