Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

feature/top10
Razmig Sarkissian 7 years ago
commit 9c5dad9cf6
  1. 6
      app/src/androidTest/java/net/pokeranalytics/android/performanceTests/PerfsInstrumentedUnitTest.kt
  2. 51
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/StatsInstrumentedUnitTest.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  4. 4
      app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
  5. 81
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt

@ -3,11 +3,11 @@ package net.pokeranalytics.android.performanceTests
import android.content.Context import android.content.Context
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import net.pokeranalytics.android.components.RealmInstrumentedUnitTest
import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.ComputableGroup
import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.components.RealmInstrumentedUnitTest
import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.SessionSet import net.pokeranalytics.android.model.realm.SessionSet
@ -54,12 +54,12 @@ class PerfsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
Timber.d("sets: ${sets.size}") Timber.d("sets: ${sets.size}")
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
Timber.d("*** ended in ${System.currentTimeMillis() - start} milliseconds") Timber.d("*** ended in ${System.currentTimeMillis() - start} milliseconds")
val sum = results.computedStat(Stat.NETRESULT) val sum = results.computedStat(Stat.NETRESULT)

@ -120,14 +120,13 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
println(">>>>>> rated net = ${it.ratedNet} ") println(">>>>>> rated net = ${it.ratedNet} ")
} }
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val delta = 0.01 val delta = 0.01
val sum = results.computedStat(Stat.NETRESULT) val sum = results.computedStat(Stat.NETRESULT)
@ -263,15 +262,13 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
} }
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val delta = 0.01 val delta = 0.01
val duration = results.computedStat(Stat.DURATION) val duration = results.computedStat(Stat.DURATION)
@ -332,15 +329,13 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val delta = 0.01 val delta = 0.01
val duration = results.computedStat(Stat.DURATION) val duration = results.computedStat(Stat.DURATION)
@ -417,15 +412,13 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val delta = 0.01 val delta = 0.01
val duration = results.computedStat(Stat.DURATION) val duration = results.computedStat(Stat.DURATION)
@ -439,12 +432,10 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
s1.deleteFromRealm() s1.deleteFromRealm()
} }
val computableResults2 = realm.where(ComputableResult::class.java).findAll()
val sets2 = realm.where(SessionSet::class.java).findAll()
val stats2: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats2: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group2 = ComputableGroup("test", computableResults2, sets2, stats2) val group2 = ComputableGroup("test", listOf(), stats2)
val results2: ComputedResults = Calculator.compute(group2, options) val results2: ComputedResults = Calculator.compute(realm, group2, options)
val duration2 = results2.computedStat(Stat.DURATION) val duration2 = results2.computedStat(Stat.DURATION)
if (duration2 != null) { if (duration2 != null) {
@ -566,15 +557,13 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
s1.endDate = null s1.endDate = null
} }
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE) val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
// options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION) // options.displayedStats = listOf(Stat.STANDARD_DEVIATION_BB_PER_100_HANDS, Stat.STANDARD_DEVIATION)
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val delta = 0.01 val delta = 0.01
val duration = results.computedStat(Stat.DURATION) val duration = results.computedStat(Stat.DURATION)
@ -623,9 +612,9 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val computableResults = realm.where(ComputableResult::class.java).findAll() val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll() val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT) val stats: List<Stat> = listOf(Stat.NETRESULT)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val netResult = results.computedStat(Stat.NETRESULT) val netResult = results.computedStat(Stat.NETRESULT)
Assert.assertEquals(250.0, netResult?.value) Assert.assertEquals(250.0, netResult?.value)
@ -658,12 +647,10 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
} }
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT) val stats: List<Stat> = listOf(Stat.NETRESULT)
val group = ComputableGroup("test", computableResults, sets, stats) val group = ComputableGroup("test", listOf(), stats)
val options = Calculator.Options() val options = Calculator.Options()
val results: ComputedResults = Calculator.compute(group, options) val results: ComputedResults = Calculator.compute(realm, group, options)
val netResult = results.computedStat(Stat.NETRESULT) val netResult = results.computedStat(Stat.NETRESULT)
Assert.assertEquals(250.0, netResult?.value) Assert.assertEquals(250.0, netResult?.value)
@ -679,10 +666,8 @@ class StatsInstrumentedUnitTest : RealmInstrumentedUnitTest() {
} }
} }
val updatedComputableResults = realm.where(ComputableResult::class.java).findAll() val updatedGroup = ComputableGroup("test", listOf(), stats)
val updatedSets = realm.where(SessionSet::class.java).findAll() val updatedResults: ComputedResults = Calculator.compute(realm, updatedGroup, options)
val updatedGroup = ComputableGroup("test", updatedComputableResults, updatedSets, stats)
val updatedResults: ComputedResults = Calculator.compute(updatedGroup, options)
val updatedNetResult = updatedResults.computedStat(Stat.NETRESULT) val updatedNetResult = updatedResults.computedStat(Stat.NETRESULT)
Assert.assertEquals(650.0, updatedNetResult?.value) Assert.assertEquals(650.0, updatedNetResult?.value)

@ -73,11 +73,17 @@ class Calculator {
allConditions.addAll(conditions) allConditions.addAll(conditions)
allConditions.addAll(comparatorConditions) allConditions.addAll(comparatorConditions)
val group = ComputableGroup(allConditions.name(), conditions) val group = ComputableGroup(allConditions.name(), allConditions)
computableGroups.add(group) computableGroups.add(group)
} }
return Calculator.computeGroups(realm, computableGroups, options)
if (computableGroups.size == 0) {
val group = ComputableGroup(conditions.name(), conditions)
computableGroups.add(group)
}
return this.computeGroups(realm, computableGroups, options)
} }
fun computeStatsWithFilters(realm: Realm, filters: List<Filter>, options: Options): Report { fun computeStatsWithFilters(realm: Realm, filters: List<Filter>, options: Options): Report {

@ -136,6 +136,8 @@ class ComputableGroup(name: String, conditions: List<QueryCondition>, stats: Lis
this._sessionSets = null this._sessionSets = null
} }
val isEmpty: Boolean = this._computables?.isEmpty() ?: true
} }
class ComputedResults(group: ComputableGroup) { class ComputedResults(group: ComputableGroup) {
@ -258,6 +260,8 @@ class ComputedResults(group: ComputableGroup) {
return entries return entries
} }
val isEmpty: Boolean = this.group.comparedComputables?.isEmpty ?: true
} }
class Point(val x: Double, val y: Double, val data: Any) { class Point(val x: Double, val y: Double, val data: Any) {

@ -5,14 +5,23 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_calendar.* import kotlinx.android.synthetic.main.fragment_calendar.*
import kotlinx.android.synthetic.main.fragment_stats.recyclerView import kotlinx.android.synthetic.main.fragment_stats.recyclerView
import kotlinx.coroutines.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.fragment.components.SessionObserverFragment
import net.pokeranalytics.android.ui.view.CalendarTabs import net.pokeranalytics.android.ui.view.CalendarTabs
import java.util.*
import kotlin.coroutines.CoroutineContext
class CalendarFragment : PokerAnalyticsFragment() { class CalendarFragment : SessionObserverFragment(), CoroutineScope {
companion object { companion object {
@ -46,8 +55,76 @@ class CalendarFragment : PokerAnalyticsFragment() {
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
val comparator = Comparator.MONTH // returns all months
val conditions = comparator.queryConditions
conditions.forEach {
val realm = getRealm()
Calculator.computeStatsWithComparators(realm, conditions = listOf(it), options = Calculator.Options())
}
} }
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main
private fun launchStatComputation() {
val comparator = Comparator.MONTH // returns all months
// val conditions = comparator.queryConditions
val conditions = listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT)
conditions.forEach {
val realm = getRealm()
GlobalScope.launch(coroutineContext) {
var r = Report()
val test = GlobalScope.async {
val s = Date()
val realm = Realm.getDefaultInstance()
val report = Calculator.computeStatsWithComparators(realm, conditions = listOf(it), options = Calculator.Options())
report.results.firstOrNull()?.let {
val isEmpty = it.isEmpty
val statValue = it.computedStat(Stat.NETRESULT)?.value
}
// r = createSessionGroupsAndStartCompute(realm)
// report = r
realm.close()
}
test.await()
if (!isDetached) {
// showResults(r)
}
}
}
}
/** /**
* Init UI * Init UI
*/ */

Loading…
Cancel
Save