diff --git a/src/fn/index.ts b/src/fn/index.ts index 07668c12..285b297a 100644 --- a/src/fn/index.ts +++ b/src/fn/index.ts @@ -1,4 +1,5 @@ export { dip } from "./dip" +export { pdip } from "./pdip" export { diode } from "./diode" export { cap } from "./cap" export { led } from "./led" diff --git a/src/fn/pdip.ts b/src/fn/pdip.ts new file mode 100644 index 00000000..53eff3a8 --- /dev/null +++ b/src/fn/pdip.ts @@ -0,0 +1,3 @@ +import { dip } from "./dip" + +export const pdip = dip diff --git a/src/footprinter.ts b/src/footprinter.ts index 04ed1419..86118dff 100644 --- a/src/footprinter.ts +++ b/src/footprinter.ts @@ -39,6 +39,9 @@ export type Footprinter = { dip: ( num_pins?: number, ) => FootprinterParamsBuilder<"w" | "p" | "id" | "od" | "wide" | "narrow"> + pdip: ( + num_pins?: number, + ) => FootprinterParamsBuilder<"w" | "p" | "id" | "od" | "wide" | "narrow"> cap: () => FootprinterParamsBuilder res: () => FootprinterParamsBuilder diode: () => FootprinterParamsBuilder diff --git a/tests/__snapshots__/pdip14.snap.svg b/tests/__snapshots__/pdip14.snap.svg new file mode 100644 index 00000000..dc26ac0b --- /dev/null +++ b/tests/__snapshots__/pdip14.snap.svg @@ -0,0 +1 @@ +{REF}{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8}{pin9}{pin10}{pin11}{pin12}{pin13}{pin14} \ No newline at end of file diff --git a/tests/__snapshots__/pdip16.snap.svg b/tests/__snapshots__/pdip16.snap.svg new file mode 100644 index 00000000..595c0386 --- /dev/null +++ b/tests/__snapshots__/pdip16.snap.svg @@ -0,0 +1 @@ +{REF}{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8}{pin9}{pin10}{pin11}{pin12}{pin13}{pin14}{pin15}{pin16} \ No newline at end of file diff --git a/tests/__snapshots__/pdip8.snap.svg b/tests/__snapshots__/pdip8.snap.svg new file mode 100644 index 00000000..4a51d472 --- /dev/null +++ b/tests/__snapshots__/pdip8.snap.svg @@ -0,0 +1 @@ +{REF}{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8} \ No newline at end of file diff --git a/tests/__snapshots__/pdip8_wide.snap.svg b/tests/__snapshots__/pdip8_wide.snap.svg new file mode 100644 index 00000000..168a13dc --- /dev/null +++ b/tests/__snapshots__/pdip8_wide.snap.svg @@ -0,0 +1 @@ +{REF}{pin1}{pin2}{pin3}{pin4}{pin5}{pin6}{pin7}{pin8} \ No newline at end of file diff --git a/tests/pdip1.test.ts b/tests/pdip1.test.ts new file mode 100644 index 00000000..615e814b --- /dev/null +++ b/tests/pdip1.test.ts @@ -0,0 +1,10 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" +import type { AnyCircuitElement } from "circuit-json" + +test("pdip8 footprint", () => { + const circuitJson = fp.string("pdip8").circuitJson() as AnyCircuitElement[] + const svgContent = convertCircuitJsonToPcbSvg(circuitJson) + expect(svgContent).toMatchSvgSnapshot(import.meta.path, "pdip8") +}) diff --git a/tests/pdip2.test.ts b/tests/pdip2.test.ts new file mode 100644 index 00000000..29771dab --- /dev/null +++ b/tests/pdip2.test.ts @@ -0,0 +1,14 @@ +import { test, expect } from "bun:test" +import { fp } from "../src/footprinter" + +test("pdip8 parameters match dip8", () => { + const pdipJson = fp.string("pdip8").json() + const dipJson = fp.string("dip8").json() + + // PDIP should have same parameters as DIP (except fn name) + expect(pdipJson.num_pins).toBe(dipJson.num_pins) + expect(pdipJson.w).toBe(dipJson.w) + expect(pdipJson.p).toBe(dipJson.p) + expect(pdipJson.id).toBe(dipJson.id) + expect(pdipJson.od).toBe(dipJson.od) +}) diff --git a/tests/pdip3.test.ts b/tests/pdip3.test.ts new file mode 100644 index 00000000..90440879 --- /dev/null +++ b/tests/pdip3.test.ts @@ -0,0 +1,10 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" +import type { AnyCircuitElement } from "circuit-json" + +test("pdip14 footprint", () => { + const circuitJson = fp.string("pdip14").circuitJson() as AnyCircuitElement[] + const svgContent = convertCircuitJsonToPcbSvg(circuitJson) + expect(svgContent).toMatchSvgSnapshot(import.meta.path, "pdip14") +}) diff --git a/tests/pdip4.test.ts b/tests/pdip4.test.ts new file mode 100644 index 00000000..a7bfe241 --- /dev/null +++ b/tests/pdip4.test.ts @@ -0,0 +1,10 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" +import type { AnyCircuitElement } from "circuit-json" + +test("pdip16 footprint", () => { + const circuitJson = fp.string("pdip16").circuitJson() as AnyCircuitElement[] + const svgContent = convertCircuitJsonToPcbSvg(circuitJson) + expect(svgContent).toMatchSvgSnapshot(import.meta.path, "pdip16") +}) diff --git a/tests/pdip5.test.ts b/tests/pdip5.test.ts new file mode 100644 index 00000000..f1f8a5a4 --- /dev/null +++ b/tests/pdip5.test.ts @@ -0,0 +1,12 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" +import type { AnyCircuitElement } from "circuit-json" + +test("pdip8_wide footprint", () => { + const circuitJson = fp + .string("pdip8_wide") + .circuitJson() as AnyCircuitElement[] + const svgContent = convertCircuitJsonToPcbSvg(circuitJson) + expect(svgContent).toMatchSvgSnapshot(import.meta.path, "pdip8_wide") +}) diff --git a/tests/pdip6.test.ts b/tests/pdip6.test.ts new file mode 100644 index 00000000..36f769f8 --- /dev/null +++ b/tests/pdip6.test.ts @@ -0,0 +1,8 @@ +import { test, expect } from "bun:test" +import { fp } from "../src/footprinter" + +test("PDIP8 string resolves using lowercase function", () => { + const uppercaseJson = fp.string("PDIP8").json() + const lowercaseJson = fp.string("pdip8").json() + expect(uppercaseJson).toEqual(lowercaseJson) +}) diff --git a/tests/pdip7.test.ts b/tests/pdip7.test.ts new file mode 100644 index 00000000..d71e5f8e --- /dev/null +++ b/tests/pdip7.test.ts @@ -0,0 +1,20 @@ +import { test, expect } from "bun:test" +import { fp } from "../src/footprinter" + +test("pdip produces identical circuit json as dip", () => { + const pdipJson = fp.string("pdip8").circuitJson() + const dipJson = fp.string("dip8").circuitJson() + + // PDIP is an alias for DIP, so they should produce identical circuit elements + // Only difference might be internal IDs, so compare structure + expect(pdipJson.length).toBe(dipJson.length) + + // Compare each element type and position + for (let i = 0; i < pdipJson.length; i++) { + const pdipEl = pdipJson[i] as any + const dipEl = dipJson[i] as any + expect(pdipEl.type).toBe(dipEl.type) + if (pdipEl.x !== undefined) expect(pdipEl.x).toBe(dipEl.x) + if (pdipEl.y !== undefined) expect(pdipEl.y).toBe(dipEl.y) + } +})