8: Add solution to Rust track exercise "Clock".

[?]
9Zb2bmkejrNknawUtr3MKvVstZkVDR8x8ritfgZXKrky
Dec 23, 2021, 5:27 PM
3EXW65BYQJJV4ZRPFNMEOL7D2FQHFADS26N7JHFSBMPF4T6I5DWAC

Dependencies

  • [2] 3DNQBXLO 7: Add Rust track exercise "Clock".

Change contents

  • replacement in rust/clock/tests/clock.rs at line 9
    [2.148][2.148:203]()
    assert_eq!(Clock::new(8, 0).to_string(), "08:00");
    [2.148]
    [2.203]
    assert_eq!(Clock::new(8, 0).to_string(), "08:00");
  • replacement in rust/clock/tests/clock.rs at line 15
    [2.250][2.250:306]()
    assert_eq!(Clock::new(11, 9).to_string(), "11:09");
    [2.250]
    [2.306]
    assert_eq!(Clock::new(11, 9).to_string(), "11:09");
  • replacement in rust/clock/tests/clock.rs at line 21
    [2.362][2.362:418]()
    assert_eq!(Clock::new(24, 0).to_string(), "00:00");
    [2.362]
    [2.418]
    assert_eq!(Clock::new(24, 0).to_string(), "00:00");
  • replacement in rust/clock/tests/clock.rs at line 27
    [2.467][2.467:523]()
    assert_eq!(Clock::new(25, 0).to_string(), "01:00");
    [2.467]
    [2.523]
    assert_eq!(Clock::new(25, 0).to_string(), "01:00");
  • replacement in rust/clock/tests/clock.rs at line 33
    [2.585][2.585:642]()
    assert_eq!(Clock::new(100, 0).to_string(), "04:00");
    [2.585]
    [2.642]
    assert_eq!(Clock::new(100, 0).to_string(), "04:00");
  • replacement in rust/clock/tests/clock.rs at line 39
    [2.702][2.702:758]()
    assert_eq!(Clock::new(1, 60).to_string(), "02:00");
    [2.702]
    [2.758]
    assert_eq!(Clock::new(1, 60).to_string(), "02:00");
  • replacement in rust/clock/tests/clock.rs at line 45
    [2.809][2.809:866]()
    assert_eq!(Clock::new(0, 160).to_string(), "02:40");
    [2.809]
    [2.866]
    assert_eq!(Clock::new(0, 160).to_string(), "02:40");
  • replacement in rust/clock/tests/clock.rs at line 51
    [2.930][2.930:988]()
    assert_eq!(Clock::new(0, 1723).to_string(), "04:43");
    [2.930]
    [2.988]
    assert_eq!(Clock::new(0, 1723).to_string(), "04:43");
  • replacement in rust/clock/tests/clock.rs at line 57
    [2.1049][2.1049:1107]()
    assert_eq!(Clock::new(25, 160).to_string(), "03:40");
    [2.1049]
    [2.1107]
    assert_eq!(Clock::new(25, 160).to_string(), "03:40");
  • replacement in rust/clock/tests/clock.rs at line 63
    [2.1181][2.1181:1241]()
    assert_eq!(Clock::new(201, 3001).to_string(), "11:01");
    [2.1181]
    [2.1241]
    assert_eq!(Clock::new(201, 3001).to_string(), "11:01");
  • replacement in rust/clock/tests/clock.rs at line 69
    [2.1322][2.1322:1381]()
    assert_eq!(Clock::new(72, 8640).to_string(), "00:00");
    [2.1322]
    [2.1381]
    assert_eq!(Clock::new(72, 8640).to_string(), "00:00");
  • replacement in rust/clock/tests/clock.rs at line 75
    [2.1428][2.1428:1485]()
    assert_eq!(Clock::new(-1, 15).to_string(), "23:15");
    [2.1428]
    [2.1485]
    assert_eq!(Clock::new(-1, 15).to_string(), "23:15");
  • replacement in rust/clock/tests/clock.rs at line 81
    [2.1542][2.1542:1600]()
    assert_eq!(Clock::new(-25, 00).to_string(), "23:00");
    [2.1542]
    [2.1600]
    assert_eq!(Clock::new(-25, 00).to_string(), "23:00");
  • replacement in rust/clock/tests/clock.rs at line 87
    [2.1670][2.1670:1728]()
    assert_eq!(Clock::new(-91, 00).to_string(), "05:00");
    [2.1670]
    [2.1728]
    assert_eq!(Clock::new(-91, 00).to_string(), "05:00");
  • replacement in rust/clock/tests/clock.rs at line 93
    [2.1778][2.1778:1835]()
    assert_eq!(Clock::new(1, -40).to_string(), "00:20");
    [2.1778]
    [2.1835]
    assert_eq!(Clock::new(1, -40).to_string(), "00:20");
  • replacement in rust/clock/tests/clock.rs at line 99
    [2.1895][2.1895:1953]()
    assert_eq!(Clock::new(1, -160).to_string(), "22:20");
    [2.1895]
    [2.1953]
    assert_eq!(Clock::new(1, -160).to_string(), "22:20");
  • replacement in rust/clock/tests/clock.rs at line 105
    [2.2026][2.2026:2085]()
    assert_eq!(Clock::new(1, -4820).to_string(), "16:40");
    [2.2026]
    [2.2085]
    assert_eq!(Clock::new(1, -4820).to_string(), "16:40");
  • replacement in rust/clock/tests/clock.rs at line 111
    [2.2154][2.2154:2211]()
    assert_eq!(Clock::new(2, -60).to_string(), "01:00");
    [2.2154]
    [2.2211]
    assert_eq!(Clock::new(2, -60).to_string(), "01:00");
  • replacement in rust/clock/tests/clock.rs at line 117
    [2.2290][2.2290:2348]()
    assert_eq!(Clock::new(1, -120).to_string(), "23:00");
    [2.2290]
    [2.2348]
    assert_eq!(Clock::new(1, -120).to_string(), "23:00");
  • replacement in rust/clock/tests/clock.rs at line 123
    [2.2422][2.2422:2482]()
    assert_eq!(Clock::new(-25, -160).to_string(), "20:20");
    [2.2422]
    [2.2482]
    assert_eq!(Clock::new(-25, -160).to_string(), "20:20");
  • replacement in rust/clock/tests/clock.rs at line 129
    [2.2569][2.2569:2631]()
    assert_eq!(Clock::new(-121, -5810).to_string(), "22:10");
    [2.2569]
    [2.2631]
    assert_eq!(Clock::new(-121, -5810).to_string(), "22:10");
  • replacement in rust/clock/tests/clock.rs at line 135
    [2.2695][2.2695:2752]()
    assert_eq!(Clock::new(0, -22).to_string(), "23:38");
    [2.2695]
    [2.2752]
    assert_eq!(Clock::new(0, -22).to_string(), "23:38");
  • replacement in rust/clock/tests/clock.rs at line 145
    [2.2818][2.2818:2912]()
    let clock = Clock::new(10, 0).add_minutes(3);
    assert_eq!(clock.to_string(), "10:03");
    [2.2818]
    [2.2912]
    let clock = Clock::new(10, 0).add_minutes(3);
    assert_eq!(clock.to_string(), "10:03");
  • replacement in rust/clock/tests/clock.rs at line 152
    [2.2960][2.2960:3054]()
    let clock = Clock::new(6, 41).add_minutes(0);
    assert_eq!(clock.to_string(), "06:41");
    [2.2960]
    [2.3054]
    let clock = Clock::new(6, 41).add_minutes(0);
    assert_eq!(clock.to_string(), "06:41");
  • replacement in rust/clock/tests/clock.rs at line 159
    [2.3104][2.3104:3199]()
    let clock = Clock::new(0, 45).add_minutes(40);
    assert_eq!(clock.to_string(), "01:25");
    [2.3104]
    [2.3199]
    let clock = Clock::new(0, 45).add_minutes(40);
    assert_eq!(clock.to_string(), "01:25");
  • replacement in rust/clock/tests/clock.rs at line 166
    [2.3255][2.3255:3350]()
    let clock = Clock::new(10, 0).add_minutes(61);
    assert_eq!(clock.to_string(), "11:01");
    [2.3255]
    [2.3350]
    let clock = Clock::new(10, 0).add_minutes(61);
    assert_eq!(clock.to_string(), "11:01");
  • replacement in rust/clock/tests/clock.rs at line 173
    [2.3418][2.3418:3514]()
    let clock = Clock::new(0, 45).add_minutes(160);
    assert_eq!(clock.to_string(), "03:25");
    [2.3418]
    [2.3514]
    let clock = Clock::new(0, 45).add_minutes(160);
    assert_eq!(clock.to_string(), "03:25");
  • replacement in rust/clock/tests/clock.rs at line 180
    [2.3567][2.3567:3662]()
    let clock = Clock::new(23, 59).add_minutes(2);
    assert_eq!(clock.to_string(), "00:01");
    [2.3567]
    [2.3662]
    let clock = Clock::new(23, 59).add_minutes(2);
    assert_eq!(clock.to_string(), "00:01");
  • replacement in rust/clock/tests/clock.rs at line 187
    [2.3717][2.3717:3814]()
    let clock = Clock::new(5, 32).add_minutes(1500);
    assert_eq!(clock.to_string(), "06:32");
    [2.3717]
    [2.3814]
    let clock = Clock::new(5, 32).add_minutes(1500);
    assert_eq!(clock.to_string(), "06:32");
  • replacement in rust/clock/tests/clock.rs at line 194
    [2.3870][2.3870:3966]()
    let clock = Clock::new(1, 1).add_minutes(3500);
    assert_eq!(clock.to_string(), "11:21");
    [2.3870]
    [2.3966]
    let clock = Clock::new(1, 1).add_minutes(3500);
    assert_eq!(clock.to_string(), "11:21");
  • replacement in rust/clock/tests/clock.rs at line 201
    [2.4016][2.4016:4111]()
    let clock = Clock::new(10, 3).add_minutes(-3);
    assert_eq!(clock.to_string(), "10:00");
    [2.4016]
    [2.4111]
    let clock = Clock::new(10, 3).add_minutes(-3);
    assert_eq!(clock.to_string(), "10:00");
  • replacement in rust/clock/tests/clock.rs at line 208
    [2.4170][2.4170:4266]()
    let clock = Clock::new(10, 3).add_minutes(-30);
    assert_eq!(clock.to_string(), "09:33");
    [2.4170]
    [2.4266]
    let clock = Clock::new(10, 3).add_minutes(-30);
    assert_eq!(clock.to_string(), "09:33");
  • replacement in rust/clock/tests/clock.rs at line 215
    [2.4326][2.4326:4422]()
    let clock = Clock::new(10, 3).add_minutes(-70);
    assert_eq!(clock.to_string(), "08:53");
    [2.4326]
    [2.4422]
    let clock = Clock::new(10, 3).add_minutes(-70);
    assert_eq!(clock.to_string(), "08:53");
  • replacement in rust/clock/tests/clock.rs at line 222
    [2.4480][2.4480:4574]()
    let clock = Clock::new(0, 3).add_minutes(-4);
    assert_eq!(clock.to_string(), "23:59");
    [2.4480]
    [2.4574]
    let clock = Clock::new(0, 3).add_minutes(-4);
    assert_eq!(clock.to_string(), "23:59");
  • replacement in rust/clock/tests/clock.rs at line 229
    [2.4636][2.4636:4732]()
    let clock = Clock::new(0, 0).add_minutes(-160);
    assert_eq!(clock.to_string(), "21:20");
    [2.4636]
    [2.4732]
    let clock = Clock::new(0, 0).add_minutes(-160);
    assert_eq!(clock.to_string(), "21:20");
  • replacement in rust/clock/tests/clock.rs at line 236
    [2.4806][2.4806:4903]()
    let clock = Clock::new(6, 15).add_minutes(-160);
    assert_eq!(clock.to_string(), "03:35");
    [2.4806]
    [2.4903]
    let clock = Clock::new(6, 15).add_minutes(-160);
    assert_eq!(clock.to_string(), "03:35");
  • replacement in rust/clock/tests/clock.rs at line 243
    [2.4963][2.4963:5061]()
    let clock = Clock::new(5, 32).add_minutes(-1500);
    assert_eq!(clock.to_string(), "04:32");
    [2.4963]
    [2.5061]
    let clock = Clock::new(5, 32).add_minutes(-1500);
    assert_eq!(clock.to_string(), "04:32");
  • replacement in rust/clock/tests/clock.rs at line 250
    [2.5122][2.5122:5220]()
    let clock = Clock::new(2, 20).add_minutes(-3000);
    assert_eq!(clock.to_string(), "00:20");
    [2.5122]
    [2.5220]
    let clock = Clock::new(2, 20).add_minutes(-3000);
    assert_eq!(clock.to_string(), "00:20");
  • replacement in rust/clock/tests/clock.rs at line 261
    [2.5305][2.5305:5361]()
    assert_eq!(Clock::new(15, 37), Clock::new(15, 37));
    [2.5305]
    [2.5361]
    assert_eq!(Clock::new(15, 37), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 267
    [2.5424][2.5424:5480]()
    assert_ne!(Clock::new(15, 36), Clock::new(15, 37));
    [2.5424]
    [2.5480]
    assert_ne!(Clock::new(15, 36), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 273
    [2.5542][2.5542:5598]()
    assert_ne!(Clock::new(14, 37), Clock::new(15, 37));
    [2.5542]
    [2.5598]
    assert_ne!(Clock::new(14, 37), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 279
    [2.5665][2.5665:5721]()
    assert_eq!(Clock::new(10, 37), Clock::new(34, 37));
    [2.5665]
    [2.5721]
    assert_eq!(Clock::new(10, 37), Clock::new(34, 37));
  • replacement in rust/clock/tests/clock.rs at line 285
    [2.5804][2.5804:5859]()
    assert_eq!(Clock::new(99, 11), Clock::new(3, 11));
    [2.5804]
    [2.5859]
    assert_eq!(Clock::new(99, 11), Clock::new(3, 11));
  • replacement in rust/clock/tests/clock.rs at line 291
    [2.5926][2.5926:5982]()
    assert_eq!(Clock::new(-2, 40), Clock::new(22, 40));
    [2.5926]
    [2.5982]
    assert_eq!(Clock::new(-2, 40), Clock::new(22, 40));
  • replacement in rust/clock/tests/clock.rs at line 297
    [2.6060][2.6060:6115]()
    assert_eq!(Clock::new(-31, 3), Clock::new(17, 3));
    [2.6060]
    [2.6115]
    assert_eq!(Clock::new(-31, 3), Clock::new(17, 3));
  • replacement in rust/clock/tests/clock.rs at line 303
    [2.6208][2.6208:6265]()
    assert_eq!(Clock::new(-83, 49), Clock::new(13, 49));
    [2.6208]
    [2.6265]
    assert_eq!(Clock::new(-83, 49), Clock::new(13, 49));
  • replacement in rust/clock/tests/clock.rs at line 309
    [2.6335][2.6335:6390]()
    assert_eq!(Clock::new(0, 1441), Clock::new(0, 1));
    [2.6335]
    [2.6390]
    assert_eq!(Clock::new(0, 1441), Clock::new(0, 1));
  • replacement in rust/clock/tests/clock.rs at line 315
    [2.6476][2.6476:6531]()
    assert_eq!(Clock::new(2, 4322), Clock::new(2, 2));
    [2.6476]
    [2.6531]
    assert_eq!(Clock::new(2, 4322), Clock::new(2, 2));
  • replacement in rust/clock/tests/clock.rs at line 321
    [2.6600][2.6600:6654]()
    assert_eq!(Clock::new(3, -20), Clock::new(2, 40))
    [2.6600]
    [2.6654]
    assert_eq!(Clock::new(3, -20), Clock::new(2, 40))
  • replacement in rust/clock/tests/clock.rs at line 327
    [2.6734][2.6734:6790]()
    assert_eq!(Clock::new(5, -1490), Clock::new(4, 10))
    [2.6734]
    [2.6790]
    assert_eq!(Clock::new(5, -1490), Clock::new(4, 10))
  • replacement in rust/clock/tests/clock.rs at line 333
    [2.6879][2.6879:6935]()
    assert_eq!(Clock::new(6, -4305), Clock::new(6, 15))
    [2.6879]
    [2.6935]
    assert_eq!(Clock::new(6, -4305), Clock::new(6, 15))
  • replacement in rust/clock/tests/clock.rs at line 339
    [2.7015][2.7015:7072]()
    assert_eq!(Clock::new(-12, -268), Clock::new(7, 32))
    [2.7015]
    [2.7072]
    assert_eq!(Clock::new(-12, -268), Clock::new(7, 32))
  • replacement in rust/clock/tests/clock.rs at line 345
    [2.7162][2.7162:7222]()
    assert_eq!(Clock::new(-54, -11_513), Clock::new(18, 7))
    [2.7162]
    [2.7222]
    assert_eq!(Clock::new(-54, -11_513), Clock::new(18, 7))
  • replacement in rust/clock/tests/clock.rs at line 351
    [2.7291][2.7291:7343]()
    assert_eq!(Clock::new(24, 0), Clock::new(0, 0))
    [2.7291]
    [2.7343]
    assert_eq!(Clock::new(24, 0), Clock::new(0, 0))
  • replacement in rust/clock/src/lib.rs at line 1
    [2.7394][2.7395:7413]()
    pub struct Clock;
    [2.7394]
    [2.7413]
    use std::fmt;
    const MINUTES_PER_HOUR: i32 = 60;
    const HOURS_PER_DAY: i32 = 24;
    const MINUTES_PER_DAY: i32 = MINUTES_PER_HOUR * HOURS_PER_DAY;
    #[derive(Debug, PartialEq)]
    pub struct Clock {
    minutes: i32,
    }
  • replacement in rust/clock/src/lib.rs at line 13
    [2.7427][2.7427:7624]()
    pub fn new(hours: i32, minutes: i32) -> Self {
    unimplemented!(
    "Construct a new Clock from {} hours and {} minutes",
    hours,
    minutes
    );
    }
    [2.7427]
    [2.7624]
    pub fn new(hours: i32, minutes: i32) -> Self {
    Self {
    minutes: (hours * MINUTES_PER_HOUR + minutes).rem_euclid(MINUTES_PER_DAY),
    }
    }
    pub fn add_minutes(&self, minutes: i32) -> Self {
    Self::new(0, self.minutes + minutes)
    }
    fn minutes(&self) -> i32 {
    self.minutes % MINUTES_PER_HOUR
    }
    fn hours(&self) -> i32 {
    self.minutes / MINUTES_PER_HOUR
    }
    }
  • replacement in rust/clock/src/lib.rs at line 32
    [2.7625][2.7625:7759]()
    pub fn add_minutes(&self, minutes: i32) -> Self {
    unimplemented!("Add {} minutes to existing Clock time", minutes);
    }
    [2.7625]
    [2.7759]
    impl fmt::Display for Clock {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
    write!(formatter, "{:02}:{:02}", self.hours(), self.minutes())
    }