calculator: use Unicode strings instead of single chars for operators
authorAlexis Laferrière <alexis.laf@xymus.net>
Sun, 1 May 2016 19:10:44 +0000 (15:10 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 11 May 2016 17:58:06 +0000 (13:58 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

examples/calculator/src/calculator.nit
examples/calculator/src/calculator_logic.nit
examples/calculator/src/calculator_test.nit

index 76c3a0a..c049d21 100644 (file)
@@ -66,8 +66,8 @@ class CalculatorWindow
                # 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
@@ -94,9 +94,9 @@ class CalculatorWindow
                        else if op.is_numeric then
                                var n = op.to_i
                                context.push_digit n
-                       else
+                       else if op != null then
                                buttons["."].enabled = true
-                               context.push_op op.chars.first
+                               context.push_op op
                        end
 
                        display.text = context.display_text
index e5e492b..249962c 100644 (file)
@@ -25,7 +25,7 @@ class CalculatorContext
        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
@@ -39,15 +39,15 @@ class CalculatorContext
 
                var buf = new FlatBuffer
 
-               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
 
-               if last_op != null and last_op != '=' then
-                       buf.add last_op
+               if last_op != null and last_op != "=" then
+                       buf.append last_op
                        buf.add ' '
                end
 
@@ -60,10 +60,10 @@ class CalculatorContext
        end
 
        # Push operation `op`, will usually execute the last operation
-       fun push_op(op: Char)
+       fun push_op(op: Text)
        do
                apply_last_op_if_any
-               if op == 'C' then
+               if op == "C" then
                        self.result = null
                        last_op = null
                else
@@ -82,7 +82,7 @@ class CalculatorContext
                current.add digit.to_s.chars.first
                self.current = current
 
-               if last_op == '=' then
+               if last_op == "=" then
                        self.result = null
                        last_op = null
                end
@@ -110,13 +110,13 @@ class CalculatorContext
                if op == null then
                        result = current.to_n
                else if result != null then
-                       if op == '+' then
+                       if op == "+" then
                                result = result.add(current.to_n)
-                       else if op == '-' then
+                       else if op == "-" then
                                result = result.sub(current.to_n)
-                       else if op == '/' then
+                       else if op == "/" or op == "÷" then
                                result = result.div(current.to_n)
-                       else if op == '*' then
+                       else if op == "*" or op == "×" then
                                result = result.mul(current.to_n)
                        end
                end
index 270854c..610b7a9 100644 (file)
@@ -23,11 +23,11 @@ import calculator_logic
 var context = new CalculatorContext
 context.push_digit( 1 )
 context.push_digit( 2 )
-context.push_op( '+' )
+context.push_op( "+" )
 context.push_digit( 3 )
-context.push_op( '*' )
+context.push_op( "*" )
 context.push_digit( 2 )
-context.push_op( '=' )
+context.push_op( "=" )
 var r = context.result
 assert r == 30 else print r or else "-"
 
@@ -36,16 +36,16 @@ context.push_digit( 1 )
 context.push_digit( 4 )
 context.switch_to_decimals
 context.push_digit( 1 )
-context.push_op( '*' )
+context.push_op( "*" )
 context.push_digit( 3 )
-context.push_op( '=' )
+context.push_op( "=" )
 r = context.result
 assert r == 42.3 else print r or else "-"
 
-context.push_op( '+' )
+context.push_op( "+" )
 context.push_digit( 1 )
 context.push_digit( 1 )
-context.push_op( '=' )
+context.push_op( "=" )
 r = context.result
 assert r == 53.3 else print r or else "-"
 
@@ -54,9 +54,9 @@ context.push_digit( 4 )
 context.push_digit( 2 )
 context.switch_to_decimals
 context.push_digit( 3 )
-context.push_op( '/' )
+context.push_op( "/" )
 context.push_digit( 3 )
-context.push_op( '=' )
+context.push_op( "=" )
 r = context.result
 assert r == 14.1 else print r or else "-"
 
@@ -68,20 +68,20 @@ context.switch_to_decimals
 context.push_digit( 1 )
 context.push_digit( 2 )
 context.push_digit( 3 )
-context.push_op( '+' )
+context.push_op( "+" )
 context.push_digit( 1 )
-context.push_op( '=' )
+context.push_op( "=" )
 r = context.result
 assert r == 51.123 else print r or else "-"
 
-#test 'C' button
+#test "C" button
 context = new CalculatorContext
 context.push_digit( 1 )
 context.push_digit( 0 )
-context.push_op( '+' )
+context.push_op( "+" )
 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