Coverage Summary for Class: NotePatternKt (com.vsevolodganin.clicktrack.model)

Class Class, % Method, % Branch, % Line, % Instruction, %
NotePatternKt 0% (0/1) 0% (0/6) 0% (0/4) 0% (0/23) 0% (0/107)


 package com.vsevolodganin.clicktrack.model
 
 import com.vsevolodganin.clicktrack.model.NotePatternGroup.DISPLACED
 import com.vsevolodganin.clicktrack.model.NotePatternGroup.QUINTUPLET
 import com.vsevolodganin.clicktrack.model.NotePatternGroup.SEPTUPLET
 import com.vsevolodganin.clicktrack.model.NotePatternGroup.STRAIGHT
 import com.vsevolodganin.clicktrack.model.NotePatternGroup.TRIPLET
 import com.vsevolodganin.clicktrack.utils.math.Rational
 import com.vsevolodganin.clicktrack.utils.math.over
 import kotlinx.serialization.Serializable
 
 enum class NotePatternGroup {
     STRAIGHT,
     TRIPLET,
     QUINTUPLET,
     SEPTUPLET,
     DISPLACED,
 }
 
 @Serializable
 enum class NotePattern(val events: List<NoteEvent>, val group: NotePatternGroup) {
     STRAIGHT_X1(straightPattern(1), STRAIGHT),
     STRAIGHT_X2(straightPattern(2), STRAIGHT),
     STRAIGHT_X4(straightPattern(4), STRAIGHT),
     STRAIGHT_X8(straightPattern(8), STRAIGHT),
     STRAIGHT_X16(straightPattern(16), STRAIGHT),
     STRAIGHT_X32(straightPattern(32), STRAIGHT),
 
     TRIPLET_X1(tripletPattern(1), TRIPLET),
     TRIPLET_X2(tripletPattern(2), TRIPLET),
     TRIPLET_X4(tripletPattern(4), TRIPLET),
     TRIPLET_X8(tripletPattern(8), TRIPLET),
     TRIPLET_X16(tripletPattern(16), TRIPLET),
 
     QUINTUPLET_X1(quintupletPattern(1), QUINTUPLET),
     QUINTUPLET_X2(quintupletPattern(2), QUINTUPLET),
     QUINTUPLET_X4(quintupletPattern(4), QUINTUPLET),
     QUINTUPLET_X8(quintupletPattern(8), QUINTUPLET),
 
     SEPTUPLET_X1(septupletPattern(1), SEPTUPLET),
     SEPTUPLET_X2(septupletPattern(2), SEPTUPLET),
     SEPTUPLET_X4(septupletPattern(4), SEPTUPLET),
     SEPTUPLET_X8(septupletPattern(8), SEPTUPLET),
 
     DISPLACED_X1(displacedPattern(1), DISPLACED),
     DISPLACED_X2(displacedPattern(2), DISPLACED),
     DISPLACED_X4(displacedPattern(4), DISPLACED),
     DISPLACED_X8(displacedPattern(8), DISPLACED),
     DISPLACED_X16(displacedPattern(16), DISPLACED),
 }
 
 private fun straightPattern(multiplier: Int) = filledPattern(multiplier, 1 over 1)
 
 private fun tripletPattern(multiplier: Int) = filledPattern(multiplier, 2 over 3)
 
 private fun quintupletPattern(multiplier: Int) = filledPattern(multiplier, 4 over 5)
 
 private fun septupletPattern(multiplier: Int) = filledPattern(multiplier, 4 over 7)
 
 private fun filledPattern(multiplier: Int, length: Rational) = mutableListOf<NoteEvent>().apply {
     val resultingLength = length.numerator over (length.denominator * multiplier)
     repeat(multiplier) {
         this += NoteEvent(
             length = resultingLength,
             type = NoteEvent.Type.NOTE,
         )
     }
 }
 
 private fun displacedPattern(multiplier: Int) = mutableListOf<NoteEvent>().apply {
     val resultingLength = 1 over (multiplier * 2)
     repeat(multiplier) {
         this += NoteEvent(
             length = resultingLength,
             type = NoteEvent.Type.REST,
         )
         this += NoteEvent(
             length = resultingLength,
             type = NoteEvent.Type.NOTE,
         )
     }
 }