mirror of
https://github.com/diodeinc/pcb.git
synced 2026-09-14 20:17:19 +08:00
8e9c355a3f
* Disallow dots in names Signed-off-by: akhilles <akhilvelagapudi@gmail.com> * Bump stdlib Signed-off-by: akhilles <akhilvelagapudi@gmail.com> * Simplify is_instance_position Signed-off-by: akhilles <akhilvelagapudi@gmail.com> * Update snapshot Signed-off-by: akhilles <akhilvelagapudi@gmail.com> --------- Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
260 lines
7.6 KiB
Rust
260 lines
7.6 KiB
Rust
use pcb_test_utils::assert_snapshot;
|
|
use pcb_test_utils::sandbox::Sandbox;
|
|
|
|
const LED_MODULE_ZEN: &str = r#"
|
|
load("@stdlib:v0.2.10/interfaces.zen", "Gpio", "Ground", "Power")
|
|
|
|
Resistor = Module("@stdlib:v0.2.10/generics/Resistor.zen")
|
|
Led = Module("@stdlib:v0.2.10/generics/Led.zen")
|
|
|
|
led_color = config("led_color", str, default = "red")
|
|
r_value = config("r_value", str, default = "330Ohm")
|
|
package = config("package", str, default = "0603")
|
|
|
|
VCC = io("VCC", Power)
|
|
GND = io("GND", Ground)
|
|
CTRL = io("CTRL", Gpio)
|
|
|
|
led_anode = Net("LED_ANODE")
|
|
|
|
Resistor(name = "R1", value = r_value, package = package, P1 = VCC.NET, P2 = led_anode)
|
|
Led(name = "D1", color = led_color, package = package, A = led_anode, K = CTRL.NET)
|
|
"#;
|
|
|
|
const TEST_BOARD_ZEN: &str = r#"
|
|
load("@stdlib:v0.2.10/interfaces.zen", "Gpio", "Ground", "Power")
|
|
|
|
LedModule = Module("../modules/LedModule.zen")
|
|
Resistor = Module("@stdlib:v0.2.10/generics/Resistor.zen")
|
|
Capacitor = Module("@stdlib:v0.2.10/generics/Capacitor.zen")
|
|
Crystal = Module("@stdlib:v0.2.10/generics/Crystal.zen")
|
|
|
|
vcc_3v3 = Power("VCC_3V3")
|
|
gnd = Ground("GND")
|
|
led_ctrl = Gpio("LED_CTRL")
|
|
osc_xi = Gpio("OSC_XI")
|
|
osc_xo = Gpio("OSC_XO")
|
|
|
|
Capacitor(name = "C1", value = "100nF", package = "0402", P1 = vcc_3v3.NET, P2 = gnd.NET)
|
|
Capacitor(name = "C2", value = "10uF", package = "0805", P1 = vcc_3v3.NET, P2 = gnd.NET)
|
|
|
|
LedModule(name = "LED1", led_color = "green", VCC = vcc_3v3, GND = gnd, CTRL = led_ctrl)
|
|
LedModule(name = "LED2", led_color = "red", VCC = vcc_3v3, GND = gnd, CTRL = Gpio(NET = gnd.NET))
|
|
|
|
Crystal(name = "X1", frequency = "16MHz", load_capacitance = "18pF", package = "5032_2Pin", XIN = osc_xi.NET, XOUT = osc_xo.NET, GND = gnd.NET)
|
|
|
|
Capacitor(name = "C3", value = "22pF", package = "0402", P1 = osc_xi.NET, P2 = gnd.NET)
|
|
Capacitor(name = "C4", value = "22pF", package = "0402", P1 = osc_xo.NET, P2 = gnd.NET)
|
|
|
|
Resistor(name = "R1", value = "10kOhm", package = "0603", P1 = vcc_3v3.NET, P2 = led_ctrl.NET)
|
|
"#;
|
|
|
|
const SIMPLE_RESISTOR_BOARD_ZEN: &str = r#"
|
|
load("@stdlib:v0.2.10/interfaces.zen", "Power", "Ground")
|
|
|
|
Resistor = Module("@stdlib:v0.2.10/generics/Resistor.zen")
|
|
|
|
vcc = Power("VCC")
|
|
gnd = Ground("GND")
|
|
|
|
Resistor(name = "R1", value = "1kOhm", package = "0603", P1 = vcc.NET, P2 = gnd.NET)
|
|
Resistor(name = "R2", value = "1kOhm", package = "0603", P1 = vcc.NET, P2 = gnd.NET)
|
|
Resistor(name = "R3", value = "4.7kOhm", package = "0402", P1 = vcc.NET, P2 = gnd.NET)
|
|
"#;
|
|
|
|
const CAPACITOR_BOARD_ZEN: &str = r#"
|
|
load("@stdlib:v0.2.10/interfaces.zen", "Power", "Ground")
|
|
|
|
Capacitor = Module("@stdlib:v0.2.10/generics/Capacitor.zen")
|
|
|
|
vcc = Power("VCC")
|
|
gnd = Ground("GND")
|
|
|
|
Capacitor(name = "C1", value = "100nF", package = "0402", voltage = "16V", dielectric = "X7R", P1 = vcc.NET, P2 = gnd.NET)
|
|
Capacitor(name = "C2", value = "10uF", package = "0805", voltage = "25V", dielectric = "X5R", P1 = vcc.NET, P2 = gnd.NET)
|
|
Capacitor(name = "C3", value = "1uF", package = "0603", P1 = vcc.NET, P2 = gnd.NET)
|
|
"#;
|
|
|
|
const SAMPLE_BOM_RULES: &str = r#"[
|
|
{
|
|
"key": {
|
|
"Generic": {
|
|
"component_type": "Resistor",
|
|
"resistance": {
|
|
"value": "1000.0",
|
|
"tolerance": "0.0",
|
|
"unit": "Ohms"
|
|
},
|
|
"voltage": null,
|
|
"package": "0603"
|
|
}
|
|
},
|
|
"offers": [
|
|
{
|
|
"distributor": "digikey",
|
|
"distributor_pn": "311-1.00KHRCT-ND",
|
|
"manufacturer": "Yageo",
|
|
"manufacturer_pn": "RC0603FR-071KL"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": {
|
|
"Generic": {
|
|
"component_type": "Resistor",
|
|
"resistance": {
|
|
"value": "4700.0",
|
|
"tolerance": "0.0",
|
|
"unit": "Ohms"
|
|
},
|
|
"voltage": null,
|
|
"package": "0402"
|
|
}
|
|
},
|
|
"offers": [
|
|
{
|
|
"distributor": "digikey",
|
|
"distributor_pn": "311-4.70KHRCT-ND",
|
|
"manufacturer": "Yageo",
|
|
"manufacturer_pn": "RC0402FR-074K7L"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": {
|
|
"Generic": {
|
|
"component_type": "Capacitor",
|
|
"capacitance": {
|
|
"value": "100e-9",
|
|
"tolerance": "0.1",
|
|
"unit": "Farads"
|
|
},
|
|
"voltage": {
|
|
"value": "16.0",
|
|
"tolerance": "0.0",
|
|
"unit": "Volts"
|
|
},
|
|
"dielectric": "X7R",
|
|
"esr": null,
|
|
"package": "0402"
|
|
}
|
|
},
|
|
"offers": [
|
|
{
|
|
"distributor": "digikey",
|
|
"distributor_pn": "1276-1003-1-ND",
|
|
"manufacturer": "Samsung Electro-Mechanics",
|
|
"manufacturer_pn": "CL05B104KO5NNNC"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": {
|
|
"Path": ["LED2.D1.D"]
|
|
},
|
|
"offers": [
|
|
{
|
|
"distributor": "digikey",
|
|
"distributor_pn": "1276-6455-1-ND",
|
|
"manufacturer": "Samsung Electro-Mechanics",
|
|
"manufacturer_pn": "CL21B106KOQNNNC"
|
|
}
|
|
]
|
|
}
|
|
]"#;
|
|
|
|
#[test]
|
|
fn test_bom_json_format() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("modules/LedModule.zen", LED_MODULE_ZEN)
|
|
.write("boards/TestBoard.zen", TEST_BOARD_ZEN)
|
|
.snapshot_run("pcb", ["bom", "boards/TestBoard.zen", "-f", "json"]);
|
|
assert_snapshot!("bom_json", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_table_format() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("modules/LedModule.zen", LED_MODULE_ZEN)
|
|
.write("boards/TestBoard.zen", TEST_BOARD_ZEN)
|
|
.snapshot_run("pcb", ["bom", "boards/TestBoard.zen", "-f", "table"]);
|
|
assert_snapshot!("bom_table", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_default_format() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("modules/LedModule.zen", LED_MODULE_ZEN)
|
|
.write("boards/TestBoard.zen", TEST_BOARD_ZEN)
|
|
.snapshot_run("pcb", ["bom", "boards/TestBoard.zen"]);
|
|
assert_snapshot!("bom_default", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_simple_resistors() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("boards/SimpleResistors.zen", SIMPLE_RESISTOR_BOARD_ZEN)
|
|
.write("bom_rules.json", SAMPLE_BOM_RULES)
|
|
.snapshot_run(
|
|
"pcb",
|
|
[
|
|
"bom",
|
|
"boards/SimpleResistors.zen",
|
|
"-r",
|
|
"bom_rules.json",
|
|
"-f",
|
|
"json",
|
|
],
|
|
);
|
|
assert_snapshot!("bom_simple_resistors_json", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_simple_resistors_table() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("boards/SimpleResistors.zen", SIMPLE_RESISTOR_BOARD_ZEN)
|
|
.write("bom_rules.json", SAMPLE_BOM_RULES)
|
|
.snapshot_run(
|
|
"pcb",
|
|
[
|
|
"bom",
|
|
"boards/SimpleResistors.zen",
|
|
"-r",
|
|
"bom_rules.json",
|
|
"-f",
|
|
"table",
|
|
],
|
|
);
|
|
assert_snapshot!("bom_simple_resistors_table", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_capacitors_with_dielectric() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("boards/Capacitors.zen", CAPACITOR_BOARD_ZEN)
|
|
.snapshot_run("pcb", ["bom", "boards/Capacitors.zen", "-f", "json"]);
|
|
assert_snapshot!("bom_capacitors_json", output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_bom_capacitors_table() {
|
|
let output = Sandbox::new()
|
|
.seed_stdlib(&["v0.2.10"])
|
|
.seed_kicad(&["9.0.0"])
|
|
.write("boards/Capacitors.zen", CAPACITOR_BOARD_ZEN)
|
|
.snapshot_run("pcb", ["bom", "boards/Capacitors.zen", "-f", "table"]);
|
|
assert_snapshot!("bom_capacitors_table", output);
|
|
}
|