reactive_scores/
reactive_scores.rs

1#[macro_use]
2extern crate epoxy;
3
4use epoxy::ReactiveValue;
5
6fn main() {
7    let player_1_points = epoxy::ReactiveValue::new(4);
8    let player_1_multiplier = epoxy::ReactiveValue::new(1.0_f32);
9
10    let player_2_points = epoxy::ReactiveValue::new(5);
11    let player_2_multiplier = epoxy::ReactiveValue::new(1.0_f32);
12
13    let player_1_score = computed!(*player_1_points as f32 * player_1_multiplier);
14    let player_2_score = computed!(*player_2_points as f32 * player_2_multiplier);
15
16    let winner = computed! {
17        if (player_1_score == player_2_score) {
18            "Tie"
19        } else if (player_1_score > player_2_score) {
20            "Player 1"
21        } else {
22            "Player 2"
23        }
24    };
25
26    assert_eq!(*player_1_score.get(), 4_f32);
27    assert_eq!(*player_2_score.get(), 5_f32);
28    assert_eq!(*winner.get(), "Player 2");
29
30    player_1_multiplier.set(2.5_f32);
31
32    assert_eq!(*player_1_score.get(), 10_f32);
33    assert_eq!(*player_2_score.get(), 5_f32);
34    assert_eq!(*winner.get(), "Player 1");
35
36    player_2_points.set(9);
37
38    assert_eq!(*player_1_score.get(), 10_f32);
39    assert_eq!(*player_2_score.get(), 9_f32);
40    assert_eq!(*winner.get(), "Player 1");
41
42    player_2_points.set(10);
43
44    assert_eq!(*player_1_score.get(), 10_f32);
45    assert_eq!(*player_2_score.get(), 10_f32);
46    assert_eq!(*winner.get(), "Tie");
47}