Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'org.jetbrains.kotlin.jvm' version '2.2.10'
id 'org.jetbrains.kotlin.jvm' version '2.0.21'
}

test {
Expand Down
15 changes: 15 additions & 0 deletions src/main/kotlin/ru/otus/homework/Task1.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.otus.homework


/**
* Объяснение:
*
* @param first: Int,
* @param second: Int — обязательные аргументы.
* @param vararg numbers: Int — позволяет передавать неограниченное количество дополнительных аргументов типа Int.
* Если вызвать функцию без первых двух аргументов, будет ошибка компиляции, потому что они обязательны.
* Сумма вычисляется как сумма первых двух аргументов и суммы всех дополнительных аргументов
* с помощью функции расширения sum() класса [IntArray].
* */
fun sum(first: Int, second: Int, vararg numbers: Int) = first + second + numbers.sum()

18 changes: 18 additions & 0 deletions src/main/kotlin/ru/otus/homework/Task2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.homework

/**
* Объединяет переданные строки в одну строку.
*
* @param strings переменное количество строковых аргументов, подлежащих объединению
* @param separator необязательный разделительный символ между элементами,
* по умолчанию используется пробел (' ')
* @return новую строку, состоящую из объединения всех элементов массива strings с указанным разделителем
*
* Example usage:
* ```
* val result1 = joinStrings("Hello", "world") // Результат: Hello world
* val result2 = joinStrings("Kotlin", "is", "great", separator = '_') // Результат: Kotlin_is_great
* ```
*/
fun joinStrings(vararg strings: String, separator: Char = ' ') =
strings.joinToString(separator.toString())
31 changes: 31 additions & 0 deletions src/main/kotlin/ru/otus/homework/Task4.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ru.otus.homework

import java.lang.System.nanoTime

/**
* Функция, принимающая другую функцию в качестве аргумента и возвращающий
* время её выполнения в наносекундах.
*
* @param function Лямбда-функция, выполнение которой нужно замерить
* @return Время выполнения функции в наносекундах
*/
fun measureExecutionTime(function: () -> Any): Long {
val startTime = nanoTime()
function.invoke()
return nanoTime() - startTime
}

fun main() {
fun testFunction() {
var sum = 0L
for (i in 1..10_000) {
sum += i
print(" $sum")
}
}

val executionTime = measureExecutionTime(::testFunction)
println("\n" + "*".repeat(10))
println("Время выполнения функции: ${executionTime / 1_000_000.0} миллисекунд")
println("*".repeat(10))
}
16 changes: 16 additions & 0 deletions src/test/kotlin/ru/otus/homework/Task1Test.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.otus.homework

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class Task1Test {
@Test
fun onliExpectedArgs() = assertEquals(5, sum(3, 2))

@Test
fun argsAndVarargs() = assertEquals(26, sum(3, 2, 7, 9, 5))


@Test
fun argsAndZeroVarargs() = assertEquals(5, sum(3, 2, 0, 0, 0))
}
32 changes: 32 additions & 0 deletions src/test/kotlin/ru/otus/homework/Task2Test.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package ru.otus.homework

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class Task2Test {

/**
* Проверка случая, когда дополнительный разделитель не указан.
* Ожидается объединение строк пробелом.
*/
@Test
fun testDefaultSeparator() {
val expectedResult = "str1 str2 str3"
val actualResult = joinStrings("str1", "str2", "str3")

assertEquals(expectedResult, actualResult)
}

/**
* Проверка случая, когда задан специальный разделитель ','
* Ожидается объединение строк запятыми.
*/
@Test
fun testCustomCommaSeparator() {
val expectedResult = "str1,str2,str3"
val actualResult = joinStrings("str1", "str2", "str3", separator = ',')

assertEquals(expectedResult, actualResult)
}

}