Generate docs and fix bug

Add examples in docs
Fixed wrong words in the outputs
This commit is contained in:
Uttarayan Mondal
2021-03-08 02:12:02 +05:30
parent 2595553b2b
commit 11603829bb
7 changed files with 157 additions and 84 deletions
+67 -39
View File
@@ -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!(&quot;{}&quot;,digit_to_text(1).unwrap());</span>
<span class="doccomment">//! assert_eq!(&quot;two&quot;,digit_to_text(2).unwrap());</span>
<span class="doccomment">//! assert_ne!(&quot;five&quot;,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!(&quot;{}&quot;,to_text(1312));</span>
<span class="doccomment">//! assert_eq!(to_text(1312),&quot;onethousandthreehundredtwelve&quot;);</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">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</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">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</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">&gt;</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">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;hundred&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;thousand&quot;</span>),
<span class="comment">// 5 =&gt; value.push_str(&quot;placeholder&quot;),</span>
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;million&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
}
<span class="ident">value</span>
}),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> (),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</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">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;hundred&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;thousand&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">// Souldn&#39;t happen</span>
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">value</span>.<span class="ident">push_str</span>(<span class="string">&quot;million&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</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">&gt;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&amp;</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">&gt;</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">&amp;</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">&quot;hello index {}&quot;</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">&gt;</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>
}
+9 -1
View File
@@ -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">&quot;one&quot;</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">&quot;ten&quot;</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">&quot;onehundred&quot;</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">&quot;onethousand&quot;</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">&quot;twelvethousandthreehundredfortyfive&quot;</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">&quot;eightyonethousandonehundredtwentythree&quot;</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">&quot;twelve&quot;</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">&quot;two&quot;</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">tens</span>() {