1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
//! Pure presentation maths. Anything that touches a `Ui` is covered by the
//! manual screenshot pass; these are the calculations a pixel test cannot
//! express.
use std::f32::consts::TAU;
use zagan_bet::roulette::{BetTarget, Outside};
use zagan_bet_gui::roulette::{number_under, size_for, target_name};
use zagan_bet_gui::theme::{group_digits, money};
#[test]
fn money_is_grouped_in_threes() {
assert_eq!(group_digits(0), "0");
assert_eq!(group_digits(999), "999");
assert_eq!(group_digits(1000), "1 000");
assert_eq!(group_digits(1234567), "1 234 567");
assert_eq!(group_digits(-1500), "-1 500");
assert_eq!(money(1000), "1 000 Kr");
}
#[test]
fn the_wheel_pointer_reads_the_number_at_the_top() {
let segment = TAU / 37.0;
assert_eq!(number_under(0.0), 0);
// Rotating by -i segments puts wheel entry i under the pointer.
for number in [0u8, 32, 17, 26] {
let index = zagan_bet::roulette::WHEEL
.iter()
.position(|candidate| *candidate == number)
.expect("number is on the wheel");
let rotation = -(index as f32) * segment;
assert_eq!(number_under(rotation), number);
}
// One full turn changes nothing.
assert_eq!(number_under(-TAU), 0);
}
#[test]
fn table_size_keeps_the_felt_aspect_and_fits() {
let available = eframe::egui::vec2(1300.0, 900.0);
let size = size_for(available);
assert!(size.x <= available.x + 0.01, "{size:?} overflows");
assert!(size.y <= available.y + 0.01, "{size:?} overflows");
// 13 cells wide and 4.89 cells tall, plus the felt border on every side.
let cell = (size.x - 12.0) / 13.0;
assert!((cell - (size.y - 12.0) / 4.89).abs() < 0.01);
}
#[test]
fn targets_read_as_bet_slips() {
assert_eq!(
target_name(&BetTarget::Straight { number: 17 }),
"Straight 17"
);
assert_eq!(
target_name(&BetTarget::Split { a: 26, b: 29 }),
"Split 26/29"
);
assert_eq!(
target_name(&BetTarget::Corner {
numbers: [17, 18, 20, 21]
}),
"Corner 17/18/20/21"
);
assert_eq!(target_name(&BetTarget::Dozen { index: 1 }), "2nd 12");
assert_eq!(target_name(&BetTarget::Column { index: 2 }), "Column 3");
assert_eq!(
target_name(&BetTarget::Outside {
kind: Outside::High
}),
"19-36"
);
assert_eq!(
target_name(&BetTarget::Outside {
kind: Outside::Black
}),
"Black"
);
}
|