Merge branch 'master' of ssh://git.betalupi.com:33/Mark/daisy

pull/2/head
Mark 2023-04-10 12:49:09 -07:00
commit 3007d7f875
Signed by: Mark
GPG Key ID: AD62BB059C2AAEE4
6 changed files with 54 additions and 10 deletions

21
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,21 @@
on: [push]
name: CI
jobs:
build_and_test:
name: Daisy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: actions-rs/cargo@v1
with:
command: build
args: --release --all-features
- uses: actions-rs/cargo@v1
with:
command: test
args: --release

View File

@ -81,7 +81,7 @@ pub fn main() -> Result<(), std::io::Error> {
Ok(g) => { Ok(g) => {
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
RawTerminal::suspend_raw_mode(&stdout)?; RawTerminal::suspend_raw_mode(&stdout)?;
let out_str = g.print(); let out_str = g.to_string();
let g = evaluate::evaluate(g); let g = evaluate::evaluate(g);
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
RawTerminal::activate_raw_mode(&stdout)?; RawTerminal::activate_raw_mode(&stdout)?;
@ -100,7 +100,7 @@ pub fn main() -> Result<(), std::io::Error> {
style::Bold, style::Bold,
color::Fg(color::Green), color::Fg(color::Green),
style::Reset, style::Reset,
q.print(), q.to_string_outer(),
color::Fg(color::Reset) color::Fg(color::Reset)
)?; )?;
}, },

View File

@ -36,6 +36,16 @@ impl ToString for Quantity {
} }
impl Quantity { impl Quantity {
pub fn to_string_outer(&self) -> String {
let n = self.v.to_string();
if self.unitless() { return n; }
let u = self.u.to_string();
return format!("{n} {u}");
}
pub fn new_float(f: f64) -> Option<Quantity> { pub fn new_float(f: f64) -> Option<Quantity> {
let v = Scalar::new_float(f); let v = Scalar::new_float(f);
if v.is_none() { return None; } if v.is_none() { return None; }

View File

@ -10,7 +10,7 @@ fn eval_to_str(s: &str) -> Result<String, ()> {
//let out_str = g.print(); //let out_str = g.print();
return match evaluate::evaluate(g) { return match evaluate::evaluate(g) {
Ok(x) => Ok(x.print()), Ok(x) => Ok(x.to_string()),
Err(_) => Err(()) Err(_) => Err(())
}; };
} }

View File

@ -26,15 +26,28 @@ pub enum Token {
), ),
} }
impl Token { impl ToString for Token {
fn to_string(&self) -> String {
pub fn print(&self) -> String {
match self { match self {
Token::Number(v) => v.to_string(), Token::Number(v) => v.to_string(),
Token::Constant(_,s) => s.clone(), Token::Constant(_, s) => s.clone(),
Token::Operator(o,a) => o.print(a) Token::Operator(o,a) => o.print(a)
} }
} }
}
impl Token {
// This is called only when this is the outermost token.
// This sometimes leads to different--usually more verbose--behavior.
pub fn to_string_outer(&self) -> String {
match self {
Token::Number(v) => v.to_string_outer(),
Token::Constant(_, s) => s.clone(),
Token::Operator(o,a) => o.print(a)
}
}
#[inline(always)] #[inline(always)]
pub fn get_args(&self) -> Option<&VecDeque<Token>> { pub fn get_args(&self) -> Option<&VecDeque<Token>> {

View File

@ -54,7 +54,7 @@ impl Operator {
#[inline(always)] #[inline(always)]
fn add_parens_to_arg(&self, arg: &Token) -> String { fn add_parens_to_arg(&self, arg: &Token) -> String {
let mut astr: String = arg.print(); let mut astr: String = arg.to_string();
if let Token::Operator(o,_) = arg { if let Token::Operator(o,_) = arg {
if o < self { if o < self {
astr = format!("({})", astr); astr = format!("({})", astr);
@ -65,7 +65,7 @@ impl Operator {
#[inline(always)] #[inline(always)]
fn add_parens_to_arg_strict(&self, arg: &Token) -> String { fn add_parens_to_arg_strict(&self, arg: &Token) -> String {
let mut astr: String = arg.print(); let mut astr: String = arg.to_string();
if let Token::Operator(o,_) = arg { if let Token::Operator(o,_) = arg {
if o <= self { if o <= self {
astr = format!("({})", astr); astr = format!("({})", astr);
@ -193,7 +193,7 @@ impl Operator {
}, },
Operator::Function(s) => { Operator::Function(s) => {
return format!("{}({})", s.to_string(), args[0].print()); return format!("{}({})", s.to_string(), args[0].to_string());
} }
}; };
} }