//! 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" ); }