diff --git a/integration_tests/elemental_05.py b/integration_tests/elemental_05.py index 8bb100dd08..53b6d1f1db 100644 --- a/integration_tests/elemental_05.py +++ b/integration_tests/elemental_05.py @@ -18,7 +18,7 @@ def verifynd(array: f64[:, :, :, :], result: f64[:, :, :, :], size1: i32, size2: result1d: f64[12800] = reshape(result, shape) for i in range(size): - assert abs((sinh(array1d[i]) + 2.0)/2 - result1d[i]) <= eps + assert abs((sinh(array1d[i]) + 2.0)/2.0 - result1d[i]) <= eps def elemental_sinh(): @@ -41,7 +41,7 @@ def elemental_sinh(): for j in range(10): for k in range(16): for l in range(2): - arraynd[i, j, k, l] = float(i + 2*j + 3*k + 4*k)/size + arraynd[i, j, k, l] = float(i + 2*j + 3*k + 4*k)/float(size) sinhnd = (sinh(arraynd) + 2.0)/2.0 @@ -63,7 +63,7 @@ def elemental_cosh(): for i in range(20): for j in range(10): - array2d[i, j] = (i + 2*j)/200.0 + array2d[i, j] = float(i + 2*j)/200.0 cosh2d = cosh(5.0 + (array2d))**2.0 verify2d(array2d, cosh2d, 20, 10) @@ -77,7 +77,7 @@ def elemental_cosh_(): for i in range(20): for j in range(10): - array2d[i, j] = (i + 2*j)/200.0 + array2d[i, j] = float(i + 2*j)/200.0 cosh2d = cosh(5.0 + (array2d))**2.0 verify2d(array2d, cosh2d, 20, 10) diff --git a/integration_tests/elemental_06.py b/integration_tests/elemental_06.py index 83af2b08a0..1ecd78bf74 100644 --- a/integration_tests/elemental_06.py +++ b/integration_tests/elemental_06.py @@ -110,7 +110,7 @@ def elemental_arctan(): for i in range(201): array1d[i] = f32(i + 1) - array1d_rec[i] = f32(1.0/(i+1)) + array1d_rec[i] = f32(1.0/f64(i+1)) arctan1d = arctan(array1d) + arctan(array1d_rec) for i in range(201): assert abs(arctan1d[i] - f32(f64(pi) / 2.0)) <= eps diff --git a/integration_tests/elemental_07.py b/integration_tests/elemental_07.py index 4637b8bc60..fcae022601 100644 --- a/integration_tests/elemental_07.py +++ b/integration_tests/elemental_07.py @@ -41,7 +41,7 @@ def elemental_tanh(): for j in range(8): for k in range(4): for l in range(2): - arraynd[i, j, k, l] = float(i + 2*j + 3*k + 4*k)/size + arraynd[i, j, k, l] = float(i + 2*j + 3*k + 4*k)/float(size) tanhnd = (tanh(sin(arraynd)) + 2.0)/2.0 diff --git a/integration_tests/elemental_08.py b/integration_tests/elemental_08.py index b65ccee06e..9d1e8f0003 100644 --- a/integration_tests/elemental_08.py +++ b/integration_tests/elemental_08.py @@ -18,7 +18,7 @@ def verifynd(array: f64[:, :, :, :], result: f64[:, :, :, :], size1: i32, size2: result1d: f64[1024] = reshape(result, shape) for i in range(size): - assert abs(( exp(array1d[i]) + exp(array1d[i] / 3) ) / 2 - result1d[i]) <= eps + assert abs(( exp(array1d[i]) + exp(array1d[i] / 3.0) ) / float(2) - result1d[i]) <= eps def elemental_exp(): i: i32; j: i32; k: i32; l: i32; size: i32; @@ -40,7 +40,7 @@ def elemental_exp(): for j in range(8): for k in range(4): for l in range(2): - arraynd[i, j, k, l] = float( f64(i) / 8.0 + f64(j) / 4.0 + f64(k) / 2.0 + f64(l) ) / size + arraynd[i, j, k, l] = float( f64(i) / 8.0 + f64(j) / 4.0 + f64(k) / 2.0 + f64(l) ) / float(size) expnd = (exp(arraynd) + exp(arraynd / 3.0)) / 2.0 diff --git a/integration_tests/generics_list_01.py b/integration_tests/generics_list_01.py index 9534bc675a..2d228532ce 100644 --- a/integration_tests/generics_list_01.py +++ b/integration_tests/generics_list_01.py @@ -30,7 +30,7 @@ def add_float(x: f64, y: f64) -> f64: return x + y def div_float(x: f64, k: i32) -> f64: - return x / k + return x / f64(k) def empty_string(x: str) -> str: return "" diff --git a/integration_tests/test_c_interop_01.py b/integration_tests/test_c_interop_01.py index a2cb49604a..8bef275267 100644 --- a/integration_tests/test_c_interop_01.py +++ b/integration_tests/test_c_interop_01.py @@ -24,7 +24,7 @@ def _lfortran_bgt64(i: i64, j: i64) -> i32: def test_c_callbacks(): pi: f64 = 3.141592653589793238462643383279502884197 assert abs(_lfortran_dsin(pi) - 0.0) < 1e-12 - assert abs(_lfortran_dsin(pi/2) - 1.0) < 1e-12 + assert abs(_lfortran_dsin(pi/2.0) - 1.0) < 1e-12 assert abs(_lfortran_ssin(f32(pi)) - f32(0.0)) < f32(1e-6) assert abs(_lfortran_ssin(f32(pi/2.0)) - f32(1.0)) < f32(1e-6) diff --git a/integration_tests/test_dict_01.py b/integration_tests/test_dict_01.py index e76fcf966a..702a6b14e3 100644 --- a/integration_tests/test_dict_01.py +++ b/integration_tests/test_dict_01.py @@ -8,10 +8,10 @@ def test_dict(): rollnumber2cpi[0] = 1.1 for i in range(1000, 1000 + size): - rollnumber2cpi[i] = float(i/100.0 + 5.0) + rollnumber2cpi[i] = float(i)/100.0 + 5.0 for i in range(1000 + size - 1, 1001, -1): - assert abs(rollnumber2cpi[i] - i/100.0 - 5.0) <= 1e-12 + assert abs(rollnumber2cpi[i] - f64(i)/100.0 - 5.0) <= 1e-12 assert abs(rollnumber2cpi[0] - 1.1) <= 1e-12 assert len(rollnumber2cpi) == 1001 diff --git a/integration_tests/test_dict_05.py b/integration_tests/test_dict_05.py index 302894123e..df35e97494 100644 --- a/integration_tests/test_dict_05.py +++ b/integration_tests/test_dict_05.py @@ -7,7 +7,7 @@ def test_dict(): end: i32 = 501 for i in range(start, end): - rollnumber2cpi[i] = float(i/100.0 + 5.0) + rollnumber2cpi[i] = float(i)/100.0 + 5.0 # for i in range(end - 1, start + 1, -1): # assert abs(rollnumber2cpi[i] - i/100.0 - 5.0) <= 1e-12 diff --git a/integration_tests/test_dict_06.py b/integration_tests/test_dict_06.py index bdff5f67c6..44ba650bfa 100644 --- a/integration_tests/test_dict_06.py +++ b/integration_tests/test_dict_06.py @@ -6,7 +6,7 @@ def fill_rollnumber2cpi(size: i32) -> dict[i32, f64]: rollnumber2cpi[0] = 1.1 for i in range(1000, 1000 + size): - rollnumber2cpi[i] = float(i/100.0 + 5.0) + rollnumber2cpi[i] = float(i)/100.0 + 5.0 return rollnumber2cpi @@ -16,7 +16,7 @@ def test_dict(): rollnumber2cpi: dict[i32, f64] = fill_rollnumber2cpi(size) for i in range(1000 + size - 1, 1001, -1): - assert abs(rollnumber2cpi[i] - i/100.0 - 5.0) <= 1e-12 + assert abs(rollnumber2cpi[i] - f64(i)/100.0 - 5.0) <= 1e-12 assert abs(rollnumber2cpi[0] - 1.1) <= 1e-12 assert len(rollnumber2cpi) == 201 diff --git a/integration_tests/test_dict_09.py b/integration_tests/test_dict_09.py index 412fce9aa8..948288c0d3 100644 --- a/integration_tests/test_dict_09.py +++ b/integration_tests/test_dict_09.py @@ -8,14 +8,14 @@ def fill_rollnumber2cpi(size: i32) -> dict[i32, f64]: rollnumber2cpi[0] = 1.1 for i in range(1000, 1000 + size): - rollnumber2cpi[i] = float(i/100.0 + 5.0) + rollnumber2cpi[i] = float(i)/100.0 + 5.0 return rollnumber2cpi def test_assertion(rollnumber2cpi: dict[i32, f64], size: i32): i: i32 for i in range(1000 + size - 1, 1001, -1): - assert abs(rollnumber2cpi[i] - i/100.0 - 5.0) <= 1e-12 + assert abs(rollnumber2cpi[i] - f64(i)/100.0 - 5.0) <= 1e-12 assert abs(rollnumber2cpi[0] - 1.1) <= 1e-12 assert len(rollnumber2cpi) == 201 diff --git a/integration_tests/test_math_02.py b/integration_tests/test_math_02.py index 60621facb0..a15b604326 100644 --- a/integration_tests/test_math_02.py +++ b/integration_tests/test_math_02.py @@ -6,15 +6,15 @@ def test_trig(): eps: f64 = 1e-12 assert abs(sin(0.0) - 0.0) < eps - assert abs(sin(pi/2) - 1.0) < eps + assert abs(sin(pi/2.0) - 1.0) < eps assert abs(cos(0.0) - 1.0) < eps - assert abs(cos(pi/2) - 0.0) < eps + assert abs(cos(pi/2.0) - 0.0) < eps assert abs(tan(0.0) - 0.0) < eps - assert abs(tan(pi/4) - 1.0) < eps - assert abs(asin(1.0) - pi/2) < eps + assert abs(tan(pi/4.0) - 1.0) < eps + assert abs(asin(1.0) - pi/2.0) < eps assert abs(acos(1.0) - 0.0) < eps - assert abs(atan(1.0) - pi/4) < eps - assert abs(atan2(1.0, 1.0) - pi/4) < eps + assert abs(atan(1.0) - pi/4.0) < eps + assert abs(atan2(1.0, 1.0) - pi/4.0) < eps def test_sqrt(): eps: f64 = 1e-12 diff --git a/src/lpython/semantics/python_ast_to_asr.cpp b/src/lpython/semantics/python_ast_to_asr.cpp index f54a55f2d2..9c40f60271 100644 --- a/src/lpython/semantics/python_ast_to_asr.cpp +++ b/src/lpython/semantics/python_ast_to_asr.cpp @@ -1745,6 +1745,18 @@ class CommonVisitor : public AST::BaseVisitor { ); throw SemanticAbort(); } + if(!ASRUtils::check_equal_type(left_type, right_type)){ + std::string ltype = ASRUtils::type_to_str_python(ASRUtils::expr_type(left)); + std::string rtype = ASRUtils::type_to_str_python(ASRUtils::expr_type(right)); + diag.add(diag::Diagnostic( + "Type mismatch in binary operator; the types must be compatible", + diag::Level::Error, diag::Stage::Semantic, { + diag::Label("type mismatch (" + ltype + " and " + rtype + ")", + {left->base.loc, right->base.loc}) + }) + ); + throw SemanticAbort(); + } // Floor div operation in python using (`//`) if (floordiv) { bool both_int = (ASRUtils::is_integer(*left_type) && ASRUtils::is_integer(*right_type)); diff --git a/src/runtime/statistics.py b/src/runtime/statistics.py index b625d36687..61e1b9a9b5 100644 --- a/src/runtime/statistics.py +++ b/src/runtime/statistics.py @@ -15,7 +15,7 @@ def mean(x: list[i32]) -> f64: for i in range(k): sum += float(x[i]) - return sum/k + return sum/f64(k) @overload @@ -33,7 +33,7 @@ def mean(x: list[i64]) -> f64: for i in range(k): sum += float(x[i]) - return sum/k + return sum/f64(k) @overload @@ -50,7 +50,7 @@ def mean(x: list[f32]) -> f64: for i in range(k): sum += float(x[i]) - return sum/k + return sum/f64(k) @overload @@ -67,7 +67,7 @@ def mean(x: list[f64]) -> f64: for i in range(k): sum += x[i] - return sum/k + return sum/f64(k) @overload @@ -177,7 +177,7 @@ def harmonic_mean(x: list[i32]) -> f64: raise Exception("Harmonic mean does not support negative values") sum += 1 / x[i] - return float(k/sum) + return f64(k)/sum @overload def harmonic_mean(x: list[i64]) -> f64: @@ -196,8 +196,8 @@ def harmonic_mean(x: list[i64]) -> f64: return 0.0 if x[i] < i64(0): raise Exception("Harmonic mean does not support negative values") - sum += 1 / x[i] - return k/sum + sum += i64(1) / x[i] + return f64(k)/sum @overload def harmonic_mean(x: list[f64]) -> f64: @@ -216,9 +216,9 @@ def harmonic_mean(x: list[f64]) -> f64: return 0.0 if x[i] < 0.0: raise Exception("Harmonic mean does not support negative values") - sum += 1 / x[i] + sum += 1.0 / x[i] - return k / sum + return f64(k) / sum # TODO: Use generics to support other types. @@ -283,7 +283,7 @@ def variance(x: list[f64]) -> f64: i: i32 for i in range(n): num += (x[i] - xmean)**2.0 - return num / (n-1) + return num / f64(n-1) @overload def variance(x: list[i32]) -> f64: @@ -301,7 +301,7 @@ def variance(x: list[i32]) -> f64: i: i32 for i in range(n): num += (f64(x[i]) - xmean)**2.0 - return num / (n-1) + return num / f64(n-1) @overload @@ -335,7 +335,7 @@ def pvariance(x: list[f64]) -> f64: i: i32 for i in range(n): num += (x[i] - xmean)**2.0 - return num / n + return num / f64(n) @overload def pvariance(x: list[i32]) -> f64: @@ -353,7 +353,7 @@ def pvariance(x: list[i32]) -> f64: i: i32 for i in range(n): num += (f64(x[i]) - xmean)**2.0 - return num / n + return num / f64(n) @overload @@ -450,7 +450,7 @@ def covariance(x: list[i32], y: list[i32]) -> f64: i: i32 for i in range(n): num += (f64(x[i]) - xmean) * (f64(y[i]) - ymean) - return num / (n-1) + return num / f64(n-1) @overload def covariance(x: list[f64], y: list[f64]) -> f64: @@ -468,7 +468,7 @@ def covariance(x: list[f64], y: list[f64]) -> f64: i: i32 for i in range(n): num += (x[i] - xmean) * (y[i] - ymean) - return num / (n-1) + return num / f64(n-1) @overload def linear_regression(x: list[i32], y: list[i32]) -> tuple[f64, f64]: diff --git a/tests/errors/test_type_mismatch_01.py b/tests/errors/test_type_mismatch_01.py new file mode 100644 index 0000000000..4095dc0390 --- /dev/null +++ b/tests/errors/test_type_mismatch_01.py @@ -0,0 +1,6 @@ +from lpython import i32, f64 + +def test(): + a : i32 = 10 + b : f64 = 20.0 + a /= b \ No newline at end of file diff --git a/tests/reference/asr-generics_list_01-39c4044.json b/tests/reference/asr-generics_list_01-39c4044.json index ebcd49b7aa..f39deee3d9 100644 --- a/tests/reference/asr-generics_list_01-39c4044.json +++ b/tests/reference/asr-generics_list_01-39c4044.json @@ -2,7 +2,7 @@ "basename": "asr-generics_list_01-39c4044", "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", "infile": "tests/../integration_tests/generics_list_01.py", - "infile_hash": "d5101f5832d47b86a95540b87deb0b36092004160b41af2a6ffb5ee0", + "infile_hash": "fee10ba2a43151e515695ea4179e42231e1fd80d7c75637747511144", "outfile": null, "outfile_hash": null, "stdout": "asr-generics_list_01-39c4044.stdout", diff --git a/tests/reference/asr-test_c_interop_01-e374f43.json b/tests/reference/asr-test_c_interop_01-e374f43.json index 843102a0dc..3d34b1908d 100644 --- a/tests/reference/asr-test_c_interop_01-e374f43.json +++ b/tests/reference/asr-test_c_interop_01-e374f43.json @@ -2,11 +2,11 @@ "basename": "asr-test_c_interop_01-e374f43", "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", "infile": "tests/../integration_tests/test_c_interop_01.py", - "infile_hash": "8dd5d5b22dd518496006bdf56651d6892012102d8a0f354e05fc94d7", + "infile_hash": "f5363d49163fefe382a94462e7c305a7938ddcc44c4595f8a0c5bc3f", "outfile": null, "outfile_hash": null, "stdout": "asr-test_c_interop_01-e374f43.stdout", - "stdout_hash": "f0f14cea7739e56630b1c9a041e549f8e8e18d05e69dc36fceb5e74b", + "stdout_hash": "9d34b037680950ab931fd76b05db390f3c09fe38e14996dd9b79218b", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-test_c_interop_01-e374f43.stdout b/tests/reference/asr-test_c_interop_01-e374f43.stdout index 5ec5ab940d..e730dec591 100644 --- a/tests/reference/asr-test_c_interop_01-e374f43.stdout +++ b/tests/reference/asr-test_c_interop_01-e374f43.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 9 {_lfortran_bgt32: (Function (SymbolTable 4 {_lpython_return_variable: (Variable 4 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) BindC Public Required .false.), i: (Variable 4 i [] In () () Default (Integer 4 []) BindC Public Required .true.), j: (Variable 4 j [] In () () Default (Integer 4 []) BindC Public Required .true.)}) _lfortran_bgt32 (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 i) (Var 4 j)] [] (Var 4 _lpython_return_variable) Public .false. .false.), _lfortran_bgt64: (Function (SymbolTable 5 {_lpython_return_variable: (Variable 5 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) BindC Public Required .false.), i: (Variable 5 i [] In () () Default (Integer 8 []) BindC Public Required .true.), j: (Variable 5 j [] In () () Default (Integer 8 []) BindC Public Required .true.)}) _lfortran_bgt64 (FunctionType [(Integer 8 []) (Integer 8 [])] (Integer 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 5 i) (Var 5 j)] [] (Var 5 _lpython_return_variable) Public .false. .false.), _lfortran_dsin: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable [] ReturnVar () () Default (Real 8 []) BindC Public Required .false.), x: (Variable 2 x [] In () () Default (Real 8 []) BindC Public Required .true.)}) _lfortran_dsin (FunctionType [(Real 8 [])] (Real 8 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 2 x)] [] (Var 2 _lpython_return_variable) Public .false. .false.), _lfortran_ssin: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable [] ReturnVar () () Default (Real 4 []) BindC Public Required .false.), x: (Variable 3 x [] In () () Default (Real 4 []) BindC Public Required .true.)}) _lfortran_ssin (FunctionType [(Real 4 [])] (Real 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 x)] [] (Var 3 _lpython_return_variable) Public .false. .false.), _lpython_main_program: (Function (SymbolTable 8 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [test_c_callbacks] [] [(SubroutineCall 9 test_c_callbacks () [] ())] () Public .false. .false.), test_c_callbacks: (Function (SymbolTable 6 {pi: (Variable 6 pi [] Local () () Default (Real 8 []) Source Public Required .false.)}) test_c_callbacks (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [_lfortran_dsin _lfortran_dsin _lfortran_ssin _lfortran_ssin _lfortran_bgt32 _lfortran_bgt32 _lfortran_bgt64 _lfortran_bgt64] [] [(= (Var 6 pi) (RealConstant 3.141593 (Real 8 [])) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_dsin () [((Var 6 pi))] (Real 8 []) () ()) Sub (RealConstant 0.000000 (Real 8 [])) (Real 8 []) ())] 0 (Real 8 []) ()) Lt (RealConstant 0.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_dsin () [((RealBinOp (Var 6 pi) Div (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToReal (Real 8 []) (RealConstant 2.000000 (Real 8 []))) (Real 8 []) ()))] (Real 8 []) () ()) Sub (RealConstant 1.000000 (Real 8 [])) (Real 8 []) ())] 0 (Real 8 []) ()) Lt (RealConstant 0.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_ssin () [((Cast (Var 6 pi) RealToReal (Real 4 []) ()))] (Real 4 []) () ()) Sub (Cast (RealConstant 0.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000000 (Real 4 []))) (Real 4 []) ())] 0 (Real 4 []) ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_ssin () [((Cast (RealBinOp (Var 6 pi) Div (RealConstant 2.000000 (Real 8 [])) (Real 8 []) ()) RealToReal (Real 4 []) ()))] (Real 4 []) () ()) Sub (Cast (RealConstant 1.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.000000 (Real 4 []))) (Real 4 []) ())] 0 (Real 4 []) ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt32 () [((IntegerConstant 3 (Integer 4 []))) ((IntegerConstant 4 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt32 () [((IntegerConstant 4 (Integer 4 []))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt64 () [((Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 [])))) ((Cast (IntegerConstant 4 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 4 (Integer 8 []))))] (Integer 4 []) () ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt64 () [((Cast (IntegerConstant 4 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 4 (Integer 8 [])))) ((Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 []))))] (Integer 4 []) () ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 7 {_lpython_main_program: (ExternalSymbol 7 _lpython_main_program 9 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 7 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 9 {_lfortran_bgt32: (Function (SymbolTable 4 {_lpython_return_variable: (Variable 4 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) BindC Public Required .false.), i: (Variable 4 i [] In () () Default (Integer 4 []) BindC Public Required .true.), j: (Variable 4 j [] In () () Default (Integer 4 []) BindC Public Required .true.)}) _lfortran_bgt32 (FunctionType [(Integer 4 []) (Integer 4 [])] (Integer 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 i) (Var 4 j)] [] (Var 4 _lpython_return_variable) Public .false. .false.), _lfortran_bgt64: (Function (SymbolTable 5 {_lpython_return_variable: (Variable 5 _lpython_return_variable [] ReturnVar () () Default (Integer 4 []) BindC Public Required .false.), i: (Variable 5 i [] In () () Default (Integer 8 []) BindC Public Required .true.), j: (Variable 5 j [] In () () Default (Integer 8 []) BindC Public Required .true.)}) _lfortran_bgt64 (FunctionType [(Integer 8 []) (Integer 8 [])] (Integer 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 5 i) (Var 5 j)] [] (Var 5 _lpython_return_variable) Public .false. .false.), _lfortran_dsin: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable [] ReturnVar () () Default (Real 8 []) BindC Public Required .false.), x: (Variable 2 x [] In () () Default (Real 8 []) BindC Public Required .true.)}) _lfortran_dsin (FunctionType [(Real 8 [])] (Real 8 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 2 x)] [] (Var 2 _lpython_return_variable) Public .false. .false.), _lfortran_ssin: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable [] ReturnVar () () Default (Real 4 []) BindC Public Required .false.), x: (Variable 3 x [] In () () Default (Real 4 []) BindC Public Required .true.)}) _lfortran_ssin (FunctionType [(Real 4 [])] (Real 4 []) BindC Interface () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 x)] [] (Var 3 _lpython_return_variable) Public .false. .false.), _lpython_main_program: (Function (SymbolTable 8 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [test_c_callbacks] [] [(SubroutineCall 9 test_c_callbacks () [] ())] () Public .false. .false.), test_c_callbacks: (Function (SymbolTable 6 {pi: (Variable 6 pi [] Local () () Default (Real 8 []) Source Public Required .false.)}) test_c_callbacks (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [_lfortran_dsin _lfortran_dsin _lfortran_ssin _lfortran_ssin _lfortran_bgt32 _lfortran_bgt32 _lfortran_bgt64 _lfortran_bgt64] [] [(= (Var 6 pi) (RealConstant 3.141593 (Real 8 [])) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_dsin () [((Var 6 pi))] (Real 8 []) () ()) Sub (RealConstant 0.000000 (Real 8 [])) (Real 8 []) ())] 0 (Real 8 []) ()) Lt (RealConstant 0.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_dsin () [((RealBinOp (Var 6 pi) Div (RealConstant 2.000000 (Real 8 [])) (Real 8 []) ()))] (Real 8 []) () ()) Sub (RealConstant 1.000000 (Real 8 [])) (Real 8 []) ())] 0 (Real 8 []) ()) Lt (RealConstant 0.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_ssin () [((Cast (Var 6 pi) RealToReal (Real 4 []) ()))] (Real 4 []) () ()) Sub (Cast (RealConstant 0.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000000 (Real 4 []))) (Real 4 []) ())] 0 (Real 4 []) ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (RealCompare (IntrinsicFunction Abs [(RealBinOp (FunctionCall 9 _lfortran_ssin () [((Cast (RealBinOp (Var 6 pi) Div (RealConstant 2.000000 (Real 8 [])) (Real 8 []) ()) RealToReal (Real 4 []) ()))] (Real 4 []) () ()) Sub (Cast (RealConstant 1.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.000000 (Real 4 []))) (Real 4 []) ())] 0 (Real 4 []) ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt32 () [((IntegerConstant 3 (Integer 4 []))) ((IntegerConstant 4 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt32 () [((IntegerConstant 4 (Integer 4 []))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt64 () [((Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 [])))) ((Cast (IntegerConstant 4 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 4 (Integer 8 []))))] (Integer 4 []) () ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (FunctionCall 9 _lfortran_bgt64 () [((Cast (IntegerConstant 4 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 4 (Integer 8 [])))) ((Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 []))))] (Integer 4 []) () ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 7 {_lpython_main_program: (ExternalSymbol 7 _lpython_main_program 9 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 7 _lpython_main_program () [] ())])}) []) diff --git a/tests/reference/asr-test_type_mismatch_01-09e8af3.json b/tests/reference/asr-test_type_mismatch_01-09e8af3.json new file mode 100644 index 0000000000..ce2513c935 --- /dev/null +++ b/tests/reference/asr-test_type_mismatch_01-09e8af3.json @@ -0,0 +1,13 @@ +{ + "basename": "asr-test_type_mismatch_01-09e8af3", + "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", + "infile": "tests/errors/test_type_mismatch_01.py", + "infile_hash": "58baa8f4a5094bfa977527f92814a375ceea1f9a99c08e43bdd18ad4", + "outfile": null, + "outfile_hash": null, + "stdout": null, + "stdout_hash": null, + "stderr": "asr-test_type_mismatch_01-09e8af3.stderr", + "stderr_hash": "78ff11b22438e133b740e778063db612841fb15ef00f8599bdf8602c", + "returncode": 2 +} \ No newline at end of file diff --git a/tests/reference/asr-test_type_mismatch_01-09e8af3.stderr b/tests/reference/asr-test_type_mismatch_01-09e8af3.stderr new file mode 100644 index 0000000000..3dc100fad6 --- /dev/null +++ b/tests/reference/asr-test_type_mismatch_01-09e8af3.stderr @@ -0,0 +1,5 @@ +semantic error: Type mismatch in shorthand operator, the types must be compatible + --> tests/errors/test_type_mismatch_01.py:6:5 + | +6 | a /= b + | ^ ^ type mismatch ('i32' and 'f64') diff --git a/tests/tests.toml b/tests/tests.toml index 1755dcb5e8..206fce824a 100644 --- a/tests/tests.toml +++ b/tests/tests.toml @@ -63,10 +63,6 @@ asr = true cpp = true wat = true -[[test]] -filename = "errors/type_mismatch.py" -asr = true - [[test]] filename = "expr4.py" ast = true @@ -932,6 +928,14 @@ asr = true filename = "errors/test_import_02.py" asr = true +[[test]] +filename = "errors/type_mismatch.py" +asr = true + +[[test]] +filename = "errors/test_type_mismatch_01.py" +asr = true + # tests/tokens/errors [[test]]