!! functionhooks
convert
!! endfunctionhooks

!! test
Simple conversion
!! input
{{#convert: 10 m | km }}
!!result
<p>0.01 kilometres
</p>
!! end

!! test
Position and formatting of numbers and units
!! input
*{{#convert: 10  m | km }}
*{{#convert: 10m | km }}
*{{#convert: 10 km | m }}
*{{#convert: 10-km | m }}
*{{#convert: 10E2 km | m }}
*{{#convert: 10E-2 km | m }}
*{{#convert: 10.0E2 km | m }}
*{{#convert: 10.0E2.5 km | m }}
!! result
<ul><li>0.01  kilometres
</li><li>0.01kilometres
</li><li>10,000 metres
</li><li>10,000-metres
</li><li>1,000,000 metres
</li><li>100 metres
</li><li>1,000,000 metres
</li><li>1,000,000.5,000 metres
</li></ul>

!! end

!! test
Precision 1
!! input
*{{#convert: 10 m | km }}
*{{#convert: 11 m | km }}
*{{#convert: 12 m | km }}
*{{#convert: 13 m | km }}
*{{#convert: 14 m | km }}
*{{#convert: 15 m | km }}
*{{#convert: 16 m | km }}
*{{#convert: 17 m | km }}
*{{#convert: 18 m | km }}
*{{#convert: 19 m | km }}
*{{#convert: 20 m | km }}
!! result
<ul><li>0.01 kilometres
</li><li>0.011 kilometres
</li><li>0.012 kilometres
</li><li>0.013 kilometres
</li><li>0.014 kilometres
</li><li>0.015 kilometres
</li><li>0.016 kilometres
</li><li>0.017 kilometres
</li><li>0.018 kilometres
</li><li>0.019 kilometres
</li><li>0.02 kilometres
</li></ul>

!! end

!! test
Precision 2
!! input
*{{#convert: 10.0 m | km }}
*{{#convert: 10.1 m | km }}
*{{#convert: 10.2 m | km }}
*{{#convert: 10.3 m | km }}
*{{#convert: 10.4 m | km }}
*{{#convert: 10.5 m | km }}
*{{#convert: 10.6 m | km }}
*{{#convert: 10.7 m | km }}
!! result
<ul><li>0.0100 kilometres
</li><li>0.0101 kilometres
</li><li>0.0102 kilometres
</li><li>0.0103 kilometres
</li><li>0.0104 kilometres
</li><li>0.0105 kilometres
</li><li>0.0106 kilometres
</li><li>0.0107 kilometres
</li></ul>

!! end

!! test
String interpolation
!! input
{{#convert: 25, 26, 27, 28, 29, and 30 km }}
!! result
<p>25,000, 26,000, 27,000, 28,000, 29,000, and 30,000 metres
</p>
!! end

!! test
Precision 3
!! input
{{#convert: 25, 26, 27, 28, 29, and 30 miles }}
!! result
<p>40,000, 42,000, 43,000, 45,000, 47,000, and 50,000 metres
</p>
!! end

!! test
Precision 4
!! input
{{#convert:35000, 35E3, 35.0E3, 350E2, 3.500E4, 35000E0, 350000E-1 m | km }}
!! result
<p>35, 35, 35.0, 35, 35.00, 35, 35 kilometres
</p>
!! end

!! test
#sourceunit
!!input
*{{#convert: 25 | #sourceunit = km }}
*{{#convert: 25 | #sourceunit=km }}
*{{#convert: 25 | #sourceunit = km | #sourceunit = mm }}
*{{#convert: 25 | #sourceunit = km | cm }}
!! result
<ul><li>25,000 metres
</li><li>25,000 metres
</li><li>0.025 metres
</li><li>2,500,000 centimetres
</li></ul>

!! end

!! test
Precision overrides
!!input
*{{#convert: 1 mi | #dp = 0 }}
*{{#convert: 1 mi | #dp=1 }}
*{{#convert: 1 mi | #dp = -2 }}
*{{#convert: 1 mi | #dp = 5 }}
*{{#convert: 1 mi | #dp = -8 }}
*{{#convert: 1 mi | #sf = 0 }}
*{{#convert: 1 mi | #sf=1 }}
*{{#convert: 1 mi | #sf = 3 }}
*{{#convert: 1 mi | #sf = 5 }}
*{{#convert: 1 mi | #sf = -8 }}
!! result
<ul><li>1,609 metres
</li><li>1,609.3 metres
</li><li>1,600 metres
</li><li>1,609.344 metres
</li><li>0 metres
</li><li>2,000 metres
</li><li>2,000 metres
</li><li>1,610 metres
</li><li>1,609.3 metres
</li><li>2,000 metres
</li></ul>

!! end


!! test
Errors
!! input
*{{#convert: 25 | km }}
*{{#convert: 25 foobars | mi }}
*{{#convert: 25 mi | #sourceunit = foobar }}
*{{#convert: 25 km | s }}
*{{#convert: 25 km/Pa | m/Pa }}
*{{#convert: 25 km/s/l }}
*{{#convert: 25 km/m3 }}
!! result
<ul><li><strong class="error">Error: No source unit given.</strong>
</li><li><strong class="error">Error: Unknown unit "foobars".</strong>
</li><li><strong class="error">Error: Unknown unit "foobar".</strong>
</li><li><strong class="error">Error: Cannot convert between units of "length" and "time".</strong>
</li><li><strong class="error">Error: Invalid compound unit "length/pressure".</strong>
</li><li><strong class="error">Error: Cannot parse double compound units like "km/s/l".</strong>
</li><li><strong class="error">Error: Invalid compound unit "length/volume".</strong>
</li></ul>

!! end


!! test
#sourceunit = #targetunit
!! input
*{{#convert: 25 km | #targetunit = #sourceunit }}
*{{#convert: 25 km | #sourceunit = #targetunit }}
!! result
<ul><li>25 kilometres
</li><li>25 kilometres
</li></ul>

!! end

!! test
#language
!! input
*{{#convert: 10  m | km | #language=en-gb }}
*{{#convert: 10m | km | #language = en }}
*{{#convert: 10 km | m |#language=en}}
*{{#convert: 10 Pa | mmHg | #language = fr }}
!! result
<ul><li>0.01  kilometres
</li><li>0.01kilometers
</li><li>10,000 meters
</li><li>0.1 millimètre de mercure
</li></ul>

!! end

!! test
Case sensitivity
!! input
*{{#convert: 10 mm | m }}
*{{#convert: 10 Mm | m }}
*{{#convert: 10 km | Mm }}
*{{#convert: 10 Pa | mmHg }}
*{{#convert: 10 pa | mmHg  }}
!! result
<ul><li>0.01 metres
</li><li>10,000,000 metres
</li><li>0.01 megametres
</li><li>0.1 millimetres of mercury
</li><li><strong class="error">Error: Unknown unit "pa".</strong>
</li></ul>

!! end
