Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d40060a

Browse files
fspoetteltguichaoua
andcommitted
fix(review): address review feedback
Co-authored-by: Tristan Guichaoua <33934311+tguichaoua@users.noreply.github.com>
1 parent 28252e2 commit d40060a

File tree

5 files changed

+76
-19
lines changed

5 files changed

+76
-19
lines changed

‎README.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ Solutions for [Advent of Code](https://adventofcode.com/) in [Rust](https://www.
66

77
<!--- advent_readme_stars table --->
88

9+
<!--- benchmarking table --->
10+
## Benchmarks
11+
12+
| Day | Part 1 | Part 2 |
13+
| :---: | :---: | :---: |
14+
| [Day 9](./src/bin/09.rs) | `19.0ns` | `19.0ns` |
15+
16+
**Total: 0.00ms**
917
<!--- benchmarking table --->
1018

1119
---

‎src/main.rs‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ mod args {
3333
time: bool,
3434
},
3535
Time {
36+
all: bool,
3637
day: Option<Day>,
37-
force: bool,
3838
},
3939
#[cfg(feature = "today")]
4040
Today,
@@ -49,10 +49,10 @@ mod args {
4949
time: args.contains("--time"),
5050
},
5151
Some("time") => {
52-
let force = args.contains("--force");
52+
let all = args.contains("--all");
5353

5454
AppArguments::Time {
55-
force,
55+
all,
5656
day: args.opt_free_from_str()?,
5757
}
5858
}
@@ -102,7 +102,7 @@ fn main() {
102102
}
103103
Ok(args) => match args {
104104
AppArguments::All { release, time } => all::handle(release, time),
105-
AppArguments::Time { day, force } => time::handle(day, force),
105+
AppArguments::Time { day, all } => time::handle(day, all),
106106
AppArguments::Download { day } => download::handle(day),
107107
AppArguments::Read { day } => read::handle(day),
108108
AppArguments::Scaffold { day, download } => {

‎src/template/commands/time.rs‎

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::template::run_multi::run_multi;
44
use crate::template::timings::Timings;
55
use crate::template::{all_days, readme_benchmarks, Day};
66

7-
pub fn handle(day: Option<Day>, force: bool) {
7+
pub fn handle(day: Option<Day>, recreate_all: bool) {
88
let stored_timings = Timings::read_from_file();
99

1010
let mut days_to_run = HashSet::new();
@@ -15,13 +15,8 @@ pub fn handle(day: Option<Day>, force: bool) {
1515
}
1616
None => {
1717
all_days().for_each(|day| {
18-
// when the force flag is not set, filter out days that are fully benched.
19-
if force
20-
|| !stored_timings
21-
.data
22-
.iter()
23-
.any(|t| t.day == day && t.part_1.is_some() && t.part_2.is_some())
24-
{
18+
// when the `--all` flag is not set, filter out days that are fully benched.
19+
if recreate_all || !stored_timings.is_day_complete(&day) {
2520
days_to_run.insert(day);
2621
}
2722
});

‎src/template/run_multi.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use super::{
88
};
99

1010
pub fn run_multi(days_to_run: HashSet<Day>, is_release: bool, is_timed: bool) -> Option<Timings> {
11-
let mut timings: Vec<Timing> = vec![];
11+
let mut timings: Vec<Timing> = Vec::with_capacity(days_to_run.len());
1212

1313
all_days().for_each(|day| {
1414
if day > 1 {

‎src/template/timings.rs‎

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ impl Timings {
2525
/// Dehydrate timings to a JSON file.
2626
pub fn store_file(&self) -> Result<(), Error> {
2727
let json = JsonValue::from(self.clone());
28-
let mut bytes = vec![];
29-
json.format_to(&mut bytes)?;
30-
fs::write(TIMINGS_FILE_PATH, bytes)
28+
let mut file = fs::File::create(TIMINGS_FILE_PATH)?;
29+
json.format_to(&mut file)
3130
}
3231

3332
/// Rehydrate timings from a JSON file. If not present, returns empty timings.
@@ -67,6 +66,12 @@ impl Timings {
6766
pub fn total_millis(&self) -> f64 {
6867
self.data.iter().map(|x| x.total_nanos).sum::<f64>() / 1_000_000_f64
6968
}
69+
70+
pub fn is_day_complete(&self, day: &Day) -> bool {
71+
self.data
72+
.iter()
73+
.any(|t| &t.day == day && t.part_1.is_some() && t.part_2.is_some())
74+
}
7075
}
7176

7277
/* -------------------------------------------------------------------------- */
@@ -101,8 +106,8 @@ impl TryFrom<String> for Timings {
101106
Ok(Timings {
102107
data: json_data
103108
.iter()
104-
.map(|value| Timing::try_from(value).unwrap())
105-
.collect(),
109+
.map(Timing::try_from)
110+
.collect::<Result<_,_>>()?,
106111
})
107112
}
108113
}
@@ -270,7 +275,56 @@ mod tests {
270275
}
271276
}
272277

273-
mod helpers {
278+
mod is_day_complete {
279+
use crate::{
280+
day,
281+
template::timings::{Timing, Timings},
282+
};
283+
284+
#[test]
285+
fn handles_completed_days() {
286+
let timings = Timings {
287+
data: vec![Timing {
288+
day: day!(1),
289+
part_1: Some("1ms".into()),
290+
part_2: Some("2ms".into()),
291+
total_nanos: 3_000_000_000_f64,
292+
}],
293+
};
294+
295+
assert_eq!(timings.is_day_complete(&day!(1)), true);
296+
}
297+
298+
#[test]
299+
fn handles_partial_days() {
300+
let timings = Timings {
301+
data: vec![Timing {
302+
day: day!(1),
303+
part_1: Some("1ms".into()),
304+
part_2: None,
305+
total_nanos: 1_000_000_000_f64,
306+
}],
307+
};
308+
309+
assert_eq!(timings.is_day_complete(&day!(1)), false);
310+
}
311+
312+
#[test]
313+
fn handles_uncompleted_days() {
314+
let timings = Timings {
315+
data: vec![Timing {
316+
day: day!(1),
317+
part_1: None,
318+
part_2: None,
319+
total_nanos: 0.0,
320+
}],
321+
};
322+
323+
assert_eq!(timings.is_day_complete(&day!(1)), false);
324+
}
325+
}
326+
327+
mod merge {
274328
use crate::{
275329
day,
276330
template::timings::{Timing, Timings},

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /