Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 1m45s
Build + Deploy / build-backend-compliance (push) Successful in 4m42s
Build + Deploy / build-ai-sdk (push) Successful in 46s
Build + Deploy / build-developer-portal (push) Successful in 1m6s
Build + Deploy / build-tts (push) Successful in 1m14s
Build + Deploy / build-document-crawler (push) Successful in 31s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m27s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 37s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 4m35s
Neues Modul das den regulatorischen Spielraum fuer KI-Use-Cases deterministisch berechnet und optimale Konfigurationen vorschlaegt. Kernfeatures: - 13-Dimensionen Constraint-Space (DSGVO + AI Act) - 3-Zonen-Analyse: Verboten / Eingeschraenkt / Erlaubt - Deterministische Optimizer-Engine (kein LLM im Kern) - 28 Constraint-Regeln aus DSGVO, AI Act, EDPB Guidelines - 28 Tests (Golden Suite + Meta-Tests) - REST API: /sdk/v1/maximizer/* (9 Endpoints) - Frontend: 3-Zonen-Visualisierung, Dimension-Form, Score-Gauges [migration-approved] Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package maximizer
|
|
|
|
import "testing"
|
|
|
|
func TestSafetyScoreAllSafe(t *testing.T) {
|
|
zm := make(map[string]ZoneInfo)
|
|
for _, dim := range allDimensions {
|
|
zm[dim] = ZoneInfo{Zone: ZoneSafe}
|
|
}
|
|
eval := &EvaluationResult{ZoneMap: zm}
|
|
score := ComputeSafetyScore(eval)
|
|
if score != 100 {
|
|
t.Errorf("expected 100, got %d", score)
|
|
}
|
|
}
|
|
|
|
func TestSafetyScoreWithRestrictions(t *testing.T) {
|
|
zm := make(map[string]ZoneInfo)
|
|
for _, dim := range allDimensions {
|
|
zm[dim] = ZoneInfo{Zone: ZoneSafe}
|
|
}
|
|
// Mark 3 as restricted
|
|
zm["automation_level"] = ZoneInfo{Zone: ZoneRestricted}
|
|
zm["human_in_loop"] = ZoneInfo{Zone: ZoneRestricted}
|
|
zm["logging_required"] = ZoneInfo{Zone: ZoneForbidden}
|
|
|
|
eval := &EvaluationResult{ZoneMap: zm}
|
|
score := ComputeSafetyScore(eval)
|
|
|
|
safe := len(allDimensions) - 3
|
|
expected := (safe * 100) / len(allDimensions)
|
|
if score != expected {
|
|
t.Errorf("expected %d, got %d", expected, score)
|
|
}
|
|
}
|
|
|
|
func TestSafetyScoreNil(t *testing.T) {
|
|
if s := ComputeSafetyScore(nil); s != 0 {
|
|
t.Errorf("expected 0 for nil, got %d", s)
|
|
}
|
|
}
|
|
|
|
func TestUtilityScoreNoChanges(t *testing.T) {
|
|
config := &DimensionConfig{AutomationLevel: AutoFull}
|
|
score := ComputeUtilityScore(config, config)
|
|
if score != 100 {
|
|
t.Errorf("expected 100 for identical configs, got %d", score)
|
|
}
|
|
}
|
|
|
|
func TestUtilityScoreWithChanges(t *testing.T) {
|
|
original := &DimensionConfig{
|
|
AutomationLevel: AutoFull,
|
|
HumanInLoop: HILNone,
|
|
}
|
|
variant := &DimensionConfig{
|
|
AutomationLevel: AutoAssistive,
|
|
HumanInLoop: HILRequired,
|
|
}
|
|
score := ComputeUtilityScore(original, variant)
|
|
if score >= 100 {
|
|
t.Errorf("expected < 100 with changes, got %d", score)
|
|
}
|
|
if score <= 0 {
|
|
t.Errorf("expected > 0 for moderate changes, got %d", score)
|
|
}
|
|
}
|
|
|
|
func TestUtilityScoreNil(t *testing.T) {
|
|
if s := ComputeUtilityScore(nil, nil); s != 0 {
|
|
t.Errorf("expected 0 for nil, got %d", s)
|
|
}
|
|
}
|
|
|
|
func TestCompositeScore(t *testing.T) {
|
|
score := ComputeCompositeScore(80, 60, DefaultWeights)
|
|
expected := 0.4*80.0 + 0.6*60.0 // 32 + 36 = 68
|
|
if score != expected {
|
|
t.Errorf("expected %.1f, got %.1f", expected, score)
|
|
}
|
|
}
|
|
|
|
func TestCompositeScoreCustomWeights(t *testing.T) {
|
|
score := ComputeCompositeScore(100, 0, ScoreWeights{Safety: 1.0, Utility: 0.0})
|
|
if score != 100.0 {
|
|
t.Errorf("expected 100, got %.1f", score)
|
|
}
|
|
}
|