tml_parser 1.0.0

The official parser for the TML language
Documentation
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;
    }
}