Generate docs and fix bug
Add examples in docs Fixed wrong words in the outputs
This commit is contained in:
+67
-39
@@ -110,7 +110,42 @@
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="doccomment">//!```rust</span>
|
||||
<span class="doccomment">//!extern crate ntext;</span>
|
||||
<span class="doccomment">//!use ntext::digit_to_text;</span>
|
||||
<span class="doccomment">//!fn main() {</span>
|
||||
<span class="doccomment">//! println!("{}",digit_to_text(1).unwrap());</span>
|
||||
<span class="doccomment">//! assert_eq!("two",digit_to_text(2).unwrap());</span>
|
||||
<span class="doccomment">//! assert_ne!("five",digit_to_text(8).unwrap());</span>
|
||||
<span class="doccomment">//!}</span>
|
||||
<span class="doccomment">//!```</span>
|
||||
<span class="doccomment">//! However giving the program a zero will return an empty string.</span>
|
||||
<span class="doccomment">//!</span>
|
||||
<span class="doccomment">//!```rust</span>
|
||||
<span class="doccomment">//!extern crate ntext;</span>
|
||||
<span class="doccomment">//!use ntext::to_text;</span>
|
||||
<span class="doccomment">//!fn main() {</span>
|
||||
<span class="doccomment">//! println!("{}",to_text(1312));</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text(1312),"onethousandthreehundredtwelve");</span>
|
||||
<span class="doccomment">//!}</span>
|
||||
<span class="doccomment">//!```</span>
|
||||
<span class="doccomment">//! This fucntion will also return an empty string on input zero</span>
|
||||
|
||||
<span class="kw">mod</span> <span class="ident">test</span>;
|
||||
<span class="doccomment">/// Convert digit to text.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">digit_to_text</span>(<span class="ident">digit</span>: <span class="ident">u8</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
@@ -167,56 +202,49 @@
|
||||
}
|
||||
}
|
||||
<span class="kw">fn</span> <span class="ident">place_value</span>(<span class="ident">number</span>: <span class="ident">u8</span>, <span class="ident">place</span>: <span class="ident">u8</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">value</span> <span class="op">=</span> <span class="ident">digit_to_text</span>(<span class="ident">number</span>).<span class="ident">unwrap</span>();
|
||||
<span class="kw">match</span> <span class="ident">place</span> {
|
||||
<span class="ident">p</span> @ <span class="number">3</span>..<span class="op">=</span><span class="number">6</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>({
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">value</span> <span class="op">=</span> <span class="ident">digit_to_text</span>(<span class="ident">number</span>).<span class="ident">unwrap</span>();
|
||||
<span class="kw">match</span> <span class="ident">p</span> {
|
||||
<span class="number">3</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"hundred"</span>),
|
||||
<span class="number">4</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"thousand"</span>),
|
||||
<span class="comment">// 5 => value.push_str("placeholder"),</span>
|
||||
<span class="number">6</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"million"</span>),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> (),
|
||||
}
|
||||
<span class="ident">value</span>
|
||||
}),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">None</span>,
|
||||
}
|
||||
<span class="number">1</span> <span class="op">=</span><span class="op">></span> (),
|
||||
<span class="number">2</span> <span class="op">=</span><span class="op">></span> (), <span class="comment">//This should never happen as 2 is included in the tens_place_holders</span>
|
||||
<span class="number">3</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"hundred"</span>),
|
||||
<span class="number">4</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"thousand"</span>),
|
||||
<span class="number">5</span> <span class="op">=</span><span class="op">></span> (), <span class="comment">// Souldn't happen</span>
|
||||
<span class="number">6</span> <span class="op">=</span><span class="op">></span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">"million"</span>),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> (),
|
||||
};
|
||||
<span class="prelude-val">Some</span>(<span class="ident">value</span>)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Convert u32 to words in a string.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">to_text</span>(<span class="ident">number</span>: <span class="ident">u32</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">numtext</span>: <span class="ident">String</span> <span class="op">=</span> <span class="ident">String</span>::<span class="ident">new</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">last</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> <span class="prelude-val">None</span>;
|
||||
<span class="kw">let</span> <span class="ident">tens_place_holders</span>: [<span class="ident">u8</span>; <span class="number">2</span>] <span class="op">=</span> [<span class="number">2</span>, <span class="number">5</span>];
|
||||
<span class="kw">let</span> <span class="ident">digits</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> <span class="ident">number</span>
|
||||
.<span class="ident">to_string</span>()
|
||||
.<span class="ident">chars</span>()
|
||||
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">d</span><span class="op">|</span> <span class="ident">d</span>.<span class="ident">to_digit</span>(<span class="number">10</span>).<span class="ident">unwrap</span>() <span class="kw">as</span> <span class="ident">u8</span>)
|
||||
.<span class="ident">collect</span>();
|
||||
<span class="kw">let</span> <span class="ident">second_digit_array</span>: [<span class="ident">usize</span>; <span class="number">2</span>] <span class="op">=</span> [<span class="number">0</span>, <span class="number">3</span>];
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">last</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> <span class="prelude-val">None</span>;
|
||||
<span class="kw">if</span> <span class="ident">digits</span>.<span class="ident">len</span>() <span class="op">=</span><span class="op">=</span> <span class="number">1</span> {
|
||||
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">digit_to_text</span>(<span class="kw-2">*</span><span class="ident">digits</span>.<span class="ident">last</span>().<span class="ident">unwrap</span>()).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
|
||||
} <span class="kw">else</span> {
|
||||
<span class="kw">for</span> (<span class="ident">index</span>, <span class="ident">digit</span>) <span class="kw">in</span> <span class="ident">digits</span>.<span class="ident">iter</span>().<span class="ident">rev</span>().<span class="ident">enumerate</span>() {
|
||||
<span class="kw">if</span> <span class="ident">second_digit_array</span>.<span class="ident">contains</span>(<span class="kw-2">&</span><span class="ident">index</span>) {
|
||||
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">digit</span>.<span class="ident">clone</span>());
|
||||
<span class="kw">continue</span>;
|
||||
}
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">last_digit</span>) <span class="op">=</span> <span class="ident">last</span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffer</span> <span class="op">=</span> <span class="ident">String</span>::<span class="ident">new</span>();
|
||||
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">tens_place</span>(<span class="ident">digit</span>.<span class="ident">clone</span>(), <span class="ident">last_digit</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
|
||||
<span class="kw">if</span> <span class="ident">index</span> <span class="op">></span> <span class="number">2</span> {
|
||||
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">place_value</span>(<span class="number">0</span>, <span class="ident">index</span> <span class="kw">as</span> <span class="ident">u8</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
|
||||
}
|
||||
<span class="ident">numtext</span>.<span class="ident">insert_str</span>(<span class="number">0</span>, <span class="ident">buffer</span>.<span class="ident">as_str</span>());
|
||||
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">None</span>;
|
||||
} <span class="kw">else</span> {
|
||||
<span class="ident">numtext</span>.<span class="ident">insert_str</span>(
|
||||
<span class="number">0</span>,
|
||||
<span class="ident">place_value</span>(<span class="ident">digit</span>.<span class="ident">clone</span>(), <span class="ident">index</span> <span class="kw">as</span> <span class="ident">u8</span> <span class="op">+</span> <span class="number">1</span>)
|
||||
.<span class="ident">unwrap</span>()
|
||||
.<span class="ident">as_str</span>(),
|
||||
)
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">place</span>: <span class="ident">u8</span> <span class="op">=</span> <span class="ident">digits</span>.<span class="ident">len</span>() <span class="kw">as</span> <span class="ident">u8</span>;
|
||||
|
||||
<span class="kw">for</span> (<span class="ident">_index</span>, <span class="ident">digit</span>) <span class="kw">in</span> <span class="ident">digits</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
|
||||
<span class="kw">if</span> <span class="ident">tens_place_holders</span>.<span class="ident">contains</span>(<span class="kw-2">&</span><span class="ident">place</span>) {
|
||||
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="kw-2">*</span><span class="ident">digit</span>);
|
||||
<span class="ident">place</span> <span class="op">-</span><span class="op">=</span> <span class="number">1</span>;
|
||||
<span class="kw">continue</span>;
|
||||
}
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">last_digit</span>) <span class="op">=</span> <span class="ident">last</span> {
|
||||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"hello index {}"</span>, <span class="ident">place</span>);
|
||||
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">tens_place</span>(<span class="ident">last_digit</span>, <span class="kw-2">*</span><span class="ident">digit</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
|
||||
<span class="kw">if</span> <span class="ident">place</span> <span class="op">></span> <span class="number">2</span> {
|
||||
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">place_value</span>(<span class="number">0</span>, <span class="ident">place</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
|
||||
}
|
||||
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">None</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw-2">*</span><span class="ident">digit</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> {
|
||||
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">place_value</span>(<span class="kw-2">*</span><span class="ident">digit</span>, <span class="ident">place</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>())
|
||||
}
|
||||
<span class="ident">place</span> <span class="op">-</span><span class="op">=</span> <span class="number">1</span>;
|
||||
}
|
||||
<span class="ident">numtext</span>
|
||||
}
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
@@ -44,10 +48,14 @@
|
||||
<span class="attribute">#[<span class="ident">test</span>]</span>
|
||||
<span class="kw">fn</span> <span class="ident">numbers</span>() {
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">to_text</span>;
|
||||
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1</span>), <span class="string">"one"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">10</span>), <span class="string">"ten"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">100</span>), <span class="string">"onehundred"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1000</span>), <span class="string">"onethousand"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12345</span>), <span class="string">"twelvethousandthreehundredfortyfive"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">81123</span>), <span class="string">"eightyonethousandonehundredtwentythree"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12</span>), <span class="string">"twelve"</span>);
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">2</span>), <span class="string">"two"</span>);
|
||||
}
|
||||
<span class="attribute">#[<span class="ident">test</span>]</span>
|
||||
<span class="kw">fn</span> <span class="ident">tens</span>() {
|
||||
|
||||
Reference in New Issue
Block a user