File: eval.rs

package info (click to toggle)
librsvg 2.60.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 140,720 kB
  • sloc: python: 2,913; ansic: 2,333; sh: 1,022; makefile: 95; xml: 14; javascript: 9
file content (65 lines) | stat: -rw-r--r-- 2,251 bytes parent folder | download | duplicates (5)
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
use cfg_expr::{targets::get_builtin_target_by_triple, Expression, Predicate};

fn main() {
    let specific = Expression::parse(
        r#"all(
            target_os = "windows",
            target_arch = "x86",
            windows,
            target_env = "msvc",
            target_feature = "fxsr",
            target_feature = "sse",
            target_feature = "sse2",
            target_pointer_width = "32",
            target_endian = "little",
            not(target_vendor = "uwp"),
            feature = "cool_thing",
        )"#,
    )
    .unwrap();

    // cfg_expr includes a list of every builtin target in rustc
    let x86_win = get_builtin_target_by_triple("i686-pc-windows-msvc").unwrap();
    let x86_pentium_win = get_builtin_target_by_triple("i586-pc-windows-msvc").unwrap();
    let uwp_win = get_builtin_target_by_triple("i686-uwp-windows-msvc").unwrap();
    let mac = get_builtin_target_by_triple("x86_64-apple-darwin").unwrap();

    let avail_targ_feats = ["fxsr", "sse", "sse2"];

    // This will satisfy all requirements
    assert!(specific.eval(|pred| {
        match pred {
            Predicate::Target(tp) => tp.matches(x86_win),
            Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
            Predicate::Feature(feat) => *feat == "cool_thing",
            _ => false,
        }
    }));

    // This won't, it doesnt' have the cool_thing feature!
    assert!(!specific.eval(|pred| {
        match pred {
            Predicate::Target(tp) => tp.matches(x86_pentium_win),
            Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
            _ => false,
        }
    }));

    // This will *not* satisfy the vendor predicate
    assert!(!specific.eval(|pred| {
        match pred {
            Predicate::Target(tp) => tp.matches(uwp_win),
            Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
            _ => false,
        }
    }));

    // This will *not* satisfy the vendor, os, or env predicates
    assert!(!specific.eval(|pred| {
        match pred {
            Predicate::Target(tp) => tp.matches(mac),
            Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
            _ => false,
        }
    }));
}