about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/excessive_precision.fixed
blob: 8158d4b332acd546b2f9589217f77be83b5a867f (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#![warn(clippy::excessive_precision)]
#![allow(
    dead_code,
    overflowing_literals,
    unused_variables,
    clippy::print_literal,
    clippy::useless_vec,
    clippy::approx_constant
)]

macro_rules! make_pi {
    ($i:ident : $t:ty) => {
        const $i: $t = 3.14159265358979323846264338327950288419716939937510582097494459230781640628;
    };
}

fn main() {
    // Consts
    const GOOD32: f32 = 0.123_456;
    const GOOD32_SM: f32 = 0.000_000_000_1;
    const GOOD32_DOT: f32 = 10_000_000_000.0;
    const GOOD32_EDGE: f32 = 1.000_000_8;
    const GOOD64: f64 = 0.123_456_789_012;
    const GOOD64_SM: f32 = 0.000_000_000_000_000_1;
    const GOOD64_DOT: f32 = 10_000_000_000_000_000.0;

    const BAD32_1: f32 = 0.123_456_79_f32;
    //~^ excessive_precision
    const BAD32_2: f32 = 0.123_456_79;
    //~^ excessive_precision
    const BAD32_3: f32 = 0.1;
    //~^ excessive_precision
    const BAD32_EDGE: f32 = 1.000_001;
    //~^ excessive_precision

    const BAD64_1: f64 = 0.123_456_789_012_345_67f64;
    const BAD64_2: f64 = 0.123_456_789_012_345_67;
    const BAD64_3: f64 = 0.1;
    //~^ excessive_precision

    // Literal as param
    println!("{:?}", 8.888_888_888_888_89);
    //~^ excessive_precision

    // // TODO add inferred type tests for f32
    // Locals
    let good32: f32 = 0.123_456_f32;
    let good32_2: f32 = 0.123_456;

    let good64: f64 = 0.123_456_789_012;
    let good64_suf: f64 = 0.123_456_789_012f64;
    let good64_inf = 0.123_456_789_012;

    let bad32: f32 = 1.123_456_8;
    //~^ excessive_precision
    let bad32_suf: f32 = 1.123_456_8_f32;
    //~^ excessive_precision
    let bad32_inf = 1.123_456_8_f32;
    //~^ excessive_precision

    let bad64: f64 = 0.123_456_789_012_345_67;
    let bad64_suf: f64 = 0.123_456_789_012_345_67f64;
    let bad64_inf = 0.123_456_789_012_345_67;

    // Vectors
    let good_vec32: Vec<f32> = vec![0.123_456];
    let good_vec64: Vec<f64> = vec![0.123_456_789];

    let bad_vec32: Vec<f32> = vec![0.123_456_79];
    //~^ excessive_precision
    let bad_vec64: Vec<f64> = vec![0.123_456_789_123_456_78];
    //~^ excessive_precision

    // Exponential float notation
    let good_e32: f32 = 1e-10;
    let bad_e32: f32 = 1.123_456_8e-10;
    //~^ excessive_precision

    let good_bige32: f32 = 1E-10;
    let bad_bige32: f32 = 1.123_456_8E-10;
    //~^ excessive_precision

    // Inferred type
    let good_inferred: f32 = 1f32 * 1_000_000_000.;

    // issue #2840
    let num = 0.000_000_000_01e-10f64;

    // issue #6341
    let exponential: f64 = 4.886506780521244E-03;

    // issue #7744
    let _ = 2.225_073_858_507_201e-308_f64;
    //~^ excessive_precision

    // issue #7745
    let _ = 0_f64;
    //~^ excessive_precision

    // issue #9910
    const INF1: f32 = 1.0e+33f32;
    const INF2: f64 = 1.0e+3300f64;
    const NEG_INF1: f32 = -1.0e+33f32;
    const NEG_INF2: f64 = -1.0e+3300f64;
    const NEG_INF3: f32 = -3.40282357e+38_f32;

    // issue #12954
    const _: f64 = 3.0;
    //~^ excessive_precision
    const _: f64 = 3.0000000000000000;

    // Overly specified constants
    let _: f32 = 1.012_345_7;
    //~^ excessive_precision
    let _: f64 = 1.012_345_678_901_234_6;
    //~^ excessive_precision
    const _: f32 = 1.01234567890123456789012345678901234567890;
    const _: f64 = 1.01234567890123456789012345678901234567890;

    static STATIC1: f32 = 1.01234567890123456789012345678901234567890;
    static STATIC2: f64 = 1.01234567890123456789012345678901234567890;

    static mut STATIC_MUT1: f32 = 1.01234567890123456789012345678901234567890;
    static mut STATIC_MUT2: f64 = 1.01234567890123456789012345678901234567890;

    // From issue #13855
    let gamma = 0.577_215_664_901_532_9;
    //~^ excessive_precision
    const GAMMA: f64 = 0.5772156649015328606065120900824024310421;

    make_pi!(P32: f32);
    make_pi!(P64: f64);
}

trait ExcessivelyPreciseTrait {
    // Overly specified constants
    const GOOD1: f32 = 1.01234567890123456789012345678901234567890;
    const GOOD2: f64 = 1.01234567890123456789012345678901234567890;
}

struct ExcessivelyPreciseStruct;

impl ExcessivelyPreciseStruct {
    // Overly specified constants
    const GOOD1: f32 = 1.01234567890123456789012345678901234567890;
    const GOOD2: f64 = 1.01234567890123456789012345678901234567890;
}