1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-12-23 21:28:38 +02:00
eda-tools/b2/test/hierrul

308 lines
5.2 KiB
Bash
Executable File

#!/bin/bash
. ./Common
#
# Note: the hierarchy dump differs in some details from the input format.
# Its main purpose is to aid with debugging, not to produce a syntactically
# valid representation of the currently loaded hierarchy.
#
###############################################################################
tst "hierarchy: name rule" -dh <<EOF
Animal=* {
Cat: { X=* };
Dog: { Y=* };
};
EOF
expect <<EOF
Animal=* {
Cat: { X=* }
Dog: { Y=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: name set rule" -dh <<EOF
<predation> = mouse<cat<dog;
p = <predation> {
mouse: { X=* };
cat: { Y=* };
dog: { Z=* };
};
EOF
expect <<EOF
p=<predation> {
mouse: { X=* }
cat: { Y=* }
dog: { Z=* }
}
EOF
#------------------------------------------------------------------------------
tst_fail "hierarchy: name set rule (invalid value)" <<EOF
<predation> = mouse<cat<dog;
p = <predation> {
mouse: { X=* };
cat: { Y=* };
boat: { Z=* };
};
EOF
expect <<EOF
h:6: invalid value in selection
EOF
#------------------------------------------------------------------------------
tst "hierarchy: name set rule (duplicate entry)" -dh <<EOF
<predation> = mouse<cat<dog;
p = <predation> {
mouse: { X=* };
cat: { Y=* };
cat: { Z=* };
};
EOF
expect <<EOF
h:6: warning: unreachable condition
p=<predation> {
mouse: { X=* }
cat: { Y=* }
cat: { Z=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: absolute value rule (with unit)" -dh <<EOF
<predation> = mouse<cat<dog;
N=#R {
10R: { X=* };
10k: { Y=* };
1.2R: { Z=* };
};
EOF
expect <<EOF
N=#R {
10R: { X=* }
10000R: { Y=* }
1.2R: { Z=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: absolute value rule (without unit)" -dh <<EOF
<predation> = mouse<cat<dog;
N=## {
2: { X=* };
5k: { Y=* };
3.1: { Z=* };
};
EOF
expect <<EOF
N=## {
2: { X=* }
5000: { Y=* }
3.1: { Z=* }
}
EOF
#------------------------------------------------------------------------------
tst_fail "hierarchy: absolute value rule (different unit)" <<EOF
<predation> = mouse<cat<dog;
N=#R {
1.0A: { X=* };
};
EOF
expect <<EOF
h:4: invalid value in selection
EOF
#------------------------------------------------------------------------------
tst_fail "hierarchy: absolute value rule (letter-as-decimal syntax)" <<EOF
<predation> = mouse<cat<dog;
N=#R {
1k2: { X=* };
};
EOF
expect <<EOF
h:4: invalid value in selection
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (percent)" -dh <<EOF
{ V=#R }
TOL=%V {
1%: { X=* };
1.2%: { Y=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-1/+1%: { X=* }
-1.2/+1.2%: { Y=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (absolute, with unit)" -dh <<EOF
{ V=#R }
TOL=%V {
1R: { X=* };
1kR: { Y=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-1/+1R: { X=* }
-1000/+1000R: { Y=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (absolute, without unit)" -dh <<EOF
{ V=## }
TOL=%V {
1: { X=* };
1k: { Y=* };
};
EOF
expect <<EOF
{ V=## }
TOL=%# {
-1/+1: { X=* }
-1000/+1000: { Y=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (plus/minus percent)" -dh <<EOF
{ V=#R }
TOL=%V {
+10/-20%: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-20/+10%: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (minus/plus percent)" -dh <<EOF
{ V=#R }
TOL=%V {
-10/+20%: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-10/+20%: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (implicit minus/plus percent)" -dh <<EOF
{ V=#R }
TOL=%V {
10/20%: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-10/+20%: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (plus/minus absolute)" -dh <<EOF
{ V=#R }
TOL=%V {
+10/-20R: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-20/+10R: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (minus/plus absolute)" -dh <<EOF
{ V=#R }
TOL=%V {
-5/+10R: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-5/+10R: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst "hierarchy: relative value rule (implicit minus/plus absolute)" -dh <<EOF
{ V=#R }
TOL=%V {
0/10R: { X=* };
};
EOF
expect <<EOF
{ V=#R }
TOL=%R {
-0/+10R: { X=* }
}
EOF
#------------------------------------------------------------------------------
tst_fail "hierarchy: relative value rule (unknown field)" <<EOF
{ V=#R }
TOL=%X {
10%: { Y=* };
};
EOF
expect <<EOF
h:2: unknown field "X"
EOF
###############################################################################