1use pixtra::canvas::Canvas;
2use pixtra::pixels::Pixel;
3use pixtra::utility;
4use std::path::Path;
5
6fn main() {
7 let color = Pixel {
8 r: 0,
9 g: 0,
10 b: 255,
11 a: 255,
12 };
13
14 let new_color = Pixel::new(255, 0, 0, 255);
15
16 let canvas = Canvas::new_with_background(100, 100, color.clone())
17 .draw_square(10, 10, 80, 80, &new_color)
18 .draw_square(20, 20, 60, 60, &color)
19 .fill(1, 1, &Pixel::new(172, 172, 172, 255));
20 canvas.save(Path::new("testing.png")).unwrap();
21
22 let canvas = Canvas::load(Path::new("assets/20230709_111142.jpg")).unwrap().rotate90();
23 println!("Size of canvas: {} x {}", canvas.dimensions().width, canvas.dimensions().height);
24 }
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 use pixtra::utility::count_colors;
45
46 #[test]
48 fn test_prerequisite() {
49 let color_one = Pixel::random();
50 let canvas = Canvas::new_with_background(100, 100, color_one.clone());
51 let counts = count_colors(&canvas);
52 assert_eq!(counts.get(&color_one), Some(&10000));
53 assert_eq!(counts.keys().len(), 1);
54
55 let color_two = Pixel::random();
56 let canvas = canvas.draw_square(10, 10, 80, 80, &color_two);
57 let counts = count_colors(&canvas);
58 assert_eq!(counts.get(&color_one), Some(&3600));
59 assert_eq!(counts.get(&color_two), Some(&6400));
60 assert_eq!(counts.keys().len(), 2);
61
62 let color_three = Pixel::random();
63 let canvas = canvas.draw_square(20, 20, 60, 60, &color_three);
64 let counts = count_colors(&canvas);
65 assert_eq!(counts.get(&color_one), Some(&3600));
66 assert_eq!(counts.get(&color_two), Some(&2800));
67 assert_eq!(counts.get(&color_three), Some(&3600));
68 assert_eq!(counts.keys().len(), 3);
69 }
70
71 #[test]
73 fn test_simplest_filling() {
74 let color_one = Pixel::random();
75 let canvas = Canvas::new_with_background(100, 100, color_one.clone());
76 let counts = count_colors(&canvas);
77 assert_eq!(counts.get(&color_one), Some(&10000));
78 assert_eq!(counts.keys().len(), 1);
79
80 let color_two = Pixel::random();
81 let canvas = canvas.fill(1, 1, &color_two);
82 let counts = count_colors(&canvas);
83 assert_eq!(counts.get(&color_two), Some(&10000));
84 assert_eq!(counts.keys().len(), 1);
85 }
86
87 #[test]
88 fn test_simple_filling_with_neighboors() {
89 let color_one = Pixel::random();
90 let canvas = Canvas::new_with_background(100, 100, color_one.clone());
91 let counts = count_colors(&canvas);
92 assert_eq!(counts.get(&color_one), Some(&10000));
93 assert_eq!(counts.keys().len(), 1);
94
95 let color_two = Pixel::random();
96 let canvas_one = canvas.clone().fill(1, 1, &color_two);
97 let canvas_two = canvas.clone().fill(2, 2, &color_two);
98 assert_eq!(canvas_one, canvas_two);
99 }
100
101 #[test]
102 fn test_filling_same_images_multiple_times() {
103 let color_one = Pixel::random();
104 let canvas = Canvas::new_with_background(100, 100, color_one.clone());
105 let counts = count_colors(&canvas);
106 assert_eq!(counts.get(&color_one), Some(&10000));
107 assert_eq!(counts.keys().len(), 1);
108
109 let color_two = Pixel::random();
110 let canvas = canvas.fill(1, 1, &color_two);
111 let counts = count_colors(&canvas);
112 assert_eq!(counts.get(&color_two), Some(&10000));
113 assert_eq!(counts.keys().len(), 1);
114
115 let color_three = Pixel::random();
116 let canvas = canvas.fill(1, 1, &color_three);
117 let counts = count_colors(&canvas);
118 assert_eq!(counts.get(&color_three), Some(&10000));
119 assert_eq!(counts.keys().len(), 1);
120
121 let color_four = Pixel::random();
122 let canvas = canvas.fill(1, 1, &color_four);
123 let counts = count_colors(&canvas);
124 assert_eq!(counts.get(&color_four), Some(&10000));
125 assert_eq!(counts.keys().len(), 1);
126 }
127
128 #[test]
129 fn test_filling_inner_and_outer() {
130 let color_one = Pixel::random();
131 let color_two = Pixel::random();
132 let color_three = Pixel::random();
133 let canvas = Canvas::new_with_background(100, 100, color_one.clone())
134 .draw_square(10, 10, 80, 80, &color_two)
135 .draw_square(20, 20, 60, 60, &color_three);
136
137 let color_four = Pixel::random();
138 let canvas = canvas.fill(1, 1, &color_four);
139 let counts = count_colors(&canvas);
140 assert_eq!(counts.get(&color_one), None);
141 assert_eq!(counts.get(&color_two), Some(&2800));
142 assert_eq!(counts.get(&color_three), Some(&3600));
143 assert_eq!(counts.get(&color_four), Some(&3600));
144
145 }
147
148 }