e761074fb9
CI / docker (push) Successful in 3m46s
Merge model_id/alias in the image provider UI, and ensure ComfyUI never receives seed -1 after cloneMap type coercion. Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package prediction
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveSeedNegativeInt(t *testing.T) {
|
|
got := resolveSeed(-1)
|
|
n, ok := got.(int)
|
|
if !ok || n < 0 {
|
|
t.Fatalf("expected non-negative int, got %v", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveSeedNegativeFloat64(t *testing.T) {
|
|
got := resolveSeed(float64(-1))
|
|
n, ok := got.(int)
|
|
if !ok || n < 0 {
|
|
t.Fatalf("expected non-negative int from float64 -1, got %v", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveSeedExplicit(t *testing.T) {
|
|
if got := resolveSeed(42); got != 42 {
|
|
t.Fatalf("expected 42, got %v", got)
|
|
}
|
|
}
|
|
|
|
func TestBuildPromptSanitizesUnboundKSamplerSeed(t *testing.T) {
|
|
workflow := map[string]any{
|
|
"17": map[string]any{
|
|
"class_type": "KSampler",
|
|
"inputs": map[string]any{
|
|
"seed": float64(-1),
|
|
"steps": 20,
|
|
},
|
|
},
|
|
}
|
|
raw, _ := json.Marshal(workflow)
|
|
prompt, err := BuildPrompt(string(raw), InputBinding{}, map[string]any{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
node := prompt["17"].(map[string]any)
|
|
inputs := node["inputs"].(map[string]any)
|
|
seed, ok := inputs["seed"].(int)
|
|
if !ok || seed < 0 {
|
|
t.Fatalf("expected sanitized seed, got %v", inputs["seed"])
|
|
}
|
|
}
|
|
|
|
func TestBuildPromptSeedBindingAfterCloneMap(t *testing.T) {
|
|
workflow := map[string]any{
|
|
"17": map[string]any{
|
|
"class_type": "KSampler",
|
|
"inputs": map[string]any{"seed": 0},
|
|
},
|
|
}
|
|
raw, _ := json.Marshal(workflow)
|
|
binding := InputBinding{
|
|
"seed": {Node: "17", Field: "seed"},
|
|
}
|
|
// cloneMap round-trip produces float64, as in execute().
|
|
input := cloneMap(map[string]any{"seed": -1})
|
|
prompt, err := BuildPrompt(string(raw), binding, input)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
inputs := prompt["17"].(map[string]any)["inputs"].(map[string]any)
|
|
seed, ok := inputs["seed"].(int)
|
|
if !ok || seed < 0 {
|
|
t.Fatalf("expected non-negative seed after binding, got %v", inputs["seed"])
|
|
}
|
|
}
|