refactor: Reuse macro between types

This commit is contained in:
Guilhem 2022-06-15 19:24:10 +02:00
parent 1298d1ae86
commit b7b69883ce

View File

@ -194,59 +194,12 @@ mod test {
}; };
} }
to_iso!(to_iso_11, QuadrantKind::TopLeft, 1, true, "11"); #[cfg(test)]
to_iso!(to_iso_18, QuadrantKind::TopLeft, 8, true, "18"); mod test {
to_iso!(to_iso_21, QuadrantKind::TopRight, 1, true, "21"); use super::*;
to_iso!(to_iso_28, QuadrantKind::TopRight, 8, true, "28");
to_iso!(to_iso_31, QuadrantKind::BottomRight, 1, true, "31");
to_iso!(to_iso_38, QuadrantKind::BottomRight, 8, true, "38");
to_iso!(to_iso_41, QuadrantKind::BottomLeft, 1, true, "41");
to_iso!(to_iso_48, QuadrantKind::BottomLeft, 8, true, "48");
to_iso!(to_iso_51, QuadrantKind::TopLeft, 1, false, "51");
to_iso!(to_iso_55, QuadrantKind::TopLeft, 5, false, "55");
to_iso!(to_iso_61, QuadrantKind::TopRight, 1, false, "61");
to_iso!(to_iso_65, QuadrantKind::TopRight, 5, false, "65");
to_iso!(to_iso_71, QuadrantKind::BottomRight, 1, false, "71");
to_iso!(to_iso_75, QuadrantKind::BottomRight, 5, false, "75");
to_iso!(to_iso_81, QuadrantKind::BottomLeft, 1, false, "81");
to_iso!(to_iso_85, QuadrantKind::BottomLeft, 5, false, "85");
from_iso!(from_iso_11, "11", QuadrantKind::TopLeft, 1, true); macro_rules! to {
from_iso!(from_iso_18, "18", QuadrantKind::TopLeft, 8, true); ($name:ident, $func:ident, $quadrant:expr,$number:expr, $permanent:expr, $value:expr) => {
from_iso!(from_iso_21, "21", QuadrantKind::TopRight, 1, true);
from_iso!(from_iso_28, "28", QuadrantKind::TopRight, 8, true);
from_iso!(from_iso_31, "31", QuadrantKind::BottomRight, 1, true);
from_iso!(from_iso_38, "38", QuadrantKind::BottomRight, 8, true);
from_iso!(from_iso_41, "41", QuadrantKind::BottomLeft, 1, true);
from_iso!(from_iso_48, "48", QuadrantKind::BottomLeft, 8, true);
from_iso!(from_iso_51, "51", QuadrantKind::TopLeft, 1, false);
from_iso!(from_iso_55, "55", QuadrantKind::TopLeft, 5, false);
from_iso!(from_iso_61, "61", QuadrantKind::TopRight, 1, false);
from_iso!(from_iso_65, "65", QuadrantKind::TopRight, 5, false);
from_iso!(from_iso_71, "71", QuadrantKind::BottomRight, 1, false);
from_iso!(from_iso_75, "75", QuadrantKind::BottomRight, 5, false);
from_iso!(from_iso_81, "81", QuadrantKind::BottomLeft, 1, false);
from_iso!(from_iso_85, "85", QuadrantKind::BottomLeft, 5, false);
from_iso_fail!(from_iso_fail_10, "10");
from_iso_fail!(from_iso_fail_19, "19");
from_iso_fail!(from_iso_fail_20, "20");
from_iso_fail!(from_iso_fail_29, "29");
from_iso_fail!(from_iso_fail_30, "30");
from_iso_fail!(from_iso_fail_39, "39");
from_iso_fail!(from_iso_fail_40, "40");
from_iso_fail!(from_iso_fail_49, "49");
from_iso_fail!(from_iso_fail_50, "50");
from_iso_fail!(from_iso_fail_56, "56");
from_iso_fail!(from_iso_fail_60, "60");
from_iso_fail!(from_iso_fail_66, "66");
from_iso_fail!(from_iso_fail_70, "70");
from_iso_fail!(from_iso_fail_76, "76");
from_iso_fail!(from_iso_fail_80, "80");
from_iso_fail!(from_iso_fail_86, "86");
macro_rules! to_uns {
($name:ident, $quadrant:expr,$number:expr, $permanent:expr, $uns:expr) => {
#[test] #[test]
fn $name() { fn $name() {
let teeth = Teeth { let teeth = Teeth {
@ -254,16 +207,16 @@ mod test {
number: $number, number: $number,
permanent: $permanent, permanent: $permanent,
}; };
assert_eq!(teeth.to_uns(), $uns); assert_eq!(teeth.$func(), $value);
} }
}; };
} }
macro_rules! from_uns { macro_rules! from {
($name:ident, $uns:expr, $quadrant:expr,$number:expr, $permanent:expr) => { ($name:ident, $func:ident, $value:expr, $quadrant:expr,$number:expr, $permanent:expr) => {
#[test] #[test]
fn $name() { fn $name() {
let teeth = Teeth::from_uns($uns); let teeth = Teeth::$func($value);
assert_eq!(teeth.quadrant, $quadrant); assert_eq!(teeth.quadrant, $quadrant);
assert_eq!(teeth.number, $number); assert_eq!(teeth.number, $number);
assert_eq!(teeth.permanent, $permanent); assert_eq!(teeth.permanent, $permanent);
@ -271,52 +224,229 @@ mod test {
}; };
} }
macro_rules! from_uns_fail { macro_rules! from_fail {
($name:ident, $uns:expr) => { ($name:ident, $func:ident, $value:expr) => {
#[test] #[test]
#[should_panic] #[should_panic]
fn $name() { fn $name() {
Teeth::from_uns($uns); Teeth::$func($value);
} }
}; };
} }
to_uns!(to_uns_1, QuadrantKind::TopLeft, 1, true, "1"); to!(to_iso_11, to_iso, QuadrantKind::TopLeft, 1, true, "11");
to_uns!(to_uns_8, QuadrantKind::TopLeft, 8, true, "8"); to!(to_iso_18, to_iso, QuadrantKind::TopLeft, 8, true, "18");
to_uns!(to_uns_9, QuadrantKind::TopRight, 1, true, "9"); to!(to_iso_21, to_iso, QuadrantKind::TopRight, 1, true, "21");
to_uns!(to_uns_16, QuadrantKind::TopRight, 8, true, "16"); to!(to_iso_28, to_iso, QuadrantKind::TopRight, 8, true, "28");
to_uns!(to_uns_17, QuadrantKind::BottomRight, 1, true, "17"); to!(to_iso_31, to_iso, QuadrantKind::BottomRight, 1, true, "31");
to_uns!(to_uns_24, QuadrantKind::BottomRight, 8, true, "24"); to!(to_iso_38, to_iso, QuadrantKind::BottomRight, 8, true, "38");
to_uns!(to_uns_25, QuadrantKind::BottomLeft, 1, true, "25"); to!(to_iso_41, to_iso, QuadrantKind::BottomLeft, 1, true, "41");
to_uns!(to_uns_32, QuadrantKind::BottomLeft, 8, true, "32"); to!(to_iso_48, to_iso, QuadrantKind::BottomLeft, 8, true, "48");
to_uns!(to_uns_a, QuadrantKind::TopLeft, 1, false, "A"); to!(to_iso_51, to_iso, QuadrantKind::TopLeft, 1, false, "51");
to_uns!(to_uns_e, QuadrantKind::TopLeft, 5, false, "E"); to!(to_iso_55, to_iso, QuadrantKind::TopLeft, 5, false, "55");
to_uns!(to_uns_f, QuadrantKind::TopRight, 1, false, "F"); to!(to_iso_61, to_iso, QuadrantKind::TopRight, 1, false, "61");
to_uns!(to_uns_j, QuadrantKind::TopRight, 5, false, "J"); to!(to_iso_65, to_iso, QuadrantKind::TopRight, 5, false, "65");
to_uns!(to_uns_k, QuadrantKind::BottomRight, 1, false, "K"); to!(to_iso_71, to_iso, QuadrantKind::BottomRight, 1, false, "71");
to_uns!(to_uns_o, QuadrantKind::BottomRight, 5, false, "O"); to!(to_iso_75, to_iso, QuadrantKind::BottomRight, 5, false, "75");
to_uns!(to_uns_p, QuadrantKind::BottomLeft, 1, false, "P"); to!(to_iso_81, to_iso, QuadrantKind::BottomLeft, 1, false, "81");
to_uns!(to_uns_t, QuadrantKind::BottomLeft, 5, false, "T"); to!(to_iso_85, to_iso, QuadrantKind::BottomLeft, 5, false, "85");
from_uns!(from_uns_8, "8", QuadrantKind::TopLeft, 1, true); from!(from_iso_11, from_iso, "11", QuadrantKind::TopLeft, 1, true);
from_uns!(from_uns_1, "1", QuadrantKind::TopLeft, 8, true); from!(from_iso_18, from_iso, "18", QuadrantKind::TopLeft, 8, true);
from_uns!(from_uns_9, "9", QuadrantKind::TopRight, 1, true); from!(from_iso_21, from_iso, "21", QuadrantKind::TopRight, 1, true);
from_uns!(from_uns_16, "16", QuadrantKind::TopRight, 8, true); from!(from_iso_28, from_iso, "28", QuadrantKind::TopRight, 8, true);
from_uns!(from_uns_24, "24", QuadrantKind::BottomRight, 1, true); from!(
from_uns!(from_uns_17, "17", QuadrantKind::BottomRight, 8, true); from_iso_31,
from_uns!(from_uns_25, "25", QuadrantKind::BottomLeft, 1, true); from_iso,
from_uns!(from_uns_32, "32", QuadrantKind::BottomLeft, 8, true); "31",
from_uns!(from_uns_e, "E", QuadrantKind::TopLeft, 1, false); QuadrantKind::BottomRight,
from_uns!(from_uns_a, "A", QuadrantKind::TopLeft, 5, false); 1,
from_uns!(from_uns_f, "F", QuadrantKind::TopRight, 1, false); true
from_uns!(from_uns_j, "J", QuadrantKind::TopRight, 5, false); );
from_uns!(from_uns_o, "O", QuadrantKind::BottomRight, 1, false); from!(
from_uns!(from_uns_k, "K", QuadrantKind::BottomRight, 5, false); from_iso_38,
from_uns!(from_uns_p, "P", QuadrantKind::BottomLeft, 1, false); from_iso,
from_uns!(from_uns_t, "T", QuadrantKind::BottomLeft, 5, false); "38",
QuadrantKind::BottomRight,
8,
true
);
from!(
from_iso_41,
from_iso,
"41",
QuadrantKind::BottomLeft,
1,
true
);
from!(
from_iso_48,
from_iso,
"48",
QuadrantKind::BottomLeft,
8,
true
);
from!(from_iso_51, from_iso, "51", QuadrantKind::TopLeft, 1, false);
from!(from_iso_55, from_iso, "55", QuadrantKind::TopLeft, 5, false);
from!(
from_iso_61,
from_iso,
"61",
QuadrantKind::TopRight,
1,
false
);
from!(
from_iso_65,
from_iso,
"65",
QuadrantKind::TopRight,
5,
false
);
from!(
from_iso_71,
from_iso,
"71",
QuadrantKind::BottomRight,
1,
false
);
from!(
from_iso_75,
from_iso,
"75",
QuadrantKind::BottomRight,
5,
false
);
from!(
from_iso_81,
from_iso,
"81",
QuadrantKind::BottomLeft,
1,
false
);
from!(
from_iso_85,
from_iso,
"85",
QuadrantKind::BottomLeft,
5,
false
);
from_uns_fail!(from_uns_fail_0, "0"); from_fail!(from_iso_fail_10, from_iso, "10");
from_uns_fail!(from_uns_fail_33, "33"); from_fail!(from_iso_fail_19, from_iso, "19");
from_uns_fail!(from_uns_fail_at, "@"); from_fail!(from_iso_fail_20, from_iso, "20");
from_uns_fail!(from_uns_fail_u, "U"); from_fail!(from_iso_fail_29, from_iso, "29");
from_fail!(from_iso_fail_30, from_iso, "30");
from_fail!(from_iso_fail_39, from_iso, "39");
from_fail!(from_iso_fail_40, from_iso, "40");
from_fail!(from_iso_fail_49, from_iso, "49");
from_fail!(from_iso_fail_50, from_iso, "50");
from_fail!(from_iso_fail_56, from_iso, "56");
from_fail!(from_iso_fail_60, from_iso, "60");
from_fail!(from_iso_fail_66, from_iso, "66");
from_fail!(from_iso_fail_70, from_iso, "70");
from_fail!(from_iso_fail_76, from_iso, "76");
from_fail!(from_iso_fail_80, from_iso, "80");
from_fail!(from_iso_fail_86, from_iso, "86");
to!(to_uns_1, to_uns, QuadrantKind::TopLeft, 1, true, "1");
to!(to_uns_8, to_uns, QuadrantKind::TopLeft, 8, true, "8");
to!(to_uns_9, to_uns, QuadrantKind::TopRight, 1, true, "9");
to!(to_uns_16, to_uns, QuadrantKind::TopRight, 8, true, "16");
to!(to_uns_17, to_uns, QuadrantKind::BottomRight, 1, true, "17");
to!(to_uns_24, to_uns, QuadrantKind::BottomRight, 8, true, "24");
to!(to_uns_25, to_uns, QuadrantKind::BottomLeft, 1, true, "25");
to!(to_uns_32, to_uns, QuadrantKind::BottomLeft, 8, true, "32");
to!(to_uns_a, to_uns, QuadrantKind::TopLeft, 1, false, "A");
to!(to_uns_e, to_uns, QuadrantKind::TopLeft, 5, false, "E");
to!(to_uns_f, to_uns, QuadrantKind::TopRight, 1, false, "F");
to!(to_uns_j, to_uns, QuadrantKind::TopRight, 5, false, "J");
to!(to_uns_k, to_uns, QuadrantKind::BottomRight, 1, false, "K");
to!(to_uns_o, to_uns, QuadrantKind::BottomRight, 5, false, "O");
to!(to_uns_p, to_uns, QuadrantKind::BottomLeft, 1, false, "P");
to!(to_uns_t, to_uns, QuadrantKind::BottomLeft, 5, false, "T");
from!(from_uns_8, from_uns, "8", QuadrantKind::TopLeft, 1, true);
from!(from_uns_1, from_uns, "1", QuadrantKind::TopLeft, 8, true);
from!(from_uns_9, from_uns, "9", QuadrantKind::TopRight, 1, true);
from!(from_uns_16, from_uns, "16", QuadrantKind::TopRight, 8, true);
from!(
from_uns_24,
from_uns,
"24",
QuadrantKind::BottomRight,
1,
true
);
from!(
from_uns_17,
from_uns,
"17",
QuadrantKind::BottomRight,
8,
true
);
from!(
from_uns_25,
from_uns,
"25",
QuadrantKind::BottomLeft,
1,
true
);
from!(
from_uns_32,
from_uns,
"32",
QuadrantKind::BottomLeft,
8,
true
);
from!(from_uns_e, from_uns, "E", QuadrantKind::TopLeft, 1, false);
from!(from_uns_a, from_uns, "A", QuadrantKind::TopLeft, 5, false);
from!(from_uns_f, from_uns, "F", QuadrantKind::TopRight, 1, false);
from!(from_uns_j, from_uns, "J", QuadrantKind::TopRight, 5, false);
from!(
from_uns_o,
from_uns,
"O",
QuadrantKind::BottomRight,
1,
false
);
from!(
from_uns_k,
from_uns,
"K",
QuadrantKind::BottomRight,
5,
false
);
from!(
from_uns_p,
from_uns,
"P",
QuadrantKind::BottomLeft,
1,
false
);
from!(
from_uns_t,
from_uns,
"T",
QuadrantKind::BottomLeft,
5,
false
);
from_fail!(from_uns_fail_0, from_uns, "0");
from_fail!(from_uns_fail_33, from_uns, "33");
from_fail!(from_uns_fail_at, from_uns, "@");
from_fail!(from_uns_fail_u, from_uns, "U");
} }