commit fb57e2e8310b792da8cfd4b711c48db445641ac5 Author: Christian Lincoln Date: Fri Mar 13 12:11:24 2026 +0000 Initial. diff --git a/kotlin-collections-skeleton/.gradle/8.10/checksums/checksums.lock b/kotlin-collections-skeleton/.gradle/8.10/checksums/checksums.lock new file mode 100644 index 0000000..fa3b05f Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/checksums/checksums.lock differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/checksums/md5-checksums.bin b/kotlin-collections-skeleton/.gradle/8.10/checksums/md5-checksums.bin new file mode 100644 index 0000000..7fbefc6 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/checksums/md5-checksums.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/checksums/sha1-checksums.bin b/kotlin-collections-skeleton/.gradle/8.10/checksums/sha1-checksums.bin new file mode 100644 index 0000000..b36fc7e Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/checksums/sha1-checksums.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/dependencies-accessors/gc.properties b/kotlin-collections-skeleton/.gradle/8.10/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.bin b/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.bin new file mode 100644 index 0000000..32a2cee Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.lock b/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.lock new file mode 100644 index 0000000..5444e33 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/executionHistory/executionHistory.lock differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/fileChanges/last-build.bin b/kotlin-collections-skeleton/.gradle/8.10/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/fileChanges/last-build.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.bin b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.bin new file mode 100644 index 0000000..5ae52fa Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.lock b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.lock new file mode 100644 index 0000000..255eb2f Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/fileHashes.lock differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/fileHashes/resourceHashesCache.bin b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..570e1a1 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/8.10/fileHashes/resourceHashesCache.bin differ diff --git a/kotlin-collections-skeleton/.gradle/8.10/gc.properties b/kotlin-collections-skeleton/.gradle/8.10/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-collections-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..e0dde95 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/kotlin-collections-skeleton/.gradle/buildOutputCleanup/cache.properties b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..f808a58 --- /dev/null +++ b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Thu Mar 12 09:10:59 GMT 2026 +gradle.version=8.10 diff --git a/kotlin-collections-skeleton/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..b0a2ea6 Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/kotlin-collections-skeleton/.gradle/file-system.probe b/kotlin-collections-skeleton/.gradle/file-system.probe new file mode 100644 index 0000000..21777ca Binary files /dev/null and b/kotlin-collections-skeleton/.gradle/file-system.probe differ diff --git a/kotlin-collections-skeleton/.gradle/vcs-1/gc.properties b/kotlin-collections-skeleton/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-collections-skeleton/.idea/.gitignore b/kotlin-collections-skeleton/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/kotlin-collections-skeleton/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/kotlin-collections-skeleton/.idea/compiler.xml b/kotlin-collections-skeleton/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/kotlin-collections-skeleton/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kotlin-collections-skeleton/.idea/gradle.xml b/kotlin-collections-skeleton/.idea/gradle.xml new file mode 100644 index 0000000..944b712 --- /dev/null +++ b/kotlin-collections-skeleton/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/kotlin-collections-skeleton/.idea/kotlinc.xml b/kotlin-collections-skeleton/.idea/kotlinc.xml new file mode 100644 index 0000000..9b361e3 --- /dev/null +++ b/kotlin-collections-skeleton/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/kotlin-collections-skeleton/.idea/misc.xml b/kotlin-collections-skeleton/.idea/misc.xml new file mode 100644 index 0000000..81d2261 --- /dev/null +++ b/kotlin-collections-skeleton/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kotlin-collections-skeleton/build.gradle b/kotlin-collections-skeleton/build.gradle new file mode 100644 index 0000000..66fccab --- /dev/null +++ b/kotlin-collections-skeleton/build.gradle @@ -0,0 +1,52 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +buildscript { + ext.kotlin_version = "2.0.21" + ext.jvm_version = 21 + ext.kotlinter_version = "3.15.0" + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id 'application' + id 'org.jetbrains.kotlin.jvm' version "$kotlin_version" + id 'org.jmailen.kotlinter' version "$kotlinter_version" +} + +group = 'uk.ac.ic.doc' +version = '1.0.0' + +description = """Kotlin Collections""" + +tasks.withType(KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "$jvm_version" + freeCompilerArgs = ["-Xjvm-default=all-compatibility"] + } +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(jvm_version)) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + testImplementation 'junit:junit:4.13.2' + testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" +} + +test { + include "**/*Tests.class" + testLogging { + events "PASSED", "FAILED", "SKIPPED" + } +} diff --git a/kotlin-collections-skeleton/build/classes/java/main/collections/ImperialPair.class b/kotlin-collections-skeleton/build/classes/java/main/collections/ImperialPair.class new file mode 100644 index 0000000..133d61f Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/java/main/collections/ImperialPair.class differ diff --git a/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$1.class b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$1.class new file mode 100644 index 0000000..63091a9 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$Node.class b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$Node.class new file mode 100644 index 0000000..428cfc9 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava$Node.class differ diff --git a/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava.class b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava.class new file mode 100644 index 0000000..b689905 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/java/main/collections/SinglyLinkedListJava.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/META-INF/kotlin-collections-skeleton.kotlin_module b/kotlin-collections-skeleton/build/classes/kotlin/main/META-INF/kotlin-collections-skeleton.kotlin_module new file mode 100644 index 0000000..ceb6fc0 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/META-INF/kotlin-collections-skeleton.kotlin_module differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/Hashmap.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/Hashmap.class new file mode 100644 index 0000000..e3e03f7 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/Hashmap.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/HashmapConstantsKt.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/HashmapConstantsKt.class new file mode 100644 index 0000000..3d6ba22 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/HashmapConstantsKt.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableList.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableList.class new file mode 100644 index 0000000..c54e4de Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableList.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$DefaultImpls.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$DefaultImpls.class new file mode 100644 index 0000000..5ab87f2 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$DefaultImpls.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$Entry.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$Entry.class new file mode 100644 index 0000000..11eaa3c Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap$Entry.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap.class new file mode 100644 index 0000000..8a3f21f Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ImperialMutableMap.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList$ResizingArrayListIterator.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList$ResizingArrayListIterator.class new file mode 100644 index 0000000..d152f59 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList$ResizingArrayListIterator.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList.class new file mode 100644 index 0000000..a84e339 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/ResizingArrayList.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$Node.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$Node.class new file mode 100644 index 0000000..be22528 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$Node.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$iterator$1.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$iterator$1.class new file mode 100644 index 0000000..2d56ef4 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList$iterator$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList.class new file mode 100644 index 0000000..130c774 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/SinglyLinkedList.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/main/collections/StripedHashmap.class b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/StripedHashmap.class new file mode 100644 index 0000000..436f52f Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/main/collections/StripedHashmap.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/META-INF/kotlin-collections-skeleton_test.kotlin_module b/kotlin-collections-skeleton/build/classes/kotlin/test/META-INF/kotlin-collections-skeleton_test.kotlin_module new file mode 100644 index 0000000..f68a723 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/META-INF/kotlin-collections-skeleton_test.kotlin_module differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ExceptionMonitoringThread.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ExceptionMonitoringThread.class new file mode 100644 index 0000000..87ce91c Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ExceptionMonitoringThread.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapCollidingStringInt$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapCollidingStringInt$1.class new file mode 100644 index 0000000..e590446 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapCollidingStringInt$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapStringInt$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapStringInt$1.class new file mode 100644 index 0000000..599ae9c Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests$emptyCustomMutableMapStringInt$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests.class new file mode 100644 index 0000000..b6e7ed7 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/HashmapTests.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$CollidingString.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$CollidingString.class new file mode 100644 index 0000000..db751a1 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$CollidingString.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting (collision prone)$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting (collision prone)$$inlined$sortedBy$1.class new file mode 100644 index 0000000..240a779 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting (collision prone)$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting$$inlined$sortedBy$1.class new file mode 100644 index 0000000..b45d768 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting (collision prone)$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting (collision prone)$$inlined$sortedBy$1.class new file mode 100644 index 0000000..a8da91e Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting (collision prone)$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting$$inlined$sortedBy$1.class new file mode 100644 index 0000000..806902a Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some putting, removing and setting$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting (collision prone)$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting (collision prone)$$inlined$sortedBy$1.class new file mode 100644 index 0000000..71902cc Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting (collision prone)$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting$$inlined$sortedBy$1.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting$$inlined$sortedBy$1.class new file mode 100644 index 0000000..7efb156 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent$test entries after some setting$$inlined$sortedBy$1.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent.class new file mode 100644 index 0000000..f504d5a Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ImperialMutableMapTestsParent.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTests.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTests.class new file mode 100644 index 0000000..2a815b9 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTests.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTestsKt.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTestsKt.class new file mode 100644 index 0000000..4a13777 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ResizingArrayListTestsKt.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListExtraTests.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListExtraTests.class new file mode 100644 index 0000000..b56bf9e Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListExtraTests.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTests.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTests.class new file mode 100644 index 0000000..c1483ae Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTests.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTestsKt.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTestsKt.class new file mode 100644 index 0000000..aba2297 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListJavaTestsKt.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTests.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTests.class new file mode 100644 index 0000000..1362938 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTests.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTestsKt.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTestsKt.class new file mode 100644 index 0000000..2d2aa92 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/SinglyLinkedListTestsKt.class differ diff --git a/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ThreadSafeImperialMutableMapTestsParent.class b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ThreadSafeImperialMutableMapTestsParent.class new file mode 100644 index 0000000..ed69974 Binary files /dev/null and b/kotlin-collections-skeleton/build/classes/kotlin/test/collections/ThreadSafeImperialMutableMapTestsParent.class differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..1b92f2f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..48c7061 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..0de468d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..fa606b6 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..1ed769d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..24d8efb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..ad92305 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..d503b5a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..256e1c4 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..46ca96e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..f4a2e77 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..d560ddc Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..d503b5a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..256e1c4 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..15f8699 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..f4a2e77 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream new file mode 100644 index 0000000..2c02d20 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len new file mode 100644 index 0000000..30b8abe Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at new file mode 100644 index 0000000..f7d5c75 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i new file mode 100644 index 0000000..78e7a93 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..4d4c2a5 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..4283470 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..7b79156 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..a363176 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..2dd5ab1 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..f2690bb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream new file mode 100644 index 0000000..2c02d20 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len new file mode 100644 index 0000000..30b8abe Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at new file mode 100644 index 0000000..46d6744 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i new file mode 100644 index 0000000..78e7a93 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..9fdcd2d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..5e85f2a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..c7687d8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..a541356 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values new file mode 100644 index 0000000..30ffe27 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..f70915b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s new file mode 100644 index 0000000..17193d2 --- /dev/null +++ b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s @@ -0,0 +1 @@ +1+ \ No newline at end of file diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..7c75c8b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..f85c2fe Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..48c7061 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..0de468d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..fa606b6 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..a8a3bb6 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..24d8efb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab new file mode 100644 index 0000000..e8be7db Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream new file mode 100644 index 0000000..6603810 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len new file mode 100644 index 0000000..0764b5d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len new file mode 100644 index 0000000..93a595b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at new file mode 100644 index 0000000..16621a9 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i new file mode 100644 index 0000000..a94e990 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab new file mode 100644 index 0000000..0a9750e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream new file mode 100644 index 0000000..c9fc5ea Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len new file mode 100644 index 0000000..7420fef Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len new file mode 100644 index 0000000..9e27f73 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at new file mode 100644 index 0000000..340677b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i new file mode 100644 index 0000000..41f47ef Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..703ad20 --- /dev/null +++ b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +29 +0 \ No newline at end of file diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..65acc5c Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..8e9dece Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..e172951 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..817b326 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..b70d3ef Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..a0f2f21 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..ce1e85e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..fa194ba Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..a930d6b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..fa43224 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..7d49785 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i new file mode 100644 index 0000000..20619a7 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..382e789 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..6daaa55 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..0fcb858 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..dd78390 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..d792716 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..1580819 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..6dc2d3b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-collections-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..692d4f0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin b/kotlin-collections-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin new file mode 100644 index 0000000..bd050d9 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..b59abcb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..46db8f8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..30e2041 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..a586713 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..9cb1d6a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..0c1a8cd Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..69f9b60 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..703fabb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..791d079 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..4ca636f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..c61cd00 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..69f9b60 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..703fabb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..27a8e96 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..4ca636f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..0da822e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..6b7defb Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..79dbbda Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..8fe89d8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..3ec57b9 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..61c0c0d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab new file mode 100644 index 0000000..4054b29 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream new file mode 100644 index 0000000..7090e65 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len new file mode 100644 index 0000000..6f677df Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at new file mode 100644 index 0000000..864ab32 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i new file mode 100644 index 0000000..051f952 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..c6500e3 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..63dd086 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..cfea0fa Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..6f677df Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..64ce6d8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..63ca6ec Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..ad606ca Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..46db8f8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..30e2041 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..1034e6b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..9cb1d6a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab new file mode 100644 index 0000000..1c94a17 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream new file mode 100644 index 0000000..d7f1471 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len new file mode 100644 index 0000000..d7f482b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at new file mode 100644 index 0000000..2e87c7c Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i new file mode 100644 index 0000000..105778f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab new file mode 100644 index 0000000..1f64dec Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream new file mode 100644 index 0000000..79108ff Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len new file mode 100644 index 0000000..b730b19 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len new file mode 100644 index 0000000..93a595b Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at new file mode 100644 index 0000000..331e03e Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i new file mode 100644 index 0000000..ac35a50 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..c7c4318 --- /dev/null +++ b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +16 +0 \ No newline at end of file diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..55649ee Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..99013a8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..a69c53f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..817b326 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..bd7303f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..4190f58 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..e442fec Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..7f88049 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..c0f177d Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..9911af5 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..3c2232f Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i new file mode 100644 index 0000000..242a9b6 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..bc82a83 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..cc70dd8 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..fcecc73 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..a7b93bc Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..a966d69 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..d46fb10 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..cba0dc7 Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..df5a89a Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin new file mode 100644 index 0000000..51089ec Binary files /dev/null and b/kotlin-collections-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin differ diff --git a/kotlin-collections-skeleton/build/libs/kotlin-collections-skeleton-1.0.0.jar b/kotlin-collections-skeleton/build/libs/kotlin-collections-skeleton-1.0.0.jar new file mode 100644 index 0000000..320e90e Binary files /dev/null and b/kotlin-collections-skeleton/build/libs/kotlin-collections-skeleton-1.0.0.jar differ diff --git a/kotlin-collections-skeleton/build/reports/tests/test/classes/collections.ResizingArrayListTests.html b/kotlin-collections-skeleton/build/reports/tests/test/classes/collections.ResizingArrayListTests.html new file mode 100644 index 0000000..164c855 --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/classes/collections.ResizingArrayListTests.html @@ -0,0 +1,236 @@ + + + + + +Test results - Class collections.ResizingArrayListTests + + + + + +
+

Class collections.ResizingArrayListTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
29
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.150s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
concatenate with iterator0.001spassed
iterate over elements0.001spassed
iterator has next when empty0.006spassed
size is 00.004spassed
test add (Int)0.033spassed
test add (String)0.015spassed
test add (String) with zero initial capacity0.001spassed
test add at end (Int)0spassed
test add at end (String)0.006spassed
test add at start with resize (String)0.006spassed
test add in middle (Int)0.001spassed
test add in middle (String)0.003spassed
test add with resize (Int)0.001spassed
test add with resize (String)0.003spassed
test addAll at end0.003spassed
test addAll at index small0spassed
test addAll at start0.050spassed
test addAll small0.001spassed
test addAll to zero-capacity list0.001spassed
test clear (Int)0.001spassed
test clear (String)0spassed
test get (Int)0.002spassed
test get (String)0.002spassed
test resize in add-at-index if list is full (Int)0.002spassed
test resize in add-at-index if list is full (String)0.001spassed
test set (Int)0spassed
test set (String)0spassed
test toString empty (Int)0.005spassed
test toString empty (String)0.001spassed
+
+
+ +
+ + diff --git a/kotlin-collections-skeleton/build/reports/tests/test/css/base-style.css b/kotlin-collections-skeleton/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/kotlin-collections-skeleton/build/reports/tests/test/css/style.css b/kotlin-collections-skeleton/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/kotlin-collections-skeleton/build/reports/tests/test/index.html b/kotlin-collections-skeleton/build/reports/tests/test/index.html new file mode 100644 index 0000000..f020c14 --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
29
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.150s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+collections +29000.150s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+collections.ResizingArrayListTests +29000.150s100%
+
+
+ +
+ + diff --git a/kotlin-collections-skeleton/build/reports/tests/test/js/report.js b/kotlin-collections-skeleton/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/kotlin-collections-skeleton/build/reports/tests/test/packages/collections.html b/kotlin-collections-skeleton/build/reports/tests/test/packages/collections.html new file mode 100644 index 0000000..f64f0e0 --- /dev/null +++ b/kotlin-collections-skeleton/build/reports/tests/test/packages/collections.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package collections + + + + + +
+

Package collections

+ +
+ + + + + +
+
+ + + + + + + +
+
+
29
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.150s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+ResizingArrayListTests +29000.150s100%
+
+
+ +
+ + diff --git a/kotlin-collections-skeleton/build/test-results/test/TEST-collections.ResizingArrayListTests.xml b/kotlin-collections-skeleton/build/test-results/test/TEST-collections.ResizingArrayListTests.xml new file mode 100644 index 0000000..81aeaaa --- /dev/null +++ b/kotlin-collections-skeleton/build/test-results/test/TEST-collections.ResizingArrayListTests.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kotlin-collections-skeleton/build/test-results/test/binary/output.bin b/kotlin-collections-skeleton/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-collections-skeleton/build/test-results/test/binary/output.bin.idx b/kotlin-collections-skeleton/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-collections-skeleton/build/test-results/test/binary/output.bin.idx differ diff --git a/kotlin-collections-skeleton/build/test-results/test/binary/results.bin b/kotlin-collections-skeleton/build/test-results/test/binary/results.bin new file mode 100644 index 0000000..499a029 Binary files /dev/null and b/kotlin-collections-skeleton/build/test-results/test/binary/results.bin differ diff --git a/kotlin-collections-skeleton/build/tmp/compileJava/previous-compilation-data.bin b/kotlin-collections-skeleton/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..358adf1 Binary files /dev/null and b/kotlin-collections-skeleton/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/kotlin-collections-skeleton/build/tmp/jar/MANIFEST.MF b/kotlin-collections-skeleton/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/kotlin-collections-skeleton/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.jar b/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..a4b76b9 Binary files /dev/null and b/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.jar differ diff --git a/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.properties b/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9355b41 --- /dev/null +++ b/kotlin-collections-skeleton/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kotlin-collections-skeleton/gradlew b/kotlin-collections-skeleton/gradlew new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ b/kotlin-collections-skeleton/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +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=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + 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, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin-collections-skeleton/gradlew.bat b/kotlin-collections-skeleton/gradlew.bat new file mode 100644 index 0000000..9b42019 --- /dev/null +++ b/kotlin-collections-skeleton/gradlew.bat @@ -0,0 +1,94 @@ +@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 +@rem SPDX-License-Identifier: Apache-2.0 +@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. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +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/kotlin-collections-skeleton/src/main/java/collections/ImperialPair.java b/kotlin-collections-skeleton/src/main/java/collections/ImperialPair.java new file mode 100644 index 0000000..e04598b --- /dev/null +++ b/kotlin-collections-skeleton/src/main/java/collections/ImperialPair.java @@ -0,0 +1,19 @@ +package collections; + +public class ImperialPair { + private final S first; + private final T second; + + public ImperialPair(S first, T second) { + this.first = first; + this.second = second; + } + + public S getFirst() { + return first; + } + + public T getSecond() { + return second; + } +} diff --git a/kotlin-collections-skeleton/src/main/java/collections/SinglyLinkedListJava.java b/kotlin-collections-skeleton/src/main/java/collections/SinglyLinkedListJava.java new file mode 100644 index 0000000..1930205 --- /dev/null +++ b/kotlin-collections-skeleton/src/main/java/collections/SinglyLinkedListJava.java @@ -0,0 +1,198 @@ +package collections; + +import org.jetbrains.annotations.NotNull; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +public final class SinglyLinkedListJava implements ImperialMutableList { + + private static class Node { + T element; + Node next; + + Node(T element, Node next) { + this.element = element; + this.next = next; + } + + Node(T element) { + this.element = element; + this.next = null; + } + } + + private int size = 0; + + private Node head = null; + + @Override + public int getSize() { + return size; + } + + @Override + public String toString() { + final StringBuilder result = new StringBuilder(); + result.append("["); + Node current = head; + boolean first = true; + while (current != null) { + if (!first) { + result.append(", "); + } + first = false; + result.append(current.element); + current = current.next; + } + result.append("]"); + return result.toString(); + } + + @NotNull + @Override + public T get(int index) { + checkIndexInBounds(index); + Node current = head; + for (int i = 1; i newNode = new Node<>(element, pair.getSecond()); + if (pair.getFirst() == null) { + head = newNode; + } else { + pair.getSecond().next = newNode; + } + } + + @Override + public void clear() { + head = null; + size = 0; + } + + @Override + public boolean contains(T element) { + var current = head; + while (current != null) { + if (current.element == element) { + return true; + } + current = current.next; + } + return false; + } + + @Override + public T removeAt(int index) { + checkIndexInBounds(index); + var pair = traverseTo(index); + var result = pair.getSecond().element; + unlink(pair.getFirst(), pair.getSecond()); + return result; + } + + @Override + public boolean remove(T element) { + Node previous = null; + Node current = head; + while (current != null) { + if (current.element == element) { + unlink(previous, current); + return true; + } + previous = current; + current = current.next; + } + return false; + } + + @Override + public T set(int index, T element) { + checkIndexInBounds(index); + Node current = head; + for (int i = 0;i other) { + checkIndexInBounds(index, true); + val iterator = other.iterator(); + val start = Node(iterator.next()); + var end = start; + while (iterator.hasNext()) { + end.next = Node(iterator.next()); + end = end.next!!; + } + if (index == 0) { + end.next = head; + head = start; + } else { + val (previous, current) = traverseTo(index); + assert(previous != null); + previous!!.next = start; + end.next = current; + } + size += other.size; + } + + @NotNull + @Override + public Iterator iterator() { + return new Iterator() { + // TODO: you need to populate this anonymous class, including implementing its methods. + + @Override + public boolean hasNext() { + throw new RuntimeException("TODO: you need to implement this method."); + } + + @Override + public T next() { + throw new RuntimeException("TODO: you need to implement this method."); + } + }; + } + + private void checkIndexInBounds(int index, boolean inclusive) { + if (index < 0 || index >= (inclusive ? size + 1 : size)) { + throw new IndexOutOfBoundsException(); + } + } + + private void checkIndexInBounds(int index) { + checkIndexInBounds(index, false); + } + + private ImperialPair, Node> traverseTo(int index) { + Node previous = null; + Node current = head; + for (int i = 0; i < index; i++) { + previous = current; + current = current.next; + } + return new ImperialPair<>(previous, current); + } + + private void unlink(Node previous, Node current) { + if (previous == null) { + head = current.next; + } else { + previous.next = current.next; + } + size--; + } +} diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/Hashmap.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/Hashmap.kt new file mode 100644 index 0000000..d9a34f9 --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/Hashmap.kt @@ -0,0 +1,84 @@ +package collections + +class Hashmap( + private val bucketFactory: () -> Bucket, +) : ImperialMutableMap { + + // Problem: TODO - briefly describe the problem you have identified. + // Solution: TODO - briefly explain how you have solved this problem. + // + // Problem: TODO - briefly describe the problem you have identified. + // Solution: TODO - briefly explain how you have solved this problem. + // + // TODO - add further Problem/Solution entries for other problems that you identify. + + var buckets: Array> = Array(16) { bucketFactory() } + + override var size: Int = 0 + + // The iterator implementation works by putting all entries of the map into a list, and then returns an iterator to + // this list. This is simpler than the "on demand" iterator that you implemented during a lab exercise on hashmaps. + // This simpler approach is intentional here; it is not one of the problems you are supposed to identify. + override fun iterator(): Iterator> = helperMethod().iterator() + + override fun put(key: K, value: V): V? { + val bucket = key.bucket() + for (i in 0.. buckets.size * MAX_LOAD_FACTOR) { + resize() + } + return result + } + } + bucket.add(0, ImperialMutableMap.Entry(key, value)) + size++ + return null + } + + override fun get(key: K): V? { + for (entry in key.bucket()) { + if (entry.key == key) { + return entry.value + } + } + return null + } + + override fun remove(key: K): V? { + val bucket = key.bucket() + for ((index, entry) in bucket.withIndex()) { + if (entry.key == key) { + val result = entry.value + bucket.removeAt(index) + return result + } + } + return null + } + + fun K.bucketIndex(): Int = Math.floorMod(hashCode(), buckets.size) + + fun K.bucket(): Bucket = buckets[bucketIndex()] + + fun resize() { + val entries = helperMethod() + buckets = Array(buckets.size * 2) { bucketFactory() } + entries.forEach { + put(it.key, it.value) + } + } + + fun helperMethod(): SinglyLinkedList> { + val entries = SinglyLinkedList>() + for (bucket in buckets) { + for (entry in bucket) { + entries.add(0, entry) + } + } + return entries + } +} diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/HashmapConstants.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/HashmapConstants.kt new file mode 100644 index 0000000..3d94f3e --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/HashmapConstants.kt @@ -0,0 +1,5 @@ +package collections + +typealias Bucket = ImperialMutableList> + +const val MAX_LOAD_FACTOR = 0.75 diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableList.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableList.kt new file mode 100644 index 0000000..4ff3dda --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableList.kt @@ -0,0 +1,45 @@ +package collections + +interface ImperialMutableList : Iterable { + + // Provides access to the number of elements in the list + val size: Int + + // Throws an IndexOutOfBoundsException if the given index is not in the range [0, size - 1]. Otherwise, returns the + // element at this index. + operator fun get(index: Int): T + + // Throws an IndexOutOfBoundsException if the given index is not in the range [0, size]. Otherwise, inserts the + // given element at this index, shifting any existing elements at or beyond this index so that they appear one + // place later in the list. If index == size then the element is inserted at the end of the list. + fun add(index: Int, element: T) + + // Removes all elements from the list. + fun clear() + + // Returns true if and only if the given element is contained in the list. + fun contains(element: T): Boolean + + // Throws an IndexOutOfBoundsException if the given index is not in the range [0, size - 1]. Otherwise, returns the + // element at this index of the list, while at the same time removing the element from the list. Existing elements + // at larger indices of the list are shifted so that they appear one place earlier in the list. + fun removeAt(index: Int): T + + // Searches the list for the first occurrence of the given element. If an occurrence is found, true is returned, + // this occurrence of the element is removed from the list and elements at larger list indices are shifted so that + // they appear one place earlier in the list. False is returned if no occurrence is found. + fun remove(element: T): Boolean + + // Throws an IndexOutOfBoundsException if the given index is not in the range [0, size - 1]. Otherwise, sets the + // element at this index to the given element and returns the element that was previously at this index. + operator fun set(index: Int, element: T): T + + // Throws an IndexOutOfBoundsException if the given index is not in the range [0, size]. Otherwise, adds the + // elements from "other" to this list, in order, starting at the given index. Any existing elements at or beyond + // this index are moved so that they appear after the newly-inserted elements. If index == size then the elements + // of "other" are inserted at the end of the receiving list. + fun addAll(index: Int, other: ImperialMutableList) + + // Returns an iterator that provides access to the elements of the list, in order. + override operator fun iterator(): Iterator +} diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableListUtilities.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableListUtilities.kt new file mode 100644 index 0000000..59dc556 --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableListUtilities.kt @@ -0,0 +1,5 @@ +package collections + +fun ImperialMutableList.removeAll(toRemove: ImperialMutableList) { + toRemove.forEach { remove(it) } +} \ No newline at end of file diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableMap.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableMap.kt new file mode 100644 index 0000000..95c88cc --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/ImperialMutableMap.kt @@ -0,0 +1,31 @@ +package collections + +interface ImperialMutableMap : Iterable> { + + data class Entry(val key: K, var value: V) + + // Yields the number of entries in the map. + val size: Int + + // Provides an iterator for traversing the entries of the map. This method is + // required by Iterable. + override operator fun iterator(): Iterator> + + // Returns the value at 'key', or null if there is no such value. + // This operator allows array-like indexing. + operator fun get(key: K): V? + + // Operator version of 'put' to allow array-like indexing. + operator fun set(key: K, value: V): V? = put(key, value) + + // Associates 'value' with 'key'. Returns the previous value associated with + // 'key', or null if there is no such previous value. + fun put(key: K, value: V): V? + + // Removes entry with key 'key' from the map if such an entry exists, returning + // the associated value if so. Otherwise, returns null. + fun remove(key: K): V? + + // Returns true if and only if there is some value associated with 'key' in the map. + fun contains(key: K): Boolean = get(key) != null +} diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/ResizingArrayList.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/ResizingArrayList.kt new file mode 100644 index 0000000..1f6ea82 --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/ResizingArrayList.kt @@ -0,0 +1,96 @@ +package collections + +class ResizingArrayList( + private var capacity: Int = 16, +): ImperialMutableList { + override var size = 0 + private set + private var elements: Array = arrayOfNulls(capacity) + init { + if (capacity < 0) throw IllegalArgumentException("Capacity must be positive") + } + + override fun get(index: Int): T { + if (index !in 0..(capacity) + elements.forEachIndexed { index,_ -> + newElements[index] = elements[index] + } + elements = newElements as Array + } + + override fun add(index: Int, element: T) { + if (index !in 0..size) + throw IndexOutOfBoundsException("Index: $index, Size: $size") + if (size == capacity) resize() + elements.copyInto(elements,index+1,index,size) + elements[index] = element + size++ + } + + override fun clear() { + elements.forEachIndexed { index,_ -> elements[index] = null } + size = 0 + } + + override fun contains(element: T) = elements.contains(element) + + override fun removeAt(index: Int): T { + if (index !in 0.. + if (value == element) return@find index + } + return null + } + + override fun remove(element: T): Boolean { + val index = find(element) + return index?.let { + removeAt(index) + true + } ?: false + } + + override fun set(index: Int, element: T): T { + if (index !in 0..) { + while (index + size + other.size !in 0..capacity) resize() + elements.copyInto(elements,index + other.size,index,size) + other.forEachIndexed { otherIndex,value -> elements[index + otherIndex] = value } + size += other.size + //other.toList().forEachIndexed { otherIndex,value -> add(index + otherIndex,value) } + } + + inner class ResizingArrayListIterator: Iterator { + private var index = 0 + override fun hasNext() = elements.size > index && elements[index] != null + override fun next(): T { + if (!hasNext()) throw NoSuchElementException() + return elements[index++]!! + } + } + + override fun iterator() = ResizingArrayListIterator() + + override fun toString() = "[${toList().joinToString(", ") { it.toString() }}]" +} \ No newline at end of file diff --git a/kotlin-collections-skeleton/src/main/kotlin/collections/SinglyLinkedList.kt b/kotlin-collections-skeleton/src/main/kotlin/collections/SinglyLinkedList.kt new file mode 100644 index 0000000..a7beb3b --- /dev/null +++ b/kotlin-collections-skeleton/src/main/kotlin/collections/SinglyLinkedList.kt @@ -0,0 +1,163 @@ +package collections + +class SinglyLinkedList : ImperialMutableList { + + private class Node(var element: T, var next: Node? = null) + + private var head: Node? = null + + override var size: Int = 0 + private set + + override fun toString(): String { + val result = StringBuilder() + result.append("[") + var current = head + var first = true + while (current != null) { + if (!first) { + result.append(", ") + } + first = false + result.append(current.element) + current = current.next + } + result.append("]") + return result.toString() + } + + override fun get(index: Int): T { + checkIndexInBounds(index) + var current: Node? = head + for (i in 0..?, current: Node?) = traverseTo(index) + val newNode = Node(element, current) + if (previous == null) { + head = newNode + } else { + previous.next = newNode + } + } + + override fun clear() { + head = null + size = 0 + } + + override fun contains(element: T): Boolean { + var current = head + while (current != null) { + if (current.element == element) { + return true + } + current = current.next + } + return false + } + + override fun removeAt(index: Int): T { + checkIndexInBounds(index) + val (previous: Node?, current: Node?) = traverseTo(index) + val result = current!!.element + unlink(previous, current) + return result + } + + override fun remove(element: T): Boolean { + var previous: Node? = null + var current: Node? = head + while (current != null) { + if (current.element == element) { + unlink(previous, current) + return true + } + previous = current + current = current.next + } + return false + } + + override fun set(index: Int, element: T): T { + checkIndexInBounds(index) + var current: Node? = head + for (i in 0..) { + checkIndexInBounds(index, true) + val iterator = other.iterator() + val start = Node(iterator.next()) + var end = start + while (iterator.hasNext()) { + end.next = Node(iterator.next()) + end = end.next!! + } + if (index == 0) { + end.next = head + head = start + } else { + val (previous, current) = traverseTo(index) + assert(previous != null) + previous!!.next = start + end.next = current + } + size += other.size + } + + override fun iterator(): Iterator = object : Iterator { + private var nextElement: Node? = head + + override fun hasNext(): Boolean = nextElement != null + + override fun next(): T { + if (!hasNext()) { + throw NoSuchElementException() + } + val result = nextElement!!.element + nextElement = nextElement!!.next + return result + } + } + + private fun checkIndexInBounds( + index: Int, + inclusive: Boolean = false, + ): Unit = + if (index !in 0..<(if (inclusive) size + 1 else size)) { + throw IndexOutOfBoundsException() + } else { + Unit + } + + private fun unlink(previous: Node?, current: Node) { + if (previous == null) { + head = current.next + } else { + previous.next = current.next + } + size-- + } + + private fun traverseTo(index: Int): Pair?, Node?> { + var previous: Node? = null + var current: Node? = head + for (i in 0.. diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/HashmapTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/HashmapTests.kt new file mode 100644 index 0000000..f35b700 --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/HashmapTests.kt @@ -0,0 +1,19 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertFalse + +class HashmapTests : ImperialMutableMapTestsParent() { + override fun emptyCustomMutableMapStringInt(): ImperialMutableMap = + Hashmap(::SinglyLinkedList) + + override fun emptyCustomMutableMapCollidingStringInt(): ImperialMutableMap = + Hashmap(::SinglyLinkedList) + + // This test is present merely to ensure that at least one concrete test case exists. + // The real tests are inherited from the abstract superclass. + @Test + fun `trivial test`() { + assertFalse(emptyCustomMutableMapStringInt().iterator().hasNext()) + } +} diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableListUtilitiesTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableListUtilitiesTests.kt new file mode 100644 index 0000000..eed4377 --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableListUtilitiesTests.kt @@ -0,0 +1,46 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertEquals + +class ImperialMutableListUtilitiesTests { + + @Test + fun `removeAll matching list types`() { + val list1: ImperialMutableList = SinglyLinkedList() + list1.add(0, "a") + list1.add(0, "b") + list1.add(0, "c") + list1.add(0, "d") + list1.add(0, "e") + val list2: ImperialMutableList = SinglyLinkedList() + list2.add(0, "a") + list2.add(0, "b") + list2.add(0, "c") + list1.removeAll(list2) + assertEquals(2, list1.size) + assertEquals("e", list1[0]) + assertEquals("d", list1[1]) + } + + @Test + fun `removeAll different list types`() { + val list1: ImperialMutableList = SinglyLinkedList() + list1.add(0, "a") + list1.add(0, "b") + list1.add(0, "c") + list1.add(0, 1) + list1.add(0, 2) + list1.add(0, 3) + val list2: ImperialMutableList = SinglyLinkedList() + list2.add(0, "a") + list2.add(0, "b") + list2.add(0, "c") + list1.removeAll(list2) + assertEquals(3, list1.size) + assertEquals(3, list1[0]) + assertEquals(2, list1[1]) + assertEquals(1, list1[2]) + } +} + diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableMapTestsParent.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableMapTestsParent.kt new file mode 100644 index 0000000..75737aa --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/ImperialMutableMapTestsParent.kt @@ -0,0 +1,257 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNotNull +import kotlin.test.assertNull +import kotlin.test.assertTrue +import kotlin.test.fail + +abstract class ImperialMutableMapTestsParent { + abstract fun emptyCustomMutableMapStringInt(): ImperialMutableMap + + abstract fun emptyCustomMutableMapCollidingStringInt(): ImperialMutableMap + + @Test + fun `test contains when empty`() { + val map = emptyCustomMutableMapStringInt() + assertFalse(map.contains("Hello")) + } + + @Test + fun `test remove when empty`() { + val map = emptyCustomMutableMapStringInt() + assertNull(map.remove("Hello")) + } + + @Test + fun `test size when empty`() { + val map = emptyCustomMutableMapStringInt() + assertEquals(0, map.size) + } + + @Test + fun `test contains after put`() { + val map = emptyCustomMutableMapStringInt() + map.put("Hello", 3) + assertTrue(map.contains("Hello")) + } + + @Test + fun `test remove after put`() { + val map = emptyCustomMutableMapStringInt() + map.put("Hello", 3) + assertNull(map.remove("World")) + assertEquals(3, map.remove("Hello")) + } + + @Test + fun `test size after put`() { + val map = emptyCustomMutableMapStringInt() + map.put("Hello", 3) + assertEquals(1, map.size) + } + + @Test + fun `test get returns null`() { + val map = emptyCustomMutableMapStringInt() + map.put("Hello", 3) + map.put("World", 4) + assertNull(map["You"]) + } + + @Test + fun `test get returns latest value`() { + val map = emptyCustomMutableMapStringInt() + map["Hello"] = 3 + map["World"] = 4 + map["Hello"] = 10 + map["Hello"] = 11 + assertEquals(11, map["Hello"]) + } + + @Test + fun `test entries initially empty`() { + val map = emptyCustomMutableMapStringInt() + for (e in map) { + fail("Map entries should be empty") + } + } + + @Test + fun `test entries after some putting`() { + val map = emptyCustomMutableMapStringInt() + val entries = (1..100).map { + ImperialMutableMap.Entry(it.toString(), it) + } + entries.forEach { + map.put(it.key, it.value) + } + assertEquals(entries.size, map.size) + assertEquals(entries, map.toSet().sortedBy { it.value }) + } + + @Test + fun `test entries after some setting`() { + val map = emptyCustomMutableMapStringInt() + val expected: List> = (1..100).map { + ImperialMutableMap.Entry(it.toString(), it) + } + expected.forEach { + map[it.key] = it.value + } + assertEquals(expected.size, map.size) + assertEquals(expected, map.toList().sortedBy { it.value }) + } + + @Test + fun `test entries after some putting, removing and setting`() { + val map = createCustomMutableMapByPuttingRemovingAndSetting() + val expected = createExpectedEntriesFromPuttingRemovingAndSetting() + assertEquals(expected.size, map.size) + assertEquals(expected, map.toList().sortedBy { it.value }) + } + + @Test + fun `test entries after some putting (collision prone)`() { + val map = emptyCustomMutableMapCollidingStringInt() + val expected = (1..100).map { + ImperialMutableMap.Entry(CollidingString(it.toString()), it) + } + expected.forEach { + map.put(it.key, it.value) + } + assertEquals(expected.size, map.size) + assertEquals(expected, map.toList().sortedBy { it.value }) + } + + @Test + fun `test entries after some setting (collision prone)`() { + val map = emptyCustomMutableMapCollidingStringInt() + val expected = (1..100).map { + ImperialMutableMap.Entry(CollidingString(it.toString()), it) + } + expected.forEach { + map[it.key] = it.value + } + assertEquals(expected.size, map.size) + assertEquals(expected, map.toList().sortedBy { it.value }) + } + + @Test + fun `test entries after some putting, removing and setting (collision prone)`() { + val map = createCollisionProneMapByPuttingRemovingAndSetting() + val expected = createCollisionProneExpectedEntriesFromPuttingRemovingAndSetting() + assertEquals(expected.size, map.size) + assertEquals(expected, map.toList().sortedBy { it.value }) + } + + @Test + fun `performance test 1`() { + println("Performance test started.") + val map = emptyCustomMutableMapStringInt() + for (i in 0..<1000000) { + if (i.mod(10000) == 0) { + println("Added $i elements out of 1000000. These messages should fly by if performance is adequate.") + } + map.put(i.toString(), i) + } + assertEquals(1000000, map.size) + } + + @Test + fun `performance test 2`() { + println("Performance test started.") + val map = emptyCustomMutableMapCollidingStringInt() + for (i in 0..<20000) { + if (i.mod(100) == 0) { + println("Added $i elements out of 20000. These messages should fly by if performance is adequate.") + } + map.put(CollidingString(i.toString()), i) + } + assertEquals(20000, map.size) + } + + class CollidingString(val string: String) : Comparable { + override fun hashCode(): Int = 5 + override fun compareTo(other: CollidingString): Int = string.compareTo(other.string) + + override fun equals(other: Any?): Boolean { + if (other is CollidingString) { + return string == other.string + } + return false + } + } + + private fun createCustomMutableMapByPuttingRemovingAndSetting(): ImperialMutableMap { + val map = emptyCustomMutableMapStringInt() + for (i in 1..100) { + assertFalse(map.contains(i.toString())) + assertNull(map[i.toString()]) + assertNull(map.put(i.toString(), i)) + } + for (i in 1..100) { + assertTrue(map.contains(i.toString())) + assertEquals(i, map[i.toString()]) + if (i % 2 == 0) { + val previous = map.remove(i.toString()) + assertNotNull(previous) + assertEquals(i, previous) + } + } + for (i in 1..100) { + if (i % 4 == 0) { + assertNull(map[i.toString()]) + assertFalse(map.contains(i.toString())) + assertNull(map.set(i.toString(), i)) + } + } + return map + } + + private fun createExpectedEntriesFromPuttingRemovingAndSetting(): List> { + val entries = (1..100).map { + ImperialMutableMap.Entry(it.toString(), it) + }.filter { + it.value % 2 != 0 || it.value % 4 == 0 + } + return entries + } + + private fun createCollisionProneMapByPuttingRemovingAndSetting(): ImperialMutableMap { + val map = emptyCustomMutableMapCollidingStringInt() + for (i in 1..100) { + assertFalse(map.contains(CollidingString(i.toString()))) + assertNull(map[CollidingString(i.toString())]) + assertNull(map.put(CollidingString(i.toString()), i)) + } + for (i in 1..100) { + assertTrue(map.contains(CollidingString(i.toString()))) + assertEquals(i, map[CollidingString(i.toString())]) + if (i % 2 == 0) { + val previous = map.remove(CollidingString(i.toString())) + assertNotNull(previous) + assertEquals(i, previous) + } + } + for (i in 1..100) { + if (i % 4 == 0) { + assertNull(map.get(CollidingString(i.toString()))) + assertFalse(map.contains(CollidingString(i.toString()))) + assertNull(map.set(CollidingString(i.toString()), i)) + } + } + return map + } + + private fun createCollisionProneExpectedEntriesFromPuttingRemovingAndSetting(): List> { + val entries = (1..100).map { + ImperialMutableMap.Entry(CollidingString(it.toString()), it) + }.filter { + it.value % 2 != 0 || it.value % 4 == 0 + } + return entries + } +} diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/ResizingArrayListTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/ResizingArrayListTests.kt new file mode 100644 index 0000000..65f239e --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/ResizingArrayListTests.kt @@ -0,0 +1,423 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +private val exampleStrings: Array = arrayOf( + "cat", + "dog", + "frog", + "horse", + "zebra", + "wildebeest", + "vulture", + "hyena", + "warthog", + "hyrax", +) + +class ResizingArrayListTests { + + @Test + fun `test get (String)`() { + val list = ResizingArrayList(10) + for (i in 0..<10) { + list.add(i, exampleStrings[i]) + assertEquals(i + 1, list.size) + } + for (i in 0..<10) { + assertEquals(exampleStrings[i], list[i]) + } + } + + @Test + fun `test add (String)`() { + val list = ResizingArrayList(10) + for (i in 1..10) { + list.add(i - 1, exampleStrings[i - 1]) + assertEquals(i, list.size) + } + assertEquals( + exampleStrings.joinToString(prefix = "[", postfix = "]"), + list.toString(), + ) + } + + @Test + fun `test add (String) with zero initial capacity`() { + val list = ResizingArrayList(0) + for (i in 1..10) { + list.add(i - 1, exampleStrings[i - 1]) + assertEquals(i, list.size) + } + assertEquals( + exampleStrings.joinToString(prefix = "[", postfix = "]"), + list.toString(), + ) + } + + @Test + fun `test add with resize (String)`() { + val list = ResizingArrayList(1) + for (i in 0..256) { + list.add(i, i.toString()) + } + for (i in 0..256) { + assertEquals(i.toString(), list[i]) + } + } + + @Test + fun `test add at start with resize (String)`() { + val list = ResizingArrayList(1) + for (i in 0..256) { + list.add(0, i.toString()) + } + for (i in 0..256) { + assertEquals(i.toString(), list[256 - i]) + } + } + + @Test + fun `test add in middle (String)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, blob, zebra, wildebeest]", list.toString()) + } + + @Test + fun `test add at end (String)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.add(5, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, zebra, wildebeest, blob]", list.toString()) + } + + @Test + fun `test resize in add-at-index if list is full (String)`() { + val list = ResizingArrayList(1) + list.add(0, "blob") + list.add(0, "blib") + assertEquals("blib", list[0]) + assertEquals("blob", list[1]) + } + + @Test + fun `test clear (String)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (String)`() { + val list = ResizingArrayList() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + val trivialList = ResizingArrayList(0) + assertEquals(0, trivialList.size) + assertEquals("[]", trivialList.toString()) + } + + @Test + fun `test set (String)`() { + val list = ResizingArrayList() + list.add(0, "one") + list.add(1, "two") + list.add(2, "three") + assertEquals("one", list.set(0, "forty two")) + assertEquals("two", list.set(1, "forty three")) + assertEquals("three", list.set(2, "forty four")) + assertEquals(3, list.size) + assertEquals("[forty two, forty three, forty four]", list.toString()) + } + + @Test + fun `test get (Int)`() { + val list = ResizingArrayList(10) + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + for (i in 1..10) { + assertEquals(i, list[i - 1]) + } + } + + @Test + fun `test add (Int)`() { + val list = ResizingArrayList(10) + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]", list.toString()) + } + + @Test + fun `test add with resize (Int)`() { + val list = ResizingArrayList(1) + for (i in 0..256) { + list.add(i, i) + } + for (i in 0..256) { + assertEquals(i, list[i]) + } + } + + @Test + fun `test add in middle (Int)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 42, 4, 5]", list.toString()) + } + + @Test + fun `test add at end (Int)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.add(5, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 4, 5, 42]", list.toString()) + } + + @Test + fun `test resize in add-at-index if list is full (Int)`() { + val list = ResizingArrayList(1) + list.add(0, 1) + list.add(0, 2) + assertEquals(2, list[0]) + assertEquals(1, list[1]) + } + + @Test + fun `test clear (Int)`() { + val list = ResizingArrayList(10) + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (Int)`() { + val list = ResizingArrayList(10) + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + val trivialList = ResizingArrayList(0) + assertEquals(0, trivialList.size) + assertEquals("[]", trivialList.toString()) + } + + @Test + fun `test set (Int)`() { + val list = ResizingArrayList(10) + list.add(0, 1) + list.add(1, 2) + list.add(2, 3) + assertEquals(1, list.set(0, 42)) + assertEquals(2, list.set(1, 43)) + assertEquals(3, list.set(2, 44)) + assertEquals(3, list.size) + assertEquals("[42, 43, 44]", list.toString()) + } + + @Test + fun `test addAll to zero-capacity list`() { + val initiallyEmptyList: ImperialMutableList = ResizingArrayList(0) + val smallList: ImperialMutableList = ResizingArrayList(2) + for (i in 1..10) { + smallList.add(i - 1, i) + } + initiallyEmptyList.addAll(0, smallList) + assertEquals(10, initiallyEmptyList.size) + assertEquals(1, initiallyEmptyList[0]) + assertEquals(2, initiallyEmptyList[1]) + assertEquals(3, initiallyEmptyList[2]) + assertEquals(4, initiallyEmptyList[3]) + assertEquals(5, initiallyEmptyList[4]) + assertEquals(6, initiallyEmptyList[5]) + assertEquals(7, initiallyEmptyList[6]) + assertEquals(8, initiallyEmptyList[7]) + assertEquals(9, initiallyEmptyList[8]) + assertEquals(10, initiallyEmptyList[9]) + } + + @Test + fun `test addAll small`() { + val firstSmallList: ImperialMutableList = ResizingArrayList(2) + val secondSmallList: ImperialMutableList = ResizingArrayList(2) + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(firstSmallList.size, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(6, firstSmallList[5]) + assertEquals(7, firstSmallList[6]) + assertEquals(8, firstSmallList[7]) + assertEquals(9, firstSmallList[8]) + assertEquals(10, firstSmallList[9]) + assertEquals(-1, firstSmallList[10]) + assertEquals(-2, firstSmallList[11]) + assertEquals(-3, firstSmallList[12]) + assertEquals(-4, firstSmallList[13]) + assertEquals(-5, firstSmallList[14]) + assertEquals(-6, firstSmallList[15]) + assertEquals(-7, firstSmallList[16]) + assertEquals(-8, firstSmallList[17]) + assertEquals(-9, firstSmallList[18]) + assertEquals(-10, firstSmallList[19]) + } + + @Test + fun `test addAll at index small`() { + val firstSmallList: ImperialMutableList = ResizingArrayList(2) + val secondSmallList: ImperialMutableList = ResizingArrayList(2) + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(5, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(-1, firstSmallList[5]) + assertEquals(-2, firstSmallList[6]) + assertEquals(-3, firstSmallList[7]) + assertEquals(-4, firstSmallList[8]) + assertEquals(-5, firstSmallList[9]) + assertEquals(-6, firstSmallList[10]) + assertEquals(-7, firstSmallList[11]) + assertEquals(-8, firstSmallList[12]) + assertEquals(-9, firstSmallList[13]) + assertEquals(-10, firstSmallList[14]) + assertEquals(6, firstSmallList[15]) + assertEquals(7, firstSmallList[16]) + assertEquals(8, firstSmallList[17]) + assertEquals(9, firstSmallList[18]) + assertEquals(10, firstSmallList[19]) + } + + @Test + fun `test addAll at start`() { + val list1: ImperialMutableList = ResizingArrayList() + val list2: ImperialMutableList = ResizingArrayList() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(0, list2) + assertEquals(6, list1.size) + assertEquals(4, list1[0]) + assertEquals(5, list1[1]) + assertEquals(6, list1[2]) + assertEquals(1, list1[3]) + assertEquals(2, list1[4]) + assertEquals(3, list1[5]) + } + + @Test + fun `test addAll at end`() { + val list1: ImperialMutableList = ResizingArrayList() + val list2: ImperialMutableList = ResizingArrayList() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(3, list2) + assertEquals(6, list1.size) + assertEquals(1, list1[0]) + assertEquals(2, list1[1]) + assertEquals(3, list1[2]) + assertEquals(4, list1[3]) + assertEquals(5, list1[4]) + assertEquals(6, list1[5]) + } + + @Test + fun `size is 0`() { + assertEquals(0, ResizingArrayList().size) + } + + @Test + fun `iterator has next when empty`() { + assertFalse(ResizingArrayList().iterator().hasNext()) + } + + @Test + fun `iterate over elements`() { + val list: ImperialMutableList = ResizingArrayList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val iterator = list.iterator() + assertTrue(iterator.hasNext()) + assertEquals("a", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("b", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("c", iterator.next()) + assertFalse(iterator.hasNext()) + } + + @Test + fun `concatenate with iterator`() { + val list: ImperialMutableList = ResizingArrayList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val concatenation = StringBuilder() + for (string in list) { + concatenation.append(string) + } + assertEquals("abc", concatenation.toString()) + } +} \ No newline at end of file diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListExtraTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListExtraTests.kt new file mode 100644 index 0000000..a784a1a --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListExtraTests.kt @@ -0,0 +1,88 @@ +package collections + +import kotlin.test.Test +import kotlin.test.fail + +// These are examples of the kinds of imports that may be useful when writing tests. +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class SinglyLinkedListExtraTests { + + /* TODO - replace this placeholder test with a number of your own tests. + @Test + fun `placeholder test`() { + fail() + } + • The tests you write for remove should confirm that the method behaves correctly + when invoked with an element that does appear in the list, and when invoked with + an element that does not appear in the list. + • Each test should be designed with a specific purpose, and the name of the test should + reflect this purpose. + • Think about “edge case” inputs to these functions when deciding on test inputs. + */ + @Test + fun `remove element in list`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + assertEquals(list.remove("b"),true) + assertEquals(list.remove("c"),true) + assertEquals(list.remove("a"),true) + } + + @Test + fun `removeAt in list`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + assertEquals(list.removeAt(1),"b") + assertEquals(list.removeAt(1),"c") + assertEquals(list.removeAt(0),"a") + } + + @Test + fun `remove element not in list`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + assertEquals(list.remove("d"),false) + assertEquals(list.remove("a"),true) + assertEquals(list.remove("b"),true) + assertEquals(list.remove("c"),true) + assertEquals(list.remove("d"),false) + } + + @Test + fun `remove empty list throws`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + assertEquals(list.removeAt(1),"b") + assertEquals(list.removeAt(1),"c") + assertEquals(list.removeAt(0),"a") + try { + list.removeAt(0) + } catch (exception: IndexOutOfBoundsException) { + // yay + } + } + + @Test + fun `remove list out of bounds`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + try { + list.removeAt(3) + } catch (exception: IndexOutOfBoundsException) { + // yay + } + } +} \ No newline at end of file diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListJavaTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListJavaTests.kt new file mode 100644 index 0000000..d42baed --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListJavaTests.kt @@ -0,0 +1,335 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +private val exampleStrings: Array = arrayOf( + "cat", + "dog", + "frog", + "horse", + "zebra", + "wildebeest", + "vulture", + "hyena", + "warthog", + "hyrax", +) + +class SinglyLinkedListJavaTests { + + @Test + fun `test get (String)`() { + val list = SinglyLinkedListJava() + for (i in 0..<10) { + list.add(i, exampleStrings[i]) + assertEquals(i + 1, list.size) + } + for (i in 0..<10) { + assertEquals(exampleStrings[i], list[i]) + } + } + + @Test + fun `test add (String)`() { + val list = SinglyLinkedListJava() + for (i in 1..10) { + list.add(i - 1, exampleStrings[i - 1]) + assertEquals(i, list.size) + } + assertEquals( + exampleStrings.joinToString(prefix = "[", postfix = "]"), + list.toString(), + ) + } + + @Test + fun `test add in middle (String)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, blob, zebra, wildebeest]", list.toString()) + } + + @Test + fun `test add at end (String)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.add(5, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, zebra, wildebeest, blob]", list.toString()) + } + + @Test + fun `test clear (String)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (String)`() { + val list = SinglyLinkedListJava() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test set (String)`() { + val list = SinglyLinkedListJava() + list.add(0, "one") + list.add(1, "two") + list.add(2, "three") + assertEquals("one", list.set(0, "forty two")) + assertEquals("two", list.set(1, "forty three")) + assertEquals("three", list.set(2, "forty four")) + assertEquals(3, list.size) + assertEquals("[forty two, forty three, forty four]", list.toString()) + } + + @Test + fun `test get (Int)`() { + val list = SinglyLinkedListJava() + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + for (i in 1..10) { + assertEquals(i, list[i - 1]) + } + } + + @Test + fun `test add (Int)`() { + val list = SinglyLinkedListJava() + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]", list.toString()) + } + + @Test + fun `test add in middle (Int)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 42, 4, 5]", list.toString()) + } + + @Test + fun `test add at end (Int)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.add(5, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 4, 5, 42]", list.toString()) + } + + @Test + fun `test clear (Int)`() { + val list = SinglyLinkedListJava() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (Int)`() { + val list = SinglyLinkedListJava() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + val trivialList = SinglyLinkedListJava() + assertEquals(0, trivialList.size) + assertEquals("[]", trivialList.toString()) + } + + @Test + fun `test set (Int)`() { + val list = SinglyLinkedListJava() + list.add(0, 1) + list.add(1, 2) + list.add(2, 3) + assertEquals(1, list.set(0, 42)) + assertEquals(2, list.set(1, 43)) + assertEquals(3, list.set(2, 44)) + assertEquals(3, list.size) + assertEquals("[42, 43, 44]", list.toString()) + } + + @Test + fun `test addAll small`() { + val firstSmallList: ImperialMutableList = SinglyLinkedListJava() + val secondSmallList: ImperialMutableList = SinglyLinkedListJava() + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(firstSmallList.size, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(6, firstSmallList[5]) + assertEquals(7, firstSmallList[6]) + assertEquals(8, firstSmallList[7]) + assertEquals(9, firstSmallList[8]) + assertEquals(10, firstSmallList[9]) + assertEquals(-1, firstSmallList[10]) + assertEquals(-2, firstSmallList[11]) + assertEquals(-3, firstSmallList[12]) + assertEquals(-4, firstSmallList[13]) + assertEquals(-5, firstSmallList[14]) + assertEquals(-6, firstSmallList[15]) + assertEquals(-7, firstSmallList[16]) + assertEquals(-8, firstSmallList[17]) + assertEquals(-9, firstSmallList[18]) + assertEquals(-10, firstSmallList[19]) + } + + @Test + fun `test addAll at index small`() { + val firstSmallList: ImperialMutableList = SinglyLinkedListJava() + val secondSmallList: ImperialMutableList = SinglyLinkedListJava() + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(5, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(-1, firstSmallList[5]) + assertEquals(-2, firstSmallList[6]) + assertEquals(-3, firstSmallList[7]) + assertEquals(-4, firstSmallList[8]) + assertEquals(-5, firstSmallList[9]) + assertEquals(-6, firstSmallList[10]) + assertEquals(-7, firstSmallList[11]) + assertEquals(-8, firstSmallList[12]) + assertEquals(-9, firstSmallList[13]) + assertEquals(-10, firstSmallList[14]) + assertEquals(6, firstSmallList[15]) + assertEquals(7, firstSmallList[16]) + assertEquals(8, firstSmallList[17]) + assertEquals(9, firstSmallList[18]) + assertEquals(10, firstSmallList[19]) + } + + @Test + fun `test addAll at start`() { + val list1: ImperialMutableList = SinglyLinkedListJava() + val list2: ImperialMutableList = SinglyLinkedListJava() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(0, list2) + assertEquals(6, list1.size) + assertEquals(4, list1[0]) + assertEquals(5, list1[1]) + assertEquals(6, list1[2]) + assertEquals(1, list1[3]) + assertEquals(2, list1[4]) + assertEquals(3, list1[5]) + } + + @Test + fun `test addAll at end`() { + val list1: ImperialMutableList = SinglyLinkedListJava() + val list2: ImperialMutableList = SinglyLinkedListJava() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(3, list2) + assertEquals(6, list1.size) + assertEquals(1, list1[0]) + assertEquals(2, list1[1]) + assertEquals(3, list1[2]) + assertEquals(4, list1[3]) + assertEquals(5, list1[4]) + assertEquals(6, list1[5]) + } + + @Test + fun `size is 0`() { + assertEquals(0, SinglyLinkedListJava().size) + } + + @Test + fun `iterator has next when empty`() { + assertFalse(SinglyLinkedListJava().iterator().hasNext()) + } + + @Test + fun `iterate over elements`() { + val list: ImperialMutableList = SinglyLinkedListJava() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val iterator = list.iterator() + assertTrue(iterator.hasNext()) + assertEquals("a", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("b", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("c", iterator.next()) + assertFalse(iterator.hasNext()) + } + + @Test + fun `concatenate with iterator`() { + val list: ImperialMutableList = SinglyLinkedListJava() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val concatenation = StringBuilder() + for (string in list) { + concatenation.append(string) + } + assertEquals("abc", concatenation.toString()) + } +} diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListTests.kt new file mode 100644 index 0000000..f48decc --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/SinglyLinkedListTests.kt @@ -0,0 +1,335 @@ +package collections + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +private val exampleStrings: Array = arrayOf( + "cat", + "dog", + "frog", + "horse", + "zebra", + "wildebeest", + "vulture", + "hyena", + "warthog", + "hyrax", +) + +class SinglyLinkedListTests { + + @Test + fun `test get (String)`() { + val list = SinglyLinkedList() + for (i in 0..<10) { + list.add(i, exampleStrings[i]) + assertEquals(i + 1, list.size) + } + for (i in 0..<10) { + assertEquals(exampleStrings[i], list[i]) + } + } + + @Test + fun `test add (String)`() { + val list = SinglyLinkedList() + for (i in 1..10) { + list.add(i - 1, exampleStrings[i - 1]) + assertEquals(i, list.size) + } + assertEquals( + exampleStrings.joinToString(prefix = "[", postfix = "]"), + list.toString(), + ) + } + + @Test + fun `test add in middle (String)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, blob, zebra, wildebeest]", list.toString()) + } + + @Test + fun `test add at end (String)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.add(5, "blob") + assertEquals(6, list.size) + assertEquals("[dog, frog, horse, zebra, wildebeest, blob]", list.toString()) + } + + @Test + fun `test clear (String)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, exampleStrings[i]) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (String)`() { + val list = SinglyLinkedList() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test set (String)`() { + val list = SinglyLinkedList() + list.add(0, "one") + list.add(1, "two") + list.add(2, "three") + assertEquals("one", list.set(0, "forty two")) + assertEquals("two", list.set(1, "forty three")) + assertEquals("three", list.set(2, "forty four")) + assertEquals(3, list.size) + assertEquals("[forty two, forty three, forty four]", list.toString()) + } + + @Test + fun `test get (Int)`() { + val list = SinglyLinkedList() + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + for (i in 1..10) { + assertEquals(i, list[i - 1]) + } + } + + @Test + fun `test add (Int)`() { + val list = SinglyLinkedList() + for (i in 1..10) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]", list.toString()) + } + + @Test + fun `test add in middle (Int)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + assertEquals(5, list.size) + list.add(3, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 42, 4, 5]", list.toString()) + } + + @Test + fun `test add at end (Int)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.add(5, 42) + assertEquals(6, list.size) + assertEquals("[1, 2, 3, 4, 5, 42]", list.toString()) + } + + @Test + fun `test clear (Int)`() { + val list = SinglyLinkedList() + for (i in 1..5) { + list.add(i - 1, i) + assertEquals(i, list.size) + } + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + list.clear() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + } + + @Test + fun `test toString empty (Int)`() { + val list = SinglyLinkedList() + assertEquals(0, list.size) + assertEquals("[]", list.toString()) + val trivialList = SinglyLinkedList() + assertEquals(0, trivialList.size) + assertEquals("[]", trivialList.toString()) + } + + @Test + fun `test set (Int)`() { + val list = SinglyLinkedList() + list.add(0, 1) + list.add(1, 2) + list.add(2, 3) + assertEquals(1, list.set(0, 42)) + assertEquals(2, list.set(1, 43)) + assertEquals(3, list.set(2, 44)) + assertEquals(3, list.size) + assertEquals("[42, 43, 44]", list.toString()) + } + + @Test + fun `test addAll small`() { + val firstSmallList: ImperialMutableList = SinglyLinkedList() + val secondSmallList: ImperialMutableList = SinglyLinkedList() + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(firstSmallList.size, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(6, firstSmallList[5]) + assertEquals(7, firstSmallList[6]) + assertEquals(8, firstSmallList[7]) + assertEquals(9, firstSmallList[8]) + assertEquals(10, firstSmallList[9]) + assertEquals(-1, firstSmallList[10]) + assertEquals(-2, firstSmallList[11]) + assertEquals(-3, firstSmallList[12]) + assertEquals(-4, firstSmallList[13]) + assertEquals(-5, firstSmallList[14]) + assertEquals(-6, firstSmallList[15]) + assertEquals(-7, firstSmallList[16]) + assertEquals(-8, firstSmallList[17]) + assertEquals(-9, firstSmallList[18]) + assertEquals(-10, firstSmallList[19]) + } + + @Test + fun `test addAll at index small`() { + val firstSmallList: ImperialMutableList = SinglyLinkedList() + val secondSmallList: ImperialMutableList = SinglyLinkedList() + for (i in 1..10) { + firstSmallList.add(i - 1, i) + secondSmallList.add(i - 1, -i) + } + firstSmallList.addAll(5, secondSmallList) + assertEquals(20, firstSmallList.size) + assertEquals(1, firstSmallList[0]) + assertEquals(2, firstSmallList[1]) + assertEquals(3, firstSmallList[2]) + assertEquals(4, firstSmallList[3]) + assertEquals(5, firstSmallList[4]) + assertEquals(-1, firstSmallList[5]) + assertEquals(-2, firstSmallList[6]) + assertEquals(-3, firstSmallList[7]) + assertEquals(-4, firstSmallList[8]) + assertEquals(-5, firstSmallList[9]) + assertEquals(-6, firstSmallList[10]) + assertEquals(-7, firstSmallList[11]) + assertEquals(-8, firstSmallList[12]) + assertEquals(-9, firstSmallList[13]) + assertEquals(-10, firstSmallList[14]) + assertEquals(6, firstSmallList[15]) + assertEquals(7, firstSmallList[16]) + assertEquals(8, firstSmallList[17]) + assertEquals(9, firstSmallList[18]) + assertEquals(10, firstSmallList[19]) + } + + @Test + fun `test addAll at start`() { + val list1: ImperialMutableList = SinglyLinkedList() + val list2: ImperialMutableList = SinglyLinkedList() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(0, list2) + assertEquals(6, list1.size) + assertEquals(4, list1[0]) + assertEquals(5, list1[1]) + assertEquals(6, list1[2]) + assertEquals(1, list1[3]) + assertEquals(2, list1[4]) + assertEquals(3, list1[5]) + } + + @Test + fun `test addAll at end`() { + val list1: ImperialMutableList = SinglyLinkedList() + val list2: ImperialMutableList = SinglyLinkedList() + list1.add(0, 1) + list1.add(1, 2) + list1.add(2, 3) + list2.add(0, 4) + list2.add(1, 5) + list2.add(2, 6) + list1.addAll(3, list2) + assertEquals(6, list1.size) + assertEquals(1, list1[0]) + assertEquals(2, list1[1]) + assertEquals(3, list1[2]) + assertEquals(4, list1[3]) + assertEquals(5, list1[4]) + assertEquals(6, list1[5]) + } + + @Test + fun `size is 0`() { + assertEquals(0, SinglyLinkedList().size) + } + + @Test + fun `iterator has next when empty`() { + assertFalse(SinglyLinkedList().iterator().hasNext()) + } + + @Test + fun `iterate over elements`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val iterator = list.iterator() + assertTrue(iterator.hasNext()) + assertEquals("a", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("b", iterator.next()) + assertTrue(iterator.hasNext()) + assertEquals("c", iterator.next()) + assertFalse(iterator.hasNext()) + } + + @Test + fun `concatenate with iterator`() { + val list: ImperialMutableList = SinglyLinkedList() + list.add(0, "a") + list.add(1, "b") + list.add(2, "c") + val concatenation = StringBuilder() + for (string in list) { + concatenation.append(string) + } + assertEquals("abc", concatenation.toString()) + } +} diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/StripedHashmapTests.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/StripedHashmapTests.kt new file mode 100644 index 0000000..5f42023 --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/StripedHashmapTests.kt @@ -0,0 +1,21 @@ +package collections +/* +import kotlin.test.Test +import kotlin.test.assertFalse + +class StripedHashmapTests : ThreadSafeImperialMutableMapTestsParent() { + + override fun emptyThreadSafeMapIntString(): ImperialMutableMap = StripedHashmap(::SinglyLinkedList) + + override fun emptyCustomMutableMapStringInt(): ImperialMutableMap = StripedHashmap(::SinglyLinkedList) + + override fun emptyCustomMutableMapCollidingStringInt(): ImperialMutableMap = StripedHashmap(::SinglyLinkedList) + + // This test is present merely to ensure that at least one concrete test case exists. + // The real tests are inherited from the abstract superclass. + @Test + fun `trivial test`() { + assertFalse(emptyCustomMutableMapStringInt().iterator().hasNext()) + } +} +*/ diff --git a/kotlin-collections-skeleton/src/test/kotlin/collections/ThreadSafeImperialMutableMapTestsParent.kt b/kotlin-collections-skeleton/src/test/kotlin/collections/ThreadSafeImperialMutableMapTestsParent.kt new file mode 100644 index 0000000..db5ce3d --- /dev/null +++ b/kotlin-collections-skeleton/src/test/kotlin/collections/ThreadSafeImperialMutableMapTestsParent.kt @@ -0,0 +1,238 @@ +package collections + +import java.util.concurrent.locks.Lock +import java.util.concurrent.locks.ReentrantLock +import kotlin.concurrent.withLock +import kotlin.random.Random +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import kotlin.test.fail + +private class ExceptionMonitoringThread( + private val exceptions: MutableList, + private val lock: Lock, + private var body: () -> Unit, +) : Runnable { + override fun run() { + try { + body() + } catch (exception: Exception) { + lock.withLock() { + exceptions.add(exception) + } + } + } +} + +abstract class ThreadSafeImperialMutableMapTestsParent : ImperialMutableMapTestsParent() { + abstract fun emptyThreadSafeMapIntString(): ImperialMutableMap + + @Suppress("SameParameterValue") + private fun addElementsInRandomOrder( + map: ImperialMutableMap, + lowerBound: Int, + numElements: Int, + seed: Int, + ) { + val randomGenerator = Random(seed) + val remaining = mutableListOf() + (lowerBound.., + lowerBound: Int, + numElements: Int, + seed: Int, + ) { + val randomGenerator = Random(seed) + val remaining = mutableListOf() + (lowerBound..) -> Unit>, + initialEntries: List>, + expectedInFinalResult: Set>, + notExpectedInFinalResult: Set>, + expectedFinalSize: Int? = null, + ) { + for (i in 1..repeatRuns) { + println("Repeat run $i of $repeatRuns") + val theMap = emptyThreadSafeMapIntString() + for (entry in initialEntries) { + theMap.put(entry.key, entry.value) + } + val exceptions = mutableListOf() + val lock = ReentrantLock() + val threads = threadBodies.map { + Thread( + ExceptionMonitoringThread( + exceptions, + lock, + ) { it(theMap) }, + ) + } + threads.forEach(Thread::start) + threads.forEach(Thread::join) + if (exceptions.isNotEmpty()) { + System.err.println("Exceptions thrown by thread(s):") + for (exception in exceptions) { + System.err.println(exception) + } + fail() + } + val finalContentsAsList = theMap.toList() + val finalContentsAsSet = finalContentsAsList.toSet() + // There should be no difference in the size of final contents as a list vs. as a set + assertEquals(finalContentsAsList.size, finalContentsAsSet.size) + assertTrue(finalContentsAsSet.containsAll(expectedInFinalResult)) + assertTrue((finalContentsAsSet intersect notExpectedInFinalResult).isEmpty()) + expectedFinalSize?.let { + assertEquals(it, finalContentsAsList.size) + } + } + } + + @Test + fun `one thread adds, one thread removes`() { + val chunkSize = 1 shl 12 + val adderBody: (ImperialMutableMap) -> Unit = { theMap -> + Thread.sleep(1) + addElementsInRandomOrder( + map = theMap, + lowerBound = 0, + numElements = 2 * chunkSize, + seed = 0, + ) + } + val removerBody: (ImperialMutableMap) -> Unit = { theMap -> + Thread.sleep(1) + removeElementsInRandomOrder( + map = theMap, + lowerBound = chunkSize, + numElements = 3 * chunkSize, + seed = 0, + ) + } + runConcurrencyTest( + repeatRuns = 10, + threadBodies = listOf(adderBody, removerBody), + initialEntries = (chunkSize..<3 * chunkSize).map { ImperialMutableMap.Entry(it, it.toString()) }, + expectedInFinalResult = (0..) -> Unit> = (0..<8).map { seed -> + { theMap -> + addElementsInRandomOrder( + map = theMap, + lowerBound = 0, + numElements = 2 * chunkSize, + seed = seed, + ) + } + } + val removerBodies: List<(ImperialMutableMap) -> Unit> = (8..<16).map { seed -> + { theMap -> + removeElementsInRandomOrder( + map = theMap, + lowerBound = chunkSize, + numElements = 3 * chunkSize, + seed = seed, + ) + } + } + runConcurrencyTest( + repeatRuns = 8, + threadBodies = adderBodies + removerBodies, + initialEntries = (chunkSize..<3 * chunkSize).map { ImperialMutableMap.Entry(it, it.toString()) }, + expectedInFinalResult = (0..) -> Unit = { + (10..1000).forEach { key -> + it[key] = key.toString() + } + } + val monitor: (ImperialMutableMap) -> Unit = { + while (it.size <= 1000) { + if (it.size < 10) { + it.put(-1, "-1") + } + } + } + + runConcurrencyTest( + repeatRuns = 10, + threadBodies = listOf(worker, monitor), + initialEntries = (0..<10).map { + ImperialMutableMap.Entry(it, it.toString()) + }, + expectedInFinalResult = (0..1000).map { + ImperialMutableMap.Entry(it, it.toString()) + }.toSet(), + notExpectedInFinalResult = setOf(ImperialMutableMap.Entry(-1, "-1")), + ) + } + + @Test + fun `eight threads add`() { + val adderBodies: List<(ImperialMutableMap) -> Unit> = (0..<8).map { threadId -> + { theMap -> + for (i in 0..<10000) { + val number = threadId * 10000 + i + theMap.put(number, number.toString()) + } + } + } + runConcurrencyTest( + repeatRuns = 8, + threadBodies = adderBodies, + initialEntries = emptyList(), + expectedInFinalResult = (0..<80000).map { ImperialMutableMap.Entry(it, it.toString()) }.toSet(), + notExpectedInFinalResult = emptySet(), + expectedFinalSize = 80000, + ) + } + + @Test + fun `no deadlock in concurrent resize`() { + runConcurrencyTest( + repeatRuns = 100, + threadBodies = (0..<32).map { + { theMap -> + theMap.put(it, it.toString()) + } + }, + initialEntries = emptyList(), + expectedInFinalResult = emptySet(), + notExpectedInFinalResult = emptySet(), + ) + } +} diff --git a/kotlin-collections.pdf b/kotlin-collections.pdf new file mode 100644 index 0000000..d4b9933 Binary files /dev/null and b/kotlin-collections.pdf differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/checksums/checksums.lock b/kotlin-interpreter-skeleton/.gradle/8.2/checksums/checksums.lock new file mode 100644 index 0000000..08cf8d5 Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/checksums/checksums.lock differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock b/kotlin-interpreter-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000..62d29ee Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/dependencies-accessors/gc.properties b/kotlin-interpreter-skeleton/.gradle/8.2/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.bin b/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.bin new file mode 100644 index 0000000..279fe60 Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.bin differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.lock b/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.lock new file mode 100644 index 0000000..d87315f Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/executionHistory/executionHistory.lock differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/fileChanges/last-build.bin b/kotlin-interpreter-skeleton/.gradle/8.2/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/fileChanges/last-build.bin differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.bin b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.bin new file mode 100644 index 0000000..26ec20c Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.bin differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.lock b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.lock new file mode 100644 index 0000000..1b53669 Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/fileHashes.lock differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..1812d3c Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin differ diff --git a/kotlin-interpreter-skeleton/.gradle/8.2/gc.properties b/kotlin-interpreter-skeleton/.gradle/8.2/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..f12dcee Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/cache.properties b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..6865a5c --- /dev/null +++ b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Mar 13 09:21:22 GMT 2026 +gradle.version=8.2 diff --git a/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..bb92f79 Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/kotlin-interpreter-skeleton/.gradle/file-system.probe b/kotlin-interpreter-skeleton/.gradle/file-system.probe new file mode 100644 index 0000000..edb147f Binary files /dev/null and b/kotlin-interpreter-skeleton/.gradle/file-system.probe differ diff --git a/kotlin-interpreter-skeleton/.gradle/vcs-1/gc.properties b/kotlin-interpreter-skeleton/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-interpreter-skeleton/.idea/.gitignore b/kotlin-interpreter-skeleton/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/kotlin-interpreter-skeleton/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/kotlin-interpreter-skeleton/.idea/compiler.xml b/kotlin-interpreter-skeleton/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/kotlin-interpreter-skeleton/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/.idea/gradle.xml b/kotlin-interpreter-skeleton/.idea/gradle.xml new file mode 100644 index 0000000..20243cf --- /dev/null +++ b/kotlin-interpreter-skeleton/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/.idea/kotlinc.xml b/kotlin-interpreter-skeleton/.idea/kotlinc.xml new file mode 100644 index 0000000..9de41b2 --- /dev/null +++ b/kotlin-interpreter-skeleton/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/.idea/misc.xml b/kotlin-interpreter-skeleton/.idea/misc.xml new file mode 100644 index 0000000..668048d --- /dev/null +++ b/kotlin-interpreter-skeleton/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/build.gradle b/kotlin-interpreter-skeleton/build.gradle new file mode 100644 index 0000000..861bea9 --- /dev/null +++ b/kotlin-interpreter-skeleton/build.gradle @@ -0,0 +1,50 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +buildscript { + ext.kotlin_version = "1.9.0" + ext.jvm_version = 17 + ext.kotlinter_version = "3.15.0" + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id 'application' + id 'org.jetbrains.kotlin.jvm' version "$kotlin_version" + id 'org.jmailen.kotlinter' version "$kotlinter_version" +} + +group = 'uk.ac.ic.doc' +version = '1.0.0' + +description = """Kotlin Interpreter""" + +tasks.withType(KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "$jvm_version" + } +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(jvm_version)) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" + testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" +} + +test { + testLogging { + events "PASSED", "FAILED", "SKIPPED" + } +} diff --git a/kotlin-interpreter-skeleton/build/classes/java/main/proglang/SequentialProgram.class b/kotlin-interpreter-skeleton/build/classes/java/main/proglang/SequentialProgram.class new file mode 100644 index 0000000..22bca4d Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/java/main/proglang/SequentialProgram.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/META-INF/kotlin-interpreter-skeleton.kotlin_module b/kotlin-interpreter-skeleton/build/classes/kotlin/main/META-INF/kotlin-interpreter-skeleton.kotlin_module new file mode 100644 index 0000000..55206fa Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/META-INF/kotlin-interpreter-skeleton.kotlin_module differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$And.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$And.class new file mode 100644 index 0000000..4b8613f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$And.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Equals.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Equals.class new file mode 100644 index 0000000..0016955 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Equals.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$GreaterThan.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$GreaterThan.class new file mode 100644 index 0000000..776b67f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$GreaterThan.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$LessThan.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$LessThan.class new file mode 100644 index 0000000..bef1844 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$LessThan.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Not.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Not.class new file mode 100644 index 0000000..67e4f11 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Not.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Or.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Or.class new file mode 100644 index 0000000..dbe1452 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Or.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Paren.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Paren.class new file mode 100644 index 0000000..cbaa67f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr$Paren.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr.class new file mode 100644 index 0000000..b012a7c Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExpr.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExprKt.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExprKt.class new file mode 100644 index 0000000..2e75753 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/BoolExprKt.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Add.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Add.class new file mode 100644 index 0000000..bc4cf38 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Add.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Div.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Div.class new file mode 100644 index 0000000..9de0bcc Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Div.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Fact.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Fact.class new file mode 100644 index 0000000..bcccc72 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Fact.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Literal.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Literal.class new file mode 100644 index 0000000..806d8b3 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Literal.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Mul.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Mul.class new file mode 100644 index 0000000..bdebbc2 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Mul.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Paren.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Paren.class new file mode 100644 index 0000000..6b0431b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Paren.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Sub.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Sub.class new file mode 100644 index 0000000..0149236 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Sub.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Var.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Var.class new file mode 100644 index 0000000..d6caa58 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr$Var.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr.class new file mode 100644 index 0000000..3fd6ab0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExpr.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExprKt.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExprKt.class new file mode 100644 index 0000000..6d09cc1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/IntExprKt.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/UndefinedBehaviourException.class b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/UndefinedBehaviourException.class new file mode 100644 index 0000000..10bc5ed Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/main/proglang/UndefinedBehaviourException.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/test/META-INF/kotlin-interpreter-skeleton_test.kotlin_module b/kotlin-interpreter-skeleton/build/classes/kotlin/test/META-INF/kotlin-interpreter-skeleton_test.kotlin_module new file mode 100644 index 0000000..1e9f2ca Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/test/META-INF/kotlin-interpreter-skeleton_test.kotlin_module differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question1Tests.class b/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question1Tests.class new file mode 100644 index 0000000..51cfeac Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question1Tests.class differ diff --git a/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question2Tests.class b/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question2Tests.class new file mode 100644 index 0000000..02844dd Binary files /dev/null and b/kotlin-interpreter-skeleton/build/classes/kotlin/test/proglang/Question2Tests.class differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..c0d4bdf Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..f11f9b0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..899be2e Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..caef766 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..180ad67 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..348396c Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..5d95cf3 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..5d40ee5 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..09407ef Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..6d24288 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..509656f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..523d5d7 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..5d95cf3 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..5d40ee5 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..09407ef Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..c535171 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..509656f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..02f359d Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..c0a7835 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..cee4851 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..8fe89d8 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..64d61ce Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..7709eba Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab new file mode 100644 index 0000000..108a8d0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream new file mode 100644 index 0000000..09662ec Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len new file mode 100644 index 0000000..11d24d5 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at new file mode 100644 index 0000000..e83bb44 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i new file mode 100644 index 0000000..5d63a75 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..2d8ea20 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..df72f28 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..a123325 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..0539f67 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..d98a1b4 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..83caeff Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..0d91ae8 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..1658432 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..899be2e Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..9350f4a Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..a9c6787 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab new file mode 100644 index 0000000..a94660f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream new file mode 100644 index 0000000..c0b97b6 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len new file mode 100644 index 0000000..ce0025a Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at new file mode 100644 index 0000000..18e42a0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i new file mode 100644 index 0000000..e808b06 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab new file mode 100644 index 0000000..021c095 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream new file mode 100644 index 0000000..600e241 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len new file mode 100644 index 0000000..a11dcdc Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len new file mode 100644 index 0000000..9911af5 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at new file mode 100644 index 0000000..bf89dd1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i new file mode 100644 index 0000000..70feff3 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..9202d67 --- /dev/null +++ b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +9 +0 \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..ccc44f7 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..1658432 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..899be2e Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..a30ec1a Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..a9c6787 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..85e128f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..afd1b6e Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..9a6f654 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..eb0b8a0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..065a593 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i new file mode 100644 index 0000000..cdf4c62 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..e498675 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..ee774c5 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..7ebb6d2 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..36689b0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..25cb227 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..444fb7c Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..65f8277 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..b1a1f6a Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin new file mode 100644 index 0000000..9611a9f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..f1be327 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..396d9c7 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..e8c8124 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..817b326 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..70d775b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..cb4ed75 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..e787f5b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..ee08622 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..7274ac0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..fc0e221 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..f6643f0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..83a0d4d Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..ee08622 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..7274ac0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..a4b2a7b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..f6643f0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..83a0d4d Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..502bac4 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..7274ac0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..a4b2a7b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..83cd7c4 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..43c990d Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..66b0347 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..2ea7305 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..a9f80ae Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..6151f39 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..564ce95 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..a78a068 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..13fe63e Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..e8c8124 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..817b326 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..f183561 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..ec59645 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..2ceb12b --- /dev/null +++ b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +2 +0 \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..c40ec4c Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..dc7c284 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..cfeb6a8 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..7d30a43 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..361b980 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..68ea170 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..100d205 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..ccfcbf4 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..a4b2a7b Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i new file mode 100644 index 0000000..f768a77 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..330728f Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..0a67177 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..a8634d7 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..76c2a91 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..4c3e888 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..f0ff6af Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..2161fc0 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..14b94e1 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin new file mode 100644 index 0000000..75827ce Binary files /dev/null and b/kotlin-interpreter-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin differ diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/classes/proglang.Question1Tests.html b/kotlin-interpreter-skeleton/build/reports/tests/test/classes/proglang.Question1Tests.html new file mode 100644 index 0000000..e0a756d --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/classes/proglang.Question1Tests.html @@ -0,0 +1,261 @@ + + + + + +Test results - Class proglang.Question1Tests + + + + + +
+

Class proglang.Question1Tests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
34
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.093s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
add literals0.001spassed
add literals toString0spassed
add vars0.001spassed
add vars toString0spassed
complex expression0.002spassed
complex expression toString0.017spassed
div 1 vars0.003spassed
div 1 vars toString0.003spassed
div 2 vars0.002spassed
div 2 vars toString0.002spassed
div exception0.001spassed
div literals 10.001spassed
div literals 1 toString0spassed
div literals 20spassed
div literals 2 toString0.003spassed
div zero toString0.001spassed
fact exception0spassed
fact literals0spassed
fact literals toString0spassed
fact var0.001spassed
fact var toString0.001spassed
literal0.001spassed
literal toString0spassed
mul literals0spassed
mul literals toString0spassed
mul vars0spassed
mul vars toString0.014spassed
sub literals0spassed
sub literals toString0.001spassed
sub vars0.033spassed
sub vars toString0.001spassed
var0.001spassed
var exception0.001spassed
var toString0.002spassed
+
+
+ +
+ + diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/css/base-style.css b/kotlin-interpreter-skeleton/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/css/style.css b/kotlin-interpreter-skeleton/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/index.html b/kotlin-interpreter-skeleton/build/reports/tests/test/index.html new file mode 100644 index 0000000..04487a5 --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
34
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.093s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+proglang +34000.093s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+proglang.Question1Tests +34000.093s100%
+
+
+ +
+ + diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/js/report.js b/kotlin-interpreter-skeleton/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/build/reports/tests/test/packages/proglang.html b/kotlin-interpreter-skeleton/build/reports/tests/test/packages/proglang.html new file mode 100644 index 0000000..4317bf5 --- /dev/null +++ b/kotlin-interpreter-skeleton/build/reports/tests/test/packages/proglang.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package proglang + + + + + +
+

Package proglang

+ +
+ + + + + +
+
+ + + + + + + +
+
+
34
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.093s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+Question1Tests +34000.093s100%
+
+
+ +
+ + diff --git a/kotlin-interpreter-skeleton/build/test-results/test/TEST-proglang.Question1Tests.xml b/kotlin-interpreter-skeleton/build/test-results/test/TEST-proglang.Question1Tests.xml new file mode 100644 index 0000000..40855bb --- /dev/null +++ b/kotlin-interpreter-skeleton/build/test-results/test/TEST-proglang.Question1Tests.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kotlin-interpreter-skeleton/build/test-results/test/binary/output.bin b/kotlin-interpreter-skeleton/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-interpreter-skeleton/build/test-results/test/binary/output.bin.idx b/kotlin-interpreter-skeleton/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/test-results/test/binary/output.bin.idx differ diff --git a/kotlin-interpreter-skeleton/build/test-results/test/binary/results.bin b/kotlin-interpreter-skeleton/build/test-results/test/binary/results.bin new file mode 100644 index 0000000..67b8009 Binary files /dev/null and b/kotlin-interpreter-skeleton/build/test-results/test/binary/results.bin differ diff --git a/kotlin-interpreter-skeleton/build/tmp/compileJava/previous-compilation-data.bin b/kotlin-interpreter-skeleton/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..967854a Binary files /dev/null and b/kotlin-interpreter-skeleton/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.jar b/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..033e24c Binary files /dev/null and b/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.jar differ diff --git a/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.properties b/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..62f495d --- /dev/null +++ b/kotlin-interpreter-skeleton/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kotlin-interpreter-skeleton/gradlew b/kotlin-interpreter-skeleton/gradlew new file mode 100644 index 0000000..fcb6fca --- /dev/null +++ b/kotlin-interpreter-skeleton/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +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 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + 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 +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin-interpreter-skeleton/gradlew.bat b/kotlin-interpreter-skeleton/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/kotlin-interpreter-skeleton/gradlew.bat @@ -0,0 +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 diff --git a/kotlin-interpreter-skeleton/src/main/java/proglang/SequentialProgram.java b/kotlin-interpreter-skeleton/src/main/java/proglang/SequentialProgram.java new file mode 100644 index 0000000..62f0382 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/main/java/proglang/SequentialProgram.java @@ -0,0 +1,4 @@ +package proglang; + +class SequentialProgram { +} diff --git a/kotlin-interpreter-skeleton/src/main/kotlin/proglang/BoolExpr.kt b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/BoolExpr.kt new file mode 100644 index 0000000..900804e --- /dev/null +++ b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/BoolExpr.kt @@ -0,0 +1,43 @@ +package proglang + +interface BoolExpr { + override fun toString(): String + class LessThan(val lhs: IntExpr, val rhs: IntExpr) : BoolExpr { + override fun toString() = "$lhs < $rhs" + } + + class GreaterThan(val lhs: IntExpr, val rhs: IntExpr) : BoolExpr { + override fun toString() = "$lhs > $rhs" + } + + class Equals(val lhs: IntExpr, val rhs: IntExpr) : BoolExpr { + override fun toString() = "$lhs = $rhs" + } + + class And(val lhs: BoolExpr, val rhs: BoolExpr) : BoolExpr { + override fun toString() = "$lhs ^ $rhs" + } + + class Or(val lhs: BoolExpr, val rhs: BoolExpr) : BoolExpr { + override fun toString() = "$lhs || $rhs" + } + + class Not(val expr: BoolExpr) : BoolExpr { + override fun toString() = "!$expr" + } + + class Paren(val expr: BoolExpr) : BoolExpr { + override fun toString() = "($expr)" + } +} + +fun BoolExpr.eval(store: Map): Boolean = when (this) { + is BoolExpr.LessThan -> lhs.eval(store) < rhs.eval(store) + is BoolExpr.GreaterThan -> lhs.eval(store) > rhs.eval(store) + is BoolExpr.Equals -> lhs.eval(store) == rhs.eval(store) + is BoolExpr.And -> lhs.eval(store) && rhs.eval(store) + is BoolExpr.Or -> lhs.eval(store) || rhs.eval(store) + is BoolExpr.Not -> !expr.eval(store) + is BoolExpr.Paren -> expr.eval(store) + else -> throw UnsupportedOperationException("The above should account for all kinds of IntExpr.") +} diff --git a/kotlin-interpreter-skeleton/src/main/kotlin/proglang/IntExpr.kt b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/IntExpr.kt new file mode 100644 index 0000000..87b2d11 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/IntExpr.kt @@ -0,0 +1,61 @@ +package proglang + +fun factorial(int: Int): Int { + var cnt = int + var result = 1; + while (cnt != 0) result *= (cnt--) + return result +} + +interface IntExpr { + override fun toString(): String + class Add(val lhs: IntExpr, val rhs: IntExpr) : IntExpr { + override fun toString() = "$lhs + $rhs" + } + + class Sub(val lhs: IntExpr, val rhs: IntExpr) : IntExpr { + override fun toString() = "$lhs - $rhs" + } + + class Literal(val value: Int) : IntExpr { + override fun toString() = "$value" + } + + class Var(val name: String) : IntExpr { + override fun toString() = name + } + + class Mul(val lhs: IntExpr, val rhs: IntExpr) : IntExpr { + override fun toString() = "$lhs * $rhs" + } + + class Div(val lhs: IntExpr, val rhs: IntExpr) : IntExpr { + override fun toString() = "$lhs / $rhs" + } + + class Fact(val expr: IntExpr) : IntExpr { + override fun toString() = "$expr!" + } + + class Paren(val expr: IntExpr) : IntExpr { + override fun toString() = "($expr)" + } +} + +fun IntExpr.eval(store: Map): Int = when (this) { + is IntExpr.Add -> lhs.eval(store) + rhs.eval(store) + is IntExpr.Sub -> lhs.eval(store) - rhs.eval(store) + is IntExpr.Literal -> value + is IntExpr.Var -> store[name] ?: throw UndefinedBehaviourException("Variable $name is not defined.") + is IntExpr.Mul -> lhs.eval(store) * rhs.eval(store) + is IntExpr.Div -> rhs.eval(store).let { quotient -> + if (quotient != 0) lhs.eval(store) / quotient + else throw UndefinedBehaviourException("Attempt to divide by zero.") + } + is IntExpr.Fact -> expr.eval(store).let { + if (it >= 0) factorial(it) + else throw UndefinedBehaviourException("Attempt to get factorial of a negative.") + } + is IntExpr.Paren -> expr.eval(store) + else -> throw UnsupportedOperationException("The above should account for all kinds of IntExpr.") +} diff --git a/kotlin-interpreter-skeleton/src/main/kotlin/proglang/Stmt.kt b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/Stmt.kt new file mode 100644 index 0000000..5d5b21b --- /dev/null +++ b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/Stmt.kt @@ -0,0 +1,7 @@ +package proglang + +interface Stmt( + var next: Stmt? +) { + val lastInSequence +} \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/src/main/kotlin/proglang/UndefinedBehaviourException.kt b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/UndefinedBehaviourException.kt new file mode 100644 index 0000000..623ec91 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/main/kotlin/proglang/UndefinedBehaviourException.kt @@ -0,0 +1,3 @@ +package proglang + +class UndefinedBehaviourException(message: String) : Exception(message) diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question1Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question1Tests.kt new file mode 100644 index 0000000..a371e85 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question1Tests.kt @@ -0,0 +1,253 @@ +package proglang + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertSame +import kotlin.test.fail + +class Question1Tests { + + private val store: Map = mapOf( + "a" to 1, + "b" to -2, + "c" to 3, + "d" to -4, + "e" to 5, + "f" to -6, + "g" to 7, + ) + + @Test + fun `add literals`() { + assertEquals(25, IntExpr.Add(IntExpr.Literal(5), IntExpr.Literal(20)).eval(store)) + } + + @Test + fun `sub literals`() { + assertEquals(-15, IntExpr.Sub(IntExpr.Literal(5), IntExpr.Literal(20)).eval(store)) + } + + @Test + fun `mul literals`() { + assertEquals(100, IntExpr.Mul(IntExpr.Literal(5), IntExpr.Literal(20)).eval(store)) + } + + @Test + fun `div literals 1`() { + assertEquals(4, IntExpr.Div(IntExpr.Literal(20), IntExpr.Literal(5)).eval(store)) + } + + @Test + fun `div literals 2`() { + assertEquals(4, IntExpr.Div(IntExpr.Literal(17), IntExpr.Literal(4)).eval(store)) + } + + @Test + fun `fact literals`() { + assertEquals(720, IntExpr.Fact(IntExpr.Literal(6)).eval(store)) + } + + @Test + fun `var`() { + assertEquals(1000, IntExpr.Var("foo").eval(mapOf("foo" to 1000))) + } + + @Test + fun literal() { + assertEquals(42, IntExpr.Literal(42).eval(store)) + } + + @Test + fun `add vars`() { + assertEquals(-1, IntExpr.Add(IntExpr.Var("a"), IntExpr.Var("b")).eval(store)) + } + + @Test + fun `sub vars`() { + assertEquals(7, IntExpr.Sub(IntExpr.Var("c"), IntExpr.Var("d")).eval(store)) + } + + @Test + fun `mul vars`() { + assertEquals(-30, IntExpr.Mul(IntExpr.Var("e"), IntExpr.Var("f")).eval(store)) + } + + @Test + fun `div 1 vars`() { + assertEquals(3, IntExpr.Div(IntExpr.Var("f"), IntExpr.Var("b")).eval(store)) + } + + @Test + fun `div 2 vars`() { + assertEquals(2, IntExpr.Div(IntExpr.Var("g"), IntExpr.Var("c")).eval(store)) + } + + @Test + fun `fact var`() { + assertEquals(120, IntExpr.Fact(IntExpr.Var("e")).eval(store)) + } + + @Test + fun `var exception`() { + try { + IntExpr.Var("x").eval(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: an exception was expected + } + } + + @Test + fun `fact exception`() { + try { + IntExpr.Fact(IntExpr.Var("b")).eval(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: an exception was expected + } + } + + @Test + fun `div exception`() { + try { + IntExpr.Div(IntExpr.Var("c"), IntExpr.Literal(0)).eval(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: an exception was expected + } + } + + @Test + fun `complex expression`() { + // ((b / a) * b)! + (e - f) * 14 + val a = IntExpr.Var("a") + val b = IntExpr.Var("b") + val e = IntExpr.Var("e") + val f = IntExpr.Var("f") + val `14` = IntExpr.Literal(14) + val `b div a` = IntExpr.Div(b, a) + val `(b div a)` = IntExpr.Paren(`b div a`) + val `(b div a) mul b` = IntExpr.Mul(`(b div a)`, b) + val `((b div a) mul b)` = IntExpr.Paren(`(b div a) mul b`) + val `((b div a) mul b)!` = IntExpr.Fact(`((b div a) mul b)`) + val `e - f` = IntExpr.Sub(e, f) + val `(e - f)` = IntExpr.Paren(`e - f`) + val `(e - f) mul 14` = IntExpr.Mul(`(e - f)`, `14`) + val `((b div a) mul b)! + (e - f) mul 14` = IntExpr.Add(`((b div a) mul b)!`, `(e - f) mul 14`) + assertEquals(178, `((b div a) mul b)! + (e - f) mul 14`.eval(store)) + assertSame(`((b div a) mul b)!`, `((b div a) mul b)! + (e - f) mul 14`.lhs) + assertSame(`((b div a) mul b)`, `((b div a) mul b)!`.expr) + assertSame(`(b div a) mul b`, `((b div a) mul b)`.expr) + assertSame(`(b div a)`, `(b div a) mul b`.lhs) + assertSame(`b div a`, `(b div a)`.expr) + assertSame(b, `b div a`.lhs) + assertSame(a, `b div a`.rhs) + assertSame(b, `(b div a) mul b`.rhs) + assertSame(`(e - f) mul 14`, `((b div a) mul b)! + (e - f) mul 14`.rhs) + assertSame(`(e - f)`, `(e - f) mul 14`.lhs) + assertSame(`e - f`, `(e - f)`.expr) + assertSame(e, `e - f`.lhs) + assertSame(f, `e - f`.rhs) + assertSame(`14`, `(e - f) mul 14`.rhs) + assertEquals("a", a.name) + assertEquals("b", b.name) + assertEquals("e", e.name) + assertEquals("f", f.name) + assertEquals(14, `14`.value) + } + + @Test + fun `add literals toString`() { + assertEquals("5 + 20", IntExpr.Add(IntExpr.Literal(5), IntExpr.Literal(20)).toString()) + } + + @Test + fun `sub literals toString`() { + assertEquals("5 - 20", IntExpr.Sub(IntExpr.Literal(5), IntExpr.Literal(20)).toString()) + } + + @Test + fun `mul literals toString`() { + assertEquals("5 * 20", IntExpr.Mul(IntExpr.Literal(5), IntExpr.Literal(20)).toString()) + } + + @Test + fun `div literals 1 toString`() { + assertEquals("20 / 5", IntExpr.Div(IntExpr.Literal(20), IntExpr.Literal(5)).toString()) + } + + @Test + fun `div literals 2 toString`() { + assertEquals("17 / 4", IntExpr.Div(IntExpr.Literal(17), IntExpr.Literal(4)).toString()) + } + + @Test + fun `fact literals toString`() { + assertEquals("6!", IntExpr.Fact(IntExpr.Literal(6)).toString()) + } + + @Test + fun `var toString`() { + assertEquals("foo", IntExpr.Var("foo").toString()) + } + + @Test + fun `literal toString`() { + assertEquals("42", IntExpr.Literal(42).toString()) + } + + @Test + fun `add vars toString`() { + assertEquals("a + b", IntExpr.Add(IntExpr.Var("a"), IntExpr.Var("b")).toString()) + } + + @Test + fun `sub vars toString`() { + assertEquals("c - d", IntExpr.Sub(IntExpr.Var("c"), IntExpr.Var("d")).toString()) + } + + @Test + fun `mul vars toString`() { + assertEquals("e * f", IntExpr.Mul(IntExpr.Var("e"), IntExpr.Var("f")).toString()) + } + + @Test + fun `div 1 vars toString`() { + assertEquals("f / b", IntExpr.Div(IntExpr.Var("f"), IntExpr.Var("b")).toString()) + } + + @Test + fun `div 2 vars toString`() { + assertEquals("g / c", IntExpr.Div(IntExpr.Var("g"), IntExpr.Var("c")).toString()) + } + + @Test + fun `fact var toString`() { + assertEquals("e!", IntExpr.Fact(IntExpr.Var("e")).toString()) + } + + @Test + fun `div zero toString`() { + assertEquals("c / 0", IntExpr.Div(IntExpr.Var("c"), IntExpr.Literal(0)).toString()) + } + + @Test + fun `complex expression toString`() { + // ((b / a) * b)! + (e - f) * 14 + val a = IntExpr.Var("a") + val b = IntExpr.Var("b") + val e = IntExpr.Var("e") + val f = IntExpr.Var("f") + val `14` = IntExpr.Literal(14) + val `b div a` = IntExpr.Div(b, a) + val `(b div a)` = IntExpr.Paren(`b div a`) + val `(b div a) mul b` = IntExpr.Mul(`(b div a)`, b) + val `((b div a) mul b)` = IntExpr.Paren(`(b div a) mul b`) + val `((b div a) mul b)!` = IntExpr.Fact(`((b div a) mul b)`) + val `e - f` = IntExpr.Sub(e, f) + val `(e - f)` = IntExpr.Paren(`e - f`) + val `(e - f) mul 14` = IntExpr.Mul(`(e - f)`, `14`) + val `((b div a) mul b)! + (e - f) mul 14` = IntExpr.Add(`((b div a) mul b)!`, `(e - f) mul 14`) + assertEquals("((b / a) * b)! + (e - f) * 14", `((b div a) mul b)! + (e - f) mul 14`.toString()) + } +} \ No newline at end of file diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question2Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question2Tests.kt new file mode 100644 index 0000000..6ff6b14 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question2Tests.kt @@ -0,0 +1,197 @@ +package proglang + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue +import kotlin.test.fail + +class Question2Tests { + + private val store: Map = mapOf( + "a" to 1, + "b" to -2, + "c" to 3, + "d" to -4, + "e" to 5, + "f" to -6, + "g" to 7, + "h" to 0, + ) + + @Test + fun `less than`() { + assertTrue(BoolExpr.LessThan(IntExpr.Literal(1), IntExpr.Literal(2)).eval(store)) + assertFalse(BoolExpr.LessThan(IntExpr.Literal(1), IntExpr.Literal(1)).eval(store)) + } + + @Test + fun `greater than`() { + assertTrue(BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)).eval(store)) + assertFalse(BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(10)).eval(store)) + } + + @Test + fun equals() { + assertTrue(BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Var("a")).eval(store)) + assertFalse(BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")).eval(store)) + } + + @Test + fun and() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertFalse(BoolExpr.And(falseExpr, falseExpr).eval(store)) + assertFalse(BoolExpr.And(falseExpr, trueExpr).eval(store)) + assertFalse(BoolExpr.And(trueExpr, falseExpr).eval(store)) + assertTrue(BoolExpr.And(trueExpr, trueExpr).eval(store)) + } + + @Test + fun or() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertFalse(BoolExpr.Or(falseExpr, falseExpr).eval(store)) + assertTrue(BoolExpr.Or(falseExpr, trueExpr).eval(store)) + assertTrue(BoolExpr.Or(trueExpr, falseExpr).eval(store)) + assertTrue(BoolExpr.Or(trueExpr, trueExpr).eval(store)) + } + + @Test + fun not() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertTrue(BoolExpr.Not(BoolExpr.Paren(falseExpr)).eval(store)) + assertFalse(BoolExpr.Not(BoolExpr.Paren(trueExpr)).eval(store)) + } + + @Test + fun paren() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertTrue(BoolExpr.Paren(trueExpr).eval(store)) + assertFalse(BoolExpr.Paren(falseExpr).eval(store)) + } + + @Test + fun `and short circuit`() { + assertFalse( + BoolExpr.And( + BoolExpr.Not(BoolExpr.Paren(BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0)))), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).eval(store), + ) + } + + @Test + fun `and short circuit exception`() { + try { + BoolExpr.And( + BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0)), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).eval(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: an exception was expected. + } + } + + @Test + fun `or short circuit`() { + assertTrue( + BoolExpr.Or( + BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0)), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).eval(store), + ) + } + + @Test + fun `or short circuit exception`() { + try { + BoolExpr.Or( + BoolExpr.Not(BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0))), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).eval(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: an exception was expected. + } + } + + @Test + fun `less than toString`() { + assertEquals("1 < 2", BoolExpr.LessThan(IntExpr.Literal(1), IntExpr.Literal(2)).toString()) + assertEquals("1 < 1", BoolExpr.LessThan(IntExpr.Literal(1), IntExpr.Literal(1)).toString()) + } + + @Test + fun `greater than toString`() { + assertEquals("10 > 2", BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)).toString()) + assertEquals("10 > 10", BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(10)).toString()) + } + + @Test + fun `equals toString`() { + assertEquals("1 == a", BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Var("a")).toString()) + assertEquals("f == a", BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")).toString()) + } + + @Test + fun `and toString`() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertEquals("f == a && f == a", BoolExpr.And(falseExpr, falseExpr).toString()) + assertEquals("f == a && 10 > 2", BoolExpr.And(falseExpr, trueExpr).toString()) + assertEquals("10 > 2 && f == a", BoolExpr.And(trueExpr, falseExpr).toString()) + assertEquals("10 > 2 && 10 > 2", BoolExpr.And(trueExpr, trueExpr).toString()) + } + + @Test + fun `or toString`() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertEquals("f == a || f == a", BoolExpr.Or(falseExpr, falseExpr).toString()) + assertEquals("f == a || 10 > 2", BoolExpr.Or(falseExpr, trueExpr).toString()) + assertEquals("10 > 2 || f == a", BoolExpr.Or(trueExpr, falseExpr).toString()) + assertEquals("10 > 2 || 10 > 2", BoolExpr.Or(trueExpr, trueExpr).toString()) + } + + @Test + fun `not toString`() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertEquals("!(f == a)", BoolExpr.Not(BoolExpr.Paren(falseExpr)).toString()) + assertEquals("!(10 > 2)", BoolExpr.Not(BoolExpr.Paren(trueExpr)).toString()) + } + + @Test + fun `paren toString`() { + val trueExpr = BoolExpr.GreaterThan(IntExpr.Literal(10), IntExpr.Literal(2)) + val falseExpr = BoolExpr.Equals(IntExpr.Var("f"), IntExpr.Var("a")) + assertEquals("(10 > 2)", BoolExpr.Paren(trueExpr).toString()) + assertEquals("(f == a)", BoolExpr.Paren(falseExpr).toString()) + } + + @Test + fun `and short circuit toString`() { + assertEquals( + "!(h == 0) && 1 == a / h", + BoolExpr.And( + BoolExpr.Not(BoolExpr.Paren(BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0)))), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).toString(), + ) + } + + @Test + fun `or short circuit toString`() { + assertEquals( + "h == 0 || 1 == a / h", + BoolExpr.Or( + BoolExpr.Equals(IntExpr.Var("h"), IntExpr.Literal(0)), + BoolExpr.Equals(IntExpr.Literal(1), IntExpr.Div(IntExpr.Var("a"), IntExpr.Var("h"))), + ).toString(), + ) + } +} diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question3Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question3Tests.kt new file mode 100644 index 0000000..fc4d0c2 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question3Tests.kt @@ -0,0 +1,285 @@ +package proglang + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull +import kotlin.test.assertSame + +class Question3Tests { + + @Test + fun `next stmt1`() { + val stmts = stmt1() + assertSame(stmts[1], stmts[0].next) + assertSame(stmts[2], stmts[0].next!!.next) + assertNull(stmts[0].next!!.next!!.next) + } + + @Test + fun `next stmt2`() { + val stmts = stmt2() + assertSame(stmts[1], stmts[0].next) + assertSame(stmts[2], stmts[0].next!!.next) + assertSame(stmts[3], stmts[0].next!!.next!!.next) + assertSame(stmts[4], stmts[0].next!!.next!!.next!!.next) + assertNull(stmts[0].next!!.next!!.next!!.next!!.next) + } + + @Test + fun `next stmt3`() { + val stmts = stmt3() + assertNull(stmts[0].next) + } + + @Test + fun `next stmt4`() { + val stmts = stmt4() + assertSame(stmts[1], stmts[0].next) + assertSame(stmts[2], stmts[0].next!!.next) + assertNull(stmts[0].next!!.next!!.next) + } + + @Test + fun `next stmt5`() { + val stmts = stmt5() + assertNull(stmts[0].next) + } + + @Test + fun `lastInSequence stmt1`() { + val stmts = stmt1() + assertSame(stmts.last(), stmts[0].lastInSequence) + } + + @Test + fun `lastInSequence stmt2`() { + val stmts = stmt2() + assertSame(stmts.last(), stmts[0].lastInSequence) + } + + @Test + fun `lastInSequence stmt3`() { + val stmts = stmt3() + assertSame(stmts.last(), stmts[0].lastInSequence) + } + + @Test + fun `lastInSequence stmt4`() { + val stmts = stmt4() + assertSame(stmts.last(), stmts[0].lastInSequence) + } + + @Test + fun `lastInSequence stmt5`() { + val stmts = stmt5() + assertSame(stmts.last(), stmts[0].lastInSequence) + } + + @Test + fun `toString stmt1`() { + val expected = """ + a = b + b = 12 + c = c / a + + """.trimIndent() + assertEquals(expected, stmt1()[0].toString()) + } + + @Test + fun `toString stmt2`() { + val expected = """ + x = (a + b) * c + y = x - c! + a = 0 + b = 1 + a + c = (2 + b) + + """.trimIndent() + assertEquals(expected, stmt2()[0].toString()) + } + + @Test + fun `toString stmt3`() { + val expected = """ + if (a < 0) { + b = 42 + b = b + 1 + } else { + if (a > b) { + c = 42 + } else { + c = 0 - 42 + } + } + + """.trimIndent() + assertEquals(expected, stmt3()[0].toString()) + } + + @Test + fun `toString stmt4`() { + val expected = """ + if (a < 0) { + b = 42 + b = b + 1 + } + if (a > b) { + c = 42 + } else { + c = 0 - 42 + } + d = 12 + + """.trimIndent() + assertEquals(expected, stmt4()[0].toString()) + } + + @Test + fun `toString stmt5`() { + val expected = """ + if (a < b) { + tick = tick + 1 + if (c < d) { + tick = tick + 1 + if (e < f) { + tick = tick + 1 + } else { + if (a > b) { + tick = unreachable + } + } + } else { + if (c < d) { + tick = 0 / 0 + } + } + } + + """.trimIndent() + assertEquals(expected, stmt5()[0].toString()) + } +} + +private fun stmt1(): List { + val stmt1c = Stmt.Assign("c", IntExpr.Div(IntExpr.Var("c"), IntExpr.Var("a"))) + + val stmt1b = Stmt.Assign( + "b", + IntExpr.Literal(12), + stmt1c, + ) + + val stmt1a: Stmt = Stmt.Assign("a", IntExpr.Var("b"), stmt1b) + + return listOf(stmt1a, stmt1b, stmt1c) +} + +private fun stmt2(): List { + val stmt2e = Stmt.Assign("c", IntExpr.Paren(IntExpr.Add(IntExpr.Literal(2), IntExpr.Var("b")))) + + val stmt2d = Stmt.Assign( + "b", + IntExpr.Add(IntExpr.Literal(1), IntExpr.Var("a")), + stmt2e, + ) + val stmt2c = Stmt.Assign( + "a", + IntExpr.Literal(0), + stmt2d, + ) + val stmt2b = Stmt.Assign( + "y", + IntExpr.Sub(IntExpr.Var("x"), IntExpr.Fact(IntExpr.Var("c"))), + stmt2c, + ) + val stmt2a = Stmt.Assign( + "x", + IntExpr.Mul(IntExpr.Paren(IntExpr.Add(IntExpr.Var("a"), IntExpr.Var("b"))), IntExpr.Var("c")), + stmt2b, + ) + return listOf(stmt2a, stmt2b, stmt2c, stmt2d, stmt2e) +} + +private fun stmt3(): List { + val elseStmt = Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + ) + val thenStmt = Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign("b", IntExpr.Add(IntExpr.Var("b"), IntExpr.Literal(1))), + ) + val stmt3a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + thenStmt, + elseStmt, + ) + return listOf(stmt3a) +} + +private fun stmt4(): List { + val stmt4c = Stmt.Assign("d", IntExpr.Literal(12)) + + val stmt4b = Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + stmt4c, + ) + + val thenStmt = Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign( + "b", + IntExpr.Add( + IntExpr.Var("b"), + IntExpr.Literal(1), + ), + ), + ) + val stmt4a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + thenStmt, + null, + stmt4b, + ) + + return listOf(stmt4a, stmt4b, stmt4c) +} + +private fun stmt5(): List { + val thenStmt = Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("e"), IntExpr.Var("f")), + Stmt.Assign("tick", IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1))), + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("tick", IntExpr.Var("unreachable")), + ), + ), + ), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign("tick", IntExpr.Div(IntExpr.Literal(0), IntExpr.Literal(0))), + ), + ), + ) + val stmt5a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Var("b")), + thenStmt, + ) + return listOf(stmt5a) +} +*/ diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question4Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question4Tests.kt new file mode 100644 index 0000000..3c03744 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question4Tests.kt @@ -0,0 +1,195 @@ +package proglang + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull +import kotlin.test.assertSame + +class Question4Tests { + + @Test + fun `step stmt1`() { + val store = mutableMapOf("b" to 3, "c" to 24) + val stmts = stmt1() + val continuation = stmts[0].step(store) + assertSame(stmts[1], continuation) + assertEquals(mapOf("a" to 3, "b" to 3, "c" to 24), store) + } + + @Test + fun `step stmt2`() { + val store = mutableMapOf("a" to 12, "b" to 4, "c" to 3) + val stmts = stmt2() + val continuation = stmts[0].step(store) + assertSame(stmts[1], continuation) + assertEquals(mapOf("x" to 48, "a" to 12, "b" to 4, "c" to 3), store) + } + + @Test + fun `step stmt3`() { + val store = mutableMapOf("a" to -1) + val stmts = stmt3() + val continuation = stmts.first[0].step(store) + assertSame(stmts.second, continuation) + assertEquals(mapOf("a" to -1), store) + } + + @Test + fun `step stmt4 true condition`() { + val store = mutableMapOf("a" to -1) + val stmts = stmt4() + val continuation = stmts.first[0].step(store) + assertSame(stmts.second, continuation) + assertEquals(mapOf("a" to -1), store) + } + + @Test + fun `step stmt4 false condition`() { + val store = mutableMapOf("a" to 1) + val stmts = stmt4() + val continuation = stmts.first[0].step(store) + assertSame(stmts.first[1], continuation) + assertEquals(mapOf("a" to 1), store) + } + + @Test + fun `step stmt5 true condition`() { + val store = mutableMapOf("a" to 3, "b" to 5) + val stmts = stmt5() + val continuation = stmts.first[0].step(store) + assertSame(stmts.second, continuation) + assertEquals(mapOf("a" to 3, "b" to 5), store) + } + + @Test + fun `step stmt5 false condition`() { + val store = mutableMapOf("a" to 5, "b" to 3) + val stmts = stmt5() + val continuation = stmts.first[0].step(store) + assertNull(continuation) + assertEquals(mapOf("a" to 5, "b" to 3), store) + } +} + +private fun stmt1(): List { + val stmt1c = Stmt.Assign("c", IntExpr.Div(IntExpr.Var("c"), IntExpr.Var("a"))) + + val stmt1b = Stmt.Assign( + "b", + IntExpr.Literal(12), + stmt1c, + ) + + val stmt1a: Stmt = Stmt.Assign("a", IntExpr.Var("b"), stmt1b) + + return listOf(stmt1a, stmt1b, stmt1c) +} + +private fun stmt2(): List { + val stmt2e = Stmt.Assign("c", IntExpr.Paren(IntExpr.Add(IntExpr.Literal(2), IntExpr.Var("b")))) + + val stmt2d = Stmt.Assign( + "b", + IntExpr.Add(IntExpr.Literal(1), IntExpr.Var("a")), + stmt2e, + ) + val stmt2c = Stmt.Assign( + "a", + IntExpr.Literal(0), + stmt2d, + ) + val stmt2b = Stmt.Assign( + "y", + IntExpr.Sub(IntExpr.Var("x"), IntExpr.Fact(IntExpr.Var("c"))), + stmt2c, + ) + val stmt2a = Stmt.Assign( + "x", + IntExpr.Mul(IntExpr.Paren(IntExpr.Add(IntExpr.Var("a"), IntExpr.Var("b"))), IntExpr.Var("c")), + stmt2b, + ) + return listOf(stmt2a, stmt2b, stmt2c, stmt2d, stmt2e) +} + +private fun stmt3(): Triple, Stmt, Stmt> { + val elseStmt = Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + ) + val thenStmt = Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign("b", IntExpr.Add(IntExpr.Var("b"), IntExpr.Literal(1))), + ) + val stmt3a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + thenStmt, + elseStmt, + ) + return Triple(listOf(stmt3a), thenStmt, elseStmt) +} + +private fun stmt4(): Pair, Stmt> { + val stmt4c = Stmt.Assign("d", IntExpr.Literal(12)) + + val stmt4b = Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + stmt4c, + ) + + val thenStmt = Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign( + "b", + IntExpr.Add( + IntExpr.Var("b"), + IntExpr.Literal(1), + ), + ), + ) + val stmt4a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + thenStmt, + null, + stmt4b, + ) + + return Pair(listOf(stmt4a, stmt4b, stmt4c), thenStmt) +} + +private fun stmt5(): Pair, Stmt> { + val thenStmt = Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("e"), IntExpr.Var("f")), + Stmt.Assign("tick", IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1))), + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("tick", IntExpr.Var("unreachable")), + ), + ), + ), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign("tick", IntExpr.Div(IntExpr.Literal(0), IntExpr.Literal(0))), + ), + ), + ) + val stmt5a: Stmt = Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Var("b")), + thenStmt, + ) + return Pair(listOf(stmt5a), thenStmt) +} +*/ diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question5Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question5Tests.kt new file mode 100644 index 0000000..8dddea6 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question5Tests.kt @@ -0,0 +1,401 @@ +package proglang + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.fail + +class Question5Tests { + + @Test + fun `program 1 execution good`() { + val store = mapOf("b" to 3, "c" to 24) + val finalStore = program1().execute(store) + assertEquals( + mapOf("a" to 3, "b" to 12, "c" to 8), + finalStore, + ) + } + + @Test + fun `program 1 execution bad`() { + val store = mapOf("b" to 0, "c" to 24) + try { + program1().execute(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: exception was expected. + } + } + + @Test + fun `program 1 toString`() { + val expected: String = """ + a = b + b = 12 + c = c / a + + """.trimIndent() + assertEquals(expected, program1().toString()) + } + + @Test + fun `program 2 execution good`() { + val store = mapOf("a" to 12, "b" to 4, "c" to 3) + val finalStore = program2().execute(store) + assertEquals( + mapOf("a" to 0, "b" to 1, "c" to 3, "x" to 48, "y" to 42), + finalStore, + ) + } + + @Test + fun `program 2 execution bad`() { + val store = mapOf("a" to 12, "b" to 4, "c" to -3) + try { + program2().execute(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: exception was expected. + } + } + + @Test + fun `program 2 toString`() { + val expected: String = """ + x = (a + b) * c + y = x - c! + a = 0 + b = 1 + a + c = (2 + b) + + """.trimIndent() + assertEquals(expected, program2().toString()) + } + + @Test + fun `program 3 execution good 1`() { + val store = mapOf("a" to -1) + val finalStore = program3().execute(store) + assertEquals( + mapOf("a" to -1, "b" to 43), + finalStore, + ) + } + + @Test + fun `program 3 execution good 2`() { + val store = mapOf("a" to 100, "b" to 200) + val finalStore = program3().execute(store) + assertEquals( + mapOf("a" to 100, "b" to 200, "c" to -42), + finalStore, + ) + } + + @Test + fun `program 3 execution good 3`() { + val store = mapOf("a" to 100, "b" to -100) + val finalStore = program3().execute(store) + assertEquals( + mapOf("a" to 100, "b" to -100, "c" to 42), + finalStore, + ) + } + + @Test + fun `program 3 execution bad`() { + val store = mapOf("a" to 100) + try { + program3().execute(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: exception was expected. + } + } + + @Test + fun `program 3 toString`() { + val expected: String = """ + if (a < 0) { + b = 42 + b = b + 1 + } else { + if (a > b) { + c = 42 + } else { + c = 0 - 42 + } + } + + """.trimIndent() + assertEquals(expected, program3().toString()) + } + + @Test + fun `program 4 execution good 1`() { + val store = mapOf("a" to -1) + val finalStore = program4().execute(store) + assertEquals( + mapOf("a" to -1, "b" to 43, "c" to -42, "d" to 12), + finalStore, + ) + } + + @Test + fun `program 4 execution good 2`() { + val store = mapOf("a" to 10, "b" to 5) + val finalStore = program4().execute(store) + assertEquals( + mapOf("a" to 10, "b" to 5, "c" to 42, "d" to 12), + finalStore, + ) + } + + @Test + fun `program 4 execution good 3`() { + val store = mapOf("a" to 10, "b" to 20) + val finalStore = program4().execute(store) + assertEquals( + mapOf("a" to 10, "b" to 20, "c" to -42, "d" to 12), + finalStore, + ) + } + + @Test + fun `program 4 execution bad`() { + val store = mapOf("b" to 0, "c" to 0, "d" to 0) + try { + program4().execute(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: exception was expected. + } + } + + @Test + fun `program 4 toString`() { + val expected: String = """ + if (a < 0) { + b = 42 + b = b + 1 + } + if (a > b) { + c = 42 + } else { + c = 0 - 42 + } + d = 12 + + """.trimIndent() + assertEquals(expected, program4().toString()) + } + + @Test + fun `program 5 execution good 1`() { + val store = mapOf("a" to 5, "b" to 3) + val finalStore = program5().execute(store) + assertEquals( + mapOf("a" to 5, "b" to 3), + finalStore, + ) + } + + @Test + fun `program 5 execution good 2`() { + val store = mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 5, "tick" to 0) + val finalStore = program5().execute(store) + assertEquals( + mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 5, "tick" to 1), + finalStore, + ) + } + + @Test + fun `program 5 execution good 3`() { + val store = mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 8, "e" to 5, "f" to 4, "tick" to 13) + val finalStore = program5().execute(store) + assertEquals( + mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 8, "e" to 5, "f" to 4, "tick" to 15), + finalStore, + ) + } + + @Test + fun `program 5 execution good 4`() { + val store = mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 8, "e" to 10, "f" to 20, "tick" to 22) + val finalStore = program5().execute(store) + assertEquals( + mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 8, "e" to 10, "f" to 20, "tick" to 25), + finalStore, + ) + } + + @Test + fun `program 5 execution bad`() { + val store = mapOf("a" to 2, "b" to 4, "c" to 6, "d" to 8, "e" to 10) + try { + program5().execute(store) + fail("Expected UndefinedBehaviourException") + } catch (_: UndefinedBehaviourException) { + // Good: exception was expected. + } + } + + @Test + fun `program 5 toString`() { + val expected: String = """ + if (a < b) { + tick = tick + 1 + if (c < d) { + tick = tick + 1 + if (e < f) { + tick = tick + 1 + } else { + if (a > b) { + tick = unreachable + } + } + } else { + if (c < d) { + tick = 0 / 0 + } + } + } + + """.trimIndent() + assertEquals(expected, program5().toString()) + } + + private fun program1(): SequentialProgram = SequentialProgram( + Stmt.Assign( + "a", + IntExpr.Var("b"), + Stmt.Assign( + "b", + IntExpr.Literal(12), + Stmt.Assign( + "c", + IntExpr.Div( + IntExpr.Var("c"), + IntExpr.Var("a"), + ), + ), + ), + ), + ) + + private fun program2(): SequentialProgram = SequentialProgram( + Stmt.Assign( + "x", + IntExpr.Mul( + IntExpr.Paren( + IntExpr.Add( + IntExpr.Var("a"), + IntExpr.Var("b"), + ), + ), + IntExpr.Var("c"), + ), + Stmt.Assign( + "y", + IntExpr.Sub( + IntExpr.Var("x"), + IntExpr.Fact( + IntExpr.Var("c"), + ), + ), + Stmt.Assign( + "a", + IntExpr.Literal(0), + Stmt.Assign( + "b", + IntExpr.Add( + IntExpr.Literal(1), + IntExpr.Var("a"), + ), + Stmt.Assign( + "c", + IntExpr.Paren( + IntExpr.Add( + IntExpr.Literal(2), + IntExpr.Var("b"), + ), + ), + ), + ), + ), + ), + ), + ) + + private fun program3(): SequentialProgram = SequentialProgram( + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign("b", IntExpr.Add(IntExpr.Var("b"), IntExpr.Literal(1))), + ), + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + ), + ), + ) + + private fun program4(): SequentialProgram = SequentialProgram( + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Literal(0)), + Stmt.Assign( + "b", + IntExpr.Literal(42), + Stmt.Assign( + "b", + IntExpr.Add( + IntExpr.Var("b"), + IntExpr.Literal(1), + ), + ), + ), + null, + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("c", IntExpr.Literal(42)), + Stmt.Assign("c", IntExpr.Sub(IntExpr.Literal(0), IntExpr.Literal(42))), + Stmt.Assign("d", IntExpr.Literal(12)), + ), + ), + ) + + private fun program5(): SequentialProgram = SequentialProgram( + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign( + "tick", + IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1)), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("e"), IntExpr.Var("f")), + Stmt.Assign("tick", IntExpr.Add(IntExpr.Var("tick"), IntExpr.Literal(1))), + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("a"), IntExpr.Var("b")), + Stmt.Assign("tick", IntExpr.Var("unreachable")), + ), + ), + ), + Stmt.If( + BoolExpr.LessThan(IntExpr.Var("c"), IntExpr.Var("d")), + Stmt.Assign("tick", IntExpr.Div(IntExpr.Literal(0), IntExpr.Literal(0))), + ), + ), + ), + ), + ) +} +*/ diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question6Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question6Tests.kt new file mode 100644 index 0000000..2a1dea8 --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question6Tests.kt @@ -0,0 +1,205 @@ +package proglang + +/* +import kotlin.test.Test +import kotlin.test.assertEquals + +class Question6Tests { + + @Test + fun `loopy program 1 execution 1`() { + val finalStore = loopyProgram1().execute( + mapOf("value" to 10, "repeats" to 20), + ) + assertEquals(mapOf("value" to 10, "repeats" to 20, "counter" to 20, "result" to 200), finalStore) + } + + @Test + fun `loopy program 1 execution 2`() { + val finalStore = loopyProgram1().execute( + mapOf("value" to 1, "repeats" to 5), + ) + assertEquals(mapOf("value" to 1, "repeats" to 5, "counter" to 5, "result" to 5), finalStore) + } + + @Test + fun `loopy program 1 execution 3`() { + val finalStore = loopyProgram1().execute( + mapOf("value" to 0, "repeats" to 0), + ) + assertEquals(mapOf("value" to 0, "repeats" to 0, "counter" to 0, "result" to 0), finalStore) + } + + @Test + fun `loopy program 1 toString`() { + val expected = """ + result = 0 + counter = 0 + while (counter < repeats) { + result = result + value + counter = counter + 1 + } + + """.trimIndent() + assertEquals(expected, loopyProgram1().toString()) + } + + @Test + fun `loopy program 2 execution 1`() { + val finalStore = loopyProgram2().execute( + mapOf("m" to 0, "n" to 0, "c1" to 0, "c2" to 0), + ) + assertEquals(mapOf("m" to 0, "n" to 0, "c1" to 0, "c2" to 0, "sum" to 0, "i" to 0), finalStore) + } + + @Test + fun `loopy program 2 execution 2`() { + val finalStore = loopyProgram2().execute( + mapOf("m" to 10, "n" to 20, "c1" to 0, "c2" to 0), + ) + assertEquals(mapOf("m" to 10, "n" to 20, "c1" to 45, "c2" to 155, "sum" to 200, "i" to 10, "j" to 20), finalStore) + } + + @Test + fun `loopy program 2 toString`() { + val expected = """ + i = 0 + while (i < m) { + j = 0 + while (j < n) { + if (i > j) { + c1 = c1 + 1 + } else { + c2 = c2 + 1 + } + j = j + 1 + } + i = i + 1 + } + sum = c1 + c2 + + """.trimIndent() + assertEquals(expected, loopyProgram2().toString()) + } + + @Test + fun `while statement toString`() { + val stmt = Stmt.While( + BoolExpr.LessThan(IntExpr.Var("i"), IntExpr.Var("n")), + Stmt.Assign( + "x", + IntExpr.Add(IntExpr.Var("x"), IntExpr.Literal(1)), + Stmt.Assign( + "y", + IntExpr.Sub(IntExpr.Var("y"), IntExpr.Literal(2)), + Stmt.Assign( + "z", + IntExpr.Mul(IntExpr.Var("z"), IntExpr.Literal(2)), + Stmt.Assign( + "i", + IntExpr.Add(IntExpr.Var("i"), IntExpr.Literal(1)), + ), + ), + ), + ), + Stmt.While( + BoolExpr.GreaterThan(IntExpr.Var("i"), IntExpr.Literal(0)), + Stmt.Assign( + "x", + IntExpr.Sub(IntExpr.Var("x"), IntExpr.Literal(1)), + Stmt.Assign( + "y", + IntExpr.Add(IntExpr.Var("y"), IntExpr.Literal(2)), + Stmt.Assign( + "z", + IntExpr.Div(IntExpr.Var("z"), IntExpr.Literal(2)), + Stmt.Assign( + "i", + IntExpr.Sub(IntExpr.Var("i"), IntExpr.Literal(1)), + ), + ), + ), + ), + ), + ) + val expected = """ + while (i < n) { + x = x + 1 + y = y - 2 + z = z * 2 + i = i + 1 + } + while (i > 0) { + x = x - 1 + y = y + 2 + z = z / 2 + i = i - 1 + } + + """.trimIndent() + assertEquals(expected, stmt.toString()) + } + + private fun loopyProgram1(): SequentialProgram = SequentialProgram( + Stmt.Assign( + "result", + IntExpr.Literal(0), + Stmt.Assign( + "counter", + IntExpr.Literal(0), + Stmt.While( + BoolExpr.LessThan( + IntExpr.Var("counter"), + IntExpr.Var("repeats"), + ), + Stmt.Assign( + "result", + IntExpr.Add( + IntExpr.Var("result"), + IntExpr.Var("value"), + ), + Stmt.Assign( + "counter", + IntExpr.Add( + IntExpr.Var("counter"), + IntExpr.Literal(1), + ), + ), + ), + ), + ), + ), + ) + + private fun loopyProgram2(): SequentialProgram = SequentialProgram( + Stmt.Assign( + "i", + IntExpr.Literal(0), + Stmt.While( + BoolExpr.LessThan(IntExpr.Var("i"), IntExpr.Var("m")), + Stmt.Assign( + "j", + IntExpr.Literal(0), + Stmt.While( + BoolExpr.LessThan(IntExpr.Var("j"), IntExpr.Var("n")), + Stmt.If( + BoolExpr.GreaterThan(IntExpr.Var("i"), IntExpr.Var("j")), + Stmt.Assign("c1", IntExpr.Add(IntExpr.Var("c1"), IntExpr.Literal(1))), + Stmt.Assign("c2", IntExpr.Add(IntExpr.Var("c2"), IntExpr.Literal(1))), + Stmt.Assign("j", IntExpr.Add(IntExpr.Var("j"), IntExpr.Literal(1))), + ), + Stmt.Assign("i", IntExpr.Add(IntExpr.Var("i"), IntExpr.Literal(1))), + ), + ), + Stmt.Assign( + "sum", + IntExpr.Add( + IntExpr.Var("c1"), + IntExpr.Var("c2"), + ), + ), + ), + ), + ) +} +*/ diff --git a/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question7Tests.kt b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question7Tests.kt new file mode 100644 index 0000000..c3f2fee --- /dev/null +++ b/kotlin-interpreter-skeleton/src/test/kotlin/proglang/Question7Tests.kt @@ -0,0 +1,252 @@ +package proglang + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import kotlin.test.fail + +class Question7Tests { + + @Test + fun `exception if durations and pauses do not match`() { + try { + ConcurrentProgram( + listOf(senderThreadBody(), receiverThreadBody()), + listOf(10), + ) + fail("IllegalArgumentException was expected.") + } catch (_: IllegalArgumentException) { + // Good: exception was expected. + } + } + + @Test + fun `message passing 1`() { + val program = ConcurrentProgram( + listOf(senderThreadBody(), receiverThreadBody()), + listOf(10, 5), + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("data" to 0, "flag" to 0)) + assertEquals(mapOf("data" to 1, "flag" to 1, "observed" to 1), finalStore) + } + } + + @Test + fun `message passing 2`() { + val program = ConcurrentProgram( + listOf(senderThreadBody(), receiverThreadBody()), + listOf(5, 10), + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("data" to 0, "flag" to 0)) + assertEquals(mapOf("data" to 1, "flag" to 1, "observed" to 1), finalStore) + } + } + + @Test + fun `lots of additions 1`() { + val program = ConcurrentProgram( + (0..<8).map { lotsOfAdditionsThreadBody() }, + (0..<8).map { 1 }, + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("a" to 0, "b" to 0, "c" to 0)) + assertEquals(mapOf("a" to 8, "b" to 16, "c" to 24), finalStore) + } + } + + @Test + fun `lots of additions 2`() { + val program = ConcurrentProgram( + (0..<8).map { lotsOfAdditionsThreadBody() }, + (0..<8).map { it.toLong() }, + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("a" to 4, "b" to 4, "c" to 4)) + assertEquals(mapOf("a" to 12, "b" to 20, "c" to 28), finalStore) + } + } + + @Test + fun `zero sum game 1`() { + val program = ConcurrentProgram( + (0..<4).map { zeroSumGameThreadBody("counter$it") }, + (0..<4).map { it.toLong() }, + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("n" to 4, "x" to 3, "y" to 2, "z" to 1)) + val expectedFinalStore = mutableMapOf("n" to 4, "x" to 3, "y" to 2, "z" to 1) + (0..<4).forEach { expectedFinalStore["counter$it"] = 0 } + assertEquals(expectedFinalStore, finalStore) + } + } + + @Test + fun `zero sum game 2`() { + val program = ConcurrentProgram( + (0..<4).map { zeroSumGameThreadBody("counter$it") }, + (0..<4).map { 1 }, + ) + for (repeats in 1..10) { + val finalStore = program.execute(mapOf("n" to 5, "x" to 7, "y" to 6, "z" to 1)) + val expectedFinalStore = mutableMapOf("n" to 5, "x" to 7, "y" to 6, "z" to 1) + (0..<4).forEach { expectedFinalStore["counter$it"] = 0 } + assertEquals(expectedFinalStore, finalStore) + } + } + + @Test + fun `store buffering 1`() { + val program = ConcurrentProgram( + listOf(storeBufferingThread1Body(), storeBufferingThread2Body()), + listOf(1, 5), + ) + val acceptableFinalStores = setOf( + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 0), + mapOf("x" to 1, "y" to 1, "r0" to 0, "r1" to 1), + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 1), + ) + + for (repeats in 1..100) { + val finalStore = program.execute(mapOf("x" to 0, "y" to 0)) + assertTrue(finalStore in acceptableFinalStores) + } + } + + @Test + fun `store buffering 2`() { + val program = ConcurrentProgram( + listOf(storeBufferingThread1Body(), storeBufferingThread2Body()), + listOf(5, 1), + ) + val acceptableFinalStores = setOf( + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 0), + mapOf("x" to 1, "y" to 1, "r0" to 0, "r1" to 1), + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 1), + ) + + for (repeats in 1..100) { + val finalStore = program.execute(mapOf("x" to 0, "y" to 0)) + assertTrue(finalStore in acceptableFinalStores) + } + } + + @Test + fun `store buffering 3`() { + val program = ConcurrentProgram( + listOf(storeBufferingThread1Body(), storeBufferingThread2Body()), + listOf(1, 1), + ) + val acceptableFinalStores = setOf( + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 0), + mapOf("x" to 1, "y" to 1, "r0" to 0, "r1" to 1), + mapOf("x" to 1, "y" to 1, "r0" to 1, "r1" to 1), + ) + + for (repeats in 1..100) { + val finalStore = program.execute(mapOf("x" to 0, "y" to 0)) + assertTrue(finalStore in acceptableFinalStores) + } + } + + private fun senderThreadBody(): Stmt = + Stmt.Assign( + "data", + IntExpr.Literal(1), + Stmt.Assign( + "flag", + IntExpr.Literal(1), + ), + ) + + private fun receiverThreadBody(): Stmt = + Stmt.While( + BoolExpr.Equals(IntExpr.Var("flag"), IntExpr.Literal(0)), + null, + Stmt.Assign( + "observed", + IntExpr.Var("data"), + ), + ) + + private fun lotsOfAdditionsThreadBody(): Stmt = + Stmt.Assign( + "a", + IntExpr.Add(IntExpr.Var("a"), IntExpr.Literal(1)), + Stmt.Assign( + "b", + IntExpr.Add(IntExpr.Var("b"), IntExpr.Literal(2)), + Stmt.Assign( + "c", + IntExpr.Add(IntExpr.Var("c"), IntExpr.Literal(3)), + ), + ), + ) + + private fun zeroSumGameThreadBody(counterName: String): Stmt = + Stmt.Assign( + counterName, + IntExpr.Literal(0), + Stmt.While( + BoolExpr.LessThan(IntExpr.Var(counterName), IntExpr.Var("n")), + Stmt.Assign( + "x", + IntExpr.Add(IntExpr.Var("x"), IntExpr.Literal(1)), + Stmt.Assign( + "y", + IntExpr.Sub(IntExpr.Var("y"), IntExpr.Literal(2)), + Stmt.Assign( + "z", + IntExpr.Mul(IntExpr.Var("z"), IntExpr.Literal(2)), + Stmt.Assign( + counterName, + IntExpr.Add(IntExpr.Var(counterName), IntExpr.Literal(1)), + ), + ), + ), + ), + Stmt.While( + BoolExpr.GreaterThan(IntExpr.Var(counterName), IntExpr.Literal(0)), + Stmt.Assign( + "x", + IntExpr.Sub(IntExpr.Var("x"), IntExpr.Literal(1)), + Stmt.Assign( + "y", + IntExpr.Add(IntExpr.Var("y"), IntExpr.Literal(2)), + Stmt.Assign( + "z", + IntExpr.Div(IntExpr.Var("z"), IntExpr.Literal(2)), + Stmt.Assign( + counterName, + IntExpr.Sub(IntExpr.Var(counterName), IntExpr.Literal(1)), + ), + ), + ), + ), + ), + ), + ) + + private fun storeBufferingThread1Body(): Stmt = + Stmt.Assign( + "x", + IntExpr.Literal(1), + Stmt.Assign( + "r0", + IntExpr.Var("y"), + ), + ) + + private fun storeBufferingThread2Body(): Stmt = + Stmt.Assign( + "y", + IntExpr.Literal(1), + Stmt.Assign( + "r1", + IntExpr.Var("x"), + ), + ) +} +*/ diff --git a/kotlin-interpreter.pdf b/kotlin-interpreter.pdf new file mode 100644 index 0000000..ddbf45a Binary files /dev/null and b/kotlin-interpreter.pdf differ diff --git a/kotlin-social-skeleton/.gradle/8.2/checksums/checksums.lock b/kotlin-social-skeleton/.gradle/8.2/checksums/checksums.lock new file mode 100644 index 0000000..2374e12 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/checksums/checksums.lock differ diff --git a/kotlin-social-skeleton/.gradle/8.2/checksums/md5-checksums.bin b/kotlin-social-skeleton/.gradle/8.2/checksums/md5-checksums.bin new file mode 100644 index 0000000..cc42c27 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/checksums/md5-checksums.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/checksums/sha1-checksums.bin b/kotlin-social-skeleton/.gradle/8.2/checksums/sha1-checksums.bin new file mode 100644 index 0000000..beec403 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/checksums/sha1-checksums.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock b/kotlin-social-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000..7b15919 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock differ diff --git a/kotlin-social-skeleton/.gradle/8.2/dependencies-accessors/gc.properties b/kotlin-social-skeleton/.gradle/8.2/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.bin b/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.bin new file mode 100644 index 0000000..db11258 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.lock b/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.lock new file mode 100644 index 0000000..81650fd Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/executionHistory/executionHistory.lock differ diff --git a/kotlin-social-skeleton/.gradle/8.2/fileChanges/last-build.bin b/kotlin-social-skeleton/.gradle/8.2/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/fileChanges/last-build.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.bin b/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.bin new file mode 100644 index 0000000..f15ff71 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.lock b/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.lock new file mode 100644 index 0000000..7a0e734 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/fileHashes/fileHashes.lock differ diff --git a/kotlin-social-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin b/kotlin-social-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..3f098e3 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/8.2/fileHashes/resourceHashesCache.bin differ diff --git a/kotlin-social-skeleton/.gradle/8.2/gc.properties b/kotlin-social-skeleton/.gradle/8.2/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-social-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin-social-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..25d5136 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/kotlin-social-skeleton/.gradle/buildOutputCleanup/cache.properties b/kotlin-social-skeleton/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..7cf5318 --- /dev/null +++ b/kotlin-social-skeleton/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Wed Mar 11 09:53:15 GMT 2026 +gradle.version=8.2 diff --git a/kotlin-social-skeleton/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin-social-skeleton/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..59a3941 Binary files /dev/null and b/kotlin-social-skeleton/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/kotlin-social-skeleton/.gradle/file-system.probe b/kotlin-social-skeleton/.gradle/file-system.probe new file mode 100644 index 0000000..2d2d84b Binary files /dev/null and b/kotlin-social-skeleton/.gradle/file-system.probe differ diff --git a/kotlin-social-skeleton/.gradle/vcs-1/gc.properties b/kotlin-social-skeleton/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-social-skeleton/.idea/.gitignore b/kotlin-social-skeleton/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/kotlin-social-skeleton/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/kotlin-social-skeleton/.idea/compiler.xml b/kotlin-social-skeleton/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/kotlin-social-skeleton/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kotlin-social-skeleton/.idea/gradle.xml b/kotlin-social-skeleton/.idea/gradle.xml new file mode 100644 index 0000000..72ee893 --- /dev/null +++ b/kotlin-social-skeleton/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/kotlin-social-skeleton/.idea/kotlinc.xml b/kotlin-social-skeleton/.idea/kotlinc.xml new file mode 100644 index 0000000..9de41b2 --- /dev/null +++ b/kotlin-social-skeleton/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/kotlin-social-skeleton/.idea/misc.xml b/kotlin-social-skeleton/.idea/misc.xml new file mode 100644 index 0000000..668048d --- /dev/null +++ b/kotlin-social-skeleton/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kotlin-social-skeleton/build.gradle b/kotlin-social-skeleton/build.gradle new file mode 100644 index 0000000..7ecdd7d --- /dev/null +++ b/kotlin-social-skeleton/build.gradle @@ -0,0 +1,50 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +buildscript { + ext.kotlin_version = "1.9.0" + ext.jvm_version = 17 + ext.kotlinter_version = "3.15.0" + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id 'application' + id 'org.jetbrains.kotlin.jvm' version "$kotlin_version" + id 'org.jmailen.kotlinter' version "$kotlinter_version" +} + +group = 'uk.ac.ic.doc' +version = '1.0.0' + +description = """Kotlin Social""" + +tasks.withType(KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "$jvm_version" + } +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(jvm_version)) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" + testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" +} + +test { + testLogging { + events "PASSED", "FAILED", "SKIPPED" + } +} diff --git a/kotlin-social-skeleton/build/classes/java/main/social/Matchmaker.class b/kotlin-social-skeleton/build/classes/java/main/social/Matchmaker.class new file mode 100644 index 0000000..8952b3a Binary files /dev/null and b/kotlin-social-skeleton/build/classes/java/main/social/Matchmaker.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/META-INF/kotlin-social-skeleton.kotlin_module b/kotlin-social-skeleton/build/classes/kotlin/main/META-INF/kotlin-social-skeleton.kotlin_module new file mode 100644 index 0000000..9c19c54 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/META-INF/kotlin-social-skeleton.kotlin_module differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked$Node.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked$Node.class new file mode 100644 index 0000000..816243e Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked$Node.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked.class new file mode 100644 index 0000000..d535cdb Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinked.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinkedKt.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinkedKt.class new file mode 100644 index 0000000..9ffc665 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/HashMapLinkedKt.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/OrderedMap.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/OrderedMap.class new file mode 100644 index 0000000..07eac59 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/OrderedMap.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/SimpleUser.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/SimpleUser.class new file mode 100644 index 0000000..dc04723 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/SimpleUser.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/main/social/User.class b/kotlin-social-skeleton/build/classes/kotlin/main/social/User.class new file mode 100644 index 0000000..d3477d5 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/main/social/User.class differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/test/META-INF/kotlin-social-skeleton_test.kotlin_module b/kotlin-social-skeleton/build/classes/kotlin/test/META-INF/kotlin-social-skeleton_test.kotlin_module new file mode 100644 index 0000000..1e9f2ca Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/test/META-INF/kotlin-social-skeleton_test.kotlin_module differ diff --git a/kotlin-social-skeleton/build/classes/kotlin/test/social/Question2Tests.class b/kotlin-social-skeleton/build/classes/kotlin/test/social/Question2Tests.class new file mode 100644 index 0000000..44b8cc1 Binary files /dev/null and b/kotlin-social-skeleton/build/classes/kotlin/test/social/Question2Tests.class differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..56c8983 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..24f512f Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..8bccc6c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..93a595b Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..249f160 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..cace8e5 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..261440e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..f327a65 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..1e42780 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..ec8f944 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..d89ba7a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..164979a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..53f70cd Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..f327a65 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..1e42780 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..ec8f944 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..ce69ab9 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..164979a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..7d3416c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..b54a48c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..d06c17e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..9e27f73 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..18232f7 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..8ad72e2 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream new file mode 100644 index 0000000..358d012 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len new file mode 100644 index 0000000..9f36811 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at new file mode 100644 index 0000000..46d6744 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i new file mode 100644 index 0000000..a29f2e9 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..bdee0af Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..cab729f Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..39be582 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..817b326 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..9be5678 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..2af9326 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..690cad1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..29ac126 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..8bccc6c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..93a595b Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..92fb180 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..07e329d Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab new file mode 100644 index 0000000..06e20c6 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream new file mode 100644 index 0000000..5b256e5 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len new file mode 100644 index 0000000..19f7832 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at new file mode 100644 index 0000000..2c04f6c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i new file mode 100644 index 0000000..92f6112 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab new file mode 100644 index 0000000..cc5ca69 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream new file mode 100644 index 0000000..2242fa5 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len new file mode 100644 index 0000000..11d24d5 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at new file mode 100644 index 0000000..9ca8a6f Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i new file mode 100644 index 0000000..98202f6 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..4a12dea --- /dev/null +++ b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +5 +0 \ No newline at end of file diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..b2a8b4c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..29ac126 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..8bccc6c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..93a595b Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..f6a4f17 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..07e329d Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..de4a575 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..1dd772c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..62f3e6f Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..ec8f944 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..7c19324 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i new file mode 100644 index 0000000..e6ff6ac Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..6f4760f Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..d14bb82 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..bd9729a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..03a1caa Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..44408da Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..bf5f293 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..9106879 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/cacheable/last-build.bin differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-social-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..0575cba Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-social-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin b/kotlin-social-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin new file mode 100644 index 0000000..3883061 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileKotlin/local-state/build-history.bin differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000..4bc4c61 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000..3dceec0 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000..2c0af39 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000..9e27f73 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at new file mode 100644 index 0000000..c1d2fda Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000..4ab8aa7 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream new file mode 100644 index 0000000..99b72ef Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len new file mode 100644 index 0000000..2647ad1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at new file mode 100644 index 0000000..53b2d29 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i new file mode 100644 index 0000000..af704cc Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000..99b72ef Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len new file mode 100644 index 0000000..2647ad1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at new file mode 100644 index 0000000..f771dee Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000..af704cc Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000..9906fdf Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000..2647ad1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at new file mode 100644 index 0000000..f771dee Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i new file mode 100644 index 0000000..b658650 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab new file mode 100644 index 0000000..ca70c10 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000..1fb84e0 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000..beea674 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000..01bdaa1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000..007fc53 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000..9077200 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab new file mode 100644 index 0000000..0625317 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000..ae79b8e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len new file mode 100644 index 0000000..2c0af39 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len new file mode 100644 index 0000000..9e27f73 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at new file mode 100644 index 0000000..cfa0799 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i new file mode 100644 index 0000000..71d7a8c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab new file mode 100644 index 0000000..166c057 --- /dev/null +++ b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -0,0 +1,2 @@ +1 +0 \ No newline at end of file diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab new file mode 100644 index 0000000..bdf584a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream new file mode 100644 index 0000000..d1c4027 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len new file mode 100644 index 0000000..ce0025a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at new file mode 100644 index 0000000..5875372 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000..30354c3 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab new file mode 100644 index 0000000..8aad32b Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream new file mode 100644 index 0000000..08e7df1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len new file mode 100644 index 0000000..b7da01d Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len new file mode 100644 index 0000000..2a17e6e Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at new file mode 100644 index 0000000..f771dee Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000..bbde173 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000..ec19789 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000..44107b0 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000..552f9b1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000..34fbeb1 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000..496b43c Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000..131e265 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin new file mode 100644 index 0000000..747661a Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/cacheable/last-build.bin differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin new file mode 100644 index 0000000..a1c35dc Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ diff --git a/kotlin-social-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin new file mode 100644 index 0000000..c4750f6 Binary files /dev/null and b/kotlin-social-skeleton/build/kotlin/compileTestKotlin/local-state/build-history.bin differ diff --git a/kotlin-social-skeleton/build/reports/tests/test/classes/social.Question2Tests.html b/kotlin-social-skeleton/build/reports/tests/test/classes/social.Question2Tests.html new file mode 100644 index 0000000..f099b97 --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/classes/social.Question2Tests.html @@ -0,0 +1,206 @@ + + + + + +Test results - Class social.Question2Tests + + + + + +
+

Class social.Question2Tests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
11
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.055s
+

duration

+
+
+
+
+
+
90%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

test removeLongestStandingFriend

+ +
java.util.NoSuchElementException: List is empty.
+	at kotlin.collections.CollectionsKt__MutableCollectionsKt.removeFirst(MutableCollections.kt:246)
+	at social.SimpleUser.removeLongestStandingFriend(SimpleUser.kt:20)
+	at social.Question2Tests.test removeLongestStandingFriend(Question2Tests.kt:148)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
+	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
+	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
+	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
+	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:108)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
test bio0spassed
test currentFriends 10.002spassed
test currentFriends 20.001spassed
test removeFriend0spassed
test removeLongestStandingFriend0.052sfailed
test userName0spassed
test yearOfBirth0spassed
test yearOfBirth exception 10spassed
test yearOfBirth exception 20spassed
test yearOfBirth no exception 10spassed
test yearOfBirth no exception 20spassed
+
+
+ +
+ + diff --git a/kotlin-social-skeleton/build/reports/tests/test/css/base-style.css b/kotlin-social-skeleton/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/kotlin-social-skeleton/build/reports/tests/test/css/style.css b/kotlin-social-skeleton/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/kotlin-social-skeleton/build/reports/tests/test/index.html b/kotlin-social-skeleton/build/reports/tests/test/index.html new file mode 100644 index 0000000..97fdf6f --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/index.html @@ -0,0 +1,145 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
11
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.055s
+

duration

+
+
+
+
+
+
90%
+

successful

+
+
+
+
+ + +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+social +11100.055s90%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+social.Question2Tests +11100.055s90%
+
+
+ +
+ + diff --git a/kotlin-social-skeleton/build/reports/tests/test/js/report.js b/kotlin-social-skeleton/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/kotlin-social-skeleton/build/reports/tests/test/packages/social.html b/kotlin-social-skeleton/build/reports/tests/test/packages/social.html new file mode 100644 index 0000000..a7dbc09 --- /dev/null +++ b/kotlin-social-skeleton/build/reports/tests/test/packages/social.html @@ -0,0 +1,115 @@ + + + + + +Test results - Package social + + + + + +
+

Package social

+ +
+ + + + + +
+
+ + + + + + + +
+
+
11
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.055s
+

duration

+
+
+
+
+
+
90%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+Question2Tests +11100.055s90%
+
+
+ +
+ + diff --git a/kotlin-social-skeleton/build/test-results/test/TEST-social.Question2Tests.xml b/kotlin-social-skeleton/build/test-results/test/TEST-social.Question2Tests.xml new file mode 100644 index 0000000..4b8bc1d --- /dev/null +++ b/kotlin-social-skeleton/build/test-results/test/TEST-social.Question2Tests.xml @@ -0,0 +1,66 @@ + + + + + java.util.NoSuchElementException: List is empty. + at kotlin.collections.CollectionsKt__MutableCollectionsKt.removeFirst(MutableCollections.kt:246) + at social.SimpleUser.removeLongestStandingFriend(SimpleUser.kt:20) + at social.Question2Tests.test removeLongestStandingFriend(Question2Tests.kt:148) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) + at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) + at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.ParentRunner.run(ParentRunner.java:413) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:108) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) + + + + + + + + + + + + + + + diff --git a/kotlin-social-skeleton/build/test-results/test/binary/output.bin b/kotlin-social-skeleton/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..e69de29 diff --git a/kotlin-social-skeleton/build/test-results/test/binary/output.bin.idx b/kotlin-social-skeleton/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/kotlin-social-skeleton/build/test-results/test/binary/output.bin.idx differ diff --git a/kotlin-social-skeleton/build/test-results/test/binary/results.bin b/kotlin-social-skeleton/build/test-results/test/binary/results.bin new file mode 100644 index 0000000..78e530e Binary files /dev/null and b/kotlin-social-skeleton/build/test-results/test/binary/results.bin differ diff --git a/kotlin-social-skeleton/build/tmp/compileJava/previous-compilation-data.bin b/kotlin-social-skeleton/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..0472f34 Binary files /dev/null and b/kotlin-social-skeleton/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.jar b/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..033e24c Binary files /dev/null and b/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.jar differ diff --git a/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.properties b/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..62f495d --- /dev/null +++ b/kotlin-social-skeleton/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kotlin-social-skeleton/gradlew b/kotlin-social-skeleton/gradlew new file mode 100644 index 0000000..fcb6fca --- /dev/null +++ b/kotlin-social-skeleton/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +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 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + 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 +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin-social-skeleton/gradlew.bat b/kotlin-social-skeleton/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/kotlin-social-skeleton/gradlew.bat @@ -0,0 +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 diff --git a/kotlin-social-skeleton/src/main/java/social/Matchmaker.java b/kotlin-social-skeleton/src/main/java/social/Matchmaker.java new file mode 100644 index 0000000..917d171 --- /dev/null +++ b/kotlin-social-skeleton/src/main/java/social/Matchmaker.java @@ -0,0 +1,6 @@ +package social; + +class Matchmaker { + // If you decide to implement Matchmaker in Kotlin (for reduced marks), you will need to delete + // this file, and add a Matchmarker.kt file with your Kotlin files. +} diff --git a/kotlin-social-skeleton/src/main/kotlin/social/HashMapLinked.kt b/kotlin-social-skeleton/src/main/kotlin/social/HashMapLinked.kt new file mode 100644 index 0000000..c5120a1 --- /dev/null +++ b/kotlin-social-skeleton/src/main/kotlin/social/HashMapLinked.kt @@ -0,0 +1,73 @@ +package social + +private const val INITIAL_BUCKETS = 8 +private const val LOAD_FACTOR = 0.75 + +class HashMapLinked : OrderedMap { + + private class Node( + val key: K, + var value: V, + var prev: Node?, + var next: Node? = null, + ) + + private var head: Node? = null + private var tail: Node? = null + + private var buckets: MutableList>> + + init { + buckets = mutableListOf() + for (i in 0.. + get() { + TODO("To be implemented") + } + + override fun containsKey(key: K): Boolean { + TODO("To be implemented") + } + + override fun remove(key: K): V? { + TODO("To be implemented") + } + + override fun set(key: K, value: V): V? { + TODO("To be implemented") + } + + override fun removeLongestStandingEntry(): Pair? { + TODO("To be implemented") + } + + private fun getBucket(key: K) = buckets[key.hashCode().mod(buckets.size)] + + private fun resize() { + if (size <= LOAD_FACTOR * buckets.size) { + return + } + val allContent = mutableListOf>() + for (bucket in buckets) { + allContent.addAll(bucket) + } + + val newNumBuckets = buckets.size * 2 + + buckets = mutableListOf() + for (i in 0.. { + val values: List + + val size: Int + + fun set(key: K, value: V): V? + + fun containsKey(key: K): Boolean + + fun remove(key: K): V? + + fun removeLongestStandingEntry(): Pair? +} diff --git a/kotlin-social-skeleton/src/main/kotlin/social/SimpleUser.kt b/kotlin-social-skeleton/src/main/kotlin/social/SimpleUser.kt new file mode 100644 index 0000000..065bc93 --- /dev/null +++ b/kotlin-social-skeleton/src/main/kotlin/social/SimpleUser.kt @@ -0,0 +1,27 @@ +package social + +class SimpleUser( + override val userName: String, + override val yearOfBirth: Int, + override val bio: String, +) : User{ + private val friends: MutableList = mutableListOf() + override val currentFriends + get() = friends.map { it } + + override fun hasFriend(user: User) = friends.contains(user) + + override fun removeFriend(user: User) = friends.remove(user) + + override fun considerFriendRequest(user: User) = + if (friends.contains(user)) false + else true.also { friends.add(user) } + + override fun removeLongestStandingFriend() = + if (friends.removeFirst()) + + init { + if (yearOfBirth !in 1900..2100) + throw IllegalArgumentException("Year of birth must be between 1900 and 2100") + } +} \ No newline at end of file diff --git a/kotlin-social-skeleton/src/main/kotlin/social/User.kt b/kotlin-social-skeleton/src/main/kotlin/social/User.kt new file mode 100644 index 0000000..3044e32 --- /dev/null +++ b/kotlin-social-skeleton/src/main/kotlin/social/User.kt @@ -0,0 +1,12 @@ +package social + +interface User { + val userName: String + val yearOfBirth: Int + val bio: String + val currentFriends: List + fun hasFriend(user: User): Boolean + fun removeFriend(user: User): Boolean + fun considerFriendRequest(user: User): Boolean + fun removeLongestStandingFriend(): User +} \ No newline at end of file diff --git a/kotlin-social-skeleton/src/test/kotlin/social/Question2Tests.kt b/kotlin-social-skeleton/src/test/kotlin/social/Question2Tests.kt new file mode 100644 index 0000000..830635d --- /dev/null +++ b/kotlin-social-skeleton/src/test/kotlin/social/Question2Tests.kt @@ -0,0 +1,175 @@ +package social + + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertSame +import kotlin.test.assertTrue +import kotlin.test.fail + +class Question2Tests { + + @Test + fun `test userName`() { + assertEquals("xdc145", makeUser1().userName) + } + + @Test + fun `test yearOfBirth`() { + assertEquals(1993, makeUser2().yearOfBirth) + } + + @Test + fun `test yearOfBirth exception 1`() { + try { + SimpleUser("name", 1, "bio") + fail("An IllegalArgumentException was expected.") + } catch (_: IllegalArgumentException) { + // Good: exception expected. + } + } + + @Test + fun `test yearOfBirth exception 2`() { + try { + SimpleUser("name", 2101, "bio") + fail("An IllegalArgumentException was expected.") + } catch (_: IllegalArgumentException) { + // Good: exception expected. + } + } + + @Test + fun `test yearOfBirth no exception 1`() { + SimpleUser("name", 1900, "bio") + } + + @Test + fun `test yearOfBirth no exception 2`() { + SimpleUser("name", 1900, "bio") + } + + @Test + fun `test bio`() { + assertEquals("Looks like a cat but works like a dog", makeUser3().bio) + } + + @Test + fun `test currentFriends 1`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + assertTrue(user1.currentFriends.isEmpty()) + user1.considerFriendRequest(user2) + assertTrue(user1.hasFriend(user2)) + assertEquals(listOf(user2), user1.currentFriends) + user1.considerFriendRequest(user4) + assertTrue(user1.hasFriend(user2)) + assertTrue(user1.hasFriend(user4)) + assertEquals(listOf(user2, user4), user1.currentFriends) + user1.considerFriendRequest(user3) + assertTrue(user1.hasFriend(user2)) + assertTrue(user1.hasFriend(user4)) + assertTrue(user1.hasFriend(user3)) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + user1.considerFriendRequest(user2) + assertTrue(user1.hasFriend(user2)) + assertTrue(user1.hasFriend(user4)) + assertTrue(user1.hasFriend(user3)) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + } + + @Test + fun `test currentFriends 2`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + assertTrue(user1.currentFriends.isEmpty()) + user1.considerFriendRequest(user2) + assertEquals(listOf(user2), user1.currentFriends) + user1.considerFriendRequest(user4) + assertEquals(listOf(user2, user4), user1.currentFriends) + + val friendsSnapshot = user1.currentFriends + assertEquals(listOf(user2, user4), friendsSnapshot) + + user1.considerFriendRequest(user3) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + assertEquals(listOf(user2, user4), friendsSnapshot) + + user1.considerFriendRequest(user2) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + assertEquals(listOf(user2, user4), friendsSnapshot) + } + + @Test + fun `test removeFriend`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + user1.considerFriendRequest(user2) + user1.considerFriendRequest(user4) + user1.considerFriendRequest(user3) + user1.considerFriendRequest(user2) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + assertTrue(user1.removeFriend(user2)) + assertEquals(listOf(user4, user3), user1.currentFriends) + assertFalse(user1.removeFriend(user2)) + assertTrue(user1.removeFriend(user3)) + assertEquals(listOf(user4), user1.currentFriends) + assertFalse(user1.removeFriend(user3)) + assertTrue(user1.removeFriend(user4)) + assertEquals(emptyList(), user1.currentFriends) + assertFalse(user1.removeFriend(user4)) + } + + @Test + fun `test removeLongestStandingFriend`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + user1.considerFriendRequest(user2) + user1.considerFriendRequest(user4) + user1.considerFriendRequest(user3) + user1.considerFriendRequest(user2) + assertEquals(listOf(user2, user4, user3), user1.currentFriends) + assertSame(user2, user1.removeLongestStandingFriend()) + assertEquals(listOf(user4, user3), user1.currentFriends) + assertSame(user4, user1.removeLongestStandingFriend()) + assertEquals(listOf(user3), user1.currentFriends) + assertSame(user3, user1.removeLongestStandingFriend()) + assertEquals(emptyList(), user1.currentFriends) + assertNull(user1.removeLongestStandingFriend()) + } + + private fun makeUser1(): User = SimpleUser( + userName = "xdc145", + yearOfBirth = 1990, + bio = "Born in Devon, loves dogs", + ) + + private fun makeUser2(): User = SimpleUser( + userName = "gdc1645", + yearOfBirth = 1993, + bio = "Born in Dorset, loves cats", + ) + + private fun makeUser3(): User = SimpleUser( + userName = "geeman2000", + yearOfBirth = 1996, + bio = "Looks like a cat but works like a dog", + ) + + private fun makeUser4(): User = SimpleUser( + userName = "gerald_the_unfriendly", + yearOfBirth = 2002, + bio = "Leave me alone", + ) +} + diff --git a/kotlin-social-skeleton/src/test/kotlin/social/Question3Tests.kt b/kotlin-social-skeleton/src/test/kotlin/social/Question3Tests.kt new file mode 100644 index 0000000..3f663ad --- /dev/null +++ b/kotlin-social-skeleton/src/test/kotlin/social/Question3Tests.kt @@ -0,0 +1,143 @@ +package social + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class Question3Tests { + + @Test + fun `test standard strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val imposter = SimpleUser(userName = user2.userName, yearOfBirth = 1910, bio = "Cthulu") + user1.considerFriendRequest(user2) + assertFalse(standardStrategy(user1, imposter)) + assertTrue(standardStrategy(user1, user3)) + assertTrue(standardStrategy(user1, user4)) + assertTrue(standardStrategy(user1, user5)) + } + + @Test + fun `test unfriendly strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + assertFalse(unfriendlyStrategy(user1, user2)) + assertFalse(unfriendlyStrategy(user1, user3)) + assertFalse(unfriendlyStrategy(user1, user4)) + assertFalse(unfriendlyStrategy(user1, user5)) + } + + @Test + fun `test limit of five strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val user6 = makeUser6() + val user7 = makeUser7() + val user8 = makeUser8() + val user9 = makeUser9() + user1.considerFriendRequest(user2) + user1.considerFriendRequest(user3) + user1.considerFriendRequest(user4) + user1.considerFriendRequest(user5) + user1.considerFriendRequest(user6) + user1.considerFriendRequest(user7) + assertEquals(listOf(user2, user3, user4, user5, user6, user7), user1.currentFriends) + val imposter = SimpleUser(userName = user2.userName, yearOfBirth = 1910, bio = "Cthulu") + assertFalse(limitOfFiveStrategy(user1, imposter)) + assertEquals(listOf(user2, user3, user4, user5, user6, user7), user1.currentFriends) + assertTrue(limitOfFiveStrategy(user1, user8)) + assertEquals(listOf(user4, user5, user6, user7), user1.currentFriends) + user1.considerFriendRequest(user8) + assertEquals(listOf(user4, user5, user6, user7, user8), user1.currentFriends) + assertTrue(limitOfFiveStrategy(user1, user9)) + assertEquals(listOf(user5, user6, user7, user8), user1.currentFriends) + } + + @Test + fun `test interested in dogs strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val user6 = makeUser6() + val user7 = makeUser7() + val user8 = makeUser8() + val user9 = makeUser9() + assertFalse(interestedInDogsStrategy(user1, user2)) + assertTrue(interestedInDogsStrategy(user1, user3)) + assertFalse(interestedInDogsStrategy(user1, user4)) + assertTrue(interestedInDogsStrategy(user1, user5)) + assertFalse(interestedInDogsStrategy(user1, user6)) + assertFalse(interestedInDogsStrategy(user1, user7)) + assertFalse(interestedInDogsStrategy(user1, user8)) + assertFalse(interestedInDogsStrategy(user1, user9)) + } + + private fun makeUser1(): User = SimpleUser( + userName = "xdc145", + yearOfBirth = 1990, + bio = "Born in Devon, loves dogs", + ) + + private fun makeUser2(): User = SimpleUser( + userName = "gdc1645", + yearOfBirth = 1993, + bio = "Born in Dorset, loves cats", + ) + + private fun makeUser3(): User = SimpleUser( + userName = "geeman2000", + yearOfBirth = 1996, + bio = "Looks like a cat but works like a dog", + ) + + private fun makeUser4(): User = SimpleUser( + userName = "gerald_the_unfriendly", + yearOfBirth = 2002, + bio = "Leave me alone", + ) + + private fun makeUser5(): User = SimpleUser( + userName = "mary_hope", + yearOfBirth = 2003, + bio = "A Dog Is For Life, Not For Christmas", + ) + + private fun makeUser6(): User = SimpleUser( + userName = "dopey", + yearOfBirth = 2004, + bio = "Bored out of my mind", + ) + + private fun makeUser7(): User = SimpleUser( + userName = "dippy", + yearOfBirth = 2004, + bio = "Stone cold crazy", + ) + + private fun makeUser8(): User = SimpleUser( + userName = "roger_brian_john_freddie", + yearOfBirth = 2005, + bio = "A massive fan of Queen.", + ) + + private fun makeUser9(): User = SimpleUser( + userName = "major_headache", + yearOfBirth = 1969, + bio = "I got my first real six string.", + ) +} +*/ diff --git a/kotlin-social-skeleton/src/test/kotlin/social/Question4Tests.kt b/kotlin-social-skeleton/src/test/kotlin/social/Question4Tests.kt new file mode 100644 index 0000000..b30eef6 --- /dev/null +++ b/kotlin-social-skeleton/src/test/kotlin/social/Question4Tests.kt @@ -0,0 +1,147 @@ +package social + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class Question4Tests { + @Test + fun `test standard strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val imposter = SimpleUser(userName = user2.userName, yearOfBirth = 1910, bio = "Cthulu") + assertTrue(user1.considerFriendRequest(user2)) + assertFalse(user1.considerFriendRequest(imposter)) + assertTrue(user1.considerFriendRequest(user3)) + assertTrue(user1.considerFriendRequest(user4)) + assertTrue(user1.considerFriendRequest(user5)) + assertEquals(listOf(user2, user3, user4, user5), user1.currentFriends) + } + + @Test + fun `test unfriendly strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + assertFalse(user4.considerFriendRequest(user1)) + assertFalse(user4.considerFriendRequest(user2)) + assertFalse(user4.considerFriendRequest(user3)) + assertFalse(user4.considerFriendRequest(user5)) + assertEquals(emptyList(), user4.currentFriends) + } + + @Test + fun `test limit of five strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val user6 = makeUser6() + val user7 = makeUser7() + + assertTrue(user2.considerFriendRequest(user1)) + assertEquals(listOf(user1), user2.currentFriends) + val imposter = SimpleUser(userName = user1.userName, yearOfBirth = 1981, bio = "Hello.") + + assertTrue(user2.considerFriendRequest(user3)) + assertEquals(listOf(user1, user3), user2.currentFriends) + + assertTrue(user2.considerFriendRequest(user4)) + assertEquals(listOf(user1, user3, user4), user2.currentFriends) + + assertTrue(user2.considerFriendRequest(user5)) + assertEquals(listOf(user1, user3, user4, user5), user2.currentFriends) + + assertTrue(user2.considerFriendRequest(user6)) + assertEquals(listOf(user1, user3, user4, user5, user6), user2.currentFriends) + + assertTrue(user2.considerFriendRequest(user7)) + assertEquals(listOf(user3, user4, user5, user6, user7), user2.currentFriends) + + assertTrue(user2.considerFriendRequest(imposter)) + assertEquals(listOf(user4, user5, user6, user7, imposter), user2.currentFriends) + } + + @Test + fun `test interested in dogs strategy`() { + val user1 = makeUser1() + val user2 = makeUser2() + val user3 = makeUser3() + val user4 = makeUser4() + val user5 = makeUser5() + val user8 = makeUser8() + val imposter = SimpleUser(userName = user5.userName, yearOfBirth = 1974, bio = user5.bio) + assertFalse(user8.considerFriendRequest(user1)) + assertFalse(user8.considerFriendRequest(user2)) + assertTrue(user8.considerFriendRequest(user3)) + assertFalse(user8.considerFriendRequest(user4)) + assertTrue(user8.considerFriendRequest(user5)) + assertFalse(user8.considerFriendRequest(imposter)) + assertEquals(listOf(user3, user5), user8.currentFriends) + } + + private fun makeUser1(): User = SimpleUser( + userName = "xdc145", + yearOfBirth = 1990, + bio = "Born in Devon, loves dogs", + befriendingStrategy = ::standardStrategy, + ) + + private fun makeUser2(): User = SimpleUser( + userName = "gdc1645", + yearOfBirth = 1993, + bio = "Born in Dorset, loves cats", + befriendingStrategy = ::limitOfFiveStrategy, + ) + + private fun makeUser3(): User = SimpleUser( + userName = "geeman2000", + yearOfBirth = 1996, + bio = "Looks like a cat but works like a dog", + befriendingStrategy = ::interestedInDogsStrategy, + ) + + private fun makeUser4(): User = SimpleUser( + userName = "gerald_the_unfriendly", + yearOfBirth = 2002, + bio = "Leave me alone", + befriendingStrategy = ::unfriendlyStrategy, + ) + + private fun makeUser5(): User = SimpleUser( + userName = "mary_hope", + yearOfBirth = 2003, + bio = "A Dog Is For Life, Not For Christmas", + befriendingStrategy = ::standardStrategy, + ) + + private fun makeUser6(): User = SimpleUser( + userName = "dopey", + yearOfBirth = 2004, + bio = "Bored out of my mind", + befriendingStrategy = ::unfriendlyStrategy, + ) + + private fun makeUser7(): User = SimpleUser( + userName = "dippy", + yearOfBirth = 2004, + bio = "Stone cold crazy", + befriendingStrategy = ::standardStrategy, + ) + + private fun makeUser8(): User = SimpleUser( + userName = "roger_brian_john_freddie", + yearOfBirth = 2005, + bio = "A massive fan of Queen.", + befriendingStrategy = ::interestedInDogsStrategy, + ) +} +*/ diff --git a/kotlin-social-skeleton/src/test/kotlin/social/Question5Tests.kt b/kotlin-social-skeleton/src/test/kotlin/social/Question5Tests.kt new file mode 100644 index 0000000..d946e6c --- /dev/null +++ b/kotlin-social-skeleton/src/test/kotlin/social/Question5Tests.kt @@ -0,0 +1,199 @@ +package social + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertTrue + +class Question5Tests { + + @Test + fun `test example in appendix`() { + val map = HashMapLinked() + assertEquals(emptyList(), map.values) + map.set("a", 14) + assertEquals(listOf(14), map.values) + map.set("b", 61) + assertEquals(listOf(14, 61), map.values) + map.set("f", 11) + assertEquals(listOf(14, 61, 11), map.values) + map.set("j", 18) + assertEquals(listOf(14, 61, 11, 18), map.values) + map.set("b", 2) + assertEquals(listOf(14, 11, 18, 2), map.values) + map.remove("a") + assertEquals(listOf(11, 18, 2), map.values) + } + + @Test + fun `test set size remove`() { + val map = HashMapLinked() + assertEquals(0, map.size) + assertNull(map.set("a", 2)) + assertEquals(1, map.size) + assertEquals(2, map.set("a", 3)) + assertEquals(1, map.size) + assertEquals(3, map.remove("a")) + assertEquals(0, map.size) + assertNull(map.remove("a")) + assertEquals(0, map.size) + } + + @Test + fun `test values 1`() { + val map = HashMapLinked() + map["a"] = 1 + assertEquals(listOf(1), map.values) + map["z"] = 2 + assertEquals(listOf(1, 2), map.values) + map["w"] = 3 + assertEquals(listOf(1, 2, 3), map.values) + map["x"] = 3 + assertEquals(listOf(1, 2, 3, 3), map.values) + map["p"] = 5 + assertEquals(listOf(1, 2, 3, 3, 5), map.values) + map["a"] = 42 + assertEquals(listOf(2, 3, 3, 5, 42), map.values) + map["w"] = 16 + assertEquals(listOf(2, 3, 5, 42, 16), map.values) + map["t"] = 23 + assertEquals(listOf(2, 3, 5, 42, 16, 23), map.values) + map["z"] = 105 + assertEquals(listOf(3, 5, 42, 16, 23, 105), map.values) + } + + @Test + fun `test values 2`() { + val map = HashMapLinked() + map["a"] = 1 + assertEquals(listOf(1), map.values) + map["z"] = 2 + assertEquals(listOf(1, 2), map.values) + map["w"] = 3 + assertEquals(listOf(1, 2, 3), map.values) + map["x"] = 3 + assertEquals(listOf(1, 2, 3, 3), map.values) + map["p"] = 5 + assertEquals(listOf(1, 2, 3, 3, 5), map.values) + map.remove("w") + assertEquals(listOf(1, 2, 3, 5), map.values) + map.remove("a") + assertEquals(listOf(2, 3, 5), map.values) + map.remove("p") + assertEquals(listOf(2, 3), map.values) + map.remove("z") + assertEquals(listOf(3), map.values) + map.remove("x") + assertEquals(emptyList(), map.values) + } + + @Test + fun `test remove oldest entry 1`() { + val map = HashMapLinked() + assertNull(map.removeLongestStandingEntry()) + } + + @Test + fun `test remove oldest entry 2`() { + val map = HashMapLinked() + map["hello"] = 42 + assertEquals(1, map.size) + assertTrue(map.containsKey("hello")) + assertEquals("hello" to 42, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertEquals(0, map.size) + } + + @Test + fun `test remove oldest entry 3`() { + val map = HashMapLinked() + map["hello"] = 42 + map["hell"] = 41 + map["hel"] = 40 + map["he"] = 39 + map["h"] = 38 + + assertTrue(map.containsKey("hello")) + assertTrue(map.containsKey("hell")) + assertTrue(map.containsKey("hel")) + assertTrue(map.containsKey("he")) + assertTrue(map.containsKey("h")) + assertEquals(5, map.size) + + assertEquals("hello" to 42, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertTrue(map.containsKey("hell")) + assertTrue(map.containsKey("hel")) + assertTrue(map.containsKey("he")) + assertTrue(map.containsKey("h")) + assertEquals(4, map.size) + + assertEquals("hell" to 41, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertFalse(map.containsKey("hell")) + assertTrue(map.containsKey("hel")) + assertTrue(map.containsKey("he")) + assertTrue(map.containsKey("h")) + assertEquals(3, map.size) + + assertEquals("hel" to 40, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertFalse(map.containsKey("hell")) + assertFalse(map.containsKey("hel")) + assertTrue(map.containsKey("he")) + assertTrue(map.containsKey("h")) + assertEquals(2, map.size) + + assertEquals("he" to 39, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertFalse(map.containsKey("hell")) + assertFalse(map.containsKey("hel")) + assertFalse(map.containsKey("he")) + assertTrue(map.containsKey("h")) + assertEquals(1, map.size) + + assertEquals("h" to 38, map.removeLongestStandingEntry()) + assertFalse(map.containsKey("hello")) + assertFalse(map.containsKey("hell")) + assertFalse(map.containsKey("hel")) + assertFalse(map.containsKey("he")) + assertFalse(map.containsKey("h")) + assertEquals(0, map.size) + + assertNull(map.removeLongestStandingEntry()) + } + + @Test + fun `performance test`() { + val numElements = 1000000 + val map = HashMapLinked() + (0..() + (0.. '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +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 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + 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 +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin-textfiles-skeleton/gradlew.bat b/kotlin-textfiles-skeleton/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/kotlin-textfiles-skeleton/gradlew.bat @@ -0,0 +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 diff --git a/kotlin-textfiles-skeleton/src/main/java/textfiles/LazyTextFile.java b/kotlin-textfiles-skeleton/src/main/java/textfiles/LazyTextFile.java new file mode 100644 index 0000000..3d81a22 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/main/java/textfiles/LazyTextFile.java @@ -0,0 +1,4 @@ +package textfiles; + +class LazyTextFile { +} diff --git a/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/FileIndexOutOfBoundsException.kt b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/FileIndexOutOfBoundsException.kt new file mode 100644 index 0000000..0ff1d80 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/FileIndexOutOfBoundsException.kt @@ -0,0 +1,3 @@ +package textfiles + +class FileIndexOutOfBoundsException : IndexOutOfBoundsException() diff --git a/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/MultiStringTextFile.kt b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/MultiStringTextFile.kt new file mode 100644 index 0000000..4407f03 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/MultiStringTextFile.kt @@ -0,0 +1,86 @@ +package textfiles + +private const val BLOCK_SIZE: Int = 8 + +class MultiStringTextFile(initialContents: String) : TextFile { + + private var blocks: MutableList = mutableListOf(StringBuilder(initialContents)) + + /** + * Yields the number of blocks that are currently used to represent the file. + * + * @return The number of blocks used to represent this file. + */ + val numBlocks: Int + get() = blocks.size + + override val length: Int + get() = TODO("To be implemented.") + + init { + rebalance() + } + + /** + * Reorganises the internal representation of the text file so that the content is partitioned + * into blocks of equal size, except that the final block may be shorter. + */ + fun rebalance() { + TODO("To be implemented.") + } + + override fun insertText(offset: Int, toInsert: String) { + TODO("To be implemented.") + } + + override fun deleteText(offset: Int, size: Int) { + if (offset < 0 || size < 0) { + throw FileIndexOutOfBoundsException() + } + val newBlocks: MutableList = mutableListOf() + var index = 0 + var block = 0 + while (block < blocks.size) { + if (index < offset + size && offset < index + blocks[block].length) { + if (size == 0) { + return + } + // Add the prefix + val prefixSize: Int = offset - index + if (prefixSize > 0) { + newBlocks.add(StringBuilder(blocks[block].substring(0, prefixSize))) + } + index += prefixSize + // If the suffix is in the same block, add it. Otherwise, skip over blocks. + if (prefixSize + size < blocks[block].length) { + newBlocks.add(StringBuilder(blocks[block].substring(prefixSize + size))) + } else { + var deleted: Int = blocks[block].length - prefixSize + block++ + while (block < blocks.size && size - deleted >= blocks[block].length) { + deleted += blocks[block].length + block++ + } + if (deleted < size) { + if (block >= blocks.size) { + throw FileIndexOutOfBoundsException() + } + assert(blocks[block].length > size - deleted) + newBlocks.add(StringBuilder(blocks[block].substring(size - deleted))) + } + } + index += size + } else { + newBlocks.add(blocks[block]) + index += blocks[block].length + } + block++ + } + if (offset >= index) { + if (offset > index || size > 0) { + throw FileIndexOutOfBoundsException() + } + } + blocks = newBlocks + } +} diff --git a/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/TextFile.kt b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/TextFile.kt new file mode 100644 index 0000000..e1dcd86 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/main/kotlin/textfiles/TextFile.kt @@ -0,0 +1,30 @@ +package textfiles + +interface TextFile { + /** + * Provides the length of the text file. + * + * @return the number of characters in the text file + */ + val length: Int + + /** + * Inserts text into the file. + * + * @param offset The offset at which the text should be inserted + * @param toInsert The text to be inserted + * @throws FileIndexOutOfBoundsException if offset is negative or larger + * than the length of the file + */ + fun insertText(offset: Int, toInsert: String) + + /** + * Deletes text from the file. + * + * @param offset The offset at which the deletion should occur + * @param size The number of characters to be deleted + * @throws FileIndexOutOfBoundsException if offset or size is negative, or + * if offset + size is larger than the length of the file + */ + fun deleteText(offset: Int, size: Int) +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question1Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question1Tests.kt new file mode 100644 index 0000000..6676c77 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question1Tests.kt @@ -0,0 +1,189 @@ +package textfiles + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.fail + */ + +class Question1Tests { +/* + @Test + fun testLength1() { + val textFile: TextFile = SingleStringTextFile("") + assertEquals(0, textFile.length) + } + + @Test + fun testLength2() { + val textFile: TextFile = SingleStringTextFile("Hello\nWorld") + assertEquals(11, textFile.length) + } + + @Test + fun testInsert1() { + val textFile: TextFile = SingleStringTextFile("") + textFile.insertText(0, "First") + textFile.insertText(0, "Second") + textFile.insertText(0, "Third") + assertEquals("ThirdSecondFirst", textFile.toString()) + } + + @Test + fun testInsert2() { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.insertText(11, "MoreContent") + textFile.insertText(22, "EvenMoreContent") + assertEquals("SomeContentMoreContentEvenMoreContent", textFile.toString()) + } + + @Test + fun testInsert3() { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.insertText(0, "!") + textFile.insertText(2, "!") + textFile.insertText(4, "!") + textFile.insertText(6, "!") + textFile.insertText(8, "!") + textFile.insertText(10, "!") + textFile.insertText(12, "!") + textFile.insertText(14, "!") + textFile.insertText(16, "!") + textFile.insertText(18, "!") + textFile.insertText(20, "!") + textFile.insertText(22, "!") + assertEquals("!S!o!m!e!C!o!n!t!e!n!t!", textFile.toString()) + } + + @Test + fun testInsertException1() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.insertText(-1, "DoNotAddMe") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException2() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.insertText(12, "DoNotAddMe") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException3() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.insertText(12, "") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDelete1() { + val textFile: TextFile = SingleStringTextFile("") + textFile.deleteText(0, 0) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete2() { + val textFile: TextFile = SingleStringTextFile("Hello") + textFile.deleteText(3, 0) + assertEquals("Hello", textFile.toString()) + } + + @Test + fun testDelete3() { + val textFile: TextFile = SingleStringTextFile("Example text file") + textFile.deleteText(0, 17) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete4() { + val textFile: TextFile = SingleStringTextFile("Example text file") + textFile.deleteText(8, 5) + assertEquals("Example file", textFile.toString()) + } + + @Test + fun testDelete5() { + val textFile: TextFile = SingleStringTextFile("T") + textFile.deleteText(1, 0) + assertEquals("T", textFile.toString()) + } + + @Test + fun testDeleteException1() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.deleteText(-1, 3) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException2() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.deleteText(0, 12) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException3() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.deleteText(10, 2) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException4() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.deleteText(100, 0) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException5() { + try { + val textFile: TextFile = SingleStringTextFile("SomeContent") + textFile.deleteText(0, -1) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + */ +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question2Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question2Tests.kt new file mode 100644 index 0000000..f0c1830 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question2Tests.kt @@ -0,0 +1,254 @@ +package textfiles + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.fail + */ + +class Question2Tests { +/* + @Test + fun testLength1() { + val textFile: TextFile = MultiStringTextFile("") + assertEquals(0, textFile.length) + } + + @Test + fun testLength2() { + val textFile: TextFile = MultiStringTextFile("Hello\nWorld") + assertEquals(11, textFile.length) + } + + @Test + fun testLength3() { + val textFile: TextFile = MultiStringTextFile( + "The quick brown fox jumped over the lazy dog ten times today", + ) + assertEquals(60, textFile.length) + } + + @Test + fun testInsert1() { + val textFile: TextFile = MultiStringTextFile("") + textFile.insertText(0, "First") + textFile.insertText(0, "Second") + textFile.insertText(0, "Third") + assertEquals("ThirdSecondFirst", textFile.toString()) + } + + @Test + fun testInsert2() { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.insertText(11, "MoreContent") + textFile.insertText(22, "EvenMoreContent") + assertEquals("SomeContentMoreContentEvenMoreContent", textFile.toString()) + } + + @Test + fun testInsert3() { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.insertText(0, "!") + textFile.insertText(2, "!") + textFile.insertText(4, "!") + textFile.insertText(6, "!") + textFile.insertText(8, "!") + textFile.insertText(10, "!") + textFile.insertText(12, "!") + textFile.insertText(14, "!") + textFile.insertText(16, "!") + textFile.insertText(18, "!") + textFile.insertText(20, "!") + textFile.insertText(22, "!") + assertEquals("!S!o!m!e!C!o!n!t!e!n!t!", textFile.toString()) + } + + @Test + fun testInsertException1() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.insertText(-1, "DoNotAddMe") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException2() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.insertText(12, "DoNotAddMe") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException3() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.insertText(12, "") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDelete1() { + val textFile: TextFile = MultiStringTextFile("") + textFile.deleteText(0, 0) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete2() { + val textFile: TextFile = MultiStringTextFile("Hello") + textFile.deleteText(3, 0) + assertEquals("Hello", textFile.toString()) + } + + @Test + fun testDelete3() { + val textFile: TextFile = MultiStringTextFile("Example text file") + textFile.deleteText(0, 17) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete4() { + val textFile: TextFile = MultiStringTextFile("Example text file") + textFile.deleteText(8, 5) + assertEquals("Example file", textFile.toString()) + } + + @Test + fun testDelete5() { + val textFile: TextFile = MultiStringTextFile("T") + textFile.deleteText(1, 0) + assertEquals("T", textFile.toString()) + } + + @Test + fun testDelete6() { + val textFile: TextFile = MultiStringTextFile( + "The quick brown fox jumped over the lazy dog ten times today", + ) + textFile.deleteText(3, 43) + assertEquals("Theen times today", textFile.toString()) + } + + @Test + fun testDeleteException1() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.deleteText(-1, 3) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException2() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.deleteText(0, 12) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException3() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.deleteText(10, 2) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException4() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.deleteText(100, 0) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException5() { + try { + val textFile: TextFile = MultiStringTextFile("SomeContent") + textFile.deleteText(0, -1) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testGetNumBlocksAndRebalance1() { + val textFile = MultiStringTextFile("") + assertEquals(0, textFile.numBlocks) + textFile.rebalance() + assertEquals(0, textFile.numBlocks) + } + + @Test + fun testGetNumBlocksAndRebalance2() { + val textFile = MultiStringTextFile( + "AKAI Professional MPK249 midi controller does not act as a stand-alone synthesizer, unfortunately.", + ) + assertEquals(13, textFile.numBlocks) + textFile.rebalance() + assertEquals(13, textFile.numBlocks) + } + + @Test + fun testGetNumBlocksAndRebalance3() { + val textFile = MultiStringTextFile("Harmonious") + assertEquals(2, textFile.numBlocks) + textFile.rebalance() + assertEquals(2, textFile.numBlocks) + textFile.insertText(2, "A") + assertEquals(2, textFile.numBlocks) + textFile.insertText(11, "B") + assertEquals(3, textFile.numBlocks) + textFile.insertText(12, "C") + assertEquals(4, textFile.numBlocks) + textFile.rebalance() + assertEquals(2, textFile.numBlocks) + assertEquals("HaArmoniousBC", textFile.toString()) + } + + @Test + fun testGetNumBlocksAndRebalance4() { + val textFile = MultiStringTextFile("Harmonious") + assertEquals(2, textFile.numBlocks) + textFile.rebalance() + assertEquals(2, textFile.numBlocks) + textFile.deleteText(2, 1) + assertEquals(3, textFile.numBlocks) + textFile.deleteText(7, 2) + assertEquals(2, textFile.numBlocks) + assertEquals("Hamonio", textFile.toString()) + } + */ +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question3Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question3Tests.kt new file mode 100644 index 0000000..24f4412 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question3Tests.kt @@ -0,0 +1,295 @@ +package textfiles + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.fail + */ + +class Question3Tests { + +/* + @Test + fun testLength1() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("")) + assertEquals(0, textFile.length) + } + + @Test + fun testLength2() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("Hello\nWorld")) + assertEquals(11, textFile.length) + } + + @Test + fun testLength3() { + val textFile: TextFile = LazyTextFile( + SingleStringTextFile( + "The quick brown fox jumped over the lazy dog ten times today", + ), + ) + assertEquals(60, textFile.length) + } + + @Test + fun testInsert1() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("")) + textFile.insertText(0, "First") + textFile.insertText(0, "Second") + textFile.insertText(0, "Third") + assertEquals("ThirdSecondFirst", textFile.toString()) + } + + @Test + fun testInsert2() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.insertText(11, "MoreContent") + textFile.insertText(22, "EvenMoreContent") + assertEquals("SomeContentMoreContentEvenMoreContent", textFile.toString()) + } + + @Test + fun testInsert3() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.insertText(0, "!") + textFile.insertText(2, "!") + textFile.insertText(4, "!") + textFile.insertText(6, "!") + textFile.insertText(8, "!") + textFile.insertText(10, "!") + textFile.insertText(12, "!") + textFile.insertText(14, "!") + textFile.insertText(16, "!") + textFile.insertText(18, "!") + textFile.insertText(20, "!") + textFile.insertText(22, "!") + assertEquals("!S!o!m!e!C!o!n!t!e!n!t!", textFile.toString()) + } + + @Test + fun testInsertException1() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.insertText(-1, "DoNotAddMe") + textFile.insertText(0, "a") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException2() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.insertText(12, "DoNotAddMe") + textFile.insertText(0, "a") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testInsertException3() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.insertText(12, "") + textFile.insertText(0, "a") + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDelete1() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("")) + textFile.deleteText(0, 0) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete2() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("Hello")) + textFile.deleteText(3, 0) + assertEquals("Hello", textFile.toString()) + } + + @Test + fun testDelete3() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("Example text file")) + textFile.deleteText(0, 17) + assertEquals("", textFile.toString()) + } + + @Test + fun testDelete4() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("Example text file")) + textFile.deleteText(8, 5) + assertEquals("Example file", textFile.toString()) + } + + @Test + fun testDelete5() { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("T")) + textFile.deleteText(1, 0) + assertEquals("T", textFile.toString()) + } + + @Test + fun testDelete6() { + val textFile: TextFile = LazyTextFile( + SingleStringTextFile( + "The quick brown fox jumped over the lazy dog ten times today", + ), + ) + textFile.deleteText(3, 43) + assertEquals("Theen times today", textFile.toString()) + } + + @Test + fun testDeleteException1() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.deleteText(-1, 3) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException2() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.deleteText(0, 12) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException3() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.deleteText(10, 2) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException4() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.deleteText(100, 0) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testDeleteException5() { + try { + val textFile: TextFile = LazyTextFile(SingleStringTextFile("SomeContent")) + textFile.deleteText(0, -1) + } catch (exception: FileIndexOutOfBoundsException) { + // Good: an exception should have been thrown. + return + } + fail() + } + + @Test + fun testLaziness() { + val operationCountingTextFile = OperationCountingTextFile() + val lazyTextFile: TextFile = LazyTextFile(operationCountingTextFile) + assertEquals(0, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(0, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(0, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(0, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.length + assertEquals(1, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(1, operationCountingTextFile.numInsertions) + assertEquals(0, operationCountingTextFile.numDeletions) + + lazyTextFile.deleteText(5, 2) + assertEquals(2, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(2, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(2, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + //noinspection ResultOfMethodCallIgnored + lazyTextFile.toString() + assertEquals(3, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(0, "hello") + assertEquals(3, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(1, "hello") + assertEquals(4, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.insertText(1, "hello") + assertEquals(4, operationCountingTextFile.numInsertions) + assertEquals(1, operationCountingTextFile.numDeletions) + + lazyTextFile.deleteText(1, 6) + assertEquals(5, operationCountingTextFile.numInsertions) + assertEquals(2, operationCountingTextFile.numDeletions) + } + + class OperationCountingTextFile : TextFile { + + var numInsertions = 0 + private set + + var numDeletions = 0 + private set + + override val length: Int + get() = 1000 + + override fun insertText(offset: Int, toInsert: String) { + numInsertions++ + } + + override fun deleteText(offset: Int, size: Int) { + numDeletions++ + } + } + */ +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question4Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question4Tests.kt new file mode 100644 index 0000000..6196d8e --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question4Tests.kt @@ -0,0 +1,36 @@ +package textfiles + +/* +import java.util.Random +import kotlin.test.Test +import kotlin.test.assertEquals + */ + +class Question4Tests { +/* + @Test + fun concurrencyTest() { + for (repeat in 1..20) { + println("Repeat run $repeat") + val initialText = "initialtext" + val authorStrings: List> = (0..<8).map { + (0..<1000).map { + (0..it % 10).map { number -> number.toString() }.joinToString(separator = "") + } + } + val expectedOutput: String = + (initialText + authorStrings.flatten().joinToString(separator = "")) + .toCharArray().sortedArray().joinToString(separator = "") + + val singleStringTextFile = SingleStringTextFile(initialText) + + // TODO - complete this test + + assertEquals( + expectedOutput, + threadSafeTextFile.toString().toCharArray().sortedArray().joinToString(separator = ""), + ) + } + } + */ +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question5Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question5Tests.kt new file mode 100644 index 0000000..f3caa5e --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question5Tests.kt @@ -0,0 +1,59 @@ +package textfiles + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + */ + +class Question5Tests { +/* + @Test + fun testCompareTo1() { + val t1: TextFile = SingleStringTextFile("Hello") + val t2: TextFile = SingleStringTextFile("Hello") + assertEquals(0, t1.compareTo(t2)) + assertEquals(0, t2.compareTo(t1)) + } + + @Test + fun testCompareTo2() { + val t1: TextFile = SingleStringTextFile("Hell") + val t2: TextFile = SingleStringTextFile("Hello") + assertTrue(t1 < t2) + assertTrue(t2 > t1) + } + + @Test + fun testCompareTo3() { + val t1: TextFile = MultiStringTextFile("Hello") + val t2: TextFile = SingleStringTextFile("Hello") + assertEquals(0, t1.compareTo(t2)) + assertEquals(0, t2.compareTo(t1)) + } + + @Test + fun testCompareTo4() { + val t1: TextFile = MultiStringTextFile("Aello") + val t2: TextFile = SingleStringTextFile("Hello") + assertTrue(t1 < t2) + assertTrue(t2 > t1) + } + + @Test + fun testCompareTo5() { + val t1: TextFile = MultiStringTextFile("Hello") + val t2: TextFile = MultiStringTextFile("Hello") + assertEquals(0, t1.compareTo(t2)) + assertEquals(0, t2.compareTo(t1)) + } + + @Test + fun testCompareTo6() { + val t1: TextFile = MultiStringTextFile("Hella") + val t2: TextFile = MultiStringTextFile("Hello") + assertTrue(t1 < t2) + assertTrue(t2 > t1) + } + */ +} diff --git a/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question6Tests.kt b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question6Tests.kt new file mode 100644 index 0000000..41b9af9 --- /dev/null +++ b/kotlin-textfiles-skeleton/src/test/kotlin/textfiles/Question6Tests.kt @@ -0,0 +1,198 @@ +package textfiles + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull +import kotlin.test.assertSame + */ + +class Question6Tests { +/* + private val file1: TextFile = SingleStringTextFile("File1Contents") + private val file2: TextFile = SingleStringTextFile("File2Contents") + private val file3: TextFile = SingleStringTextFile("File3Contents") + private val file4: TextFile = SingleStringTextFile("File4Contents") + private val file5: TextFile = SingleStringTextFile("File5Contents") + + @Test + fun testGetSetAndSize() { + val fileMap = FileMap() + assertEquals(0, fileMap.size) + assertNull(fileMap.get("a")) + assertNull(fileMap.get("b")) + assertNull(fileMap.get("c")) + assertNull(fileMap.get("d")) + assertNull(fileMap.get("e")) + + fileMap.set("a", file1) + assertEquals(1, fileMap.size) + assertSame(file1, fileMap.get("a")) + assertNull(fileMap.get("b")) + assertNull(fileMap.get("c")) + assertNull(fileMap.get("d")) + assertNull(fileMap.get("e")) + + fileMap.set("b", file2) + assertEquals(2, fileMap.size) + assertSame(file1, fileMap.get("a")) + assertSame(file2, fileMap.get("b")) + assertNull(fileMap.get("c")) + assertNull(fileMap.get("d")) + assertNull(fileMap.get("e")) + + fileMap.set("c", file3) + assertEquals(3, fileMap.size) + assertSame(file1, fileMap.get("a")) + assertSame(file2, fileMap.get("b")) + assertSame(file3, fileMap.get("c")) + assertNull(fileMap.get("d")) + assertNull(fileMap.get("e")) + + fileMap.set("d", file4) + assertEquals(4, fileMap.size) + assertSame(file1, fileMap.get("a")) + assertSame(file2, fileMap.get("b")) + assertSame(file3, fileMap.get("c")) + assertSame(file4, fileMap.get("d")) + assertNull(fileMap.get("e")) + + fileMap.set("e", file5) + assertEquals(5, fileMap.size) + assertSame(file1, fileMap.get("a")) + assertSame(file2, fileMap.get("b")) + assertSame(file3, fileMap.get("c")) + assertSame(file4, fileMap.get("d")) + assertSame(file5, fileMap.get("e")) + + fileMap.set("a", file2) + fileMap.set("b", file3) + fileMap.set("c", file4) + fileMap.set("d", file5) + fileMap.set("e", file1) + + assertSame(file2, fileMap.get("a")) + assertSame(file3, fileMap.get("b")) + assertSame(file4, fileMap.get("c")) + assertSame(file5, fileMap.get("d")) + assertSame(file1, fileMap.get("e")) + } + + @Test + fun testGetSetAndSizeViaOperator() { + val fileMap = FileMap() + assertEquals(0, fileMap.size) + assertNull(fileMap["a"]) + assertNull(fileMap["b"]) + assertNull(fileMap["c"]) + assertNull(fileMap["d"]) + assertNull(fileMap["e"]) + + fileMap["a"] = file1 + assertEquals(1, fileMap.size) + assertSame(file1, fileMap["a"]) + assertNull(fileMap["b"]) + assertNull(fileMap["c"]) + assertNull(fileMap["d"]) + assertNull(fileMap["e"]) + + fileMap["b"] = file2 + assertEquals(2, fileMap.size) + assertSame(file1, fileMap["a"]) + assertSame(file2, fileMap["b"]) + assertNull(fileMap["c"]) + assertNull(fileMap["d"]) + assertNull(fileMap["e"]) + + fileMap["c"] = file3 + assertEquals(3, fileMap.size) + assertSame(file1, fileMap["a"]) + assertSame(file2, fileMap["b"]) + assertSame(file3, fileMap["c"]) + assertNull(fileMap["d"]) + assertNull(fileMap["e"]) + + fileMap["d"] = file4 + assertEquals(4, fileMap.size) + assertSame(file1, fileMap["a"]) + assertSame(file2, fileMap["b"]) + assertSame(file3, fileMap["c"]) + assertSame(file4, fileMap["d"]) + assertNull(fileMap["e"]) + + fileMap["e"] = file5 + assertEquals(5, fileMap.size) + assertSame(file1, fileMap["a"]) + assertSame(file2, fileMap["b"]) + assertSame(file3, fileMap["c"]) + assertSame(file4, fileMap["d"]) + assertSame(file5, fileMap["e"]) + + fileMap["a"] = file2 + fileMap["b"] = file3 + fileMap["c"] = file4 + fileMap["d"] = file5 + fileMap["e"] = file1 + + assertSame(file2, fileMap["a"]) + assertSame(file3, fileMap["b"]) + assertSame(file4, fileMap["c"]) + assertSame(file5, fileMap["d"]) + assertSame(file1, fileMap["e"]) + } + + @Test + fun testIterator() { + val fileMap = FileMap() + val files: Array = Array(100) { SingleStringTextFile(it.toString()) } + for (i in 0..<100) { + fileMap.set("$i".padStart(2, '0'), files[i]) + } + val iterator = fileMap.iterator() + val retrievedContents: MutableList> = mutableListOf() + while (iterator.hasNext()) { + retrievedContents.add(iterator.next()) + } + assertEquals(100, retrievedContents.size) + val retrievedContentsSorted = retrievedContents.sortedBy { it.first } + for (i in 0..<100) { + assertEquals("$i".padStart(2, '0'), retrievedContentsSorted[i].first) + assertSame(files[i], retrievedContentsSorted[i].second) + } + } + + @Test + fun testIteratorViaOperator() { + val fileMap = FileMap() + val files: Array = Array(100) { SingleStringTextFile(it.toString()) } + for (i in 0..<100) { + fileMap.set("$i".padStart(2, '0'), files[i]) + } + val retrievedContents: MutableList> = mutableListOf() + for (entry in fileMap) { + retrievedContents.add(entry) + } + assertEquals(100, retrievedContents.size) + val retrievedContentsSorted = retrievedContents.sortedBy { it.first } + for (i in 0..<100) { + assertEquals("$i".padStart(2, '0'), retrievedContentsSorted[i].first) + assertSame(files[i], retrievedContentsSorted[i].second) + } + } + + @Test + fun performanceTest() { + val numElements = 1000000 + val fileMap: FileMap = FileMap() + val files: Array = Array(numElements) { SingleStringTextFile(it.toString()) } + (0.. '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +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 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + 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 +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin-tunes-skeleton/gradlew.bat b/kotlin-tunes-skeleton/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/kotlin-tunes-skeleton/gradlew.bat @@ -0,0 +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 diff --git a/kotlin-tunes-skeleton/src/main/java/tunes/StretchedTune.java b/kotlin-tunes-skeleton/src/main/java/tunes/StretchedTune.java new file mode 100644 index 0000000..e4150b0 --- /dev/null +++ b/kotlin-tunes-skeleton/src/main/java/tunes/StretchedTune.java @@ -0,0 +1,4 @@ +package tunes; + +class StretchedTune { +} diff --git a/kotlin-tunes-skeleton/src/main/kotlin/tunes/Note.kt b/kotlin-tunes-skeleton/src/main/kotlin/tunes/Note.kt new file mode 100644 index 0000000..c75f266 --- /dev/null +++ b/kotlin-tunes-skeleton/src/main/kotlin/tunes/Note.kt @@ -0,0 +1,3 @@ +package tunes + +class Note diff --git a/kotlin-tunes-skeleton/src/main/kotlin/tunes/SongCollection.kt b/kotlin-tunes-skeleton/src/main/kotlin/tunes/SongCollection.kt new file mode 100644 index 0000000..4d63bea --- /dev/null +++ b/kotlin-tunes-skeleton/src/main/kotlin/tunes/SongCollection.kt @@ -0,0 +1,23 @@ +package tunes + +class SongCollection { +/* + private class Song(val name: String, val tune: Tune) + + private class TreeNode(var song: Song, var left: TreeNode? = null, var right: TreeNode? = null) + + private var root: TreeNode? = null + + fun addSong(name: String, tune: Tune) { + TODO("Implement as part of Question 6") + } + + fun getTune(name: String): Tune { + TODO("Implement as part of Question 6") + } + + fun getSongNames(): List { + TODO("Implement as part of Question 6") + } +*/ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesHelpers.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesHelpers.kt new file mode 100644 index 0000000..ac3c4e6 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesHelpers.kt @@ -0,0 +1,44 @@ +package tunes + +import kotlin.reflect.KClass +import kotlin.reflect.KVisibility +import kotlin.test.assertTrue + +fun checkAllOtherMembersFinal( + targetClass: KClass<*>, + vararg expectedNonFinalMembers: String, +) { + val allowedNames: Set = expectedNonFinalMembers.toSet() + var ok = true + for (member in targetClass.members) { + if (!member.isFinal) { + if (allowedNames.contains(member.name)) { + continue + } + System.err.println("Non-final member: ${member.name} in class ${targetClass.simpleName}") + ok = false + } + } + assertTrue(ok) +} + +fun checkAllOtherMembersPrivate( + targetClass: KClass<*>, + vararg expectedPublicMembers: String, +) { + val allowedNames: Set = expectedPublicMembers.toSet() + var ok = true + for (member in targetClass.members) { + if (member.visibility!! == KVisibility.PRIVATE) { + continue + } + if (allowedNames.contains(member.name)) { + continue + } + System.err.println( + "Unexpected non-private member ${member.name} in class ${targetClass.simpleName}", + ) + ok = false + } + assertTrue(ok) +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesSongCollection.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesSongCollection.kt new file mode 100644 index 0000000..6bb2bb0 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesSongCollection.kt @@ -0,0 +1,37 @@ +package tunes + +/* +import kotlin.reflect.KVisibility +import kotlin.test.Test +import kotlin.test.assertTrue + */ + +class GoodPracticesSongCollection { + /* + @Test + fun testClassIsFinal() { + assertTrue(SongCollection::class.isFinal) + } + + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + SongCollection::class, + "addSong", + "getSongNames", + "getTune", + "equals", + "hashCode", + "toString", + ) + } + + @Test + fun testAllNestedClassesPrivateAndFinal() { + for (nestedClass in SongCollection::class.nestedClasses) { + assert(nestedClass.isFinal) + assert(nestedClass.visibility!! == KVisibility.PRIVATE) + } + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsNote.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsNote.kt new file mode 100644 index 0000000..8ead2d3 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsNote.kt @@ -0,0 +1,44 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertTrue + */ + +class GoodPracticesTestsNote { + /* + @Test + fun testClassIsFinal() { + assertTrue(Note::class.isFinal) + } + + @Test + fun testAllMembersFinal() { + checkAllOtherMembersFinal( + Note::class, + "equals", + "hashCode", + "toString", + ) + } + + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + Note::class, + "equals", + "toString", + "hashCode", + "hasNoteAbove", + "hasNoteBelow", + "noteAbove", + "noteBelow", + "duration", + "pitch", + "copy", + "component1", + "component2", + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsStandardTune.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsStandardTune.kt new file mode 100644 index 0000000..348bcf3 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsStandardTune.kt @@ -0,0 +1,29 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertTrue + */ + +class GoodPracticesTestsStandardTune { + /* + @Test + fun testClassIsFinal() { + assertTrue(StandardTune::class.isFinal) + } + + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + StandardTune::class, + "addNote", + "notes", + "iterator", + "totalDuration", + "equals", + "hashCode", + "toString", + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsThreadSafeTune.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsThreadSafeTune.kt new file mode 100644 index 0000000..8882d4f --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsThreadSafeTune.kt @@ -0,0 +1,29 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertTrue + */ + +class GoodPracticesTestsThreadSafeTune { + /* + @Test + fun testClassIsFinal() { + assertTrue(ThreadSafeTune::class.isFinal) + } + + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + ThreadSafeTune::class, + "addNote", + "notes", + "iterator", + "totalDuration", + "equals", + "hashCode", + "toString", + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTransposedTune.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTransposedTune.kt new file mode 100644 index 0000000..9665591 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTransposedTune.kt @@ -0,0 +1,29 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertTrue + */ + +class GoodPracticesTestsTransposedTune { + /* + @Test + fun testClassIsFinal() { + assertTrue(TransposedTune::class.isFinal) + } + + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + TransposedTune::class, + "addNote", + "notes", + "iterator", + "totalDuration", + "equals", + "hashCode", + "toString", + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTune.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTune.kt new file mode 100644 index 0000000..2fa7379 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/GoodPracticesTestsTune.kt @@ -0,0 +1,23 @@ +package tunes + +/* +import kotlin.test.Test + */ + +class GoodPracticesTestsTune { + /* + @Test + fun testAllHelperMembersPrivate() { + checkAllOtherMembersPrivate( + Tune::class, + "addNote", + "notes", + "iterator", + "totalDuration", + "equals", + "hashCode", + "toString", + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question1Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question1Tests.kt new file mode 100644 index 0000000..d55a058 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question1Tests.kt @@ -0,0 +1,242 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNotEquals +import kotlin.test.assertTrue +import kotlin.test.fail + */ + +class Question1Tests { + /* + @Test + fun testPitch() { + assertEquals(5, Note(5, 10.0).pitch) + } + + @Test + fun testDuration() { + assertEquals(10.0, Note(5, 10.0).duration) + } + + @Test + fun testConstructorNegativePitch() { + try { + Note(-1, 2.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorPitchTooHigh1() { + try { + Note(201, 8.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorPitchTooHigh2() { + try { + Note(5000, 8.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorZeroDuration() { + try { + Note(5, 0.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorNegativeDuration() { + try { + Note(8, -20.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorDurationTooHigh1() { + try { + Note(80, 65.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorDurationTooHigh2() { + try { + Note(80, 1000.0) + fail() + } catch (exception: IllegalArgumentException) { + // Good - an exception should have been thrown. + } + } + + @Test + fun testConstructorBottomShortestNote() { + Note(0, 1.0) + } + + @Test + fun testConstructorTopFastestNote() { + Note(200, 64.0) + } + + @Test + fun testToString() { + assertEquals("C0(1.0)", Note(0, 1.0).toString()) + assertEquals("C#0(2.0)", Note(1, 2.0).toString()) + assertEquals("D0(3.0)", Note(2, 3.0).toString()) + assertEquals("D#0(4.0)", Note(3, 4.0).toString()) + assertEquals("E0(5.0)", Note(4, 5.0).toString()) + assertEquals("F0(6.0)", Note(5, 6.0).toString()) + assertEquals("F#0(7.0)", Note(6, 7.0).toString()) + assertEquals("G0(8.0)", Note(7, 8.0).toString()) + assertEquals("G#0(9.0)", Note(8, 9.0).toString()) + assertEquals("A0(10.0)", Note(9, 10.0).toString()) + assertEquals("A#0(11.0)", Note(10, 11.0).toString()) + assertEquals("B0(12.0)", Note(11, 12.0).toString()) + assertEquals("C1(13.0)", Note(12, 13.0).toString()) + assertEquals("C#1(14.0)", Note(13, 14.0).toString()) + assertEquals("D1(15.0)", Note(14, 15.0).toString()) + assertEquals("D#1(16.0)", Note(15, 16.0).toString()) + assertEquals("E1(17.0)", Note(16, 17.0).toString()) + assertEquals("F1(18.0)", Note(17, 18.0).toString()) + assertEquals("F#1(19.0)", Note(18, 19.0).toString()) + assertEquals("G1(20.0)", Note(19, 20.0).toString()) + assertEquals("G#1(21.0)", Note(20, 21.0).toString()) + assertEquals("A1(22.0)", Note(21, 22.0).toString()) + assertEquals("A#1(23.0)", Note(22, 23.0).toString()) + assertEquals("B1(24.0)", Note(23, 24.0).toString()) + assertEquals("C4(13.0)", Note(48, 13.0).toString()) + assertEquals("C#4(14.0)", Note(49, 14.0).toString()) + assertEquals("D4(15.0)", Note(50, 15.0).toString()) + assertEquals("D#4(16.0)", Note(51, 16.0).toString()) + assertEquals("E4(17.0)", Note(52, 17.0).toString()) + assertEquals("F4(18.0)", Note(53, 18.0).toString()) + assertEquals("F#4(19.0)", Note(54, 19.0).toString()) + assertEquals("G4(20.0)", Note(55, 20.0).toString()) + assertEquals("G#4(21.0)", Note(56, 21.0).toString()) + assertEquals("A4(22.0)", Note(57, 22.0).toString()) + assertEquals("A#4(23.0)", Note(58, 23.0).toString()) + assertEquals("B4(24.0)", Note(59, 24.0).toString()) + } + + @Test + fun testEquals1() { + val note = Note(1, 3.0) + assertEquals(note, note) + } + + @Test + fun testEquals2() { + val note1 = Note(1, 3.0) + val note2 = Note(1, 3.0) + assertEquals(note1, note2) + } + + @Test + fun testEquals3() { + val note1 = Note(1, 3.0) + val note2 = Note(2, 3.0) + assertNotEquals(note1, note2) + } + + @Test + fun testEquals4() { + val note1 = Note(1, 3.0) + val note2 = Note(1, 4.0) + assertNotEquals(note1, note2) + } + + @Test + fun testEquals5() { + val note = Note(1, 3.0) + assertNotEquals(note, null) + } + + @Test + fun testEquals6() { + val note = Note(1, 3.0) + assertNotEquals(note, note.toString()) + } + + @Test + fun testEquals7() { + val note1 = Note(1, 3.0) + val note2 = Note(1, 3.0) + val notes: MutableSet = HashSet() + notes.add(note1) + assertTrue(notes.contains(note2)) + } + + @Test + fun testHasNoteAbove1() { + assertTrue(Note(0, 1.0).hasNoteAbove()) + } + + @Test + fun testHasNoteAbove2() { + assertTrue(Note(199, 1.0).hasNoteAbove()) + } + + @Test + fun testHasNoteAbove3() { + assertFalse(Note(200, 1.0).hasNoteAbove()) + } + + @Test + fun testHasNoteBelow1() { + assertTrue(Note(1, 1.0).hasNoteBelow()) + } + + @Test + fun testHasNoteBelow2() { + assertTrue(Note(8, 1.0).hasNoteBelow()) + } + + @Test + fun testHasNoteBelow3() { + assertFalse(Note(0, 1.0).hasNoteBelow()) + } + + @Test + fun testNoteAbove1() { + assertEquals(Note(1, 1.0), Note(0, 1.0).noteAbove()) + } + + @Test + fun testNoteAbove2() { + assertEquals(Note(200, 1.0), Note(199, 1.0).noteAbove()) + } + + @Test + fun testNoteBelow1() { + assertEquals(Note(0, 1.0), Note(1, 1.0).noteBelow()) + } + + @Test + fun testNoteBelow2() { + assertEquals(Note(7, 1.0), Note(8, 1.0).noteBelow()) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question2Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question2Tests.kt new file mode 100644 index 0000000..504c832 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question2Tests.kt @@ -0,0 +1,90 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertSame +import kotlin.test.assertTrue + */ + +class Question2Tests { + /* + @Test + fun testConstructor() { + val tune: Tune = StandardTune() + assertTrue(tune.notes.isEmpty()) + } + + @Test + fun testAddNote() { + val tune: Tune = StandardTune() + val note1 = Note(1, 4.0) + val note2 = Note(2, 5.0) + val note3 = Note(3, 6.0) + val note4 = Note(4, 7.0) + tune.addNote(note1) + assertEquals(1, tune.notes.size) + assertSame(note1, tune.notes[0]) + tune.addNote(note2) + assertEquals(2, tune.notes.size) + assertSame(note1, tune.notes[0]) + assertSame(note2, tune.notes[1]) + tune.addNote(note3) + assertEquals(3, tune.notes.size) + assertSame(note1, tune.notes[0]) + assertSame(note2, tune.notes[1]) + assertSame(note3, tune.notes[2]) + tune.addNote(note4) + assertEquals(4, tune.notes.size) + assertSame(note1, tune.notes[0]) + assertSame(note2, tune.notes[1]) + assertSame(note3, tune.notes[2]) + assertSame(note4, tune.notes[3]) + } + + @Test + fun testGetTotalDuration1() { + assertEquals(0.0, StandardTune().totalDuration) + } + + @Test + fun testGetTotalDuration2() { + val tune: Tune = StandardTune() + tune.addNote(Note(10, 10.0)) + tune.addNote(Note(10, 2.0)) + tune.addNote(Note(10, 7.0)) + tune.addNote(Note(10, 15.0)) + assertEquals(34.0, tune.totalDuration) + } + + @Test + fun testGetTotalDuration3() { + val tune: Tune = StandardTune() + for (i in 1..29) { + tune.addNote(Note(0, i.toDouble())) + } + assertEquals(435.0, tune.totalDuration) + } + + @Test + fun testIteration() { + val expectedNotes = listOf( + Note(10, 10.0), + Note(10, 2.0), + Note(10, 7.0), + Note(10, 15.0), + ) + val actualNotes: MutableList = mutableListOf() + val tune: Tune = StandardTune() + tune.addNote(Note(10, 10.0)) + tune.addNote(Note(10, 2.0)) + tune.addNote(Note(10, 7.0)) + tune.addNote(Note(10, 15.0)) + for (note in tune) { + actualNotes.add(note) + } + assertEquals(expectedNotes, actualNotes) + assertEquals(expectedNotes, tune.notes) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question3Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question3Tests.kt new file mode 100644 index 0000000..9de09b5 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question3Tests.kt @@ -0,0 +1,232 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals + */ + +class Question3Tests { + /* + private fun simpleTuneNotes(): List { + return listOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + ) + } + + private fun longerTuneNotes(): List { + val result: MutableList = mutableListOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + Note(50, 2.0), + Note(60, 4.0), + Note(70, 8.0), + Note(80, 12.0), + ) + return result + } + + private fun simpleTune(): Tune { + val result: Tune = StandardTune() + simpleTuneNotes().forEach({ result.addNote(it) }) + return result + } + + @Test + fun testTransposeUp() { + val originalTune = simpleTune() + val transposedUp: Tune = TransposedTune(originalTune, 2) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(3, 2.0), + Note(12, 4.0), + Note(22, 8.0), + Note(42, 12.0), + ), + transposedUp.notes, + ) + } + + @Test + fun testTransposeDown() { + val originalTune = simpleTune() + val transposedDown: Tune = TransposedTune(originalTune, -1) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(0, 2.0), + Note(9, 4.0), + Note(19, 8.0), + Note(39, 12.0), + ), + transposedDown.notes, + ) + } + + @Test + fun testTransposeUpThenDown() { + val originalTune = simpleTune() + val transposedUp: Tune = TransposedTune(originalTune, 1) + val transposedDown: Tune = TransposedTune(transposedUp, -1) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals(simpleTuneNotes(), transposedDown.notes) + } + + @Test + fun testTransposeUpTooFar() { + val originalTune = simpleTune() + val transposedUp: Tune = TransposedTune(originalTune, 190) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(191, 2.0), + Note(200, 4.0), + Note(200, 8.0), + Note(200, 12.0), + ), + transposedUp.notes, + ) + } + + @Test + fun testTransposeDownTooFar() { + val originalTune = simpleTune() + val transposedDown: Tune = TransposedTune(originalTune, -20) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(0, 2.0), + Note(0, 4.0), + Note(0, 8.0), + Note(20, 12.0), + ), + transposedDown.notes, + ) + } + + @Test + fun testAddNotesAllOk1() { + val originalTune = simpleTune() + val transposedUp: Tune = TransposedTune(originalTune, 2) + transposedUp.addNote(Note(52, 2.0)) + transposedUp.addNote(Note(62, 4.0)) + transposedUp.addNote(Note(72, 8.0)) + transposedUp.addNote(Note(82, 12.0)) + assertEquals(longerTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(3, 2.0), + Note(12, 4.0), + Note(22, 8.0), + Note(42, 12.0), + Note(52, 2.0), + Note(62, 4.0), + Note(72, 8.0), + Note(82, 12.0), + ), + transposedUp.notes, + ) + } + + @Test + fun testAddNotesAllOk2() { + val originalTune = simpleTune() + val transposedDown: Tune = TransposedTune(originalTune, -1) + transposedDown.addNote(Note(49, 2.0)) + transposedDown.addNote(Note(59, 4.0)) + transposedDown.addNote(Note(69, 8.0)) + transposedDown.addNote(Note(79, 12.0)) + assertEquals(longerTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(0, 2.0), + Note(9, 4.0), + Note(19, 8.0), + Note(39, 12.0), + Note(49, 2.0), + Note(59, 4.0), + Note(69, 8.0), + Note(79, 12.0), + ), + transposedDown.notes, + ) + } + + @Test + fun testAddNotesSomeTooHigh() { + val originalTune = simpleTune() + val transposedDown: Tune = TransposedTune(originalTune, -10) + transposedDown.addNote(Note(189, 2.0)) + transposedDown.addNote(Note(190, 4.0)) + transposedDown.addNote(Note(191, 8.0)) + transposedDown.addNote(Note(192, 12.0)) + assertEquals( + listOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + Note(199, 2.0), + Note(200, 4.0), + Note(200, 8.0), + Note(200, 12.0), + ), + originalTune.notes, + ) + assertEquals( + listOf( + Note(0, 2.0), + Note(0, 4.0), + Note(10, 8.0), + Note(30, 12.0), + Note(189, 2.0), + Note(190, 4.0), + Note(190, 8.0), + Note(190, 12.0), + ), + transposedDown.notes, + ) + } + + @Test + fun testAddNotesSomeTooLow() { + val originalTune = simpleTune() + val transposedUp: Tune = TransposedTune(originalTune, 10) + transposedUp.addNote(Note(11, 2.0)) + transposedUp.addNote(Note(10, 4.0)) + transposedUp.addNote(Note(9, 8.0)) + transposedUp.addNote(Note(8, 12.0)) + assertEquals( + listOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + Note(1, 2.0), + Note(0, 4.0), + Note(0, 8.0), + Note(0, 12.0), + ), + originalTune.notes, + ) + assertEquals( + listOf( + Note(11, 2.0), + Note(20, 4.0), + Note(30, 8.0), + Note(50, 12.0), + Note(11, 2.0), + Note(10, 4.0), + Note(10, 8.0), + Note(10, 12.0), + ), + transposedUp.notes, + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question4Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question4Tests.kt new file mode 100644 index 0000000..435d368 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question4Tests.kt @@ -0,0 +1,204 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals + */ + +class Question4Tests { + /* + private fun simpleTuneNotes(): List { + return listOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + ) + } + + private fun longerTuneNotes(): List { + val result: MutableList = mutableListOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + Note(50, 2.0), + Note(60, 4.0), + Note(70, 8.0), + Note(80, 12.0), + ) + return result + } + + private fun simpleTune(): Tune { + val result: Tune = StandardTune() + simpleTuneNotes().forEach({ result.addNote(it) }) + return result + } + + @Test + fun testStretchLonger() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 2.0) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 4.0), + Note(10, 8.0), + Note(20, 16.0), + Note(40, 24.0), + ), + stretched.notes, + ) + } + + @Test + fun testStretchMuchLonger() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 31.0) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 62.0), + Note(10, 64.0), + Note(20, 64.0), + Note(40, 64.0), + ), + stretched.notes, + ) + } + + @Test + fun testStretchShorter() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 0.25) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 0.5), + Note(10, 1.0), + Note(20, 2.0), + Note(40, 3.0), + ), + stretched.notes, + ) + assertEquals(6.5, stretched.totalDuration) + } + + @Test + fun testStretchMuchShorter() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 1.0 / 32.0) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 2.0 / 32.0), + Note(10, 4.0 / 32.0), + Note(20, 8.0 / 32.0), + Note(40, 12.0 / 32.0), + ), + stretched.notes, + ) + assertEquals(26.0 / 32.0, stretched.totalDuration) + } + + @Test + fun testStretchAndShrink() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 2.0) + val shrunk: Tune = StretchedTune(stretched, 0.5) + assertEquals(simpleTuneNotes(), originalTune.notes) + assertEquals( + simpleTuneNotes(), + shrunk.notes, + ) + } + + @Test + fun testAddNotesAllOk1() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 2.0) + stretched.addNote(Note(50, 4.0)) + stretched.addNote(Note(60, 8.0)) + stretched.addNote(Note(70, 16.0)) + stretched.addNote(Note(80, 24.0)) + assertEquals(longerTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 4.0), + Note(10, 8.0), + Note(20, 16.0), + Note(40, 24.0), + Note(50, 4.0), + Note(60, 8.0), + Note(70, 16.0), + Note(80, 24.0), + ), + stretched.notes, + ) + } + + @Test + fun testAddNotesAllOk2() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 0.5) + stretched.addNote(Note(50, 1.0)) + stretched.addNote(Note(60, 2.0)) + stretched.addNote(Note(70, 4.0)) + stretched.addNote(Note(80, 6.0)) + assertEquals(longerTuneNotes(), originalTune.notes) + assertEquals( + listOf( + Note(1, 1.0), + Note(10, 2.0), + Note(20, 4.0), + Note(40, 6.0), + Note(50, 1.0), + Note(60, 2.0), + Note(70, 4.0), + Note(80, 6.0), + ), + stretched.notes, + ) + } + + @Test + fun testAddNotesSomeTooSlow() { + val originalTune = simpleTune() + val stretched: Tune = StretchedTune(originalTune, 0.25) + stretched.addNote(Note(189, 2.0)) + stretched.addNote(Note(190, 8.0)) + stretched.addNote(Note(191, 16.0)) + stretched.addNote(Note(192, 32.0)) + stretched.addNote(Note(193, 64.0)) + assertEquals( + listOf( + Note(1, 2.0), + Note(10, 4.0), + Note(20, 8.0), + Note(40, 12.0), + Note(189, 8.0), + Note(190, 32.0), + Note(191, 64.0), + Note(192, 64.0), + Note(193, 64.0), + ), + originalTune.notes, + ) + assertEquals( + listOf( + Note(1, 0.5), + Note(10, 1.0), + Note(20, 2.0), + Note(40, 3.0), + Note(189, 2.0), + Note(190, 8.0), + Note(191, 16.0), + Note(192, 16.0), + Note(193, 16.0), + ), + stretched.notes, + ) + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question5Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question5Tests.kt new file mode 100644 index 0000000..095e839 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question5Tests.kt @@ -0,0 +1,38 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals + */ + +class Question5Tests { + /* + @Test + fun concurrencyTest() { + for (repeat in 1..20) { + println("Repeat run $repeat") + val composerNotes: List> = (0..<8).map { mutableListOf() } + val expectedNotes: MutableSet = mutableSetOf() + for (i in 0..<20000) { + (0..<8).forEach { + val note = Note(i % 200, (i % 4 * it + 1).toDouble()) + composerNotes[it].add(note) + expectedNotes.add(note) + } + } + + // TODO: create a ThreadSafeTune + + // TODO: create eight Composers using the composerNotes lists + + // TODO: create eight Threads, one per Composer + + // TODO: start the threads + + // TODO: join the threads + + assertEquals(expectedNotes, tune.notes.toSet()) + } + } + */ +} diff --git a/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question6Tests.kt b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question6Tests.kt new file mode 100644 index 0000000..96b60b1 --- /dev/null +++ b/kotlin-tunes-skeleton/src/test/kotlin/tunes/Question6Tests.kt @@ -0,0 +1,126 @@ +package tunes + +/* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertSame +import kotlin.test.fail + */ + +class Question6Tests { +/* + private val tune1: Tune = StandardTune() + private val tune2: Tune = StandardTune() + private val tune3: Tune = StandardTune() + private val tune4: Tune = StandardTune() + private val tune5: Tune = StandardTune() + private val tune6: Tune = StandardTune() + private val tune7: Tune = StandardTune() + private val tune8: Tune = StandardTune() + private val tune9: Tune = StandardTune() + private val tune10: Tune = StandardTune() + + init { + tune1.addNote(Note(12, 4.0)) + tune2.addNote(Note(6, 8.0)) + tune3.addNote(Note(18, 4.0)) + tune3.addNote(Note(19, 4.0)) + tune4.addNote(Note(180, 0.25)) + tune4.addNote(Note(170, 0.25)) + tune4.addNote(Note(160, 0.25)) + tune5.addNote(Note(16, 0.25)) + tune5.addNote(Note(60, 0.25)) + tune5.addNote(Note(163, 0.5)) + tune7.addNote(Note(1, 1.0)) + tune7.addNote(Note(1, 1.0)) + tune7.addNote(Note(1, 1.0)) + tune7.addNote(Note(1, 1.0)) + tune7.addNote(Note(1, 1.0)) + tune8.addNote(Note(12, 10.0)) + tune8.addNote(Note(14, 1.0)) + tune9.addNote(Note(140, 1.0)) + tune9.addNote(Note(140, 1.0)) + tune9.addNote(Note(141, 1.0)) + tune9.addNote(Note(142, 1.0)) + tune10.addNote(Note(1, 1.0)) + tune10.addNote(Note(1, 1.0)) + tune10.addNote(Note(1, 1.0)) + } + + @Test + fun testEmptySongCollection() { + val songCollection = SongCollection() + assertEquals(emptyList(), songCollection.getSongNames()) + } + + @Test + fun testSmallCollection() { + val songCollection = SongCollection() + songCollection.addSong("Carol", tune1) + songCollection.addSong("Anthem", tune2) + songCollection.addSong("Ballad", tune3) + assertEquals(listOf("Anthem", "Ballad", "Carol"), songCollection.getSongNames()) + assertSame(tune1, songCollection.getTune("Carol")) + assertSame(tune2, songCollection.getTune("Anthem")) + assertSame(tune3, songCollection.getTune("Ballad")) + try { + songCollection.getTune("Rocker") + fail("Expected NoSuchElementException") + } catch (exception: NoSuchElementException) { + // Good; an exception was expected. + } + try { + songCollection.addSong("Carol", tune4) + fail("Expected UnsupportedOperationException") + } catch (exception: UnsupportedOperationException) { + // Good; an exception was expected. + } + } + + @Test + fun testLargeCollection() { + val songCollection = SongCollection() + songCollection.addSong("Killer Queen", tune1) + songCollection.addSong("Another One Bites The Dust", tune2) + songCollection.addSong("Innuendo", tune3) + songCollection.addSong("I Want It All", tune4) + assertSame(tune1, songCollection.getTune("Killer Queen")) + assertSame(tune2, songCollection.getTune("Another One Bites The Dust")) + assertSame(tune3, songCollection.getTune("Innuendo")) + assertSame(tune4, songCollection.getTune("I Want It All")) + assertEquals(listOf("Another One Bites The Dust", "I Want It All", "Innuendo", "Killer Queen"), songCollection.getSongNames()) + + songCollection.addSong("Headlong", tune5) + songCollection.addSong("Don't Try So Hard", tune6) + songCollection.addSong("Tenement Funster", tune7) + songCollection.addSong("It's A Kind Of Magic", tune8) + songCollection.addSong("Breakthru", tune9) + songCollection.addSong("Who Wants To Live Forever?", tune10) + assertSame(tune1, songCollection.getTune("Killer Queen")) + assertSame(tune2, songCollection.getTune("Another One Bites The Dust")) + assertSame(tune3, songCollection.getTune("Innuendo")) + assertSame(tune4, songCollection.getTune("I Want It All")) + assertSame(tune5, songCollection.getTune("Headlong")) + assertSame(tune6, songCollection.getTune("Don't Try So Hard")) + assertSame(tune7, songCollection.getTune("Tenement Funster")) + assertSame(tune8, songCollection.getTune("It's A Kind Of Magic")) + assertSame(tune9, songCollection.getTune("Breakthru")) + assertSame(tune10, songCollection.getTune("Who Wants To Live Forever?")) + assertEquals( + listOf( + "Another One Bites The Dust", + "Breakthru", + "Don't Try So Hard", + "Headlong", + "I Want It All", + "Innuendo", + "It's A Kind Of Magic", + "Killer Queen", + "Tenement Funster", + "Who Wants To Live Forever?", + ), + songCollection.getSongNames(), + ) + } + */ +} diff --git a/kotlin-tunes.pdf b/kotlin-tunes.pdf new file mode 100644 index 0000000..518c45d Binary files /dev/null and b/kotlin-tunes.pdf differ