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

[?]
Aaw9nJhsNmfzFih9mKyNw9mV8CgERXJkRa1kK1Kx3LQH
Oct 11, 2021, 10:17 AM
I2SHF2VRELGYCXNTJOMU554AGW3CW7LPLNE7WOWSVS4GIFHROQDAC

Dependencies

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

Change contents

  • replacement in rust/clock/tests/clock.rs at line 9
    [2.146][2.146:201]()
    assert_eq!(Clock::new(8, 0).to_string(), "08:00");
    [2.146]
    [2.201]
    assert_eq!(Clock::new(8, 0).to_string(), "08:00");
  • replacement in rust/clock/tests/clock.rs at line 15
    [2.248][2.248:304]()
    assert_eq!(Clock::new(11, 9).to_string(), "11:09");
    [2.248]
    [2.304]
    assert_eq!(Clock::new(11, 9).to_string(), "11:09");
  • replacement in rust/clock/tests/clock.rs at line 21
    [2.360][2.360:416]()
    assert_eq!(Clock::new(24, 0).to_string(), "00:00");
    [2.360]
    [2.416]
    assert_eq!(Clock::new(24, 0).to_string(), "00:00");
  • replacement in rust/clock/tests/clock.rs at line 27
    [2.465][2.465:521]()
    assert_eq!(Clock::new(25, 0).to_string(), "01:00");
    [2.465]
    [2.521]
    assert_eq!(Clock::new(25, 0).to_string(), "01:00");
  • replacement in rust/clock/tests/clock.rs at line 33
    [2.583][2.583:640]()
    assert_eq!(Clock::new(100, 0).to_string(), "04:00");
    [2.583]
    [2.640]
    assert_eq!(Clock::new(100, 0).to_string(), "04:00");
  • replacement in rust/clock/tests/clock.rs at line 39
    [2.700][2.700:756]()
    assert_eq!(Clock::new(1, 60).to_string(), "02:00");
    [2.700]
    [2.756]
    assert_eq!(Clock::new(1, 60).to_string(), "02:00");
  • replacement in rust/clock/tests/clock.rs at line 45
    [2.807][2.807:864]()
    assert_eq!(Clock::new(0, 160).to_string(), "02:40");
    [2.807]
    [2.864]
    assert_eq!(Clock::new(0, 160).to_string(), "02:40");
  • replacement in rust/clock/tests/clock.rs at line 51
    [2.928][2.928:986]()
    assert_eq!(Clock::new(0, 1723).to_string(), "04:43");
    [2.928]
    [2.986]
    assert_eq!(Clock::new(0, 1723).to_string(), "04:43");
  • replacement in rust/clock/tests/clock.rs at line 57
    [2.1047][2.1047:1105]()
    assert_eq!(Clock::new(25, 160).to_string(), "03:40");
    [2.1047]
    [2.1105]
    assert_eq!(Clock::new(25, 160).to_string(), "03:40");
  • replacement in rust/clock/tests/clock.rs at line 63
    [2.1179][2.1179:1239]()
    assert_eq!(Clock::new(201, 3001).to_string(), "11:01");
    [2.1179]
    [2.1239]
    assert_eq!(Clock::new(201, 3001).to_string(), "11:01");
  • replacement in rust/clock/tests/clock.rs at line 69
    [2.1320][2.1320:1379]()
    assert_eq!(Clock::new(72, 8640).to_string(), "00:00");
    [2.1320]
    [2.1379]
    assert_eq!(Clock::new(72, 8640).to_string(), "00:00");
  • replacement in rust/clock/tests/clock.rs at line 75
    [2.1426][2.1426:1483]()
    assert_eq!(Clock::new(-1, 15).to_string(), "23:15");
    [2.1426]
    [2.1483]
    assert_eq!(Clock::new(-1, 15).to_string(), "23:15");
  • replacement in rust/clock/tests/clock.rs at line 81
    [2.1540][2.1540:1598]()
    assert_eq!(Clock::new(-25, 00).to_string(), "23:00");
    [2.1540]
    [2.1598]
    assert_eq!(Clock::new(-25, 00).to_string(), "23:00");
  • replacement in rust/clock/tests/clock.rs at line 87
    [2.1668][2.1668:1726]()
    assert_eq!(Clock::new(-91, 00).to_string(), "05:00");
    [2.1668]
    [2.1726]
    assert_eq!(Clock::new(-91, 00).to_string(), "05:00");
  • replacement in rust/clock/tests/clock.rs at line 93
    [2.1776][2.1776:1833]()
    assert_eq!(Clock::new(1, -40).to_string(), "00:20");
    [2.1776]
    [2.1833]
    assert_eq!(Clock::new(1, -40).to_string(), "00:20");
  • replacement in rust/clock/tests/clock.rs at line 99
    [2.1893][2.1893:1951]()
    assert_eq!(Clock::new(1, -160).to_string(), "22:20");
    [2.1893]
    [2.1951]
    assert_eq!(Clock::new(1, -160).to_string(), "22:20");
  • replacement in rust/clock/tests/clock.rs at line 105
    [2.2024][2.2024:2083]()
    assert_eq!(Clock::new(1, -4820).to_string(), "16:40");
    [2.2024]
    [2.2083]
    assert_eq!(Clock::new(1, -4820).to_string(), "16:40");
  • replacement in rust/clock/tests/clock.rs at line 111
    [2.2152][2.2152:2209]()
    assert_eq!(Clock::new(2, -60).to_string(), "01:00");
    [2.2152]
    [2.2209]
    assert_eq!(Clock::new(2, -60).to_string(), "01:00");
  • replacement in rust/clock/tests/clock.rs at line 117
    [2.2288][2.2288:2346]()
    assert_eq!(Clock::new(1, -120).to_string(), "23:00");
    [2.2288]
    [2.2346]
    assert_eq!(Clock::new(1, -120).to_string(), "23:00");
  • replacement in rust/clock/tests/clock.rs at line 123
    [2.2420][2.2420:2480]()
    assert_eq!(Clock::new(-25, -160).to_string(), "20:20");
    [2.2420]
    [2.2480]
    assert_eq!(Clock::new(-25, -160).to_string(), "20:20");
  • replacement in rust/clock/tests/clock.rs at line 129
    [2.2567][2.2567:2629]()
    assert_eq!(Clock::new(-121, -5810).to_string(), "22:10");
    [2.2567]
    [2.2629]
    assert_eq!(Clock::new(-121, -5810).to_string(), "22:10");
  • replacement in rust/clock/tests/clock.rs at line 135
    [2.2693][2.2693:2750]()
    assert_eq!(Clock::new(0, -22).to_string(), "23:38");
    [2.2693]
    [2.2750]
    assert_eq!(Clock::new(0, -22).to_string(), "23:38");
  • replacement in rust/clock/tests/clock.rs at line 145
    [2.2816][2.2816:2910]()
    let clock = Clock::new(10, 0).add_minutes(3);
    assert_eq!(clock.to_string(), "10:03");
    [2.2816]
    [2.2910]
    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.2958][2.2958:3052]()
    let clock = Clock::new(6, 41).add_minutes(0);
    assert_eq!(clock.to_string(), "06:41");
    [2.2958]
    [2.3052]
    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.3102][2.3102:3197]()
    let clock = Clock::new(0, 45).add_minutes(40);
    assert_eq!(clock.to_string(), "01:25");
    [2.3102]
    [2.3197]
    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.3253][2.3253:3348]()
    let clock = Clock::new(10, 0).add_minutes(61);
    assert_eq!(clock.to_string(), "11:01");
    [2.3253]
    [2.3348]
    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.3416][2.3416:3512]()
    let clock = Clock::new(0, 45).add_minutes(160);
    assert_eq!(clock.to_string(), "03:25");
    [2.3416]
    [2.3512]
    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.3565][2.3565:3660]()
    let clock = Clock::new(23, 59).add_minutes(2);
    assert_eq!(clock.to_string(), "00:01");
    [2.3565]
    [2.3660]
    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.3715][2.3715:3812]()
    let clock = Clock::new(5, 32).add_minutes(1500);
    assert_eq!(clock.to_string(), "06:32");
    [2.3715]
    [2.3812]
    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.3868][2.3868:3964]()
    let clock = Clock::new(1, 1).add_minutes(3500);
    assert_eq!(clock.to_string(), "11:21");
    [2.3868]
    [2.3964]
    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.4014][2.4014:4109]()
    let clock = Clock::new(10, 3).add_minutes(-3);
    assert_eq!(clock.to_string(), "10:00");
    [2.4014]
    [2.4109]
    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.4168][2.4168:4264]()
    let clock = Clock::new(10, 3).add_minutes(-30);
    assert_eq!(clock.to_string(), "09:33");
    [2.4168]
    [2.4264]
    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.4324][2.4324:4420]()
    let clock = Clock::new(10, 3).add_minutes(-70);
    assert_eq!(clock.to_string(), "08:53");
    [2.4324]
    [2.4420]
    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.4478][2.4478:4572]()
    let clock = Clock::new(0, 3).add_minutes(-4);
    assert_eq!(clock.to_string(), "23:59");
    [2.4478]
    [2.4572]
    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.4634][2.4634:4730]()
    let clock = Clock::new(0, 0).add_minutes(-160);
    assert_eq!(clock.to_string(), "21:20");
    [2.4634]
    [2.4730]
    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.4804][2.4804:4901]()
    let clock = Clock::new(6, 15).add_minutes(-160);
    assert_eq!(clock.to_string(), "03:35");
    [2.4804]
    [2.4901]
    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.4961][2.4961:5059]()
    let clock = Clock::new(5, 32).add_minutes(-1500);
    assert_eq!(clock.to_string(), "04:32");
    [2.4961]
    [2.5059]
    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.5120][2.5120:5218]()
    let clock = Clock::new(2, 20).add_minutes(-3000);
    assert_eq!(clock.to_string(), "00:20");
    [2.5120]
    [2.5218]
    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.5303][2.5303:5359]()
    assert_eq!(Clock::new(15, 37), Clock::new(15, 37));
    [2.5303]
    [2.5359]
    assert_eq!(Clock::new(15, 37), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 267
    [2.5422][2.5422:5478]()
    assert_ne!(Clock::new(15, 36), Clock::new(15, 37));
    [2.5422]
    [2.5478]
    assert_ne!(Clock::new(15, 36), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 273
    [2.5540][2.5540:5596]()
    assert_ne!(Clock::new(14, 37), Clock::new(15, 37));
    [2.5540]
    [2.5596]
    assert_ne!(Clock::new(14, 37), Clock::new(15, 37));
  • replacement in rust/clock/tests/clock.rs at line 279
    [2.5663][2.5663:5719]()
    assert_eq!(Clock::new(10, 37), Clock::new(34, 37));
    [2.5663]
    [2.5719]
    assert_eq!(Clock::new(10, 37), Clock::new(34, 37));
  • replacement in rust/clock/tests/clock.rs at line 285
    [2.5802][2.5802:5857]()
    assert_eq!(Clock::new(99, 11), Clock::new(3, 11));
    [2.5802]
    [2.5857]
    assert_eq!(Clock::new(99, 11), Clock::new(3, 11));
  • replacement in rust/clock/tests/clock.rs at line 291
    [2.5924][2.5924:5980]()
    assert_eq!(Clock::new(-2, 40), Clock::new(22, 40));
    [2.5924]
    [2.5980]
    assert_eq!(Clock::new(-2, 40), Clock::new(22, 40));
  • replacement in rust/clock/tests/clock.rs at line 297
    [2.6058][2.6058:6113]()
    assert_eq!(Clock::new(-31, 3), Clock::new(17, 3));
    [2.6058]
    [2.6113]
    assert_eq!(Clock::new(-31, 3), Clock::new(17, 3));
  • replacement in rust/clock/tests/clock.rs at line 303
    [2.6206][2.6206:6263]()
    assert_eq!(Clock::new(-83, 49), Clock::new(13, 49));
    [2.6206]
    [2.6263]
    assert_eq!(Clock::new(-83, 49), Clock::new(13, 49));
  • replacement in rust/clock/tests/clock.rs at line 309
    [2.6333][2.6333:6388]()
    assert_eq!(Clock::new(0, 1441), Clock::new(0, 1));
    [2.6333]
    [2.6388]
    assert_eq!(Clock::new(0, 1441), Clock::new(0, 1));
  • replacement in rust/clock/tests/clock.rs at line 315
    [2.6474][2.6474:6529]()
    assert_eq!(Clock::new(2, 4322), Clock::new(2, 2));
    [2.6474]
    [2.6529]
    assert_eq!(Clock::new(2, 4322), Clock::new(2, 2));
  • replacement in rust/clock/tests/clock.rs at line 321
    [2.6598][2.6598:6652]()
    assert_eq!(Clock::new(3, -20), Clock::new(2, 40))
    [2.6598]
    [2.6652]
    assert_eq!(Clock::new(3, -20), Clock::new(2, 40))
  • replacement in rust/clock/tests/clock.rs at line 327
    [2.6732][2.6732:6788]()
    assert_eq!(Clock::new(5, -1490), Clock::new(4, 10))
    [2.6732]
    [2.6788]
    assert_eq!(Clock::new(5, -1490), Clock::new(4, 10))
  • replacement in rust/clock/tests/clock.rs at line 333
    [2.6877][2.6877:6933]()
    assert_eq!(Clock::new(6, -4305), Clock::new(6, 15))
    [2.6877]
    [2.6933]
    assert_eq!(Clock::new(6, -4305), Clock::new(6, 15))
  • replacement in rust/clock/tests/clock.rs at line 339
    [2.7013][2.7013:7070]()
    assert_eq!(Clock::new(-12, -268), Clock::new(7, 32))
    [2.7013]
    [2.7070]
    assert_eq!(Clock::new(-12, -268), Clock::new(7, 32))
  • replacement in rust/clock/tests/clock.rs at line 345
    [2.7160][2.7160:7220]()
    assert_eq!(Clock::new(-54, -11_513), Clock::new(18, 7))
    [2.7160]
    [2.7220]
    assert_eq!(Clock::new(-54, -11_513), Clock::new(18, 7))
  • replacement in rust/clock/tests/clock.rs at line 351
    [2.7289][2.7289:7341]()
    assert_eq!(Clock::new(24, 0), Clock::new(0, 0))
    [2.7289]
    [2.7341]
    assert_eq!(Clock::new(24, 0), Clock::new(0, 0))
  • replacement in rust/clock/src/lib.rs at line 1
    [2.7391][2.7392:7410]()
    pub struct Clock;
    [2.7391]
    [2.7410]
    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.7424][2.7424:7621]()
    pub fn new(hours: i32, minutes: i32) -> Self {
    unimplemented!(
    "Construct a new Clock from {} hours and {} minutes",
    hours,
    minutes
    );
    }
    [2.7424]
    [2.7621]
    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.7622][2.7622:7756]()
    pub fn add_minutes(&self, minutes: i32) -> Self {
    unimplemented!("Add {} minutes to existing Clock time", minutes);
    }
    [2.7622]
    [2.7756]
    impl fmt::Display for Clock {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
    write!(formatter, "{:02}:{:02}", self.hours(), self.minutes())
    }