Bom dia a todos
A função somatoria()
recebe uma Array<BigDecimal>
antes da função. Mas como eu faço quando o arquivo está em outra package, como chamá-lo?
Tentei de vários jeitos e não consegui: salario.somatoria()
, salarioBigDecimal.salario.somatoria()
, salarioBigDecimal.somatoria()
classes referidas:
private val salarioBigDecimal = SalarioBigDecimal()
private val salario = salarioBigDecimal.bigDecimalArrayOf("1500.80", "2050.09","8500.00", "3076.98","6780.00")
Código da classe do método:
package br.com.alura.arrays.salario
import java.math.BigDecimal
import java.math.MathContext
class SalarioBigDecimal {
fun bigDecimalArrayOf(vararg valores:String): Array<BigDecimal>{
return Array<BigDecimal>(valores.size){ i -> valores[i].toBigDecimal()}
}
fun calculaAumentoSalarial(salario: BigDecimal): BigDecimal {
if (salario < "5000.00".toBigDecimal()) {
return salario.add("500".toBigDecimal())
}
return salario.multiply("1.1".toBigDecimal()).round(MathContext.DECIMAL64).setScale(2)
}
fun Array<BigDecimal>.somatoria(): BigDecimal {
return this.reduce{acumulador,valor -> acumulador+valor}
}
}
classe de teste:
package br.com.alura.arrays.salario
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import java.math.BigDecimal
import java.math.MathContext
class SalarioBigDecimalTest{
private val salarioBigDecimal = SalarioBigDecimal()
private val salario = salarioBigDecimal.bigDecimalArrayOf("1500.80", "2050.09","8500.00", "3076.98","6780.00")
private val salarioComAumento = salario.map {
salario -> salarioBigDecimal.calculaAumentoSalarial(salario)
}.toTypedArray()
@Test
fun testaArrayDeBigDecimal(){
val salarios = Array<BigDecimal>(5) { BigDecimal.ZERO }
salarios[0]= "1500.80".toBigDecimal()
salarios[1]= "2050.09".toBigDecimal()
kotlin.test.assertEquals("[1500.80, 2050.09, 0, 0, 0]", salarios.contentToString())
}
@Test
fun testaArrayDeBigDecimalComFuncao() {
kotlin.test.assertEquals("[1500.80, 2050.09, 8500.00, 3076.98, 6780.00]", salario.contentToString())
}
@Test
fun testaMapdeArray(){
kotlin.test.assertEquals(
"[2000.80, 2550.09, 9350.00, 3576.98, 7458.00]",
salarioComAumento.contentToString()
)
}
@Test
fun testaSomatoriaComReduce(){
kotlin.test.assertEquals("21907.87".toBigDecimal(), salario.somatoria())
}
@Test
fun testaSomatoriaComReduceDepoisDoAumento(){
kotlin.test.assertEquals("24935.87".toBigDecimal(), salarioComAumento.somatoria())
}
@Test
fun testaSomatoriaComFold(){
val gastoInical = salarioComAumento.somatoria()
val gastoTotal = salarioComAumento.fold(gastoInical) { acumulador, salario ->
acumulador + (salario.multiply
(6.toBigDecimal())).round(MathContext.DECIMAL64).setScale(2)
}
kotlin.test.assertEquals("174551.09".toBigDecimal(), gastoTotal)
}
@Test
fun ordenaListaDeSalario(){
val salarioOrdenado = salarioComAumento.sorted().asReversed()
kotlin.test.assertEquals("[9350.00, 7458.00, 3576.98, 2550.09, 2000.80]", salarioOrdenado.toString())
}
}
Ps: para o código dar certo, tive que voltar o somatoria()
para o arquivo de teste