Commit 762943b5 by Peter Baratta

Change tests to use `latex_preview` rather than internal methods.

Rather than test internal methods, like `render_atom` and the such, instead
compare the expected output of the externally-visible `latex_preview` and
test preview.py as a whole.
parent 2df0f02c
...@@ -8,7 +8,7 @@ Because intermediate values of the render contain more data than simply the ...@@ -8,7 +8,7 @@ Because intermediate values of the render contain more data than simply the
string of latex, store it in a custom class `LatexRendered`. string of latex, store it in a custom class `LatexRendered`.
""" """
from calc import ParseAugmenter, add_defaults, SUFFIXES from calc import ParseAugmenter, DEFAULT_VARIABLES, DEFAULT_FUNCTIONS, SUFFIXES
class LatexRendered(object): class LatexRendered(object):
...@@ -209,6 +209,9 @@ def render_parallel(children): ...@@ -209,6 +209,9 @@ def render_parallel(children):
""" """
Simply join the child nodes with a double vertical line. Simply join the child nodes with a double vertical line.
""" """
if len(children) == 1:
return children[0]
children_latex = [k.latex for k in children if k.latex != "||"] children_latex = [k.latex for k in children if k.latex != "||"]
latex = r"\|".join(children_latex) latex = r"\|".join(children_latex)
tall = any(k.tall for k in children) tall = any(k.tall for k in children)
...@@ -249,6 +252,9 @@ def render_product(children): ...@@ -249,6 +252,9 @@ def render_product(children):
'a*b/c/d' -> '\frac{a\cdot b}{c\cdot d}' 'a*b/c/d' -> '\frac{a\cdot b}{c\cdot d}'
'a/b*c/d*e' -> '\frac{a}{b}\cdot \frac{c}{d}\cdot e' 'a/b*c/d*e' -> '\frac{a}{b}\cdot \frac{c}{d}\cdot e'
""" """
if len(children) == 1:
return children[0]
position = "numerator" # or denominator position = "numerator" # or denominator
fraction_mode_ever = False fraction_mode_ever = False
numerator = [] numerator = []
...@@ -296,6 +302,9 @@ def render_sum(children): ...@@ -296,6 +302,9 @@ def render_sum(children):
""" """
Concatenate elements, including the operators. Concatenate elements, including the operators.
""" """
if len(children) == 1:
return children[0]
children_latex = [k.latex for k in children] children_latex = [k.latex for k in children]
latex = "".join(children_latex) latex = "".join(children_latex)
tall = any(k.tall for k in children) tall = any(k.tall for k in children)
...@@ -316,6 +325,25 @@ def render_atom(children): ...@@ -316,6 +325,25 @@ def render_atom(children):
return children[0] return children[0]
def add_defaults(var, fun, case_sensitive=False):
"""
Create sets with both the default and user-defined variables.
Compare to calc.add_defaults
"""
var_items = set(DEFAULT_VARIABLES)
fun_items = set(DEFAULT_FUNCTIONS)
var_items.update(var)
fun_items.update(fun)
if not case_sensitive:
var_items = set(k.lower() for k in var_items)
fun_items = set(k.lower() for k in fun_items)
return var_items, fun_items
def latex_preview(math_expr, variables=(), functions=(), case_sensitive=False): def latex_preview(math_expr, variables=(), functions=(), case_sensitive=False):
""" """
Convert `math_expr` into latex, guaranteeing its parse-ability. Convert `math_expr` into latex, guaranteeing its parse-ability.
...@@ -341,8 +369,8 @@ def latex_preview(math_expr, variables=(), functions=(), case_sensitive=False): ...@@ -341,8 +369,8 @@ def latex_preview(math_expr, variables=(), functions=(), case_sensitive=False):
render_actions = { render_actions = {
'number': render_number, 'number': render_number,
'variable': variable_closure(set(variables), casify), 'variable': variable_closure(variables, casify),
'function': function_closure(set(functions), casify), 'function': function_closure(functions, casify),
'atom': render_atom, 'atom': render_atom,
'power': render_power, 'power': render_power,
'parallel': render_parallel, 'parallel': render_parallel,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment