|  | 
| 1 | 1 | // FIXME(f16_f128): only tested on platforms that have symbols and aren't buggy | 
| 2 | 2 | #![cfg(target_has_reliable_f128)] | 
| 3 | 3 | 
 | 
| 4 |  | -use core::ops::{Add, Div, Mul, Sub}; | 
| 5 | 4 | use std::f128::consts; | 
| 6 |  | -use std::num::FpCategory as Fp; | 
| 7 | 5 | 
 | 
| 8 | 6 | use super::{assert_approx_eq, assert_biteq}; | 
| 9 | 7 | 
 | 
| @@ -38,160 +36,9 @@ const NAN_MASK1: u128 = 0x0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa; | 
| 38 | 36 | /// Second pattern over the mantissa | 
| 39 | 37 | const NAN_MASK2: u128 = 0x00005555555555555555555555555555; | 
| 40 | 38 | 
 | 
| 41 |  | -#[test] | 
| 42 |  | -fn test_num_f128() { | 
| 43 |  | -    // FIXME(f16_f128): replace with a `test_num` call once the required `fmodl`/`fmodf128` | 
| 44 |  | -    // function is available on all platforms. | 
| 45 |  | -    let ten = 10f128; | 
| 46 |  | -    let two = 2f128; | 
| 47 |  | -    assert_biteq!(ten.add(two), ten + two); | 
| 48 |  | -    assert_biteq!(ten.sub(two), ten - two); | 
| 49 |  | -    assert_biteq!(ten.mul(two), ten * two); | 
| 50 |  | -    assert_biteq!(ten.div(two), ten / two); | 
| 51 |  | -    #[cfg(any(miri, target_has_reliable_f128_math))] | 
| 52 |  | -    assert_biteq!(core::ops::Rem::rem(ten, two), ten % two); | 
| 53 |  | -} | 
| 54 |  | - | 
| 55 | 39 | // FIXME(f16_f128,miri): many of these have to be disabled since miri does not yet support | 
| 56 | 40 | // the intrinsics. | 
| 57 | 41 | 
 | 
| 58 |  | -#[test] | 
| 59 |  | -fn test_infinity() { | 
| 60 |  | -    let inf: f128 = f128::INFINITY; | 
| 61 |  | -    assert!(inf.is_infinite()); | 
| 62 |  | -    assert!(!inf.is_finite()); | 
| 63 |  | -    assert!(inf.is_sign_positive()); | 
| 64 |  | -    assert!(!inf.is_sign_negative()); | 
| 65 |  | -    assert!(!inf.is_nan()); | 
| 66 |  | -    assert!(!inf.is_normal()); | 
| 67 |  | -    assert_eq!(Fp::Infinite, inf.classify()); | 
| 68 |  | -} | 
| 69 |  | - | 
| 70 |  | -#[test] | 
| 71 |  | -fn test_neg_infinity() { | 
| 72 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 73 |  | -    assert!(neg_inf.is_infinite()); | 
| 74 |  | -    assert!(!neg_inf.is_finite()); | 
| 75 |  | -    assert!(!neg_inf.is_sign_positive()); | 
| 76 |  | -    assert!(neg_inf.is_sign_negative()); | 
| 77 |  | -    assert!(!neg_inf.is_nan()); | 
| 78 |  | -    assert!(!neg_inf.is_normal()); | 
| 79 |  | -    assert_eq!(Fp::Infinite, neg_inf.classify()); | 
| 80 |  | -} | 
| 81 |  | - | 
| 82 |  | -#[test] | 
| 83 |  | -fn test_zero() { | 
| 84 |  | -    let zero: f128 = 0.0f128; | 
| 85 |  | -    assert_biteq!(0.0, zero); | 
| 86 |  | -    assert!(!zero.is_infinite()); | 
| 87 |  | -    assert!(zero.is_finite()); | 
| 88 |  | -    assert!(zero.is_sign_positive()); | 
| 89 |  | -    assert!(!zero.is_sign_negative()); | 
| 90 |  | -    assert!(!zero.is_nan()); | 
| 91 |  | -    assert!(!zero.is_normal()); | 
| 92 |  | -    assert_eq!(Fp::Zero, zero.classify()); | 
| 93 |  | -} | 
| 94 |  | - | 
| 95 |  | -#[test] | 
| 96 |  | -fn test_neg_zero() { | 
| 97 |  | -    let neg_zero: f128 = -0.0; | 
| 98 |  | -    assert_eq!(0.0, neg_zero); | 
| 99 |  | -    assert_biteq!(-0.0, neg_zero); | 
| 100 |  | -    assert!(!neg_zero.is_infinite()); | 
| 101 |  | -    assert!(neg_zero.is_finite()); | 
| 102 |  | -    assert!(!neg_zero.is_sign_positive()); | 
| 103 |  | -    assert!(neg_zero.is_sign_negative()); | 
| 104 |  | -    assert!(!neg_zero.is_nan()); | 
| 105 |  | -    assert!(!neg_zero.is_normal()); | 
| 106 |  | -    assert_eq!(Fp::Zero, neg_zero.classify()); | 
| 107 |  | -} | 
| 108 |  | - | 
| 109 |  | -#[test] | 
| 110 |  | -fn test_one() { | 
| 111 |  | -    let one: f128 = 1.0f128; | 
| 112 |  | -    assert_biteq!(1.0, one); | 
| 113 |  | -    assert!(!one.is_infinite()); | 
| 114 |  | -    assert!(one.is_finite()); | 
| 115 |  | -    assert!(one.is_sign_positive()); | 
| 116 |  | -    assert!(!one.is_sign_negative()); | 
| 117 |  | -    assert!(!one.is_nan()); | 
| 118 |  | -    assert!(one.is_normal()); | 
| 119 |  | -    assert_eq!(Fp::Normal, one.classify()); | 
| 120 |  | -} | 
| 121 |  | - | 
| 122 |  | -#[test] | 
| 123 |  | -fn test_is_nan() { | 
| 124 |  | -    let nan: f128 = f128::NAN; | 
| 125 |  | -    let inf: f128 = f128::INFINITY; | 
| 126 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 127 |  | -    assert!(nan.is_nan()); | 
| 128 |  | -    assert!(!0.0f128.is_nan()); | 
| 129 |  | -    assert!(!5.3f128.is_nan()); | 
| 130 |  | -    assert!(!(-10.732f128).is_nan()); | 
| 131 |  | -    assert!(!inf.is_nan()); | 
| 132 |  | -    assert!(!neg_inf.is_nan()); | 
| 133 |  | -} | 
| 134 |  | - | 
| 135 |  | -#[test] | 
| 136 |  | -fn test_is_infinite() { | 
| 137 |  | -    let nan: f128 = f128::NAN; | 
| 138 |  | -    let inf: f128 = f128::INFINITY; | 
| 139 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 140 |  | -    assert!(!nan.is_infinite()); | 
| 141 |  | -    assert!(inf.is_infinite()); | 
| 142 |  | -    assert!(neg_inf.is_infinite()); | 
| 143 |  | -    assert!(!0.0f128.is_infinite()); | 
| 144 |  | -    assert!(!42.8f128.is_infinite()); | 
| 145 |  | -    assert!(!(-109.2f128).is_infinite()); | 
| 146 |  | -} | 
| 147 |  | - | 
| 148 |  | -#[test] | 
| 149 |  | -fn test_is_finite() { | 
| 150 |  | -    let nan: f128 = f128::NAN; | 
| 151 |  | -    let inf: f128 = f128::INFINITY; | 
| 152 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 153 |  | -    assert!(!nan.is_finite()); | 
| 154 |  | -    assert!(!inf.is_finite()); | 
| 155 |  | -    assert!(!neg_inf.is_finite()); | 
| 156 |  | -    assert!(0.0f128.is_finite()); | 
| 157 |  | -    assert!(42.8f128.is_finite()); | 
| 158 |  | -    assert!((-109.2f128).is_finite()); | 
| 159 |  | -} | 
| 160 |  | - | 
| 161 |  | -#[test] | 
| 162 |  | -fn test_is_normal() { | 
| 163 |  | -    let nan: f128 = f128::NAN; | 
| 164 |  | -    let inf: f128 = f128::INFINITY; | 
| 165 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 166 |  | -    let zero: f128 = 0.0f128; | 
| 167 |  | -    let neg_zero: f128 = -0.0; | 
| 168 |  | -    assert!(!nan.is_normal()); | 
| 169 |  | -    assert!(!inf.is_normal()); | 
| 170 |  | -    assert!(!neg_inf.is_normal()); | 
| 171 |  | -    assert!(!zero.is_normal()); | 
| 172 |  | -    assert!(!neg_zero.is_normal()); | 
| 173 |  | -    assert!(1f128.is_normal()); | 
| 174 |  | -    assert!(1e-4931f128.is_normal()); | 
| 175 |  | -    assert!(!1e-4932f128.is_normal()); | 
| 176 |  | -} | 
| 177 |  | - | 
| 178 |  | -#[test] | 
| 179 |  | -fn test_classify() { | 
| 180 |  | -    let nan: f128 = f128::NAN; | 
| 181 |  | -    let inf: f128 = f128::INFINITY; | 
| 182 |  | -    let neg_inf: f128 = f128::NEG_INFINITY; | 
| 183 |  | -    let zero: f128 = 0.0f128; | 
| 184 |  | -    let neg_zero: f128 = -0.0; | 
| 185 |  | -    assert_eq!(nan.classify(), Fp::Nan); | 
| 186 |  | -    assert_eq!(inf.classify(), Fp::Infinite); | 
| 187 |  | -    assert_eq!(neg_inf.classify(), Fp::Infinite); | 
| 188 |  | -    assert_eq!(zero.classify(), Fp::Zero); | 
| 189 |  | -    assert_eq!(neg_zero.classify(), Fp::Zero); | 
| 190 |  | -    assert_eq!(1f128.classify(), Fp::Normal); | 
| 191 |  | -    assert_eq!(1e-4931f128.classify(), Fp::Normal); | 
| 192 |  | -    assert_eq!(1e-4932f128.classify(), Fp::Subnormal); | 
| 193 |  | -} | 
| 194 |  | - | 
| 195 | 42 | #[test] | 
| 196 | 43 | #[cfg(any(miri, target_has_reliable_f128_math))] | 
| 197 | 44 | fn test_abs() { | 
|  | 
0 commit comments