diff --git a/build.gradle b/build.gradle index 0d54c35..3eeed76 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.10' + id 'org.jetbrains.kotlin.jvm' version '2.0.21' } test { diff --git a/src/main/kotlin/ru/otus/homework/Task1.kt b/src/main/kotlin/ru/otus/homework/Task1.kt new file mode 100644 index 0000000..7a57285 --- /dev/null +++ b/src/main/kotlin/ru/otus/homework/Task1.kt @@ -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() + diff --git a/src/main/kotlin/ru/otus/homework/Task2.kt b/src/main/kotlin/ru/otus/homework/Task2.kt new file mode 100644 index 0000000..dbe23c3 --- /dev/null +++ b/src/main/kotlin/ru/otus/homework/Task2.kt @@ -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()) diff --git a/src/main/kotlin/ru/otus/homework/Task4.kt b/src/main/kotlin/ru/otus/homework/Task4.kt new file mode 100644 index 0000000..f6d0ab4 --- /dev/null +++ b/src/main/kotlin/ru/otus/homework/Task4.kt @@ -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)) +} \ No newline at end of file diff --git a/src/test/kotlin/ru/otus/homework/Task1Test.kt b/src/test/kotlin/ru/otus/homework/Task1Test.kt new file mode 100644 index 0000000..0751319 --- /dev/null +++ b/src/test/kotlin/ru/otus/homework/Task1Test.kt @@ -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)) +} \ No newline at end of file diff --git a/src/test/kotlin/ru/otus/homework/Task2Test.kt b/src/test/kotlin/ru/otus/homework/Task2Test.kt new file mode 100644 index 0000000..5834d4b --- /dev/null +++ b/src/test/kotlin/ru/otus/homework/Task2Test.kt @@ -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) + } + +} \ No newline at end of file