diff options
| -rw-r--r-- | parser/parser.fnl | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/parser/parser.fnl b/parser/parser.fnl index 5cb64c3..15d9cd4 100644 --- a/parser/parser.fnl +++ b/parser/parser.fnl @@ -157,7 +157,10 @@ (if text (let [peg (peg.Ct (anywhere - (* (peg.C pegs.number) + (* (+ (* (peg.C pegs.number) + (peg.S "xXхХ") + (peg.C pegs.number)) + (peg.C pegs.number)) (maybe (+ (peg.P " ") " ")) (* (peg.C (if extra-metrics @@ -166,18 +169,24 @@ (+ (pnot pegs.letter) -1)))))] (let [result (peg:match text)] (if result - (let [[number metric] result] - (* number (if (= metric "кг") 1000 1))) - nil))) + (match result + [multiplier weight metric] (* (tonumber multiplier) + (tonumber weight) + (if (= metric "кг") 1000 1)) + [weight metric] (* (tonumber weight) + (if (= metric "кг") 1000 1))) + nil))) nil)) (fn test-guess-weight [] - (assert (= nil (guess-weight "за 1"))) - (assert (= 357 (guess-weight "за 1 шт 357 гр"))) - (assert (= 1 (guess-weight "1гр"))) - (assert (= 150 (guess-weight "150 гр"))) - (assert (= 1000 (guess-weight "1кг"))) - (assert (= 150 (guess-weight "150 г" ["г"])))) + (assert (= nil (guess-weight "за 1")) "1") + (assert (= 120 (guess-weight "6x20гр")) "2") + (assert (= 1260 (guess-weight "за 6x210гр")) "3") + (assert (= 357 (guess-weight "за 1 шт 357 гр")) "4") + (assert (= 1 (guess-weight "1гр")) "5") + (assert (= 150 (guess-weight "150 гр")) "6") + (assert (= 1000 (guess-weight "1кг")) "7") + (assert (= 150 (guess-weight "150 г" ["г"])) "8")) (fn guess-volume [text] (if text |
