# Copyright 2019-2021 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
    return -1
}

if { ![runto_main] } then {
    fail "can't run to main"
    return 0
}

gdb_breakpoint [gdb_get_line_number "Break Here"]
gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*"

gdb_test "p z1" " = 1.5 \\+ 4.5i"
gdb_test "p z2" " = 2.5 \\+ -5.5i"
gdb_test "p z3" " = 3.5 \\+ 6.5i"

gdb_test "ptype z1" " = complex double"
gdb_test "ptype z2" " = complex float"
gdb_test "ptype z3" " = complex long double"

with_test_prefix "double imaginary" {
    gdb_test "p \$_cimag (z1)" " = 4.5"
    gdb_test "ptype \$" " = double"
}

with_test_prefix "float imaginary" {
    gdb_test "p \$_cimag (z2)" " = -5.5"
    gdb_test "ptype \$" " = float"
}

with_test_prefix "long double imaginary" {
    gdb_test "p \$_cimag (z3)" " = 6.5"
    gdb_test "ptype \$" " = long double"
}

with_test_prefix "double real" {
    gdb_test "p \$_creal (z1)" " = 1.5"
    gdb_test "ptype \$" " = double"
}

with_test_prefix "float real" {
    gdb_test "p \$_creal (z2)" " = 2.5"
    gdb_test "ptype \$" " = float"
}

with_test_prefix "long double real" {
    gdb_test "p \$_creal (z3)" " = 3.5"
    gdb_test "ptype \$" " = long double"
}

gdb_test "p \$_cimag (d1)" "expected a complex number"
gdb_test "p \$_cimag (f1)" "expected a complex number"
gdb_test "p \$_cimag (i1)" "expected a complex number"

gdb_test "p \$_creal (d1)" "expected a complex number"
gdb_test "p \$_creal (f1)" "expected a complex number"
gdb_test "p \$_creal (i1)" "expected a complex number"

#
# General complex number tests.
#

gdb_test "print 23 + 7i" " = 23 \\+ 7i"
gdb_test "print 23.125f + 7i" " = 23.125 \\+ 7i"
gdb_test "print 23 + 7.25fi" " = 23 \\+ 7.25i"
gdb_test "print (23 + 7i) + (17 + 10i)" " = 40 \\+ 17i"
gdb_test "print 23 + -7i" " = 23 \\+ -7i"
gdb_test "print 23 - 7i" " = 23 \\+ -7i"

gdb_test "print -(23 + 7i)" " = -23 \\+ -7i"
gdb_test "print +(23 + 7i)" " = 23 \\+ 7i"
gdb_test "print ~(23 + 7i)" " = 23 \\+ -7i"

gdb_test "print (5 + 5i) * (2 + 2i)" " = 0 \\+ 20i"

gdb_test "print (5 + 7i) == (5 + 7i)" " = 1"
gdb_test "print (5 + 7i) == (8 + 7i)" " = 0"
gdb_test "print (5 + 7i) == (5 + 92i)" " = 0"
gdb_test "print (5 + 7i) != (5 + 7i)" " = 0"
gdb_test "print (5 + 7i) != (8 + 7i)" " = 1"
gdb_test "print (5 + 7i) != (5 + 92i)" " = 1"

gdb_test "print (20 - 4i) / (3 + 2i)" " = 4 \\+ -4i"

gdb_test "print (_Complex int) 4" " = 4 \\+ 0i"
gdb_test "print (_Complex float) 4.5" " = 4.5 \\+ 0i"
gdb_test "ptype __complex__ short" " = _Complex short"
gdb_test "print (_Complex int) (23.75 + 8.88i)" " = 23 \\+ 8i"

set re_reject_arg "Argument to complex arithmetic operation not supported\\."
gdb_test "print (void *)0 + 5i" $re_reject_arg
gdb_test "print (_Decimal32)0 + 5i" $re_reject_arg

# Set language to c++.  Avoid warning by not having current frame.
clean_restart
gdb_test_no_output "set language c++"

# C++ type tests.
gdb_test "print (bool)1 + 1i" " = 1 \\+ 1i"
