Skip to content
quarry Artifact [26193e39af]
Login

Artifact [26193e39af]

Artifact 26193e39afd63a96544647aaa1ed457606ec2af572768b98276a00bc118e7ff9:


package idn

import (
	"regexp"
	"strconv"
	"strings"
	"testing"
)

func TestChromaIsABandAndDeterministic(t *testing.T) {
	seen := map[int]bool{}
	for _, n := range []string{"drh", "dan", "stephan", "mistachkin", "andygoth", "wyoung", "jan", "larry"} {
		c := Chroma(n)
		if c != 0 && c != 1 {
			t.Fatalf("Chroma(%q) = %d, want 0 or 1", n, c)
		}
		if Chroma(n) != c {
			t.Fatalf("Chroma(%q) not deterministic", n)
		}
		seen[c] = true
	}
	if len(seen) != 2 {
		t.Fatalf("only band %v used across the sample; want both", seen)
	}
}

func TestFillCarriesHueAndChromaHook(t *testing.T) {
	f := Fill("drh", "var(--idn-l)")
	for _, want := range []string{"oklch(", "var(--idn-l)", "var(--idn-c" + strconv.Itoa(Chroma("drh")) + ")", " " + strconv.Itoa(Hue("drh")) + ")"} {
		if !strings.Contains(f, want) {
			t.Fatalf("Fill = %q, missing %q", f, want)
		}
	}
	if tone := Tone("drh"); !strings.Contains(tone, "--uh: "+strconv.Itoa(Hue("drh"))) || !strings.Contains(tone, "--uc: var(--idn-c") {
		t.Fatalf("Tone = %q", tone)
	}
}

func TestMarkUsesThemeLightnessAndIsMemoised(t *testing.T) {
	m := Mark("drh")
	for _, want := range []string{`class="idn"`, "var(--idn-l)", "calc(var(--idn-l) - 12%)", "oklch("} {
		if !strings.Contains(m, want) {
			t.Fatalf("Mark missing %q", want)
		}
	}
	if strings.Contains(m, `fill="hsl`) || strings.Contains(m, `fill="oklch`) {
		t.Fatal("var() fills must live in style=, not a presentation attribute")
	}
	if Mark("drh") != m {
		t.Fatal("Mark not stable across calls")
	}
	if _, ok := memo.Load("drh"); !ok {
		t.Fatal("Mark not memoised")
	}
}

func TestGridIsTheFaceMarkDraws(t *testing.T) {
	for _, n := range []string{"drh", "quarry", "dantest-sandbox", "x"} {
		g := Grid(n)
		on, deep := 0, 0
		for _, row := range g {
			for c := 0; c < 2; c++ {
				if row[c] != row[4-c] {
					t.Fatalf("%s: row not mirrored: %v", n, row)
				}
			}
			for _, c := range row {
				if c > 0 {
					on++
				}
				if c == 2 {
					deep++
				}
			}
		}
		m := Mark(n)
		// One rect is the wash; the rest are cells, deeper ones carrying the -12% step.
		if got := strings.Count(m, "<rect") - 1; got != on {
			t.Errorf("%s: Mark draws %d cells, Grid has %d", n, got, on)
		}
		if got := strings.Count(m, "- 12%"); got != deep {
			t.Errorf("%s: Mark has %d deep cells, Grid %d", n, got, deep)
		}
	}
}

func TestHexIsSRGBAndFollowsLightness(t *testing.T) {
	re := regexp.MustCompile(`^#[0-9a-f]{6}$`)
	for _, n := range []string{"drh", "quarry", "a", "b"} {
		lo, hi := Hex(n, 0.44), Hex(n, 0.56)
		if !re.MatchString(lo) || !re.MatchString(hi) || lo == hi {
			t.Errorf("%s: %s %s", n, lo, hi)
		}
	}
}