Closed
Description
[error] -- [E008] Not Found Error: /home/jenkins/agent/workspace/buildCommunityProject/repo/shared/src/test/scala/de/sciss/kollflitz/TagTest.scala:19:23
[error] 19 | val median = tagged.percentile(50)
[error] | ^^^^^^^^^^^^^^^^^
[error] | value percentile is not a member of IndexedSeq[Int]
[error] one error found
[error] (rootJVM / Test / compileIncremental) Compilation failed
package de.sciss.kollflitz
import Ops._
object TagTest extends App {
val vec = Vec(3, 5, 1, 10, -1, 22)
val tagged = tag[Sorted](vec) : Vec[Int] @@ Sorted
val median = tagged.percentile(50)
val q25 = vec.sortedT.percentile(25)
println(s"Median of $vec is $median")
}
type Tagged[U] = { type Tag = U }
type @@ [+T, U] = T with Tagged[U]
private val anyTagger = new Tagger[Any]
final class Tagger[U] private[kollflitz] {
def apply[T](t : T): T @@ U = t.asInstanceOf[T @@ U]
}
def tag[U]: Tagger[U] = anyTagger.asInstanceOf[Tagger[U]]
sealed trait Sorted
/** Enrichment methods for random access collections. */
implicit final class KollFlitzSortedIndexedSeq[A, CC[_], Repr](val self: SeqOps[A, CC, Repr] @@ Sorted)
extends AnyVal {
/** Nearest percentile (rounded index, no interpolation). */
def percentile(n: Int): A = self((self.size * n - 50) / 100)
/** Median found by rounding the index (no interpolation). */
def median: A = percentile(50)
}