This is a test to make sure ch units work as intended.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS document.getElementById("box_mono_zero").clientWidth is 0
PASS document.getElementById("box_mono_four1").clientWidth is document.getElementById("box_mono_four2").clientWidth
PASS document.getElementById("box_monofallthrough_four1").clientWidth is document.getElementById("box_monofallthrough_four2").clientWidth
PASS document.getElementById("mono_box_alphalen1").clientWidth is document.getElementById("mono_box_alphalen2").clientWidth
PASS document.getElementById("box_one").clientWidth * 26 is document.getElementById("box_alphalen").clientWidth
PASS document.getElementById("arial_box_one").clientWidth * 26 is document.getElementById("arial_box_alphalen").clientWidth
PASS document.getElementById("helvetica_box_one").clientWidth * 26 is document.getElementById("helvetica_box_alphalen").clientWidth
PASS document.getElementById("times_box_one").clientWidth * 4 is document.getElementById("box_times_four").clientWidth
PASS document.getElementById("arial_box_one").clientWidth * 4 is document.getElementById("box_arial_four").clientWidth
PASS document.getElementById("helvetica_box_one").clientWidth * 4 is document.getElementById("box_helvetica_four").clientWidth
PASS document.getElementById("ref_box_arial_one").clientWidth is >= document.getElementById("box_arial_one").clientWidth
PASS document.getElementById("ref_box_times_one").clientWidth is >= document.getElementById("box_times_one").clientWidth
PASS document.getElementById("ref_box_sansserif_one").clientWidth is >= document.getElementById("box_sansserif_one").clientWidth
PASS w1 !== w2 || h1 !== h2 is false
PASS ps1h > ps2h && ps1h > ps3h is true
PASS document.getElementById("box_mono_one").clientWidth is document.getElementById("box_mono").clientWidth
PASS successfullyParsed is true

TEST COMPLETE
This is a test to make sure ch units work as intended. You should not see anything red on this page.

Only 'PASS' should be visible:
PASS
PASS
PASS
PASS
The whole lower case alphabet should be readable:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
Four zeroes should be visible, nothing else:
0000
0000
0000 There should be more than one green '|' visible (non-monospaced fonts):
|||0|||
|||0|||
|||0|||
This box has a 20px font size. The last two '0's should be the same size.
0
0
0
I'm a pseudo selected first line, I should be bigger than the rest.
I'm the second line.
Last in line. But one day... the throne will be mine!
0
