Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
# All the button labels, row by row
var rows = [["7", "8", "9", "+"],
["4", "5", "6", "-"],
# All the button labels, row by row
var rows = [["7", "8", "9", "+"],
["4", "5", "6", "-"],
- ["1", "2", "3", "*"],
- ["0", ".", "C", "/"],
+ ["1", "2", "3", "×"],
+ ["0", ".", "C", "÷"],
["="]]
for row in rows do
["="]]
for row in rows do
else if op.is_numeric then
var n = op.to_i
context.push_digit n
else if op.is_numeric then
var n = op.to_i
context.push_digit n
+ else if op != null then
buttons["."].enabled = true
buttons["."].enabled = true
- context.push_op op.chars.first
end
display.text = context.display_text
end
display.text = context.display_text
var result: nullable Numeric = null
# Last operation pushed with `push_op`, to be executed on the next push
var result: nullable Numeric = null
# Last operation pushed with `push_op`, to be executed on the next push
- var last_op: nullable Char = null
+ var last_op: nullable Text = null
# Value currently being entered
var current: nullable FlatBuffer = null
# Value currently being entered
var current: nullable FlatBuffer = null
- if result != null and (current == null or last_op != '=') then
- if last_op == '=' then buf.append "= "
+ if result != null and (current == null or last_op != "=") then
+ if last_op == "=" then buf.append "= "
buf.append result.to_s
buf.add ' '
end
buf.append result.to_s
buf.add ' '
end
- if last_op != null and last_op != '=' then
- buf.add last_op
+ if last_op != null and last_op != "=" then
+ buf.append last_op
end
# Push operation `op`, will usually execute the last operation
end
# Push operation `op`, will usually execute the last operation
self.result = null
last_op = null
else
self.result = null
last_op = null
else
current.add digit.to_s.chars.first
self.current = current
current.add digit.to_s.chars.first
self.current = current
self.result = null
last_op = null
end
self.result = null
last_op = null
end
if op == null then
result = current.to_n
else if result != null then
if op == null then
result = current.to_n
else if result != null then
result = result.add(current.to_n)
result = result.add(current.to_n)
result = result.sub(current.to_n)
result = result.sub(current.to_n)
+ else if op == "/" or op == "÷" then
result = result.div(current.to_n)
result = result.div(current.to_n)
+ else if op == "*" or op == "×" then
result = result.mul(current.to_n)
end
end
result = result.mul(current.to_n)
end
end
var context = new CalculatorContext
context.push_digit( 1 )
context.push_digit( 2 )
var context = new CalculatorContext
context.push_digit( 1 )
context.push_digit( 2 )
var r = context.result
assert r == 30 else print r or else "-"
var r = context.result
assert r == 30 else print r or else "-"
context.push_digit( 4 )
context.switch_to_decimals
context.push_digit( 1 )
context.push_digit( 4 )
context.switch_to_decimals
context.push_digit( 1 )
r = context.result
assert r == 42.3 else print r or else "-"
r = context.result
assert r == 42.3 else print r or else "-"
context.push_digit( 1 )
context.push_digit( 1 )
context.push_digit( 1 )
context.push_digit( 1 )
r = context.result
assert r == 53.3 else print r or else "-"
r = context.result
assert r == 53.3 else print r or else "-"
context.push_digit( 2 )
context.switch_to_decimals
context.push_digit( 3 )
context.push_digit( 2 )
context.switch_to_decimals
context.push_digit( 3 )
r = context.result
assert r == 14.1 else print r or else "-"
r = context.result
assert r == 14.1 else print r or else "-"
context.push_digit( 1 )
context.push_digit( 2 )
context.push_digit( 3 )
context.push_digit( 1 )
context.push_digit( 2 )
context.push_digit( 3 )
r = context.result
assert r == 51.123 else print r or else "-"
r = context.result
assert r == 51.123 else print r or else "-"
context = new CalculatorContext
context.push_digit( 1 )
context.push_digit( 0 )
context = new CalculatorContext
context.push_digit( 1 )
context.push_digit( 0 )
context.push_digit( 1 )
context.push_digit( 0 )
context.push_digit( 1 )
context.push_digit( 0 )
-context.push_op( '=' )
-context.push_op( 'C' )
+context.push_op( "=" )
+context.push_op( "C" )
r = context.result
assert r == null else print r
r = context.result
assert r == null else print r