From 3512873363178c8dbcee4d3747163f47b747d7bb Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sun, 16 Feb 2020 15:20:38 -0500 Subject: [PATCH] Properly print negative decimals --- src/lexer.rs | 2 +- src/value/number.rs | 7 +++++-- tests/values.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/lexer.rs b/src/lexer.rs index 5041066..382428c 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -40,7 +40,7 @@ impl<'a> Iterator for Lexer<'a> { self.buf.next(); self.pos.next_char(); match self.buf.peek().unwrap() { - '0'..='9' => match self.lex_num() { + '0'..='9' | '.' => match self.lex_num() { TokenKind::Number(n) => { let mut s = String::from("-"); s.push_str(&n); diff --git a/src/value/number.rs b/src/value/number.rs index 410bfcf..3d05e4b 100644 --- a/src/value/number.rs +++ b/src/value/number.rs @@ -93,13 +93,16 @@ from_integer!(u8); impl Display for Number { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.val.to_integer())?; + if self.val.is_negative() { + f.write_char('-')?; + } + write!(f, "{}", self.val.to_integer().abs())?; let mut frac = self.val.fract(); if frac != BigRational::from_integer(BigInt::from(0)) { f.write_char('.')?; for _ in 0..(PRECISION - 1) { frac *= BigRational::from_integer(BigInt::from(10)); - write!(f, "{}", frac.to_integer())?; + write!(f, "{}", frac.to_integer().abs())?; frac = frac.fract(); if frac == BigRational::from_integer(BigInt::from(0)) { break; diff --git a/tests/values.rs b/tests/values.rs index 2d7d9f1..d699425 100644 --- a/tests/values.rs +++ b/tests/values.rs @@ -307,3 +307,29 @@ test!( "a {\n color: 1 + foo();\n}\n", "a {\n color: 1foo();\n}\n" ); +test!( + positive_integer, + "a {\n color: 1;\n}\n" +); +test!( + negative_integer, + "a {\n color: -1;\n}\n" +); +test!( + positive_float_no_leading_zero, + "a {\n color: .1;\n}\n", + "a {\n color: 0.1;\n}\n" +); +test!( + negative_float_no_leading_zero, + "a {\n color: -.1;\n}\n", + "a {\n color: -0.1;\n}\n" +); +test!( + positive_float_leading_zero, + "a {\n color: 0.1;\n}\n" +); +test!( + negative_float_leading_zero, + "a {\n color: -0.1;\n}\n" +);