Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/modules/staffing/optimizer_test.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | internal/modules/staffing/optimizer_test.go |
| Original SHA-256 | edc03f424693b3c8394aa6a62e9295c501b417d9b7fcba33edfd5350fb9c85ba |
| Git blob SHA | 877d080c4689593f573d3da38b3d39f0e17f7366 |
| Reading-copy SHA-256 | edc03f424693b3c8394aa6a62e9295c501b417d9b7fcba33edfd5350fb9c85ba |
Every recorded occurrence
These 24 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/modules/staffing/optimizer_test.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓154 lines · 5.3 KB
package staffing
import (
"context"
"errors"
"testing"
)
func solve(t *testing.T, in PortfolioInput) PortfolioSolution {
t.Helper()
sol, err := SolvePortfolio(context.Background(), in, 1_000_000, 100_000)
if err != nil {
t.Fatalf("solve: %v", err)
}
return sol
}
func TestSolveEmpty(t *testing.T) {
if sol := solve(t, PortfolioInput{}); len(sol.Assignments) != 0 || sol.TotalValue != 0 {
t.Fatalf("empty problem must yield an empty allocation, got %+v", sol)
}
// candidates but no edges -> empty (everyone is a source).
if sol := solve(t, PortfolioInput{NumCandidates: 3, Slots: []int{1, 1}}); len(sol.Assignments) != 0 {
t.Fatalf("no edges means no assignment, got %+v", sol)
}
}
func TestSolveSingle(t *testing.T) {
sol := solve(t, PortfolioInput{
NumCandidates: 1,
Slots: []int{1},
Edges: []AssignEdge{{0, 0, 100}},
})
if len(sol.Assignments) != 1 || sol.TotalValue != 100 {
t.Fatalf("single profitable pair must be assigned, got %+v", sol)
}
}
// TestSolveTrueOptimumNotGreedy is the proof that this is a real optimizer and not a greedy heuristic.
// Greedy gives c0 its best requirement r0 (10), leaving c1 only r1 (1), total 11. The true optimum routes
// c0 to r1 (8) and c1 to r0 (9), total 17. The successive shortest path solve must find 17.
func TestSolveTrueOptimumNotGreedy(t *testing.T) {
sol := solve(t, PortfolioInput{
NumCandidates: 2,
Slots: []int{1, 1},
Edges: []AssignEdge{
{0, 0, 10}, {0, 1, 8},
{1, 0, 9}, {1, 1, 1},
},
})
if sol.TotalValue != 17 {
t.Fatalf("max profit must be 17 (greedy would give 11), got %d", sol.TotalValue)
}
got := map[int]int{}
for _, a := range sol.Assignments {
got[a.CandidateIdx] = a.RequirementIdx
}
if got[0] != 1 || got[1] != 0 {
t.Fatalf("optimal allocation must be c0->r1 and c1->r0, got %+v", got)
}
}
func TestSolveUnfilledSlotsAreImplicitSource(t *testing.T) {
// One candidate, two single slot requirements they both fit; the candidate takes the higher value one,
// the other slot is left unfilled (a source in the domain).
sol := solve(t, PortfolioInput{
NumCandidates: 1,
Slots: []int{1, 1},
Edges: []AssignEdge{{0, 0, 50}, {0, 1, 90}},
})
if len(sol.Assignments) != 1 || sol.Assignments[0].RequirementIdx != 1 || sol.TotalValue != 90 {
t.Fatalf("the candidate must take the higher value slot, leaving the other unfilled, got %+v", sol)
}
}
func TestSolveRespectsSlotCapacity(t *testing.T) {
// One requirement with two slots, three qualified candidates -> exactly two assigned (the two highest).
sol := solve(t, PortfolioInput{
NumCandidates: 3,
Slots: []int{2},
Edges: []AssignEdge{{0, 0, 70}, {1, 0, 95}, {2, 0, 80}},
})
if len(sol.Assignments) != 2 {
t.Fatalf("a two slot requirement must take exactly two candidates, got %d", len(sol.Assignments))
}
if sol.TotalValue != 175 { // 95 + 80
t.Fatalf("the two highest value candidates must fill the slots, total 175, got %d", sol.TotalValue)
}
}
func TestSolveDeterministic(t *testing.T) {
in := PortfolioInput{
NumCandidates: 4,
Slots: []int{1, 1, 1},
Edges: []AssignEdge{
{0, 0, 50}, {0, 1, 50}, {1, 0, 50}, {1, 1, 50},
{2, 1, 50}, {2, 2, 50}, {3, 0, 50}, {3, 2, 50},
},
}
first := solve(t, in)
for i := 0; i < 20; i++ {
again := solve(t, in)
if again.TotalValue != first.TotalValue || len(again.Assignments) != len(first.Assignments) {
t.Fatalf("non deterministic total: %+v vs %+v", first, again)
}
for k := range again.Assignments {
if again.Assignments[k] != first.Assignments[k] {
t.Fatalf("non deterministic allocation at %d: %+v vs %+v", k, first.Assignments, again.Assignments)
}
}
}
}
func TestSolveProblemTooLarge(t *testing.T) {
in := PortfolioInput{NumCandidates: 2, Slots: []int{1}, Edges: []AssignEdge{{0, 0, 1}, {1, 0, 1}}}
if _, err := SolvePortfolio(context.Background(), in, 1, 100); !errors.Is(err, ErrProblemTooLarge) {
t.Fatalf("an edge count over the cap must be refused, got %v", err)
}
if _, err := SolvePortfolio(context.Background(), in, 100, 2); !errors.Is(err, ErrProblemTooLarge) {
t.Fatalf("a node count over the cap must be refused, got %v", err)
}
}
func TestSolveBudgetExceeded(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel() // already cancelled: the solve must refuse rather than run
in := PortfolioInput{NumCandidates: 1, Slots: []int{1}, Edges: []AssignEdge{{0, 0, 100}}}
if _, err := SolvePortfolio(ctx, in, 1000, 1000); !errors.Is(err, ErrSolveBudget) {
t.Fatalf("a cancelled context must surface ErrSolveBudget, got %v", err)
}
}
func TestCounterfactualsKnown(t *testing.T) {
in := PortfolioInput{
NumCandidates: 2,
Slots: []int{1, 1},
Edges: []AssignEdge{
{0, 0, 10}, {0, 1, 8},
{1, 0, 9}, {1, 1, 1},
},
}
sol := solve(t, in) // c0->r1 (8), c1->r0 (9)
cf := Counterfactuals(in, sol)
// c0 assigned to r1 (8); next best requirement is r0 (10); delta = 8 - 10 = -2 (giving c0 r1 instead of
// its own best protected the portfolio).
if cf[0].CandidateNextReqIdx != 0 || cf[0].CandidateValueDelta != -2 {
t.Fatalf("c0 counterfactual wrong: %+v", cf[0])
}
// requirement r1's next best candidate (other than c0) is c1 at value 1; assigned value 8; delta 7.
if cf[0].RequirementNextCandIdx != 1 || cf[0].RequirementValueDelta != 7 {
t.Fatalf("r1 next best candidate counterfactual wrong: %+v", cf[0])
}
}