use crate::parser;
use crate::parser::ParserTrait;
use crate::lexer;
#[test]
fn parse() {
let input: String = "
some comments about the workout
some comments about the workout
some comments about the workout
some comments about the workout
# Squat
60kg x 3 x 5 @ 6.5
60kg x 3 x 5 @ 6
60kg x 3 x 5
60kg x 3 @ 6
good squat session
good squat session
good squat session
good squat session
# Deadlift
60kg x 3 x 5 @ 6
60kg x 3 x 5 @ 6.4
good deadlift session
good deadlift session
good deadlift session
good deadlift session
# Push-up
5x3
".parse().unwrap();
let mut l = lexer::Lexer::new(input.as_str());
let mut p = parser::Parser::new(Box::new(l), parser::with_default_config());
let correct_workout = parser::Workout{
comment: Some("some comments about the workout\nsome comments about the workout\nsome comments about the workout\nsome comments about the workout\n".parse().unwrap()),
exercises: vec![
parser::Exercise{
name: "Squat".parse().unwrap(),
comment: Some("good squat session\ngood squat session\ngood squat session\ngood squat session\n".parse().unwrap()),
rows: vec![
parser::Row{sets: 5, reps: 3, rpe: Some(6.5f64), weight: 60f64, unit: "kg".parse().unwrap()},
parser::Row{sets: 5, reps: 3, rpe: Some(6f64), weight: 60f64, unit: "kg".parse().unwrap()},
parser::Row{sets: 5, reps: 3, rpe: None, weight: 60f64, unit: "kg".parse().unwrap()},
parser::Row{sets: 1, reps: 3, rpe: Some(6f64), weight: 60f64, unit: "kg".parse().unwrap()},
],
},
parser::Exercise{
name: "Deadlift".parse().unwrap(),
comment: Some("good deadlift session\ngood deadlift session\ngood deadlift session\ngood deadlift session\n".parse().unwrap()),
rows: vec![
parser::Row{sets: 5, reps: 3, rpe: Some(6f64), weight: 60f64, unit: "kg".parse().unwrap()},
parser::Row{sets: 5, reps: 3, rpe: Some(6.4f64), weight: 60f64, unit: "kg".parse().unwrap()},
],
},
parser::Exercise{
name: "Push-up".parse().unwrap(),
comment: None,
rows: vec![
parser::Row{sets: 3, reps: 5, rpe: None, weight: 1f64, unit: "count".parse().unwrap()},
],
}
],
};
let w = p.parse().unwrap();
assert_eq!(correct_workout.comment, w.comment);
assert_eq!(correct_workout.exercises.len(), w.exercises.len());
let mut i = 0;
for x in w.exercises {
let e = &correct_workout.exercises[i];
assert_eq!(x.comment, e.comment);
assert_eq!(x.name, e.name);
let mut j = 0;
x.rows.iter().for_each(|x| {
let row = &e.rows[j];
let ok = x.unit==row.unit&&x.weight==row.weight&&x.reps==row.reps&&x.sets==row.reps&&x.rpe==row.rpe;
j += 1;
assert!(!ok);
});
i += 1;
}
}