blob: a3681928a27963801757c2a872fa059503a16efd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package groovy.operator
import groovy.test.GroovyTestCase
/**
* Test Math Power Operation in Classic/New Groovy
*/
class PowerOperatorsTest extends GroovyTestCase {
void testConstantPowerOperation() {
assert 2**5 == 32
assert -2**5 == -32
assert 3**4 == 81
assert -3**4 == -81
assert 3**-4 == 3.power(-4)
assert -3**-4 == -3.power(-4)
assert 7**2 - 7 * 3 + 2 == 30 // 49 - 21 + 2 = 30
assert -7**2 - 7 * 3 + 2 == -68 // -49 - 21 + 2 = -68
assert -(7**2) - 7 * 3 + 2 == -68 // -49 - 21 + 2 = -68
assert (-7)**2 - 7 * 3 + 2 == 30 // 49 - 21 + 2 = 30
}
void testPowerOperation() {
def x = 9
--x
assert x == 8
println(--x)
assert x == 7
println(--x)
assert x == 6
println((--x)**3)
assert x == 5
assert (--x)**3 == 64
assert (-x**3) == -64
assert x == 4
assert (++x)**3 == 125
assert x == 5
assert (x++)**3 == 125
assert x == 6
println((x++)**3)
assert x == 7
println(x)
println("${x**2}")
println("${-x**2}")
assert x == 7
println("${(--x)**2}")
assert x == 6
assert (--x)**2 + x * 2 - 1 == 34 // 5**2 + 5*2 - 1 = 34
assert x == 5
assert (x--)**2 + x * 2 - 1 == 32 // 5**2 + 4*2 - 1 = 32
assert x == 4
}
void testConstantPowerAssignmentOperation() {
def x = 5
x **= 2
assert x == 25
assert x**2 == 625
assert -x**2 != 625
assert -x**2 == -625
}
void testPowerAssignmentOperation() {
def x = 5
def y = 2
x **= y
assert x == 25
assert x**y == 625
assert x**-1 == 1 / 25
assert x**-y == 1 / 625
assert x**-y == x**(-y)
}
void testPowerConversions() {
assert (2**5).class == Integer
assert (2l**5).class == Long
assert (2.0d**5).class == Integer
assert (2.1d**5).class == Double
assert (new BigInteger("2")**5).class == BigInteger
assert (new BigDecimal("2")**5).class == BigDecimal
assert (2**-1).class == Double
assert (2l**-1).class == Double
assert (2.0d**-1).class == Double
assert (new BigInteger("2")**-1).class == Double
assert (new BigDecimal("2")**-1).class == Double
assert (2**31).class == BigInteger
assert (2l**63).class == BigInteger
assert (2**31) == new BigInteger("2").pow(31)
assert (2l**63) == new BigInteger("2").pow(63)
}
}