summaryrefslogtreecommitdiff
path: root/fonts/cm/cmtest
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/cm/cmtest
Initial commit
Diffstat (limited to 'fonts/cm/cmtest')
-rw-r--r--fonts/cm/cmtest/0_read_me20
-rw-r--r--fonts/cm/cmtest/3test.mf60
-rw-r--r--fonts/cm/cmtest/3test0.mf60
-rw-r--r--fonts/cm/cmtest/5test.mf13
-rw-r--r--fonts/cm/cmtest/5test0.mf13
-rw-r--r--fonts/cm/cmtest/6test.mf59
-rw-r--r--fonts/cm/cmtest/6test0.mf63
-rw-r--r--fonts/cm/cmtest/btest.mf13
-rw-r--r--fonts/cm/cmtest/btest0.mf13
-rw-r--r--fonts/cm/cmtest/ctest.mf13
-rw-r--r--fonts/cm/cmtest/ftest.mf13
-rw-r--r--fonts/cm/cmtest/ftest0.mf13
-rw-r--r--fonts/cm/cmtest/itest.mf13
-rw-r--r--fonts/cm/cmtest/itest0.mf13
-rw-r--r--fonts/cm/cmtest/mtest.mf13
-rw-r--r--fonts/cm/cmtest/mtest0.mf13
-rw-r--r--fonts/cm/cmtest/qtest.mf13
-rw-r--r--fonts/cm/cmtest/qtest0.mf13
-rw-r--r--fonts/cm/cmtest/rtest.mf13
-rw-r--r--fonts/cm/cmtest/rtest0.mf13
-rw-r--r--fonts/cm/cmtest/stest.mf13
-rw-r--r--fonts/cm/cmtest/stest0.mf13
-rw-r--r--fonts/cm/cmtest/test.mf29
-rw-r--r--fonts/cm/cmtest/test0.mf26
-rw-r--r--fonts/cm/cmtest/ttest.mf13
-rw-r--r--fonts/cm/cmtest/ttest0.mf13
-rw-r--r--fonts/cm/cmtest/xtest.mf13
-rw-r--r--fonts/cm/cmtest/xtest0.mf13
-rw-r--r--fonts/cm/cmtest/ztest.mf13
-rw-r--r--fonts/cm/cmtest/ztest0.mf13
30 files changed, 616 insertions, 0 deletions
diff --git a/fonts/cm/cmtest/0_read_me b/fonts/cm/cmtest/0_read_me
new file mode 100644
index 0000000000..e988ca0778
--- /dev/null
+++ b/fonts/cm/cmtest/0_read_me
@@ -0,0 +1,20 @@
+This directory contains only the test files for work on
+the Computer Modern fonts. The source files, and most
+related files are now in the directory ./cmfonts
+at the main level of this distribution.
+
+cmfonts consists of
+
+./cmfonts/mf
+./cmfonts/pl
+./cmfonts/tfm
+./cmfonts/gf
+./cmfonts/pxl
+
+./cmfonts/gf/gf118
+./cmfonts/gf/gf200
+./cmfonts/gf/gf300
+
+The parallel directory LaTeXfonts has a similar
+structure, and contains the special LaTeX and
+SliTeX fonts.
diff --git a/fonts/cm/cmtest/3test.mf b/fonts/cm/cmtest/3test.mf
new file mode 100644
index 0000000000..b106233f0b
--- /dev/null
+++ b/fonts/cm/cmtest/3test.mf
@@ -0,0 +1,60 @@
+% This tries all characters on TEST.MF using six different sets of parameters
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mag=.5;
+% use the following lines to get rid of DD nonsquareness
+% aspect_ratio_[proof]:=4/3; % WAITS only!
+% aspect_ratio_[smoke]:=4/3; % WAITS only!
+% mag:=3/8; % WAITS only!
+mode_setup; let mode_setup=\;
+
+boolean running;
+def abort = hide(scrollmode; running:=false) enddef;
+def pause=stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+def ligtable text t=enddef;
+def charlist text t=enddef;
+def extensible text t=enddef;
+
+string currenttitle;
+let semi=;; let echar=endchar; let endchar=enddef;
+def cmchar expr s = currenttitle:=s;
+ let;=testchar semi quote def chartext=enddef;
+def testchar = semi let;=semi;
+ % now `chartext echar' will generate the character to be tested
+ running:=true; errorstopmode;
+ for k=1 upto 6:
+ if running: if known params[k]: scantokens params[k]; font_setup;
+ currentwindow:=k;
+ currenttitle & ", " & fontname[k];
+ chartext echar; fi fi endfor
+ pause; enddef;
+
+string params[],fontname[];
+params[1]="ital_params"; fontname[1]="cmti10";
+params[2]="bold_ital_params"; fontname[2]="cmbxti10";
+params[3]="tt_params"; fontname[3]="cmit10";
+
+w_rows=floor 1/2 screen_rows; w_cols=floor 1/3 screen_cols;
+def open(expr k,i,j)=
+ openwindow k from ((i-1)*w_rows,(j-1)*w_cols) to (i*w_rows,j*w_cols)
+ at (-10,140) enddef;
+def openit =
+ open(1,1,1); open(2,1,2); open(3,1,3);
+ open(4,2,1); open(5,2,2); open(6,2,3); enddef;
+
+begingroup delimiters begintext generate;
+ def WAITSkludge expr s =
+ if length s > 6: substring (0,3) of s &
+ substring(length s-3,infinity) of fi s enddef;
+ numeric Xerox_world; % again, this is WAITS only
+ def makedef(expr s)(text t) =
+ expandafter def scantokens s = t enddef; flushtext enddef;
+ def flushtext suffix t = enddef;
+ for k=1 upto 6: if known params[k]:
+ makedef(params[k])
+ expandafter expandafter expandafter begintext
+ scantokens ("input "&WAITSkludge fontname[k]); fi endfor
+endgroup;
+
+input test
+end
diff --git a/fonts/cm/cmtest/3test0.mf b/fonts/cm/cmtest/3test0.mf
new file mode 100644
index 0000000000..62007ee428
--- /dev/null
+++ b/fonts/cm/cmtest/3test0.mf
@@ -0,0 +1,60 @@
+% This tries all characters on TEST0.MF using six different sets of parameters
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mag=.5;
+% use the following lines to get rid of DD nonsquareness
+% aspect_ratio_[proof]:=4/3; % WAITS only!
+% aspect_ratio_[smoke]:=4/3; % WAITS only!
+% mag:=3/8; % WAITS only!
+mode_setup; let mode_setup=\;
+
+boolean running;
+def abort = hide(scrollmode; running:=false) enddef;
+def pause=stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+def ligtable text t=enddef;
+def charlist text t=enddef;
+def extensible text t=enddef;
+
+string currenttitle;
+let semi=;; let echar=endchar; let endchar=enddef;
+def cmchar expr s = currenttitle:=s;
+ let;=testchar semi quote def chartext=enddef;
+def testchar = semi let;=semi;
+ % now `chartext echar' will generate the character to be tested
+ running:=true; errorstopmode;
+ for k=1 upto 6:
+ if running: if known params[k]: scantokens params[k]; font_setup;
+ currentwindow:=k;
+ currenttitle & ", " & fontname[k];
+ chartext echar; fi fi endfor
+ pause; enddef;
+
+string params[],fontname[];
+params[1]="ital_params"; fontname[1]="cmti10";
+params[2]="bold_ital_params"; fontname[2]="cmbxti10";
+params[3]="tt_params"; fontname[3]="cmit10";
+
+w_rows=floor 1/2 screen_rows; w_cols=floor 1/3 screen_cols;
+def open(expr k,i,j)=
+ openwindow k from ((i-1)*w_rows,(j-1)*w_cols) to (i*w_rows,j*w_cols)
+ at (-10,140) enddef;
+def openit =
+ open(1,1,1); open(2,1,2); open(3,1,3);
+ open(4,2,1); open(5,2,2); open(6,2,3); enddef;
+
+begingroup delimiters begintext generate;
+ def WAITSkludge expr s =
+ if length s > 6: substring (0,3) of s &
+ substring(length s-3,infinity) of fi s enddef;
+ numeric Xerox_world; % again, this is WAITS only
+ def makedef(expr s)(text t) =
+ expandafter def scantokens s = t enddef; flushtext enddef;
+ def flushtext suffix t = enddef;
+ for k=1 upto 6: if known params[k]:
+ makedef(params[k])
+ expandafter expandafter expandafter begintext
+ scantokens ("input "&WAITSkludge fontname[k]); fi endfor
+endgroup;
+
+input test0
+end
diff --git a/fonts/cm/cmtest/5test.mf b/fonts/cm/cmtest/5test.mf
new file mode 100644
index 0000000000..1b2f4f4570
--- /dev/null
+++ b/fonts/cm/cmtest/5test.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmbx5
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmbx5; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/5test0.mf b/fonts/cm/cmtest/5test0.mf
new file mode 100644
index 0000000000..c79ea219e2
--- /dev/null
+++ b/fonts/cm/cmtest/5test0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmbx5
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmbx5; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/6test.mf b/fonts/cm/cmtest/6test.mf
new file mode 100644
index 0000000000..e1682c909b
--- /dev/null
+++ b/fonts/cm/cmtest/6test.mf
@@ -0,0 +1,59 @@
+% This tries all characters on TEST.MF using six different sets of parameters
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mag=.5;
+mode_setup;%let mode_setup=\;
+
+boolean running;
+def abort = hide(scrollmode; running:=false) enddef;
+def pause=stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+def ligtable text t=enddef;
+def charlist text t=enddef;
+def extensible text t=enddef;
+
+string currenttitle;
+let semi=;; let echar=endchar; let endchar=enddef;
+def cmchar expr s = currenttitle:=s;
+ let;=testchar semi quote def chartext=enddef;
+def testchar = semi let;=semi;
+ % now `chartext echar' will generate the character to be tested
+ running:=true; errorstopmode;
+ for k=1 upto 6:
+ if running: if known params[k]: scantokens params[k]; font_setup;
+ currentwindow:=k;
+ currenttitle & ", " & fontname[k];
+ chartext echar; fi fi endfor
+ pause; enddef;
+
+string params[],fontname[];
+params[1]="roman_params"; fontname[1]="cmr10";
+params[2]="sans_params"; fontname[2]="cmsx10";
+params[3]="tt_params"; fontname[3]="cmtt10";
+params[4]="bold_params"; fontname[4]="cmb10";
+params[5]="quote_params"; fontname[5]="cmssqi8";
+params[6]="ital_params"; fontname[6]="cmti10";
+
+w_rows=floor 1/2 screen_rows; w_cols=floor 1/3 screen_cols;
+def open(expr k,i,j)=
+ openwindow k from ((i-1)*w_rows,(j-1)*w_cols) to (i*w_rows,j*w_cols)
+ at (-10,140) enddef;
+def openit =
+ open(1,1,1); open(2,1,2); open(3,1,3);
+ open(4,2,1); open(5,2,2); open(6,2,3); enddef;
+
+begingroup delimiters begintext generate;
+ def WAITSkludge expr s =
+ if length s > 6: substring (0,3) of s &
+ substring(length s-3,infinity) of fi s enddef;
+ numeric Xerox_world; % again, this is WAITS only
+ def makedef(expr s)(text t) =
+ expandafter def scantokens s = t enddef; flushtext enddef;
+ def flushtext suffix t = enddef;
+ for k=1 upto 6: if known params[k]:
+ makedef(params[k])
+ expandafter expandafter expandafter begintext
+ scantokens ("input "&WAITSkludge fontname[k]); fi endfor
+endgroup;
+
+input test;
+bye
diff --git a/fonts/cm/cmtest/6test0.mf b/fonts/cm/cmtest/6test0.mf
new file mode 100644
index 0000000000..176023865a
--- /dev/null
+++ b/fonts/cm/cmtest/6test0.mf
@@ -0,0 +1,63 @@
+% This tries all characters on TEST0.MF using six different sets of parameters
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mag=.5;
+% use the following lines to get rid of DD nonsquareness
+% aspect_ratio_[proof]:=4/3; % WAITS only!
+% aspect_ratio_[smoke]:=4/3; % WAITS only!
+% mag:=3/8; % WAITS only!
+mode_setup; let mode_setup=\;
+
+boolean running;
+def abort = hide(scrollmode; running:=false) enddef;
+def pause=stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+def ligtable text t=enddef;
+def charlist text t=enddef;
+def extensible text t=enddef;
+
+string currenttitle;
+let semi=;; let echar=endchar; let endchar=enddef;
+def cmchar expr s = currenttitle:=s;
+ let;=testchar semi quote def chartext=enddef;
+def testchar = semi let;=semi;
+ % now `chartext echar' will generate the character to be tested
+ running:=true; errorstopmode;
+ for k=1 upto 6:
+ if running: if known params[k]: scantokens params[k]; font_setup;
+ currentwindow:=k;
+ currenttitle & ", " & fontname[k];
+ chartext echar; fi fi endfor
+ pause; enddef;
+
+string params[],fontname[];
+params[1]="roman_params"; fontname[1]="cmr10";
+params[2]="sans_params"; fontname[2]="cmsx10";
+params[3]="tt_params"; fontname[3]="cmtt10";
+params[4]="bold_params"; fontname[4]="cmb10";
+params[5]="quote_params"; fontname[5]="cmssqi8";
+params[6]="ital_params"; fontname[6]="cmti10";
+
+w_rows=floor 1/2 screen_rows; w_cols=floor 1/3 screen_cols;
+def open(expr k,i,j)=
+ openwindow k from ((i-1)*w_rows,(j-1)*w_cols) to (i*w_rows,j*w_cols)
+ at (-10,140) enddef;
+def openit =
+ open(1,1,1); open(2,1,2); open(3,1,3);
+ open(4,2,1); open(5,2,2); open(6,2,3); enddef;
+
+begingroup delimiters begintext generate;
+ def WAITSkludge expr s =
+ if length s > 6: substring (0,3) of s &
+ substring(length s-3,infinity) of fi s enddef;
+ numeric Xerox_world; % again, this is WAITS only
+ def makedef(expr s)(text t) =
+ expandafter def scantokens s = t enddef; flushtext enddef;
+ def flushtext suffix t = enddef;
+ for k=1 upto 6: if known params[k]:
+ makedef(params[k])
+ expandafter expandafter expandafter begintext
+ scantokens ("input "&WAITSkludge fontname[k]); fi endfor
+endgroup;
+
+input test0
+end
diff --git a/fonts/cm/cmtest/btest.mf b/fonts/cm/cmtest/btest.mf
new file mode 100644
index 0000000000..045b8fe6c9
--- /dev/null
+++ b/fonts/cm/cmtest/btest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmb10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmb10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/btest0.mf b/fonts/cm/cmtest/btest0.mf
new file mode 100644
index 0000000000..e463144251
--- /dev/null
+++ b/fonts/cm/cmtest/btest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmb10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmb10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/ctest.mf b/fonts/cm/cmtest/ctest.mf
new file mode 100644
index 0000000000..4bc9819269
--- /dev/null
+++ b/fonts/cm/cmtest/ctest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmssdc10 but crisp
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmsx10; crisp#:=0; tiny#:=0; fine#:=0; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/ftest.mf b/fonts/cm/cmtest/ftest.mf
new file mode 100644
index 0000000000..974e34ebb9
--- /dev/null
+++ b/fonts/cm/cmtest/ftest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmff10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmff10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/ftest0.mf b/fonts/cm/cmtest/ftest0.mf
new file mode 100644
index 0000000000..50e38263f0
--- /dev/null
+++ b/fonts/cm/cmtest/ftest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmff10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmff10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/itest.mf b/fonts/cm/cmtest/itest.mf
new file mode 100644
index 0000000000..f952c76243
--- /dev/null
+++ b/fonts/cm/cmtest/itest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmti10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmti10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/itest0.mf b/fonts/cm/cmtest/itest0.mf
new file mode 100644
index 0000000000..3f623b1fff
--- /dev/null
+++ b/fonts/cm/cmtest/itest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmti10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmti10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/mtest.mf b/fonts/cm/cmtest/mtest.mf
new file mode 100644
index 0000000000..7f151b6490
--- /dev/null
+++ b/fonts/cm/cmtest/mtest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmmi10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmmi10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/mtest0.mf b/fonts/cm/cmtest/mtest0.mf
new file mode 100644
index 0000000000..15310b83d6
--- /dev/null
+++ b/fonts/cm/cmtest/mtest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmmi10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmmi10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/qtest.mf b/fonts/cm/cmtest/qtest.mf
new file mode 100644
index 0000000000..d94264a23b
--- /dev/null
+++ b/fonts/cm/cmtest/qtest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmssqi8
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmsqi8; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/qtest0.mf b/fonts/cm/cmtest/qtest0.mf
new file mode 100644
index 0000000000..ed999edcbd
--- /dev/null
+++ b/fonts/cm/cmtest/qtest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmssqi8
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmsqi8; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/rtest.mf b/fonts/cm/cmtest/rtest.mf
new file mode 100644
index 0000000000..f5e449aa7d
--- /dev/null
+++ b/fonts/cm/cmtest/rtest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmr10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmr10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/rtest0.mf b/fonts/cm/cmtest/rtest0.mf
new file mode 100644
index 0000000000..f8600b3ee5
--- /dev/null
+++ b/fonts/cm/cmtest/rtest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmr10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmr10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/stest.mf b/fonts/cm/cmtest/stest.mf
new file mode 100644
index 0000000000..363b566f2d
--- /dev/null
+++ b/fonts/cm/cmtest/stest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmssbx10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmsx10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/stest0.mf b/fonts/cm/cmtest/stest0.mf
new file mode 100644
index 0000000000..f15b5f211b
--- /dev/null
+++ b/fonts/cm/cmtest/stest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmssbx10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmsx10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/test.mf b/fonts/cm/cmtest/test.mf
new file mode 100644
index 0000000000..c2d81f0302
--- /dev/null
+++ b/fonts/cm/cmtest/test.mf
@@ -0,0 +1,29 @@
+
+cmchar "Lowercase thorn";
+beginchar(oct"015",10u#+serif_fit#,asc_height#,desc_depth#);
+italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
+adjust_fit(serif_fit#,0);
+pickup tiny.nib; pos1(stem',0); pos2(stem,0);
+pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
+lft x1l=hround(2.5u-.5stem'); top y1=h;
+numeric edge; edge=rt x2r;
+pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
+pos4(vair',90); pos5(curve,0); pos6(vair,-90);
+rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
+x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
+rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
+x6=x3; bot y6r=-oo;
+(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
+filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
+ &z5e{down}...{5(x6-x5),y6-y5}z6e; % bowl
+y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
+pickup tiny.nib; bot y2=-d;
+filldraw stroke z1e--z0'e--z0e--z2e; % stem
+pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
+z7'=z2; x8l=x7'l; bot y8=0;
+filldraw stroke z7'e--z8e; % point
+if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
+ dish_serif(2,0,b,1/3,jut,c,1/3,0); fi % lower serif
+penlabels(0,1,2,3,4,5,6,8); endchar;
+
+
diff --git a/fonts/cm/cmtest/test0.mf b/fonts/cm/cmtest/test0.mf
new file mode 100644
index 0000000000..636e22b416
--- /dev/null
+++ b/fonts/cm/cmtest/test0.mf
@@ -0,0 +1,26 @@
+cmchar "The letter m";
+beginchar("m",15u#,x_height#,0);
+italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
+adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
+numeric shaved_stem; shaved_stem=hround(mfudged.stem-2stem_corr);
+pickup tiny.nib; pos1(mfudged.stem,0); pos2(mfudged.stem,0);
+pos1'(shaved_stem,0); pos2'(shaved_stem,0);
+pos3(mfudged.stem,0); pos5(mfudged.stem,0);
+lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l;
+lft x3l=hround(.5w-.5stem); x5-x3=x3-x1;
+if not monospace: r:=hround(x5+x1)-l; fi % change width for better fit
+top y1=h+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
+filldraw stroke z1'e--z2'e; % left stem
+h_stroke(2,a,3,4); % left arch and middle stem
+h_stroke(4,b,5,6); % right arch and right stem
+if serifs: sloped_serif.l(1',2',c,1/3,jut,serif_drop); % upper left serif
+ numeric inner_jut; pickup tiny.nib;
+ if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut;
+ else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
+ dish_serif(2,1,d,1/3,jut,e,1/3,jut); % lower left serif
+ dish_serif(4,3,f,1/3,inner_jut,g,1/3,jut); % lower middle serif
+ dish_serif(6,5,h,1/3,inner_jut,i,1/3,jut); fi % lower right serif
+penlabels(1,2,3,4,5,6); endchar;
+
+
+
diff --git a/fonts/cm/cmtest/ttest.mf b/fonts/cm/cmtest/ttest.mf
new file mode 100644
index 0000000000..470a382a49
--- /dev/null
+++ b/fonts/cm/cmtest/ttest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmtt10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmtt10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/ttest0.mf b/fonts/cm/cmtest/ttest0.mf
new file mode 100644
index 0000000000..8f0b254fbd
--- /dev/null
+++ b/fonts/cm/cmtest/ttest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmtt10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmtt10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/xtest.mf b/fonts/cm/cmtest/xtest.mf
new file mode 100644
index 0000000000..524c892973
--- /dev/null
+++ b/fonts/cm/cmtest/xtest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of cmbx10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmbx10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/xtest0.mf b/fonts/cm/cmtest/xtest0.mf
new file mode 100644
index 0000000000..31a4e3f551
--- /dev/null
+++ b/fonts/cm/cmtest/xtest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of cmbx10
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input cmbx10; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end
diff --git a/fonts/cm/cmtest/ztest.mf b/fonts/cm/cmtest/ztest.mf
new file mode 100644
index 0000000000..35d1489e27
--- /dev/null
+++ b/fonts/cm/cmtest/ztest.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST.MF using the parameters of an unknown font
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input z; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test;
+end
diff --git a/fonts/cm/cmtest/ztest0.mf b/fonts/cm/cmtest/ztest0.mf
new file mode 100644
index 0000000000..f3981c676d
--- /dev/null
+++ b/fonts/cm/cmtest/ztest0.mf
@@ -0,0 +1,13 @@
+% try all characters on TEST0.MF using the parameters of an unknown font
+if unknown cmbase: input cmbase fi % omit if CMMF can be assumed
+mode_setup;
+
+def generate suffix t= enddef;
+input z; font_setup;
+
+let echar=endchar;
+def endchar= echar; stop "done with char "&decimal charcode&". " enddef;
+let iff=always_iff;
+
+input test0;
+end