Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ abstract class AIClassificationEMTestBase : SpringTestBase(){
): EvaluatedIndividual<RestIndividual> {

val sampler = injector.getInstance(AbstractRestSampler::class.java)

val ind = sampler.createIndividual(sampleT, actions.toMutableList())

val ff = injector.getInstance(AbstractRestFitness::class.java)
Expand All @@ -43,30 +42,42 @@ abstract class AIClassificationEMTestBase : SpringTestBase(){
injector: Injector,
ok2xx: List<RestCallAction>,
fail400: List<RestCallAction>,
threshold: Double = injector.getInstance(EMConfig::class.java).classificationRepairThreshold
repairThreshold: Double = injector.getInstance(EMConfig::class.java).classificationRepairThreshold,
randomPerformanceThreshold: Double = 0.50
) {

val model = injector.getInstance(AIResponseClassifier::class.java)
model.disableLearning() // no side-effects

for(ok in ok2xx){
val resOK = evaluateAction(injector, ok)
assertTrue(resOK.getStatusCode() in 200..299)
val mOK= model.classify(ok)
assertTrue(
mOK.probabilityOf400() < threshold,
"Too high probability of 400 for OK ${ok.getName()}: ${mOK.probabilityOf400()}")
var correctPrediction = 0
// 400
for (fail in fail400) {
val result = evaluateAction(injector, fail)
assertEquals(400, result.getStatusCode())

val probability = model.classify(fail).probabilityOf400()
if (probability >= repairThreshold) {
correctPrediction++
}
}
// 2xx
for (ok in ok2xx) {
val result = evaluateAction(injector, ok)
assertTrue(result.getStatusCode() in 200..299)

for(fail in fail400) {
val resFail = evaluateAction(injector, fail)
assertEquals(400, resFail.getStatusCode())
val mFail = model.classify(fail)
assertTrue(
mFail.probabilityOf400() >= threshold,
"Too low probability of 400 for Fail ${fail.getName()}: ${mFail.probabilityOf400()}"
)
val probability = model.classify(ok).probabilityOf400()
if (probability < repairThreshold) {
correctPrediction++
}
}
}

}
val totalSize = ok2xx.size + fail400.size
val accuracy =
if (totalSize > 0) correctPrediction.toDouble() / totalSize else 0.0

assertTrue(
accuracy > randomPerformanceThreshold,
"Too low total accuracy: $accuracy"
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,28 @@ class ACAllOrNoneEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACAllOrNoneEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,28 @@ class ACArithmeticEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACArithmeticEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class ACBasicEMTest : AIClassificationEMTestBase() {
}
}

@Disabled
@Test
fun testRunDeterministic(){
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
Expand Down Expand Up @@ -56,15 +57,28 @@ class ACBasicEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACBasicEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,28 @@ class ACImplyEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACImplyEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,28 @@ class ACMixedEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACMixedEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,28 @@ class ACOnlyOneEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACOnlyOneEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,28 @@ class ACOrEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACOrEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,28 @@ class ACRequiredEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACRequiredEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,28 @@ class ACZeroOrOneEMTest : AIClassificationEMTestBase() {
testRunEM(AIResponseClassifierModel.NN)
}

private fun testRunEM(model: AIResponseClassifierModel) {
@Test
fun testRunEnsemble(){
testRunEM(
AIResponseClassifierModel.GAUSSIAN,
AIResponseClassifierModel.GLM,
AIResponseClassifierModel.KDE,
AIResponseClassifierModel.KNN,
AIResponseClassifierModel.NN
)
}

private fun testRunEM(vararg models: AIResponseClassifierModel) {

val modelString = models.joinToString(",") { it.name }

runTestHandlingFlakyAndCompilation(
"ACZeroOrOneEM",
500
) { args: MutableList<String> ->

args.add("--aiModelForResponseClassification")
args.add("$model")
args.add(modelString)

val (injector, solution) = initAndDebug(args)

Expand Down
Loading
Loading