File: literal.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (83 lines) | stat: -rw-r--r-- 4,613 bytes parent folder | download | duplicates (3)
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
83
// ignore-tidy-linelength

use proc_macro::Literal;

pub fn test() {
    test_display_literal();
    test_parse_literal();
}

fn test_display_literal() {
    assert_eq!(Literal::isize_unsuffixed(-10).to_string(), "-10");
    assert_eq!(Literal::isize_suffixed(-10).to_string(), "-10isize");
    assert_eq!(Literal::f32_unsuffixed(-10.0).to_string(), "-10.0");
    assert_eq!(Literal::f32_suffixed(-10.0).to_string(), "-10f32");
    assert_eq!(Literal::f64_unsuffixed(-10.0).to_string(), "-10.0");
    assert_eq!(Literal::f64_suffixed(-10.0).to_string(), "-10f64");
    assert_eq!(
        Literal::f64_unsuffixed(1e100).to_string(),
        "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0",
    );

    assert_eq!(Literal::string("aA").to_string(), r#"  "aA"  "#.trim());
    assert_eq!(Literal::string("\t").to_string(), r#"  "\t"  "#.trim());
    assert_eq!(Literal::string("❤").to_string(), r#"  "❤"  "#.trim());
    assert_eq!(Literal::string("'").to_string(), r#"  "'"  "#.trim());
    assert_eq!(Literal::string("\"").to_string(), r#"  "\""  "#.trim());
    assert_eq!(Literal::string("\0").to_string(), r#"  "\0"  "#.trim());
    assert_eq!(Literal::string("\u{1}").to_string(), r#"  "\u{1}"  "#.trim());

    assert_eq!(Literal::byte_string(b"aA").to_string(), r#"  b"aA"  "#.trim());
    assert_eq!(Literal::byte_string(b"\t").to_string(), r#"  b"\t"  "#.trim());
    assert_eq!(Literal::byte_string(b"'").to_string(), r#"  b"'"  "#.trim());
    assert_eq!(Literal::byte_string(b"\"").to_string(), r#"  b"\""  "#.trim());
    assert_eq!(Literal::byte_string(b"\0").to_string(), r#"  b"\0"  "#.trim());
    assert_eq!(Literal::byte_string(b"\x01").to_string(), r#"  b"\x01"  "#.trim());

    assert_eq!(Literal::c_string(c"aA").to_string(), r#"  c"aA"  "#.trim());
    assert_eq!(Literal::c_string(c"\t").to_string(), r#"  c"\t"  "#.trim());
    assert_eq!(Literal::c_string(c"❤").to_string(), r#"  c"❤"  "#.trim());
    assert_eq!(Literal::c_string(c"\'").to_string(), r#"  c"'"  "#.trim());
    assert_eq!(Literal::c_string(c"\"").to_string(), r#"  c"\""  "#.trim());
    assert_eq!(Literal::c_string(c"\x7f\xff\xfe\u{333}").to_string(), r#"  c"\u{7f}\xff\xfe\u{333}"  "#.trim());

    assert_eq!(Literal::character('a').to_string(), r#"  'a'  "#.trim());
    assert_eq!(Literal::character('\t').to_string(), r#"  '\t'  "#.trim());
    assert_eq!(Literal::character('❤').to_string(), r#"  '❤'  "#.trim());
    assert_eq!(Literal::character('\'').to_string(), r#"  '\''  "#.trim());
    assert_eq!(Literal::character('"').to_string(), r#"  '"'  "#.trim());
    assert_eq!(Literal::character('\0').to_string(), r#"  '\0'  "#.trim());
    assert_eq!(Literal::character('\u{1}').to_string(), r#"  '\u{1}'  "#.trim());

    assert_eq!(Literal::byte_character(b'a').to_string(), r#"  b'a'  "#.trim());
    assert_eq!(Literal::byte_character(b'\t').to_string(), r#"  b'\t'  "#.trim());
    assert_eq!(Literal::byte_character(b'\'').to_string(), r#"  b'\''  "#.trim());
    assert_eq!(Literal::byte_character(b'"').to_string(), r#"  b'"'  "#.trim());
    assert_eq!(Literal::byte_character(0).to_string(), r#"  b'\0'  "#.trim());
    assert_eq!(Literal::byte_character(1).to_string(), r#"  b'\x01'  "#.trim());
}

fn test_parse_literal() {
    assert_eq!("1".parse::<Literal>().unwrap().to_string(), "1");
    assert_eq!("1.0".parse::<Literal>().unwrap().to_string(), "1.0");
    assert_eq!("'a'".parse::<Literal>().unwrap().to_string(), "'a'");
    assert_eq!("b'a'".parse::<Literal>().unwrap().to_string(), "b'a'");
    assert_eq!("\"\n\"".parse::<Literal>().unwrap().to_string(), "\"\n\"");
    assert_eq!("b\"\"".parse::<Literal>().unwrap().to_string(), "b\"\"");
    assert_eq!("c\"\"".parse::<Literal>().unwrap().to_string(), "c\"\"");
    assert_eq!("r##\"\"##".parse::<Literal>().unwrap().to_string(), "r##\"\"##");
    assert_eq!("10ulong".parse::<Literal>().unwrap().to_string(), "10ulong");
    assert_eq!("-10ulong".parse::<Literal>().unwrap().to_string(), "-10ulong");

    assert!("true".parse::<Literal>().is_err());
    assert!(".8".parse::<Literal>().is_err());
    assert!("0 1".parse::<Literal>().is_err());
    assert!("'a".parse::<Literal>().is_err());
    assert!(" 0".parse::<Literal>().is_err());
    assert!("0 ".parse::<Literal>().is_err());
    assert!("/* comment */0".parse::<Literal>().is_err());
    assert!("0/* comment */".parse::<Literal>().is_err());
    assert!("0// comment".parse::<Literal>().is_err());
    assert!("- 10".parse::<Literal>().is_err());
    assert!("-'x'".parse::<Literal>().is_err());
}