From 37fa0317ad8ae3a849c31620e76dc23734b84916 Mon Sep 17 00:00:00 2001 From: faze-geek Date: Thu, 16 Mar 2023 11:18:29 +0530 Subject: [PATCH] Clean changes using reset --- integration_tests/expr_05.py | 8 ++++++++ src/lpython/semantics/python_comptime_eval.h | 15 +++++++++++++-- tests/reference/asr-expr_05-3a37324.json | 4 ++-- tests/reference/asr-expr_05-3a37324.stdout | 2 +- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/integration_tests/expr_05.py b/integration_tests/expr_05.py index 4bb65cf174..f02d26f1a1 100644 --- a/integration_tests/expr_05.py +++ b/integration_tests/expr_05.py @@ -11,6 +11,8 @@ def main0(): b: i32 a = 10 b = -5 + eps: f64 + eps = 1e-12 assert test_multiply(a, b) == -50 i: i64 i = i64(1) @@ -69,6 +71,12 @@ def main0(): assert a == 0 b **= 4 assert b == 256 + # Test Issue 1562 + assert ((-8)%3) == 1 + assert ((8)%-3) == -1 + assert (-8%-3) == -2 + assert abs((11.0%-3.0) - (-1.0)) < eps + assert abs((-11.0%3.0) - (1.0)) < eps main0() diff --git a/src/lpython/semantics/python_comptime_eval.h b/src/lpython/semantics/python_comptime_eval.h index b8db20bbf2..0e6e38b85f 100644 --- a/src/lpython/semantics/python_comptime_eval.h +++ b/src/lpython/semantics/python_comptime_eval.h @@ -211,13 +211,24 @@ struct PythonIntrinsicProcedures { if (ASRUtils::is_integer(*type)) { int64_t a = ASR::down_cast(arg1)->m_n; int64_t b = ASR::down_cast(arg2)->m_n; + if(b == 0) { // Zero Division + throw SemanticError("Integer division or modulo by zero",loc); + } + + // Refer the following link to understand how modulo in C++ is modified to behave like Python. + // https://stackoverflow.com/questions/1907565/c-and-python-different-behaviour-of-the-modulo-operation return ASR::down_cast( - ASR::make_IntegerConstant_t(al, loc, a%b, type)); + ASR::make_IntegerConstant_t(al, loc, ((a%b)+b)%b, type)); } else if (ASRUtils::is_real(*type)) { double a = ASR::down_cast(arg1)->m_r; double b = ASR::down_cast(arg2)->m_r; + if (b == 0) { // Zero Division + throw SemanticError("Float division or modulo by zero", loc); + } + + // https://stackoverflow.com/questions/1907565/c-and-python-different-behaviour-of-the-modulo-operation return ASR::down_cast( - ASR::make_RealConstant_t(al, loc, std::fmod(a, b), type)); + ASR::make_RealConstant_t(al, loc, std::fmod(std::fmod(a, b) + b, b), type)); } else { throw SemanticError("_mod() must have both integer or both real arguments.", loc); } diff --git a/tests/reference/asr-expr_05-3a37324.json b/tests/reference/asr-expr_05-3a37324.json index 63af2ab087..82ee6f2145 100644 --- a/tests/reference/asr-expr_05-3a37324.json +++ b/tests/reference/asr-expr_05-3a37324.json @@ -2,11 +2,11 @@ "basename": "asr-expr_05-3a37324", "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", "infile": "tests/../integration_tests/expr_05.py", - "infile_hash": "e391b0795af9d77b92cd60ce235d00761db224f5056cab55cb6278c2", + "infile_hash": "59668f790720eb827bd2963bb57a934805aa5139fff582a3b138a8e4", "outfile": null, "outfile_hash": null, "stdout": "asr-expr_05-3a37324.stdout", - "stdout_hash": "e9ee5559639de0903d652344a2e091fe76c25f5e6d57bcb0d30f8554", + "stdout_hash": "6ee2e60ba4c39354eb284734d4588f8197a52a75634e49fceda63ec3", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-expr_05-3a37324.stdout b/tests/reference/asr-expr_05-3a37324.stdout index 345d5eb644..05ad24bfc0 100644 --- a/tests/reference/asr-expr_05-3a37324.stdout +++ b/tests/reference/asr-expr_05-3a37324.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 105 {_lpython_main_program: (Function (SymbolTable 104 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [main0] [] [(SubroutineCall 105 main0 () [] ())] () Public .false. .false.), main0: (Function (SymbolTable 4 {_mod: (ExternalSymbol 4 _mod 6 _mod lpython_builtin [] _mod Private), _mod@__lpython_overloaded_0___mod: (ExternalSymbol 4 _mod@__lpython_overloaded_0___mod 6 __lpython_overloaded_0___mod lpython_builtin [] __lpython_overloaded_0___mod Public), a: (Variable 4 a [] Local () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 4 b [] Local () () Default (Integer 4 []) Source Public Required .false.), i: (Variable 4 i [] Local () () Default (Integer 8 []) Source Public Required .false.), i1: (Variable 4 i1 [] Local (IntegerConstant 10 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i2: (Variable 4 i2 [] Local (IntegerConstant 4 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i3: (Variable 4 i3 [] Local (IntegerConstant 432534534 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i4: (Variable 4 i4 [] Local (IntegerUnaryMinus (IntegerConstant 4325 (Integer 4 [])) (Integer 4 []) (IntegerConstant -4325 (Integer 4 []))) () Default (Integer 4 []) Source Public Required .false.)}) main0 (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [test_multiply test_mod test_mod test_mod _mod@__lpython_overloaded_0___mod test_mod _mod@__lpython_overloaded_0___mod] [] [(= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) ()) (Assert (IntegerCompare (FunctionCall 105 test_multiply () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 50 (Integer 4 [])) (Integer 4 []) (IntegerConstant -50 (Integer 4 []))) (Logical 4 []) ()) ()) (= (Var 4 i) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 1 (Integer 8 []))) ()) (= (Var 4 i) (IntegerBinOp (Var 4 i) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Integer 8 []) ()) ()) (Assert (IntegerCompare (Var 4 i) Eq (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 2 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 5 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((IntegerConstant 23 (Integer 4 []))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 123282374 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 32771 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 30643 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerUnaryMinus (IntegerConstant 5345 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5345 (Integer 4 []))) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 534 (Integer 4 [])) (Integer 4 []) (IntegerConstant -534 (Integer 4 []))) ()) (Assert (IntegerCompare (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerUnaryMinus (IntegerConstant 123282374 (Integer 4 [])) (Integer 4 []) (IntegerConstant -123282374 (Integer 4 []))) ()) (= (Var 4 b) (IntegerConstant 32771 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 2128 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitOr (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 32769 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitAnd (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 0 (Integer 4 []))) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitAnd (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 105348 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitXor (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitXor (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant 72579 (Integer 4 []))) Eq (IntegerConstant 72579 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 5 (Integer 4 []))) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 5 (Integer 4 [])) BitLShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 10 (Integer 4 []))) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (= (Var 4 i1) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 i2) (IntegerConstant 4 (Integer 4 [])) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitLShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 160 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitRShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitAnd (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitOr (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitXor (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i1) (Integer 4 []) ()) BitXor (IntegerUnaryMinus (Var 4 i2) (Integer 4 []) ()) (Integer 4 []) ()) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 i3) (IntegerConstant 432534534 (Integer 4 [])) ()) (= (Var 4 i4) (IntegerUnaryMinus (IntegerConstant 4325 (Integer 4 [])) (Integer 4 []) (IntegerConstant -4325 (Integer 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i3) BitOr (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 225 (Integer 4 [])) (Integer 4 []) (IntegerConstant -225 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i4) BitRShift (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 541 (Integer 4 [])) (Integer 4 []) (IntegerConstant -541 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitAnd (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 432534758 (Integer 4 [])) (Integer 4 []) (IntegerConstant -432534758 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitXor (Var 4 i4) (Integer 4 []) ()) Eq (IntegerConstant 432530657 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitXor (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 13 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 a) (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerConstant 4 (Integer 4 [])) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitLShift (Var 4 b) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 48 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 24 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitAnd (Var 4 b) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerBinOp (Var 4 b) Pow (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 b) Eq (IntegerConstant 256 (Integer 4 [])) (Logical 4 []) ()) ())] () Public .false. .false.), test_mod: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) Source Public Required .false.), _mod: (ExternalSymbol 3 _mod 6 _mod lpython_builtin [] _mod Private), _mod@__lpython_overloaded_0___mod: (ExternalSymbol 3 _mod@__lpython_overloaded_0___mod 6 __lpython_overloaded_0___mod lpython_builtin [] __lpython_overloaded_0___mod Public), a: (Variable 3 a [] In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 3 b [] In () () Default (Integer 4 []) Source Public Required .false.)}) test_mod (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [_mod@__lpython_overloaded_0___mod] [(Var 3 a) (Var 3 b)] [(= (Var 3 _lpython_return_variable) (FunctionCall 3 _mod@__lpython_overloaded_0___mod 3 _mod [((Var 3 a)) ((Var 3 b))] (Integer 4 []) () ()) ()) (Return)] (Var 3 _lpython_return_variable) Public .false. .false.), test_multiply: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 2 a [] In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 2 b [] In () () Default (Integer 4 []) Source Public Required .false.)}) test_multiply (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 2 a) (Var 2 b)] [(= (Var 2 _lpython_return_variable) (IntegerBinOp (Var 2 a) Mul (Var 2 b) (Integer 4 []) ()) ()) (Return)] (Var 2 _lpython_return_variable) Public .false. .false.)}) _global_symbols [lpython_builtin] .false. .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 103 {_lpython_main_program: (ExternalSymbol 103 _lpython_main_program 105 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 103 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 105 {_lpython_main_program: (Function (SymbolTable 104 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [main0] [] [(SubroutineCall 105 main0 () [] ())] () Public .false. .false.), main0: (Function (SymbolTable 4 {_mod: (ExternalSymbol 4 _mod 6 _mod lpython_builtin [] _mod Private), _mod@__lpython_overloaded_0___mod: (ExternalSymbol 4 _mod@__lpython_overloaded_0___mod 6 __lpython_overloaded_0___mod lpython_builtin [] __lpython_overloaded_0___mod Public), _mod@__lpython_overloaded_3___mod: (ExternalSymbol 4 _mod@__lpython_overloaded_3___mod 6 __lpython_overloaded_3___mod lpython_builtin [] __lpython_overloaded_3___mod Public), a: (Variable 4 a [] Local () () Default (Integer 4 []) Source Public Required .false.), abs: (ExternalSymbol 4 abs 6 abs lpython_builtin [] abs Private), abs@__lpython_overloaded_0__abs: (ExternalSymbol 4 abs@__lpython_overloaded_0__abs 6 __lpython_overloaded_0__abs lpython_builtin [] __lpython_overloaded_0__abs Public), b: (Variable 4 b [] Local () () Default (Integer 4 []) Source Public Required .false.), eps: (Variable 4 eps [] Local () () Default (Real 8 []) Source Public Required .false.), i: (Variable 4 i [] Local () () Default (Integer 8 []) Source Public Required .false.), i1: (Variable 4 i1 [] Local (IntegerConstant 10 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i2: (Variable 4 i2 [] Local (IntegerConstant 4 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i3: (Variable 4 i3 [] Local (IntegerConstant 432534534 (Integer 4 [])) () Default (Integer 4 []) Source Public Required .false.), i4: (Variable 4 i4 [] Local (IntegerUnaryMinus (IntegerConstant 4325 (Integer 4 [])) (Integer 4 []) (IntegerConstant -4325 (Integer 4 []))) () Default (Integer 4 []) Source Public Required .false.)}) main0 (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [test_multiply test_mod test_mod test_mod _mod@__lpython_overloaded_0___mod test_mod _mod@__lpython_overloaded_0___mod _mod@__lpython_overloaded_0___mod _mod@__lpython_overloaded_0___mod _mod@__lpython_overloaded_0___mod abs@__lpython_overloaded_0__abs _mod@__lpython_overloaded_3___mod abs@__lpython_overloaded_0__abs _mod@__lpython_overloaded_3___mod] [] [(= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) ()) (= (Var 4 eps) (RealConstant 0.000000 (Real 8 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_multiply () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 50 (Integer 4 [])) (Integer 4 []) (IntegerConstant -50 (Integer 4 []))) (Logical 4 []) ()) ()) (= (Var 4 i) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 1 (Integer 8 []))) ()) (= (Var 4 i) (IntegerBinOp (Var 4 i) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Integer 8 []) ()) ()) (Assert (IntegerCompare (Var 4 i) Eq (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 2 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 5 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((IntegerConstant 23 (Integer 4 []))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 123282374 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 32771 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 30643 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerUnaryMinus (IntegerConstant 5345 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5345 (Integer 4 []))) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 534 (Integer 4 [])) (Integer 4 []) (IntegerConstant -534 (Integer 4 []))) ()) (Assert (IntegerCompare (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerUnaryMinus (IntegerConstant 123282374 (Integer 4 [])) (Integer 4 []) (IntegerConstant -123282374 (Integer 4 []))) ()) (= (Var 4 b) (IntegerConstant 32771 (Integer 4 [])) ()) (Assert (IntegerCompare (FunctionCall 105 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 2128 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitOr (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 32769 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitAnd (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 0 (Integer 4 []))) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitAnd (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 105348 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitXor (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitXor (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant 72579 (Integer 4 []))) Eq (IntegerConstant 72579 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 5 (Integer 4 []))) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerConstant 5 (Integer 4 [])) BitLShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 10 (Integer 4 []))) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (= (Var 4 i1) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 i2) (IntegerConstant 4 (Integer 4 [])) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitLShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 160 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitRShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitAnd (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitOr (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i1) BitXor (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i1) (Integer 4 []) ()) BitXor (IntegerUnaryMinus (Var 4 i2) (Integer 4 []) ()) (Integer 4 []) ()) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 i3) (IntegerConstant 432534534 (Integer 4 [])) ()) (= (Var 4 i4) (IntegerUnaryMinus (IntegerConstant 4325 (Integer 4 [])) (Integer 4 []) (IntegerConstant -4325 (Integer 4 []))) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i3) BitOr (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 225 (Integer 4 [])) (Integer 4 []) (IntegerConstant -225 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (Var 4 i4) BitRShift (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 541 (Integer 4 [])) (Integer 4 []) (IntegerConstant -541 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitAnd (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 432534758 (Integer 4 [])) (Integer 4 []) (IntegerConstant -432534758 (Integer 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitXor (Var 4 i4) (Integer 4 []) ()) Eq (IntegerConstant 432530657 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitXor (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 13 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 a) (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerConstant 4 (Integer 4 [])) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitLShift (Var 4 b) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 48 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 24 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 a) (IntegerBinOp (Var 4 a) BitAnd (Var 4 b) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 a) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (= (Var 4 b) (IntegerBinOp (Var 4 b) Pow (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) ()) ()) (Assert (IntegerCompare (Var 4 b) Eq (IntegerConstant 256 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((IntegerUnaryMinus (IntegerConstant 8 (Integer 4 [])) (Integer 4 []) (IntegerConstant -8 (Integer 4 [])))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) (IntegerConstant 1 (Integer 4 [])) ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((IntegerConstant 8 (Integer 4 []))) ((IntegerUnaryMinus (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) (IntegerConstant -3 (Integer 4 []))))] (Integer 4 []) (IntegerConstant -1 (Integer 4 [])) ()) Eq (IntegerUnaryMinus (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant -1 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (IntegerCompare (FunctionCall 4 _mod@__lpython_overloaded_0___mod 4 _mod [((IntegerUnaryMinus (IntegerConstant 8 (Integer 4 [])) (Integer 4 []) (IntegerConstant -8 (Integer 4 [])))) ((IntegerUnaryMinus (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) (IntegerConstant -3 (Integer 4 []))))] (Integer 4 []) (IntegerConstant -2 (Integer 4 [])) ()) Eq (IntegerUnaryMinus (IntegerConstant 2 (Integer 4 [])) (Integer 4 []) (IntegerConstant -2 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 []))) ()) (Assert (RealCompare (FunctionCall 4 abs@__lpython_overloaded_0__abs 4 abs [((RealBinOp (FunctionCall 4 _mod@__lpython_overloaded_3___mod 4 _mod [((RealConstant 11.000000 (Real 8 []))) ((RealUnaryMinus (RealConstant 3.000000 (Real 8 [])) (Real 8 []) (RealConstant -3.000000 (Real 8 []))))] (Real 8 []) (RealConstant -1.000000 (Real 8 [])) ()) Sub (RealUnaryMinus (RealConstant 1.000000 (Real 8 [])) (Real 8 []) (RealConstant -1.000000 (Real 8 []))) (Real 8 []) (RealConstant 0.000000 (Real 8 []))))] (Real 8 []) (RealConstant 0.000000 (Real 8 [])) ()) Lt (Var 4 eps) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 4 abs@__lpython_overloaded_0__abs 4 abs [((RealBinOp (FunctionCall 4 _mod@__lpython_overloaded_3___mod 4 _mod [((RealUnaryMinus (RealConstant 11.000000 (Real 8 [])) (Real 8 []) (RealConstant -11.000000 (Real 8 [])))) ((RealConstant 3.000000 (Real 8 [])))] (Real 8 []) (RealConstant 1.000000 (Real 8 [])) ()) Sub (RealConstant 1.000000 (Real 8 [])) (Real 8 []) (RealConstant 0.000000 (Real 8 []))))] (Real 8 []) (RealConstant 0.000000 (Real 8 [])) ()) Lt (Var 4 eps) (Logical 4 []) ()) ())] () Public .false. .false.), test_mod: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) Source Public Required .false.), _mod: (ExternalSymbol 3 _mod 6 _mod lpython_builtin [] _mod Private), _mod@__lpython_overloaded_0___mod: (ExternalSymbol 3 _mod@__lpython_overloaded_0___mod 6 __lpython_overloaded_0___mod lpython_builtin [] __lpython_overloaded_0___mod Public), a: (Variable 3 a [] In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 3 b [] In () () Default (Integer 4 []) Source Public Required .false.)}) test_mod (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [_mod@__lpython_overloaded_0___mod] [(Var 3 a) (Var 3 b)] [(= (Var 3 _lpython_return_variable) (FunctionCall 3 _mod@__lpython_overloaded_0___mod 3 _mod [((Var 3 a)) ((Var 3 b))] (Integer 4 []) () ()) ()) (Return)] (Var 3 _lpython_return_variable) Public .false. .false.), test_multiply: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 2 a [] In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 2 b [] In () () Default (Integer 4 []) Source Public Required .false.)}) test_multiply (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 2 a) (Var 2 b)] [(= (Var 2 _lpython_return_variable) (IntegerBinOp (Var 2 a) Mul (Var 2 b) (Integer 4 []) ()) ()) (Return)] (Var 2 _lpython_return_variable) Public .false. .false.)}) _global_symbols [lpython_builtin] .false. .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 103 {_lpython_main_program: (ExternalSymbol 103 _lpython_main_program 105 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 103 _lpython_main_program () [] ())])}) [])