// run-pass

#![allow(dead_code)]

trait Range {
    const FIRST: u8;
    const LAST: u8;
}

struct OneDigit;
impl Range for OneDigit {
    const FIRST: u8 = 0;
    const LAST: u8 = 9;
}

struct TwoDigits;
impl Range for TwoDigits {
    const FIRST: u8 = 10;
    const LAST: u8 = 99;
}

struct ThreeDigits;
impl Range for ThreeDigits {
    const FIRST: u8 = 100;
    const LAST: u8 = 255;
}

fn digits(x: u8) -> u32 {
    match x {
        OneDigit::FIRST..=OneDigit::LAST => 1,
        TwoDigits::FIRST..=TwoDigits::LAST => 2,
        ThreeDigits::FIRST..=ThreeDigits::LAST => 3,
    }
}

fn main() {
    assert_eq!(digits(100), 3);
}
