@@ -35,7 +35,7 @@ fn test_round_trip() {
3535 } ;
3636 let ex_wrapper1 = ExerciseWrapper { exercise : exercise1 } ;
3737 let sets1 = vec ! [
38- Set { w: Some ( 175.0 ) , r: Some ( 10 ) , s: Some ( 3 ) , lb: Some ( 0.0 ) , rpe: None , c: None , set_type: Some ( 0 ) } ,
38+ Set { w: Some ( 175.0 ) , r: Some ( 10 ) , s: Some ( 3 ) , lb: Some ( 0.0 ) , rpe: None , c: None , set_type: Some ( 0 ) , usebw : None } ,
3939 ] ;
4040 let eblock1 = EBlock {
4141 eid : "lat-pulldown" . to_string ( ) ,
@@ -48,7 +48,7 @@ fn test_round_trip() {
4848 } ;
4949 let ex_wrapper2 = ExerciseWrapper { exercise : exercise2 } ;
5050 let sets2 = vec ! [
51- Set { w: Some ( 175.0 ) , r: Some ( 10 ) , s: Some ( 3 ) , lb: Some ( 0.0 ) , rpe: None , c: None , set_type: Some ( 0 ) } ,
51+ Set { w: Some ( 175.0 ) , r: Some ( 10 ) , s: Some ( 3 ) , lb: Some ( 0.0 ) , rpe: None , c: None , set_type: Some ( 0 ) , usebw : None } ,
5252 ] ;
5353 let eblock2 = EBlock {
5454 eid : "cable-low-row" . to_string ( ) ,
@@ -333,3 +333,116 @@ TM: 465
333333 let reformatted = format_workout_for_cache ( "2025-10-31" , & parsed_jday) ;
334334 assert_eq ! ( reformatted, cache_text) ;
335335}
336+
337+ #[ test]
338+ fn test_parse_rpe ( ) {
339+ // Test RPE parsing
340+ let sets = parse_set_line ( "405 x 5 @8" ) . unwrap ( ) ;
341+ assert_eq ! ( sets. len( ) , 1 ) ;
342+ assert_eq ! ( sets[ 0 ] . w, Some ( 405.0 ) ) ;
343+ assert_eq ! ( sets[ 0 ] . r, Some ( 5 ) ) ;
344+ assert_eq ! ( sets[ 0 ] . s, Some ( 1 ) ) ;
345+ assert_eq ! ( sets[ 0 ] . rpe, Some ( 8.0 ) ) ;
346+ assert_eq ! ( sets[ 0 ] . c, None ) ;
347+
348+ let sets = parse_set_line ( "405 x 5 @7.5 hard" ) . unwrap ( ) ;
349+ assert_eq ! ( sets. len( ) , 1 ) ;
350+ assert_eq ! ( sets[ 0 ] . rpe, Some ( 7.5 ) ) ;
351+ assert_eq ! ( sets[ 0 ] . c, Some ( "hard" . to_string( ) ) ) ;
352+ }
353+
354+ #[ test]
355+ fn test_parse_bw_exercises ( ) {
356+ // Test BW exercises
357+ let sets = parse_set_line ( "BW x 10" ) . unwrap ( ) ;
358+ assert_eq ! ( sets. len( ) , 1 ) ;
359+ assert_eq ! ( sets[ 0 ] . w, Some ( 0.0 ) ) ;
360+ assert_eq ! ( sets[ 0 ] . r, Some ( 10 ) ) ;
361+ assert_eq ! ( sets[ 0 ] . usebw, Some ( 1 ) ) ;
362+
363+ let sets = parse_set_line ( "BW+ 20 x 5" ) . unwrap ( ) ;
364+ assert_eq ! ( sets. len( ) , 1 ) ;
365+ assert_eq ! ( sets[ 0 ] . w, Some ( 20.0 ) ) ;
366+ assert_eq ! ( sets[ 0 ] . r, Some ( 5 ) ) ;
367+ assert_eq ! ( sets[ 0 ] . usebw, Some ( 1 ) ) ;
368+
369+ let sets = parse_set_line ( "BW- 10 x 5" ) . unwrap ( ) ;
370+ assert_eq ! ( sets. len( ) , 1 ) ;
371+ assert_eq ! ( sets[ 0 ] . w, Some ( 10.0 ) ) ;
372+ assert_eq ! ( sets[ 0 ] . r, Some ( 5 ) ) ;
373+ assert_eq ! ( sets[ 0 ] . usebw, Some ( -1 ) ) ;
374+ }
375+
376+ #[ test]
377+ fn test_parse_units ( ) {
378+ // Test units
379+ let sets = parse_set_line ( "405 lb x 5" ) . unwrap ( ) ;
380+ assert_eq ! ( sets. len( ) , 1 ) ;
381+ assert_eq ! ( sets[ 0 ] . w, Some ( 405.0 ) ) ;
382+ assert_eq ! ( sets[ 0 ] . lb, Some ( 1.0 ) ) ;
383+
384+ let sets = parse_set_line ( "180 kg x 5" ) . unwrap ( ) ;
385+ assert_eq ! ( sets. len( ) , 1 ) ;
386+ assert_eq ! ( sets[ 0 ] . w, Some ( 180.0 ) ) ;
387+ assert_eq ! ( sets[ 0 ] . lb, Some ( 0.0 ) ) ;
388+ }
389+
390+ #[ test]
391+ fn test_format_rpe ( ) {
392+ let set = Set {
393+ w : Some ( 405.0 ) ,
394+ r : Some ( 5 ) ,
395+ s : Some ( 1 ) ,
396+ lb : Some ( 0.0 ) ,
397+ rpe : Some ( 8.0 ) ,
398+ c : None ,
399+ set_type : Some ( 0 ) ,
400+ usebw : None ,
401+ } ;
402+ unsafe { std:: env:: set_var ( "WXRUST_COLOR" , "never" ) ; }
403+ let formatted = format_set ( & set) ;
404+ assert_eq ! ( formatted, "405 x 5 @8" ) ;
405+ }
406+
407+ #[ test]
408+ fn test_format_bw ( ) {
409+ let set = Set {
410+ w : Some ( 0.0 ) ,
411+ r : Some ( 10 ) ,
412+ s : Some ( 1 ) ,
413+ lb : Some ( 0.0 ) ,
414+ rpe : None ,
415+ c : None ,
416+ set_type : Some ( 0 ) ,
417+ usebw : Some ( 1 ) ,
418+ } ;
419+ unsafe { std:: env:: set_var ( "WXRUST_COLOR" , "never" ) ; }
420+ let formatted = format_set ( & set) ;
421+ assert_eq ! ( formatted, "BW x 10" ) ;
422+
423+ let set = Set {
424+ w : Some ( 20.0 ) ,
425+ r : Some ( 5 ) ,
426+ s : Some ( 1 ) ,
427+ lb : Some ( 0.0 ) ,
428+ rpe : None ,
429+ c : None ,
430+ set_type : Some ( 0 ) ,
431+ usebw : Some ( 1 ) ,
432+ } ;
433+ let formatted = format_set ( & set) ;
434+ assert_eq ! ( formatted, "BW+20 x 5" ) ;
435+
436+ let set = Set {
437+ w : Some ( 10.0 ) ,
438+ r : Some ( 5 ) ,
439+ s : Some ( 1 ) ,
440+ lb : Some ( 0.0 ) ,
441+ rpe : None ,
442+ c : None ,
443+ set_type : Some ( 0 ) ,
444+ usebw : Some ( -1 ) ,
445+ } ;
446+ let formatted = format_set ( & set) ;
447+ assert_eq ! ( formatted, "BW-10 x 5" ) ;
448+ }
0 commit comments