From 19bca332ddf66ec5b3c4767afb61574dd66f418d Mon Sep 17 00:00:00 2001 From: Michael Rapp Date: Thu, 30 Aug 2018 22:29:13 +0200 Subject: [PATCH] Format code. --- .../java/de/mrapp/apriori/AssociationRule.kt | 7 +-- src/main/java/de/mrapp/apriori/Filter.kt | 13 ++--- .../java/de/mrapp/apriori/FrequentItemSets.kt | 4 +- src/main/java/de/mrapp/apriori/Item.kt | 6 +-- src/main/java/de/mrapp/apriori/Metric.kt | 4 +- src/main/java/de/mrapp/apriori/Output.kt | 9 ++-- src/main/java/de/mrapp/apriori/TieBreaker.kt | 4 +- .../datastructure/TransactionalItemSet.kt | 8 +-- .../modules/AssociationRuleGeneratorModule.kt | 6 +-- .../de/mrapp/apriori/tasks/AbstractTask.kt | 4 +- .../java/de/mrapp/apriori/AbstractDataTest.kt | 53 +++++++++++++++++-- src/test/java/de/mrapp/apriori/AprioriTest.kt | 43 ++++++++------- .../de/mrapp/apriori/AssociationRuleTest.kt | 5 +- .../java/de/mrapp/apriori/DataIterator.kt | 4 +- .../java/de/mrapp/apriori/DataIteratorTest.kt | 36 ++++++++++--- src/test/java/de/mrapp/apriori/FilterTest.kt | 2 +- src/test/java/de/mrapp/apriori/NamedItem.kt | 2 +- src/test/java/de/mrapp/apriori/OutputTest.kt | 2 +- src/test/java/de/mrapp/apriori/RuleSetTest.kt | 2 +- src/test/java/de/mrapp/apriori/SortingTest.kt | 2 +- .../java/de/mrapp/apriori/TieBreakerTest.kt | 2 +- .../datastructure/FrequentItemSetsTest.kt | 11 ++-- .../datastructure/TransactionalItemSetTest.kt | 11 ++-- .../mrapp/apriori/metrics/ConvictionTest.kt | 2 +- .../de/mrapp/apriori/metrics/LeverageTest.kt | 2 +- .../java/de/mrapp/apriori/metrics/LiftTest.kt | 2 +- .../de/mrapp/apriori/metrics/SupportTest.kt | 2 +- .../AssociationRuleGeneratorModuleTest.kt | 20 ++++--- .../modules/FrequentItemSetMinerModuleTest.kt | 21 +++++--- .../apriori/operators/ArithmeticMeanTest.kt | 2 +- .../tasks/AssociationRuleGeneratorTaskTest.kt | 8 +-- .../tasks/FrequentItemSetMinerTaskTest.kt | 11 ++-- 32 files changed, 197 insertions(+), 113 deletions(-) diff --git a/src/main/java/de/mrapp/apriori/AssociationRule.kt b/src/main/java/de/mrapp/apriori/AssociationRule.kt index f1d981b..ca61e84 100644 --- a/src/main/java/de/mrapp/apriori/AssociationRule.kt +++ b/src/main/java/de/mrapp/apriori/AssociationRule.kt @@ -31,9 +31,10 @@ import java.io.Serializable * @author Michael Rapp * @since 1.0.0 */ -data class AssociationRule(val body: ItemSet, - val head: ItemSet, - val support: Double) : Comparable>, Serializable { +data class AssociationRule( + val body: ItemSet, + val head: ItemSet, + val support: Double) : Comparable>, Serializable { init { ensureAtLeast(support, 0.0, "The support must be at least 0") diff --git a/src/main/java/de/mrapp/apriori/Filter.kt b/src/main/java/de/mrapp/apriori/Filter.kt index badc793..0c0c6a7 100644 --- a/src/main/java/de/mrapp/apriori/Filter.kt +++ b/src/main/java/de/mrapp/apriori/Filter.kt @@ -29,13 +29,14 @@ interface Filter : Predicate { companion object { /** - * Returns a filter, which applies to item sets. By default, no item sets are filtered at all. + * Returns a filter, which applies to item sets. By default, no item sets are filtered at + * all. */ fun forItemSets() = ItemSetFilter(Predicate { _ -> true }, null) /** - * Returns a filter, which applies to association rules. By default, no association rules are - * filtered at all. + * Returns a filter, which applies to association rules. By default, no association rules + * are filtered at all. */ fun forAssociationRules() = AssociationRuleFilter(Predicate { _ -> true }, null) @@ -50,8 +51,9 @@ interface Filter : Predicate { * @property parent The parent of the filter. When applied to an item, all parents of the * filter are tested */ - abstract class AbstractFilter>(protected val predicate: Predicate, - protected val parent: FilterType? = null) : Filter + abstract class AbstractFilter>( + protected val predicate: Predicate, + protected val parent: FilterType? = null) : Filter /** * A filter, which applies to item sets. @@ -170,7 +172,6 @@ interface Filter : Predicate { * minimum size must be at least 0 * @param maxSize The maximum size, which should be set, as an [Integer] value. The * maximum size must be at least the minimum size - * @return The filter, this method has been called upon, as an instance of the class [ ]. The filter may not be null */ @JvmOverloads fun byHeadSize(minSize: Int, maxSize: Int = Integer.MAX_VALUE): AssociationRuleFilter { diff --git a/src/main/java/de/mrapp/apriori/FrequentItemSets.kt b/src/main/java/de/mrapp/apriori/FrequentItemSets.kt index 5ef99c5..a8d1a24 100644 --- a/src/main/java/de/mrapp/apriori/FrequentItemSets.kt +++ b/src/main/java/de/mrapp/apriori/FrequentItemSets.kt @@ -39,8 +39,8 @@ class FrequentItemSets : SortedArraySet>, * which have been found by the algorithm. * * @param T The type of the items that are contained by the item sets - * @param frequentItemSets A collection that contains the frequent item sets or null, if - * no frequent item sets have been found by the algorithm + * @param frequentItemSets A collection that contains the frequent item sets or null, if no + * frequent item sets have been found by the algorithm */ fun formatFrequentItemSets(frequentItemSets: Collection>): String { val stringBuilder = StringBuilder() diff --git a/src/main/java/de/mrapp/apriori/Item.kt b/src/main/java/de/mrapp/apriori/Item.kt index 55a9b05..e02b53a 100644 --- a/src/main/java/de/mrapp/apriori/Item.kt +++ b/src/main/java/de/mrapp/apriori/Item.kt @@ -18,9 +18,9 @@ import java.io.Serializable /** * Defines the interface, an item, which is part of a [Transaction], must implement. The Apriori * algorithm relies on items to correctly implement the [Object.hashCode] and [Object.equals] - * methods to be able to compare items to each other. Furthermore, the interface [Comparable] - * must be implemented. This allows to sort items (e.g. by their names) in order to generate - * candidates in an efficient way, when searching for frequent item sets. + * methods to be able to compare items to each other. Furthermore, the interface [Comparable] must + * be implemented. This allows to sort items (e.g. by their names) in order to generate candidates + * in an efficient way, when searching for frequent item sets. * * @author Michael Rapp * @since 1.0.0 diff --git a/src/main/java/de/mrapp/apriori/Metric.kt b/src/main/java/de/mrapp/apriori/Metric.kt index 7689763..9da472f 100644 --- a/src/main/java/de/mrapp/apriori/Metric.kt +++ b/src/main/java/de/mrapp/apriori/Metric.kt @@ -14,8 +14,8 @@ package de.mrapp.apriori /** - * Defines the interface, a class, which allows to measure the "interestingly" of association - * rules according to a certain metric, must implement. + * Defines the interface, a class, which allows to measure the "interestingly" of association rules + * according to a certain metric, must implement. * * @author Michael Rapp * @since 1.0.0 diff --git a/src/main/java/de/mrapp/apriori/Output.kt b/src/main/java/de/mrapp/apriori/Output.kt index 19f25cb..ac59a23 100644 --- a/src/main/java/de/mrapp/apriori/Output.kt +++ b/src/main/java/de/mrapp/apriori/Output.kt @@ -20,14 +20,15 @@ import java.io.Serializable /** * An output of the Apriori algorithm. * - * @param ItemType The type of the items, which have been processed by the Apriori algorithm + * @param ItemType The type of the items, which have been processed by the Apriori + * algorithm * @property configuration The configuration of the Apriori algorithm * @property startTime The time, the Apriori algorithm was started * @property endTime The time, the Apriori algorithm terminated * @property frequentItemSets The frequent item sets that have been found by the Apriori algorithm * @property ruleSet The rule set that contains the association rules, which have been - * generated by the Apriori algorithm or null, if the algorithm has not been - * configured to generate any rules + * generated by the Apriori algorithm or null, if the algorithm has not + * been configured to generate any rules * @author Michael Rapp * @since 1.0.0 */ @@ -38,7 +39,7 @@ class Output(val configuration: Configuration, val ruleSet: RuleSet?) : Serializable { /** - * Returns the runtime of the Apriori algorithm in milliseconds. + * The runtime of the Apriori algorithm in milliseconds. */ val runtime: Long get() = endTime - startTime diff --git a/src/main/java/de/mrapp/apriori/TieBreaker.kt b/src/main/java/de/mrapp/apriori/TieBreaker.kt index 214dbd7..f3b8181 100644 --- a/src/main/java/de/mrapp/apriori/TieBreaker.kt +++ b/src/main/java/de/mrapp/apriori/TieBreaker.kt @@ -44,8 +44,8 @@ interface TieBreaker : Comparator { * * @param T The type of the items, the tie-breaking strategy applies to * @param TieBreakerType The type of the tie-breaking strategy - * @property parent The tie-breaking strategy, which is used for tie-breaking - * before applying this tie-breaking strategy + * @property parent The tie-breaking strategy, which is used for tie-breaking before + * applying this tie-breaking strategy * @property comparator The comparator, which specifies which one of two item sets or * association rules should be sorted before the other one when * performing tie-breaking diff --git a/src/main/java/de/mrapp/apriori/datastructure/TransactionalItemSet.kt b/src/main/java/de/mrapp/apriori/datastructure/TransactionalItemSet.kt index 0840fe9..f3514e2 100644 --- a/src/main/java/de/mrapp/apriori/datastructure/TransactionalItemSet.kt +++ b/src/main/java/de/mrapp/apriori/datastructure/TransactionalItemSet.kt @@ -19,8 +19,8 @@ import de.mrapp.apriori.Transaction import java.util.* /** - * An extension of the class [ItemSet], which allows to store the transactions, the item - * set occurs in. + * An extension of the class [ItemSet], which allows to store the transactions, the item set occurs + * in. * * @param ItemType The type of the items, which are contained by the item set * @author Michael Rapp @@ -29,8 +29,8 @@ import java.util.* class TransactionalItemSet : ItemSet { /** - * A map that contains the transactions, the item set occurs in. The transactions are - * mapped to unique ids. + * A map that contains the transactions, the item set occurs in. The transactions are mapped to + * unique ids. */ var transactions: MutableMap> diff --git a/src/main/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModule.kt b/src/main/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModule.kt index 745ae83..7461e52 100644 --- a/src/main/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModule.kt +++ b/src/main/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModule.kt @@ -51,8 +51,8 @@ class AssociationRuleGeneratorModule : AssociationRuleGenerator /** * Generates association rules from a specific [itemSet] by moving items from a rule's [body] - * to its [head]. This method is executed recursively until the resulting rule does not reach the - * minimum confidence anymore. + * to its [head]. This method is executed recursively until the resulting rule does not reach + * the minimum confidence anymore. */ private fun generateRules(itemSet: ItemSet, frequentItemSets: Map>, @@ -60,7 +60,7 @@ class AssociationRuleGeneratorModule : AssociationRuleGenerator body: ItemSet, head: ItemSet?, minConfidence: Double) { for (item in body) { - val headItemSet = head?.let{ ItemSet(it) } ?: ItemSet() + val headItemSet = head?.let { ItemSet(it) } ?: ItemSet() headItemSet.add(item) val bodyItemSet = ItemSet(body) bodyItemSet.remove(item) diff --git a/src/main/java/de/mrapp/apriori/tasks/AbstractTask.kt b/src/main/java/de/mrapp/apriori/tasks/AbstractTask.kt index c9ba4aa..43cf17e 100644 --- a/src/main/java/de/mrapp/apriori/tasks/AbstractTask.kt +++ b/src/main/java/de/mrapp/apriori/tasks/AbstractTask.kt @@ -16,8 +16,8 @@ package de.mrapp.apriori.tasks import de.mrapp.apriori.Apriori /** - * An abstract base class for all tasks, which execute a module multiple times in order to - * obtain the results, which are requested according to a specific configuration. + * An abstract base class for all tasks, which execute a module multiple times in order to obtain + * the results, which are requested according to a specific configuration. * * @property configuration The configuration that is used by the task * @author Michael Rapp diff --git a/src/test/java/de/mrapp/apriori/AbstractDataTest.kt b/src/test/java/de/mrapp/apriori/AbstractDataTest.kt index 60f5fda..9200105 100644 --- a/src/test/java/de/mrapp/apriori/AbstractDataTest.kt +++ b/src/test/java/de/mrapp/apriori/AbstractDataTest.kt @@ -36,19 +36,62 @@ abstract class AbstractDataTest { const val INPUT_FILE_4 = "data4.txt" - val FREQUENT_ITEM_SETS_1 = arrayOf(arrayOf("milk", "sugar"), arrayOf("coffee"), arrayOf("coffee", "milk", "sugar"), arrayOf("coffee", "sugar"), arrayOf("milk"), arrayOf("coffee", "milk"), arrayOf("bread"), arrayOf("bread", "sugar"), arrayOf("sugar")) + val FREQUENT_ITEM_SETS_1 = arrayOf( + arrayOf("milk", "sugar"), + arrayOf("coffee"), + arrayOf("coffee", "milk", "sugar"), + arrayOf("coffee", "sugar"), + arrayOf("milk"), + arrayOf("coffee", "milk"), + arrayOf("bread"), + arrayOf("bread", "sugar"), + arrayOf("sugar") + ) val SUPPORTS_1 = doubleArrayOf(0.5, 0.75, 0.5, 0.5, 0.75, 0.75, 0.5, 0.5, 0.75) - val FREQUENT_ITEM_SETS_2 = arrayOf(arrayOf("beer"), arrayOf("wine"), arrayOf("beer", "wine"), arrayOf("chips", "pizza"), arrayOf("beer", "chips", "wine"), arrayOf("chips"), arrayOf("beer", "chips"), arrayOf("chips", "wine"), arrayOf("pizza"), arrayOf("pizza", "wine")) + val FREQUENT_ITEM_SETS_2 = arrayOf( + arrayOf("beer"), + arrayOf("wine"), + arrayOf("beer", "wine"), + arrayOf("chips", "pizza"), + arrayOf("beer", "chips", "wine"), + arrayOf("chips"), + arrayOf("beer", "chips"), + arrayOf("chips", "wine"), + arrayOf("pizza"), + arrayOf("pizza", "wine") + ) val SUPPORTS_2 = doubleArrayOf(0.5, 0.5, 0.25, 0.25, 0.25, 0.75, 0.5, 0.25, 0.5, 0.25) - val FREQUENT_ITEM_SETS_3 = arrayOf(arrayOf("0", "3"), arrayOf("0", "1", "3"), arrayOf("3"), arrayOf("0", "4"), arrayOf("0", "1", "4"), arrayOf("4"), arrayOf("1", "4"), arrayOf("0"), arrayOf("0", "1"), arrayOf("1")) + val FREQUENT_ITEM_SETS_3 = arrayOf( + arrayOf("0", "3"), + arrayOf("0", "1", "3"), + arrayOf("3"), + arrayOf("0", "4"), + arrayOf("0", "1", "4"), + arrayOf("4"), + arrayOf("1", "4"), + arrayOf("0"), + arrayOf("0", "1"), + arrayOf("1") + ) val SUPPORTS_3 = doubleArrayOf(0.5, 0.5, 0.5, 0.75, 0.75, 0.75, 0.75, 1.0, 1.0, 1.0) - val FREQUENT_ITEM_SETS_4 = arrayOf(arrayOf("0", "3"), arrayOf("0", "1", "3"), arrayOf("3"), arrayOf("0", "4"), arrayOf("0", "1", "4"), arrayOf("4"), arrayOf("1", "4"), arrayOf("0"), arrayOf("0", "1"), arrayOf("1")) + val FREQUENT_ITEM_SETS_4 = arrayOf( + arrayOf("0", "3"), + arrayOf("0", "1", "3"), + arrayOf("3"), + arrayOf("0", "4"), + arrayOf("0", "1", "4"), + arrayOf("4"), + arrayOf("1", "4"), + arrayOf("0"), + arrayOf("0", "1"), + arrayOf("1") + ) val SUPPORTS_4 = doubleArrayOf(0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 1.0, 1.0, 1.0) @@ -73,4 +116,4 @@ abstract class AbstractDataTest { } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/AprioriTest.kt b/src/test/java/de/mrapp/apriori/AprioriTest.kt index 2887037..7e0f455 100644 --- a/src/test/java/de/mrapp/apriori/AprioriTest.kt +++ b/src/test/java/de/mrapp/apriori/AprioriTest.kt @@ -52,8 +52,8 @@ class AprioriTest : AbstractDataTest() { val maxSupport = 0.8 val supportDelta = 0.2 val frequentItemSetCount = 0 - val apriori = Apriori.Builder(minSupport).maxSupport(maxSupport).supportDelta(supportDelta) - .frequentItemSetCount(frequentItemSetCount).create() + val apriori = Apriori.Builder(minSupport).maxSupport(maxSupport) + .supportDelta(supportDelta).frequentItemSetCount(frequentItemSetCount).create() val configuration = apriori.configuration assertEquals(minSupport, configuration.minSupport) assertEquals(maxSupport, configuration.maxSupport) @@ -68,8 +68,8 @@ class AprioriTest : AbstractDataTest() { val maxSupport = 0.8 val supportDelta = 0.2 val frequentItemSetCount = 2 - val apriori = Apriori.Builder(frequentItemSetCount).minSupport(minSupport).maxSupport(maxSupport) - .supportDelta(supportDelta).create() + val apriori = Apriori.Builder(frequentItemSetCount).minSupport(minSupport) + .maxSupport(maxSupport).supportDelta(supportDelta).create() val configuration = apriori.configuration assertEquals(minSupport, configuration.minSupport) assertEquals(maxSupport, configuration.maxSupport) @@ -88,9 +88,10 @@ class AprioriTest : AbstractDataTest() { val maxConfidence = 0.8 val confidenceDelta = 0.2 val ruleCount = 0 - val apriori = Apriori.Builder(frequentItemSetCount).generateRules(minConfidence).minSupport(minSupport) - .maxSupport(maxSupport).supportDelta(supportDelta).frequentItemSetCount(frequentItemSetCount) - .maxConfidence(maxConfidence).confidenceDelta(confidenceDelta).ruleCount(ruleCount).create() + val apriori = Apriori.Builder(frequentItemSetCount).generateRules(minConfidence) + .minSupport(minSupport).maxSupport(maxSupport).supportDelta(supportDelta) + .frequentItemSetCount(frequentItemSetCount).maxConfidence(maxConfidence) + .confidenceDelta(confidenceDelta).ruleCount(ruleCount).create() val configuration = apriori.configuration assertEquals(minSupport, configuration.minSupport) assertEquals(maxSupport, configuration.maxSupport) @@ -113,10 +114,10 @@ class AprioriTest : AbstractDataTest() { val maxConfidence = 0.8 val confidenceDelta = 0.2 val ruleCount = 2 - val apriori = Apriori.Builder(frequentItemSetCount).generateRules(ruleCount).minSupport(minSupport) - .maxSupport(maxSupport).supportDelta(supportDelta).frequentItemSetCount(frequentItemSetCount) - .minConfidence(minConfidence).maxConfidence(maxConfidence).confidenceDelta(confidenceDelta) - .create() + val apriori = Apriori.Builder(frequentItemSetCount).generateRules(ruleCount) + .minSupport(minSupport).maxSupport(maxSupport).supportDelta(supportDelta) + .frequentItemSetCount(frequentItemSetCount).minConfidence(minConfidence) + .maxConfidence(maxConfidence).confidenceDelta(confidenceDelta).create() val configuration = apriori.configuration assertEquals(minSupport, configuration.minSupport) assertEquals(maxSupport, configuration.maxSupport) @@ -160,13 +161,16 @@ class AprioriTest : AbstractDataTest() { map[itemSet1.hashCode()] = itemSet1 map[itemSet2.hashCode()] = itemSet2 val frequentItemSetMiner = object : FrequentItemSetMiner { - override fun findFrequentItemSets(iterable: Iterable>, minSupport: Double) = map + override fun findFrequentItemSets(iterable: Iterable>, + minSupport: Double) = map } val associationRuleGenerator = object : AssociationRuleGenerator { - override fun generateAssociationRules(frequentItemSets: Map>, minConfidence: Double) = throw RuntimeException() + override fun generateAssociationRules(frequentItemSets: Map>, + minConfidence: Double) = throw RuntimeException() } val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, frequentItemSetMiner) - val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, associationRuleGenerator) + val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, + associationRuleGenerator) val file = getInputFile(AbstractDataTest.INPUT_FILE_1) val apriori = Apriori(configuration, frequentItemSetMinerTask, associationRuleGeneratorTask) val output = apriori.execute(Iterable { DataIterator(file) }) @@ -201,13 +205,16 @@ class AprioriTest : AbstractDataTest() { val associationRule = AssociationRule(ItemSet(), ItemSet(), 0.5) ruleSet.add(associationRule) val frequentItemSetMiner = object : FrequentItemSetMiner { - override fun findFrequentItemSets(iterable: Iterable>, minSupport: Double) = map + override fun findFrequentItemSets(iterable: Iterable>, + minSupport: Double) = map } val associationRuleGenerator = object : AssociationRuleGenerator { - override fun generateAssociationRules(frequentItemSets: Map>, minConfidence: Double) = ruleSet + override fun generateAssociationRules(frequentItemSets: Map>, + minConfidence: Double) = ruleSet } val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, frequentItemSetMiner) - val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, associationRuleGenerator) + val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, + associationRuleGenerator) val file = getInputFile(AbstractDataTest.INPUT_FILE_1) val apriori = Apriori(configuration, frequentItemSetMinerTask, associationRuleGeneratorTask) val output = apriori.execute(Iterable { DataIterator(file) }) @@ -223,4 +230,4 @@ class AprioriTest : AbstractDataTest() { assertEquals(item2, set.last().first()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/AssociationRuleTest.kt b/src/test/java/de/mrapp/apriori/AssociationRuleTest.kt index 15c3fff..9e074fb 100644 --- a/src/test/java/de/mrapp/apriori/AssociationRuleTest.kt +++ b/src/test/java/de/mrapp/apriori/AssociationRuleTest.kt @@ -53,7 +53,8 @@ class AssociationRuleTest { @Test fun testCoversWithArrayParameter() { - val items = arrayOf(NamedItem("a"), NamedItem("c"), NamedItem("d"), NamedItem("e"), NamedItem("f")) + val items = arrayOf(NamedItem("a"), NamedItem("c"), NamedItem("d"), NamedItem("e"), + NamedItem("f")) val body = ItemSet() body.add(NamedItem("a")) body.add(NamedItem("b")) @@ -138,4 +139,4 @@ class AssociationRuleTest { assertEquals("[a, b] -> [c, d]", associationRule.toString()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/DataIterator.kt b/src/test/java/de/mrapp/apriori/DataIterator.kt index fb8d15a..e86d2a6 100644 --- a/src/test/java/de/mrapp/apriori/DataIterator.kt +++ b/src/test/java/de/mrapp/apriori/DataIterator.kt @@ -33,8 +33,8 @@ class DataIterator(private val file: File) : Iterator> { } /** - * An implementation of the interface [Transaction]. Each transaction corresponds to a - * single line of a text file. + * An implementation of the interface [Transaction]. Each transaction corresponds to a single + * line of a text file. * * @property line The line the transaction corresponds to */ diff --git a/src/test/java/de/mrapp/apriori/DataIteratorTest.kt b/src/test/java/de/mrapp/apriori/DataIteratorTest.kt index 3024e99..29df98f 100644 --- a/src/test/java/de/mrapp/apriori/DataIteratorTest.kt +++ b/src/test/java/de/mrapp/apriori/DataIteratorTest.kt @@ -25,13 +25,35 @@ class DataIteratorTest : AbstractDataTest() { companion object { - private val DATA_1 = arrayOf(arrayOf("bread", "butter", "sugar"), arrayOf("coffee", "milk", "sugar"), arrayOf("bread", "coffee", "milk", "sugar"), arrayOf("coffee", "milk")) + private val DATA_1 = arrayOf( + arrayOf("bread", "butter", "sugar"), + arrayOf("coffee", "milk", "sugar"), + arrayOf("bread", "coffee", "milk", "sugar"), + arrayOf("coffee", "milk") + ) + + private val DATA_2 = arrayOf( + arrayOf("beer", "chips", "wine"), + arrayOf("beer", "chips"), + arrayOf("pizza", "wine"), + arrayOf("chips", "pizza") + ) + + private val DATA_3 = arrayOf( + arrayOf("0", "1", "2", "3"), + arrayOf("0", "1", "3", "4", "5"), + arrayOf("0", "1", "4"), + arrayOf("0", "1", "4") + ) + + private val DATA_4 = arrayOf( + arrayOf("0", "1", "2", "3"), + arrayOf("0", "1", "2", "3"), + arrayOf("0", "1", "3", "4", "5"), + arrayOf("0", "1", "4"), + arrayOf("0", "1", "4") + ) - private val DATA_2 = arrayOf(arrayOf("beer", "chips", "wine"), arrayOf("beer", "chips"), arrayOf("pizza", "wine"), arrayOf("chips", "pizza")) - - private val DATA_3 = arrayOf(arrayOf("0", "1", "2", "3"), arrayOf("0", "1", "3", "4", "5"), arrayOf("0", "1", "4"), arrayOf("0", "1", "4")) - - private val DATA_4 = arrayOf(arrayOf("0", "1", "2", "3"), arrayOf("0", "1", "2", "3"), arrayOf("0", "1", "3", "4", "5"), arrayOf("0", "1", "4"), arrayOf("0", "1", "4")) } private fun testIterator(fileName: String, actualData: Array>) { @@ -75,4 +97,4 @@ class DataIteratorTest : AbstractDataTest() { testIterator(AbstractDataTest.INPUT_FILE_4, DATA_4) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/FilterTest.kt b/src/test/java/de/mrapp/apriori/FilterTest.kt index c8f8c17..289313e 100644 --- a/src/test/java/de/mrapp/apriori/FilterTest.kt +++ b/src/test/java/de/mrapp/apriori/FilterTest.kt @@ -207,4 +207,4 @@ class FilterTest { Filter.forAssociationRules().byHeadSize(3, 2) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/NamedItem.kt b/src/test/java/de/mrapp/apriori/NamedItem.kt index d6317be..01ecd2b 100644 --- a/src/test/java/de/mrapp/apriori/NamedItem.kt +++ b/src/test/java/de/mrapp/apriori/NamedItem.kt @@ -50,4 +50,4 @@ data class NamedItem(val name: String) : Item { return name == another.name } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/OutputTest.kt b/src/test/java/de/mrapp/apriori/OutputTest.kt index 3d91cfa..c68f8b7 100644 --- a/src/test/java/de/mrapp/apriori/OutputTest.kt +++ b/src/test/java/de/mrapp/apriori/OutputTest.kt @@ -51,4 +51,4 @@ class OutputTest { Output(Apriori.Configuration(), 1, 0, FrequentItemSets(null), null) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/RuleSetTest.kt b/src/test/java/de/mrapp/apriori/RuleSetTest.kt index 3e5e81a..686a0fd 100644 --- a/src/test/java/de/mrapp/apriori/RuleSetTest.kt +++ b/src/test/java/de/mrapp/apriori/RuleSetTest.kt @@ -140,4 +140,4 @@ class RuleSetTest { assertEquals("[]", RuleSet(null).toString()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/SortingTest.kt b/src/test/java/de/mrapp/apriori/SortingTest.kt index ba7ba2b..64b1f47 100644 --- a/src/test/java/de/mrapp/apriori/SortingTest.kt +++ b/src/test/java/de/mrapp/apriori/SortingTest.kt @@ -146,4 +146,4 @@ class SortingTest { assertEquals(1, sorting.compare(associationRule1, associationRule2).toLong()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/TieBreakerTest.kt b/src/test/java/de/mrapp/apriori/TieBreakerTest.kt index cbc2154..8620e55 100644 --- a/src/test/java/de/mrapp/apriori/TieBreakerTest.kt +++ b/src/test/java/de/mrapp/apriori/TieBreakerTest.kt @@ -230,4 +230,4 @@ class TieBreakerTest { assertEquals(-1, tieBreaker.compare(associationRule1, associationRule2).toLong()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/datastructure/FrequentItemSetsTest.kt b/src/test/java/de/mrapp/apriori/datastructure/FrequentItemSetsTest.kt index 0b864fe..a8eb612 100644 --- a/src/test/java/de/mrapp/apriori/datastructure/FrequentItemSetsTest.kt +++ b/src/test/java/de/mrapp/apriori/datastructure/FrequentItemSetsTest.kt @@ -55,9 +55,8 @@ class FrequentItemSetsTest { val frequentItemSets = FrequentItemSets(reverseOrder()) frequentItemSets.add(itemSet1) frequentItemSets.add(itemSet2) - assertEquals( - "[" + itemSet2 + " (support = " + support2 + "),\n" + itemSet1 + " (support = " + - support1 + ")]", + assertEquals("[" + itemSet2 + " (support = " + support2 + "),\n" + itemSet1 + + " (support = " + support1 + ")]", FrequentItemSets.formatFrequentItemSets(frequentItemSets)) } @@ -76,8 +75,7 @@ class FrequentItemSetsTest { itemSet1.add(NamedItem("b")) itemSet2.add(NamedItem("c")) itemSet2.support = 0.4 - val frequentItemSets = FrequentItemSets( - Sorting.forItemSets()) + val frequentItemSets = FrequentItemSets(Sorting.forItemSets()) frequentItemSets.add(itemSet1) frequentItemSets.add(itemSet2) assertEquals(itemSet1, frequentItemSets.first()) @@ -97,8 +95,7 @@ class FrequentItemSetsTest { itemSet1.add(NamedItem("b")) itemSet2.add(NamedItem("c")) itemSet2.support = 0.4 - val frequentItemSets = FrequentItemSets( - Sorting.forItemSets()) + val frequentItemSets = FrequentItemSets(Sorting.forItemSets()) frequentItemSets.add(itemSet1) frequentItemSets.add(itemSet2) assertEquals(itemSet1, frequentItemSets.first()) diff --git a/src/test/java/de/mrapp/apriori/datastructure/TransactionalItemSetTest.kt b/src/test/java/de/mrapp/apriori/datastructure/TransactionalItemSetTest.kt index cbc9119..5899579 100644 --- a/src/test/java/de/mrapp/apriori/datastructure/TransactionalItemSetTest.kt +++ b/src/test/java/de/mrapp/apriori/datastructure/TransactionalItemSetTest.kt @@ -47,17 +47,14 @@ class TransactionalItemSetTest { transactionalItemSet1.support = 0.5 transactionalItemSet1.add(item) transactionalItemSet1.transactions = transactions - val transactionalItemSet2 = TransactionalItemSet( - transactionalItemSet1) + val transactionalItemSet2 = TransactionalItemSet(transactionalItemSet1) assertEquals(transactionalItemSet1.support, transactionalItemSet2.support) assertEquals(transactionalItemSet1.size.toLong(), transactionalItemSet2.size.toLong()) assertEquals(transactionalItemSet1.first(), transactionalItemSet2.first()) assertEquals(transactionalItemSet1.transactions.size.toLong(), transactionalItemSet2.transactions.size.toLong()) - assertEquals(transactionalItemSet1.transactions[0], - transactionalItemSet2.transactions[0]) - assertEquals(transactionalItemSet1.transactions[1], - transactionalItemSet2.transactions[1]) + assertEquals(transactionalItemSet1.transactions[0], transactionalItemSet2.transactions[0]) + assertEquals(transactionalItemSet1.transactions[1], transactionalItemSet2.transactions[1]) } @Test @@ -71,4 +68,4 @@ class TransactionalItemSetTest { assertEquals(transactions, transactionalItemSet.transactions) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/metrics/ConvictionTest.kt b/src/test/java/de/mrapp/apriori/metrics/ConvictionTest.kt index cf2bb4e..1dd4d58 100644 --- a/src/test/java/de/mrapp/apriori/metrics/ConvictionTest.kt +++ b/src/test/java/de/mrapp/apriori/metrics/ConvictionTest.kt @@ -63,4 +63,4 @@ class ConvictionTest { assertEquals(Double.MAX_VALUE, Conviction().maxValue()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/metrics/LeverageTest.kt b/src/test/java/de/mrapp/apriori/metrics/LeverageTest.kt index 9fe84ae..8be7b21 100644 --- a/src/test/java/de/mrapp/apriori/metrics/LeverageTest.kt +++ b/src/test/java/de/mrapp/apriori/metrics/LeverageTest.kt @@ -51,4 +51,4 @@ class LeverageTest { assertEquals(1.0, Leverage().maxValue()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/metrics/LiftTest.kt b/src/test/java/de/mrapp/apriori/metrics/LiftTest.kt index 339f273..3d00b8e 100644 --- a/src/test/java/de/mrapp/apriori/metrics/LiftTest.kt +++ b/src/test/java/de/mrapp/apriori/metrics/LiftTest.kt @@ -62,4 +62,4 @@ class LiftTest { assertEquals(Double.MAX_VALUE, Lift().maxValue()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/metrics/SupportTest.kt b/src/test/java/de/mrapp/apriori/metrics/SupportTest.kt index 8e2957e..f434247 100644 --- a/src/test/java/de/mrapp/apriori/metrics/SupportTest.kt +++ b/src/test/java/de/mrapp/apriori/metrics/SupportTest.kt @@ -47,4 +47,4 @@ class SupportTest { assertEquals(1.0, Support().maxValue()) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModuleTest.kt b/src/test/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModuleTest.kt index 690b02d..dc5f3dc 100644 --- a/src/test/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModuleTest.kt +++ b/src/test/java/de/mrapp/apriori/modules/AssociationRuleGeneratorModuleTest.kt @@ -32,7 +32,8 @@ class AssociationRuleGeneratorModuleTest : AbstractDataTest() { companion object { - private val RULES_1 = arrayOf("[milk] -> [coffee]", "[bread] -> [sugar]", "[coffee] -> [milk]", "[coffee, sugar] -> [milk]", "[milk, sugar] -> [coffee]") + private val RULES_1 = arrayOf("[milk] -> [coffee]", "[bread] -> [sugar]", + "[coffee] -> [milk]", "[coffee, sugar] -> [milk]", "[milk, sugar] -> [coffee]") private val RULE_SUPPORTS_1 = doubleArrayOf(0.75, 0.5, 0.75, 0.5, 0.5) @@ -42,7 +43,8 @@ class AssociationRuleGeneratorModuleTest : AbstractDataTest() { private val RULE_LEVERAGES_1 = doubleArrayOf(0.19, 0.12, 0.19, 0.12, 0.12) - private val RULES_2 = arrayOf("[beer] -> [chips]", "[beer, wine] -> [chips]", "[chips, wine] -> [beer]") + private val RULES_2 = arrayOf("[beer] -> [chips]", "[beer, wine] -> [chips]", + "[chips, wine] -> [beer]") private val RULE_SUPPORTS_2 = doubleArrayOf(0.5, 0.25, 0.25) @@ -54,8 +56,8 @@ class AssociationRuleGeneratorModuleTest : AbstractDataTest() { } - private fun createFrequentItemSets( - frequentItemSets: Array>, supports: DoubleArray): Map> { + private fun createFrequentItemSets(frequentItemSets: Array>, + supports: DoubleArray): Map> { val map = HashMap>() for ((index, frequentItemSet) in frequentItemSets.withIndex()) { @@ -103,14 +105,16 @@ class AssociationRuleGeneratorModuleTest : AbstractDataTest() { @Test fun testGenerateAssociationRules1() { - testGenerateAssociationRules(AbstractDataTest.FREQUENT_ITEM_SETS_1, AbstractDataTest.SUPPORTS_1, 1.0, RULES_1, - RULE_SUPPORTS_1, RULE_CONFIDENCES_1, RULE_LIFTS_1, RULE_LEVERAGES_1) + testGenerateAssociationRules(AbstractDataTest.FREQUENT_ITEM_SETS_1, + AbstractDataTest.SUPPORTS_1, 1.0, RULES_1, RULE_SUPPORTS_1, RULE_CONFIDENCES_1, + RULE_LIFTS_1, RULE_LEVERAGES_1) } @Test fun testGenerateAssociationRules2() { - testGenerateAssociationRules(AbstractDataTest.FREQUENT_ITEM_SETS_2, AbstractDataTest.SUPPORTS_2, 0.75, RULES_2, - RULE_SUPPORTS_2, RULE_CONFIDENCES_2, RULE_LIFTS_2, RULE_LEVERAGES_2) + testGenerateAssociationRules(AbstractDataTest.FREQUENT_ITEM_SETS_2, + AbstractDataTest.SUPPORTS_2, 0.75, RULES_2, RULE_SUPPORTS_2, RULE_CONFIDENCES_2, + RULE_LIFTS_2, RULE_LEVERAGES_2) } @Test(expected = IllegalArgumentException::class) diff --git a/src/test/java/de/mrapp/apriori/modules/FrequentItemSetMinerModuleTest.kt b/src/test/java/de/mrapp/apriori/modules/FrequentItemSetMinerModuleTest.kt index cb5ea11..5fc6243 100644 --- a/src/test/java/de/mrapp/apriori/modules/FrequentItemSetMinerModuleTest.kt +++ b/src/test/java/de/mrapp/apriori/modules/FrequentItemSetMinerModuleTest.kt @@ -37,7 +37,6 @@ class FrequentItemSetMinerModuleTest : AbstractDataTest() { var frequentItemSetCount = 0 for ((key, itemSet) in frequentItemSets) { - for ((index, item) in itemSet.withIndex()) { assertEquals(actualFrequentItemSets[frequentItemSetCount][index], item.name) } @@ -52,34 +51,40 @@ class FrequentItemSetMinerModuleTest : AbstractDataTest() { @Test fun testFindFrequentItemSets1() { - testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_1, 0.5, AbstractDataTest.FREQUENT_ITEM_SETS_1, AbstractDataTest.SUPPORTS_1) + testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_1, 0.5, + AbstractDataTest.FREQUENT_ITEM_SETS_1, AbstractDataTest.SUPPORTS_1) } @Test fun testFindFrequentItemSets2() { - testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_2, 0.25, AbstractDataTest.FREQUENT_ITEM_SETS_2, AbstractDataTest.SUPPORTS_2) + testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_2, 0.25, + AbstractDataTest.FREQUENT_ITEM_SETS_2, AbstractDataTest.SUPPORTS_2) } @Test fun testFindFrequentItemSets3() { - testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_3, 0.5, AbstractDataTest.FREQUENT_ITEM_SETS_3, AbstractDataTest.SUPPORTS_3) + testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_3, 0.5, + AbstractDataTest.FREQUENT_ITEM_SETS_3, AbstractDataTest.SUPPORTS_3) } @Test fun testFindFrequentItemSets4() { - testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_4, 0.5, AbstractDataTest.FREQUENT_ITEM_SETS_4, AbstractDataTest.SUPPORTS_4) + testFindFrequentItemSets(AbstractDataTest.INPUT_FILE_4, 0.5, + AbstractDataTest.FREQUENT_ITEM_SETS_4, AbstractDataTest.SUPPORTS_4) } @Test(expected = IllegalArgumentException::class) fun testFindFrequentItemSetsThrowsExceptionWhenMinSupportIsLessThanZero() { val inputFile = getInputFile(AbstractDataTest.INPUT_FILE_1) - FrequentItemSetMinerModule().findFrequentItemSets(Iterable { DataIterator(inputFile) }, -0.1) + FrequentItemSetMinerModule().findFrequentItemSets( + Iterable { DataIterator(inputFile) }, -0.1) } @Test(expected = IllegalArgumentException::class) fun testFindFrequentItemSetsThrowsExceptionWhenMinSupportIsGreaterThanOne() { val inputFile = getInputFile(AbstractDataTest.INPUT_FILE_1) - FrequentItemSetMinerModule().findFrequentItemSets(Iterable { DataIterator(inputFile) }, 1.1) + FrequentItemSetMinerModule().findFrequentItemSets( + Iterable { DataIterator(inputFile) }, 1.1) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/operators/ArithmeticMeanTest.kt b/src/test/java/de/mrapp/apriori/operators/ArithmeticMeanTest.kt index 898cba1..94d940c 100644 --- a/src/test/java/de/mrapp/apriori/operators/ArithmeticMeanTest.kt +++ b/src/test/java/de/mrapp/apriori/operators/ArithmeticMeanTest.kt @@ -55,4 +55,4 @@ class ArithmeticMeanTest { ArithmeticMean().evaluate(associationRule) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/tasks/AssociationRuleGeneratorTaskTest.kt b/src/test/java/de/mrapp/apriori/tasks/AssociationRuleGeneratorTaskTest.kt index 9bb3f58..f4d74e7 100644 --- a/src/test/java/de/mrapp/apriori/tasks/AssociationRuleGeneratorTaskTest.kt +++ b/src/test/java/de/mrapp/apriori/tasks/AssociationRuleGeneratorTaskTest.kt @@ -57,7 +57,8 @@ class AssociationRuleGeneratorTaskTest { configuration.maxConfidence = maxConfidence configuration.confidenceDelta = confidenceDelta val associationRuleGeneratorMock = AssociationRuleGeneratorMock() - val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, associationRuleGeneratorMock) + val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, + associationRuleGeneratorMock) associationRuleGeneratorTask.generateAssociationRules(HashMap()) assertEquals((Math.round((maxConfidence - minConfidence) / confidenceDelta) + 1).toFloat(), associationRuleGeneratorMock.minConfidences.size.toFloat()) @@ -76,10 +77,11 @@ class AssociationRuleGeneratorTaskTest { configuration.ruleCount = 0 configuration.minConfidence = minConfidence val associationRuleGeneratorMock = AssociationRuleGeneratorMock() - val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, associationRuleGeneratorMock) + val associationRuleGeneratorTask = AssociationRuleGeneratorTask(configuration, + associationRuleGeneratorMock) associationRuleGeneratorTask.generateAssociationRules(HashMap()) assertEquals(1, associationRuleGeneratorMock.minConfidences.size.toLong()) assertEquals(minConfidence, associationRuleGeneratorMock.minConfidences[0]) } -} \ No newline at end of file +} diff --git a/src/test/java/de/mrapp/apriori/tasks/FrequentItemSetMinerTaskTest.kt b/src/test/java/de/mrapp/apriori/tasks/FrequentItemSetMinerTaskTest.kt index c220495..86d1cef 100644 --- a/src/test/java/de/mrapp/apriori/tasks/FrequentItemSetMinerTaskTest.kt +++ b/src/test/java/de/mrapp/apriori/tasks/FrequentItemSetMinerTaskTest.kt @@ -36,7 +36,8 @@ class FrequentItemSetMinerTaskTest : AbstractDataTest() { internal val minSupports = LinkedList() override fun findFrequentItemSets( - iterable: Iterable>, minSupport: Double): Map> { + iterable: Iterable>, + minSupport: Double): Map> { minSupports.add(minSupport) return HashMap() } @@ -54,7 +55,8 @@ class FrequentItemSetMinerTaskTest : AbstractDataTest() { configuration.maxSupport = maxSupport configuration.supportDelta = supportDelta val frequentItemSetMinerMock = FrequentItemSetMinerMock() - val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, frequentItemSetMinerMock) + val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, + frequentItemSetMinerMock) val file = getInputFile(AbstractDataTest.INPUT_FILE_1) frequentItemSetMinerTask.findFrequentItemSets(Iterable { DataIterator(file) }) assertEquals((Math.round((maxSupport - minSupport) / supportDelta) + 1).toFloat(), @@ -74,11 +76,12 @@ class FrequentItemSetMinerTaskTest : AbstractDataTest() { configuration.frequentItemSetCount = 0 configuration.minSupport = minSupport val frequentItemSetMinerMock = FrequentItemSetMinerMock() - val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, frequentItemSetMinerMock) + val frequentItemSetMinerTask = FrequentItemSetMinerTask(configuration, + frequentItemSetMinerMock) val file = getInputFile(AbstractDataTest.INPUT_FILE_1) frequentItemSetMinerTask.findFrequentItemSets(Iterable { DataIterator(file) }) assertEquals(1, frequentItemSetMinerMock.minSupports.size.toLong()) assertEquals(minSupport, frequentItemSetMinerMock.minSupports[0]) } -} \ No newline at end of file +}