difftreelog
fix int rendering in format should operate floats
in: master
1 file changed
crates/jrsonnet-evaluator/src/stdlib/format.rsdiffbeforeafterboth285#[inline]285#[inline]286pub fn render_integer(286pub fn render_integer(287 out: &mut String,287 out: &mut String,288 iv: i64,288 iv: f64,289 padding: usize,289 padding: usize,290 precision: usize,290 precision: usize,291 blank: bool,291 blank: bool,294 prefix: &str,294 prefix: &str,295 caps: bool,295 caps: bool,296) {296) {297 let radix = radix as f64;298 let iv = iv.floor();297 // Digit char indexes in reverse order, i.e299 // Digit char indexes in reverse order, i.e298 // for radix = 16 and n = 12f: [15, 2, 1]300 // for radix = 16 and n = 12f: [15, 2, 1]299 let digits = if iv == 0 {301 let digits = if iv == 0.0 {300 vec![0u8]302 vec![0u8]301 } else {303 } else {302 let mut v = iv.abs();304 let mut v = iv.abs();303 let mut nums = Vec::with_capacity(1);305 let mut nums = Vec::with_capacity(1);304 while v > 0 {306 while v != 0.0 {305 nums.push((v % radix) as u8);307 nums.push((v % radix) as u8);306 v /= radix;308 v = (v / radix).floor();307 }309 }308 nums310 nums309 };311 };310 let neg = iv < 0;312 let neg = iv < 0.0;311 let zp = padding.saturating_sub(if neg || blank || sign { 1 } else { 0 });313 let zp = padding.saturating_sub(if neg || blank || sign { 1 } else { 0 });312 let zp2 = zp314 let zp2 = zp313 .max(precision)315 .max(precision)335337336pub fn render_decimal(338pub fn render_decimal(337 out: &mut String,339 out: &mut String,338 iv: i64,340 iv: f64,339 padding: usize,341 padding: usize,340 precision: usize,342 precision: usize,341 blank: bool,343 blank: bool,345}347}346pub fn render_octal(348pub fn render_octal(347 out: &mut String,349 out: &mut String,348 iv: i64,350 iv: f64,349 padding: usize,351 padding: usize,350 precision: usize,352 precision: usize,351 alt: bool,353 alt: bool,360 blank,362 blank,361 sign,363 sign,362 8,364 8,363 if alt && iv != 0 { "0" } else { "" },365 if alt && iv != 0.0 { "0" } else { "" },364 false,366 false,365 );367 );366}368}367369368#[allow(clippy::fn_params_excessive_bools)]370#[allow(clippy::fn_params_excessive_bools)]369pub fn render_hexadecimal(371pub fn render_hexadecimal(370 out: &mut String,372 out: &mut String,371 iv: i64,373 iv: f64,372 padding: usize,374 padding: usize,373 precision: usize,375 precision: usize,374 alt: bool,376 alt: bool,406) {408) {407 let dot_size = if precision == 0 && !ensure_pt { 0 } else { 1 };409 let dot_size = if precision == 0 && !ensure_pt { 0 } else { 1 };408 padding = padding.saturating_sub(dot_size + precision);410 padding = padding.saturating_sub(dot_size + precision);409 render_decimal(out, n.floor() as i64, padding, 0, blank, sign);411 render_decimal(out, n.floor(), padding, 0, blank, sign);410 if precision == 0 {412 if precision == 0 {411 if ensure_pt {413 if ensure_pt {412 out.push('.');414 out.push('.');420 if trailing || frac > 0.0 {422 if trailing || frac > 0.0 {421 out.push('.');423 out.push('.');422 let mut frac_str = String::new();424 let mut frac_str = String::new();423 render_decimal(&mut frac_str, frac as i64, precision, 0, false, false);425 render_decimal(&mut frac_str, frac, precision, 0, false, false);424 let mut trim = frac_str.len();426 let mut trim = frac_str.len();425 if !trailing {427 if !trailing {426 for b in frac_str.as_bytes().iter().rev() {428 for b in frac_str.as_bytes().iter().rev() {454 n / 10.0_f64.powf(exponent)456 n / 10.0_f64.powf(exponent)455 };457 };456 let mut exponent_str = String::new();458 let mut exponent_str = String::new();457 render_decimal(&mut exponent_str, exponent as i64, 3, 0, false, true);459 render_decimal(&mut exponent_str, exponent, 3, 0, false, true);458460459 // +1 for e461 // +1 for e460 padding = padding.saturating_sub(exponent_str.len() + 1);462 padding = padding.saturating_sub(exponent_str.len() + 1);495 let value = f64::from_untyped(value.clone(), s)?;497 let value = f64::from_untyped(value.clone(), s)?;496 render_decimal(498 render_decimal(497 &mut tmp_out,499 &mut tmp_out,498 value as i64,500 value,499 padding,501 padding,500 iprec,502 iprec,501 clfags.blank,503 clfags.blank,506 let value = f64::from_untyped(value.clone(), s)?;508 let value = f64::from_untyped(value.clone(), s)?;507 render_octal(509 render_octal(508 &mut tmp_out,510 &mut tmp_out,509 value as i64,511 value,510 padding,512 padding,511 iprec,513 iprec,512 clfags.alt,514 clfags.alt,518 let value = f64::from_untyped(value.clone(), s)?;520 let value = f64::from_untyped(value.clone(), s)?;519 render_hexadecimal(521 render_hexadecimal(520 &mut tmp_out,522 &mut tmp_out,521 value as i64,523 value,522 padding,524 padding,523 iprec,525 iprec,524 clfags.alt,526 clfags.alt,