From 1413ab95e5b8a3a2bfefc893bfe4aa85bcfd217f Mon Sep 17 00:00:00 2001 From: asm0dey Date: Fri, 30 Jun 2023 10:59:15 +0200 Subject: [PATCH] Updates --- .github/workflows/deploy.yml | 65 +++++++ .github/workflows/gradle.yml | 52 +++++ .gitignore | 3 + build.gradle.kts | 40 ++-- convention-plugins/build.gradle.kts | 11 ++ .../kotlin/convention.publication.gradle.kts | 64 ++++++ gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 62076 -> 61624 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 11 +- gradlew.bat | 184 +++++++++--------- local.properties | 1 - renovate.json | 6 + settings.gradle.kts | 6 +- src/androidUnitTest/kotlin/FibiTest.kt | 9 + src/iosArm64Test/kotlin/FibiTest.kt | 9 + .../kotlin/firstElement.kt | 2 + src/iosSimulatorArm64Test/kotlin/FibiTest.kt | 9 + src/jvmTest/kotlin/FibiTest.kt | 9 + src/linuxX64Main/kotlin/fibiprops.kt | 2 + src/linuxX64Test/kotlin/FibiTest.kt | 9 + 21 files changed, 377 insertions(+), 121 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/gradle.yml create mode 100644 convention-plugins/build.gradle.kts create mode 100644 convention-plugins/src/main/kotlin/convention.publication.gradle.kts delete mode 100644 local.properties create mode 100644 renovate.json create mode 100644 src/androidUnitTest/kotlin/FibiTest.kt create mode 100644 src/iosArm64Test/kotlin/FibiTest.kt create mode 100644 src/iosSimulatorArm64Main/kotlin/firstElement.kt create mode 100644 src/iosSimulatorArm64Test/kotlin/FibiTest.kt create mode 100644 src/jvmTest/kotlin/FibiTest.kt create mode 100644 src/linuxX64Main/kotlin/fibiprops.kt create mode 100644 src/linuxX64Test/kotlin/FibiTest.kt diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..f1f8e9a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,65 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Deploy to central + +on: workflow_dispatch + +permissions: + contents: read + +jobs: + build: + uses: ./.github/workflows/gradle.yml + deploy: + needs: build + strategy: + matrix: + include: + - target: publishKotlinMultiplatformPublicationToSonatypeRepository + os: macos-latest + - target: publishIosArm64PublicationToSonatypeRepository + os: macos-latest + - target: publishIosSimulatorArm64PublicationToSonatypeRepository + os: macos-latest + - target: publishAndroidDebugPublicationToSonatypeRepository + os: ubuntu-latest + - target: publishAndroidReleasePublicationToSonatypeRepository + os: ubuntu-latest + - target: publishJvmPublicationToSonatypeRepository + os: ubuntu-latest + - target: publishLinuxX64PublicationToSonatypeRepository + os: ubuntu-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + with: + path: | + ~/.konan + key: ${{ runner.os }}-${{ hashFiles('**/.lock') }} + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.OSSRH_GPG_SECRET_KEY }} + passphrase: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Gradle publish + uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 + with: + arguments: | + ${{ matrix.target }} + closeSonatypeStagingRepository + -Psigning.gnupg.passphrase=${{secrets.OSSRH_GPG_SECRET_KEY_PASSWORD}} + -Psigning.gnupg.keyName=${{secrets.OSSRH_GPG_SECRET_KEY_ID}} + -PsonatypeUsername=${{secrets.OSSRH_USERNAME}} + -PsonatypePassword=${{secrets.OSSRH_PASSWORD}} + diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 0000000..cc67a83 --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,52 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + workflow_call: + +permissions: + contents: read + +jobs: + build: + strategy: + matrix: + include: + - target: iosSimulatorArm64Test + os: macos-latest + - target: jvmTest + os: ubuntu-latest + - target: linuxX64Test + os: ubuntu-latest + - target: testDebugUnitTest + os: ubuntu-latest + - target: testReleaseUnitTest + os: ubuntu-latest + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + with: + path: | + ~/.konan + key: ${{ runner.os }}-${{ hashFiles('**/.lock') }} + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 + with: + arguments: ${{ matrix.target }} diff --git a/.gitignore b/.gitignore index ada6755..9538981 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /.idea/ /build/ /.gradle/ +/convention-plugins/.gradle/ +/convention-plugins/build/ +.envrc diff --git a/build.gradle.kts b/build.gradle.kts index 91a2465..a698bd3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,17 +1,22 @@ +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi + plugins { - kotlin("multiplatform") version "1.8.22" - id("com.android.library") version "7.4.1" + kotlin("multiplatform") version "1.9.0" + id("com.android.library") + id("convention.publication") } -group = "me.user" -version = "1.0-SNAPSHOT" +group = "com.github.asm0dey" +version = "0.0.1.2" repositories { google() mavenCentral() } +@OptIn(ExperimentalKotlinGradlePluginApi::class) kotlin { + targetHierarchy.default() jvm { compilations.all { kotlinOptions.jvmTarget = "1.8" @@ -20,7 +25,9 @@ kotlin { useJUnitPlatform() } } - android() + android { + publishLibraryVariants("release", "debug") + } iosArm64 { binaries { framework { @@ -28,28 +35,25 @@ kotlin { } } } + iosSimulatorArm64() { + binaries { + framework { + baseName = "library" + } + } + } + linuxX64() sourceSets { - val commonMain by getting val commonTest by getting { dependencies { implementation(kotlin("test")) } } - val jvmMain by getting - val jvmTest by getting - val androidMain by getting - val androidUnitTest by getting { - dependencies { - implementation("junit:junit:4.13.2") - } - } - val iosArm64Main by getting - val iosArm64Test by getting } } android { - namespace = "me.user.library" + namespace = "com.github.asm0dey.dummylib" compileSdk = 33 defaultConfig { minSdk = 24 @@ -60,4 +64,4 @@ android { isMinifyEnabled = false } } -} \ No newline at end of file +} diff --git a/convention-plugins/build.gradle.kts b/convention-plugins/build.gradle.kts new file mode 100644 index 0000000..8f7d0ae --- /dev/null +++ b/convention-plugins/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + `kotlin-dsl` // Is needed to turn our build logic written in Kotlin into the Gradle Plugin +} + +repositories { + gradlePluginPortal() // To use 'maven-publish' and 'signing' plugins in our own plugin +} + +dependencies { + implementation("io.github.gradle-nexus.publish-plugin:io.github.gradle-nexus.publish-plugin.gradle.plugin:2.0.0-rc-1") +} \ No newline at end of file diff --git a/convention-plugins/src/main/kotlin/convention.publication.gradle.kts b/convention-plugins/src/main/kotlin/convention.publication.gradle.kts new file mode 100644 index 0000000..be922d6 --- /dev/null +++ b/convention-plugins/src/main/kotlin/convention.publication.gradle.kts @@ -0,0 +1,64 @@ +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.`maven-publish` +import org.gradle.kotlin.dsl.signing + +plugins { + `maven-publish` + signing + id("io.github.gradle-nexus.publish-plugin") +} + + +val javadocJar by tasks.registering(Jar::class) { + archiveClassifier.set("javadoc") +} + +nexusPublishing { + // Configure maven central repository + repositories { + sonatype() + } + + + // Configure all publications +} + +publishing { + publications.withType { + // Stub javadoc.jar artifact + artifact(javadocJar.get()) + + // Provide artifacts information requited by Maven Central + pom { + name.set("Dummy Kotlin Multiplatform library") + description.set("Dummy library to test deployment to Maven Central") + url.set("https://github.com/asm0dey/dummylib-multiplatform") + + licenses { + license { + name.set("MIT") + url.set("https://opensource.org/licenses/MIT") + } + } + developers { + developer { + id.set("asm0dey") + name.set("Pasha Finkelshteyn") + email.set("asm0dey@jetbrains.com") + } + } + scm { + url.set("https://github.com/asm0dey/dummylib-multiplatform") + } + } + } +} + +val gpgKeyId by extra { System.getenv("secrets.OSSRH_GPG_SECRET_KEY_ID") } +val gpgKey by extra { System.getenv("secrets.OSSRH_GPG_SECRET_KEY") } +val gpgKeyPassword by extra { System.getenv("secrets.OSSRH_GPG_SECRET_KEY_PASSWORD") } +signing { + useGpgCmd() + sign(publishing.publications) +} diff --git a/gradle.properties b/gradle.properties index ce90cbd..75ea504 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,3 +2,7 @@ kotlin.code.style=official kotlin.mpp.androidSourceSetLayoutVersion=2 android.useAndroidX=true org.gradle.jvmargs=-Xmx4096m +# Improves build time via enabling the gradle build cache +org.gradle.caching=true +org.gradle.configuration-cache=true + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a79e29d3e0ab67b14947c167a862655af9b..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 14488 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 delta 15004 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

)Amy!T=D<9s>cL>26bZ*7>5A+{(Jrw1C4u%GH zDza+xpEZ1z&cfdV<8K%qutE|JPOdmr~(h;ot@D;mjbxGnoGs{;zMw{|fIf zdJiY~KQ|z&i*_L8)xJYAw7QqU(S(1)aOL+U}g^hWO$AMVcqvP z@n_X%+BrEy&FEji?D?NIWZ Dke#Im diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5083229..4e86b92 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cb..65dcd68 100755 --- a/gradlew +++ b/gradlew @@ -85,6 +85,9 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -141,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -194,10 +197,6 @@ if "$cygwin" || "$msys" ; then done fi - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/local.properties b/local.properties deleted file mode 100644 index 1eda97a..0000000 --- a/local.properties +++ /dev/null @@ -1 +0,0 @@ -sdk.dir=/Users/Pavel.Finkelshteyn/Library/Android/sdk diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..1927fea --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ] +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index c18c79b..807f0a2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,10 +7,10 @@ pluginManagement { resolutionStrategy { eachPlugin { if (requested.id.namespace == "com.android") { - useModule("com.android.tools.build:gradle:7.3.1") + useModule("com.android.tools.build:gradle:7.4.1") } } } } -rootProject.name = "dummylib-kmm" - +rootProject.name = "dummylib-multiplatform" +includeBuild("convention-plugins") diff --git a/src/androidUnitTest/kotlin/FibiTest.kt b/src/androidUnitTest/kotlin/FibiTest.kt new file mode 100644 index 0000000..90e9a68 --- /dev/null +++ b/src/androidUnitTest/kotlin/FibiTest.kt @@ -0,0 +1,9 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class FibiTest { + @Test + fun `test 3rd element`(){ + assertEquals(3, fibi.take(3).last()) + } +} \ No newline at end of file diff --git a/src/iosArm64Test/kotlin/FibiTest.kt b/src/iosArm64Test/kotlin/FibiTest.kt new file mode 100644 index 0000000..2cb6493 --- /dev/null +++ b/src/iosArm64Test/kotlin/FibiTest.kt @@ -0,0 +1,9 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class FibiTest { + @Test + fun `test 3rd element`(){ + assertEquals(8, fibi.take(3).last()) + } +} \ No newline at end of file diff --git a/src/iosSimulatorArm64Main/kotlin/firstElement.kt b/src/iosSimulatorArm64Main/kotlin/firstElement.kt new file mode 100644 index 0000000..8fb1aa0 --- /dev/null +++ b/src/iosSimulatorArm64Main/kotlin/firstElement.kt @@ -0,0 +1,2 @@ +actual val firstElement: Int = 3 +actual val secondElement: Int = 4 \ No newline at end of file diff --git a/src/iosSimulatorArm64Test/kotlin/FibiTest.kt b/src/iosSimulatorArm64Test/kotlin/FibiTest.kt new file mode 100644 index 0000000..3f0ec74 --- /dev/null +++ b/src/iosSimulatorArm64Test/kotlin/FibiTest.kt @@ -0,0 +1,9 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class FibiTest { + @Test + fun `test 3rd element`(){ + assertEquals(7, fibi.take(3).last()) + } +} diff --git a/src/jvmTest/kotlin/FibiTest.kt b/src/jvmTest/kotlin/FibiTest.kt new file mode 100644 index 0000000..8c94f70 --- /dev/null +++ b/src/jvmTest/kotlin/FibiTest.kt @@ -0,0 +1,9 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class FibiTest { + @Test + fun `test 3rd element`(){ + assertEquals(5, fibi.take(3).last()) + } +} \ No newline at end of file diff --git a/src/linuxX64Main/kotlin/fibiprops.kt b/src/linuxX64Main/kotlin/fibiprops.kt new file mode 100644 index 0000000..9c84ba4 --- /dev/null +++ b/src/linuxX64Main/kotlin/fibiprops.kt @@ -0,0 +1,2 @@ +actual val firstElement: Int = 3 +actual val secondElement: Int = 5 \ No newline at end of file diff --git a/src/linuxX64Test/kotlin/FibiTest.kt b/src/linuxX64Test/kotlin/FibiTest.kt new file mode 100644 index 0000000..44802b7 --- /dev/null +++ b/src/linuxX64Test/kotlin/FibiTest.kt @@ -0,0 +1,9 @@ +import kotlin.test.Test +import kotlin.test.assertEquals + +class FibiTest { + @Test + fun `test 3rd element`(){ + assertEquals(8, fibi.take(3).last()) + } +}