From 5ca5765e01a6906582167e276d0f406078a400a2 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sat, 16 Sep 2023 22:02:18 +0300 Subject: [PATCH] Add symbol factories for punctuation, space, defaults symbols. --- .../symbol_factories.clj | 31 ++++++++++- .../symbol_factories_test.clj | 51 +++++++++++++++---- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/src/cipher_analytical_machine/symbol_factories.clj b/src/cipher_analytical_machine/symbol_factories.clj index 781822f..8c92a3c 100644 --- a/src/cipher_analytical_machine/symbol_factories.clj +++ b/src/cipher_analytical_machine/symbol_factories.clj @@ -1,4 +1,4 @@ -(ns cipher-analytical-machine.symbol_factories +(ns cipher-analytical-machine.symbol-factories (:require [clojure.string :as cs]) (:gen-class)) @@ -32,3 +32,32 @@ [] "0123456789") +(defn punctuation-symbol-factory + "Return punctuation symbols" + [] + ".,:;-!?") + +(defn space-symbol-factory + "Return punctuation symbols" + [] + " \t\n") + +(defn default-symbol-factory + "Return a default string of symbols for a language" + [language-code] + (cond + (= language-code "en") + (str (english-alphabet-factory) + (punctuation-symbol-factory) + (digit-set-factory) + \ ) + + (= language-code "uk") + (str (ukrainian-alphabet-factory) + (punctuation-symbol-factory) + (digit-set-factory) + \ ) + + :else + (default-symbol-factory "en"))) + diff --git a/test/cipher_analytical_machine/symbol_factories_test.clj b/test/cipher_analytical_machine/symbol_factories_test.clj index 8bb252e..b1ebc92 100644 --- a/test/cipher_analytical_machine/symbol_factories_test.clj +++ b/test/cipher_analytical_machine/symbol_factories_test.clj @@ -1,46 +1,75 @@ (ns cipher-analytical-machine.symbol-factories-test (:require [clojure.test :refer :all] - [cipher-analytical-machine.symbol_factories :refer :all] + [cipher-analytical-machine.symbol-factories :refer :all] )) (deftest lower-english-alphabet-factory-test (let [symbols (lower-english-alphabet-factory)] - (testing "It must have same order" + (testing "It must have the same order." (is (= "abcdefghijklmnopqrstuvwxyz" symbols))) - (testing "It must have 26 letters" + (testing "It must have 26 letters." (is (= 26 (count symbols)))))) (deftest english-alphabet-factory-test (let [symbols (english-alphabet-factory)] - (testing "It must have same order" + (testing "It must have the same order." (is (= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" symbols))) - (testing "It must have 2*26 letters" + (testing "It must have 2*26 letters." (is (= (* 2 26) (count symbols)))))) (deftest lower-ukrainian-alphabet-factory-test (let [symbols (lower-ukrainian-alphabet-factory)] - (testing "It must have same order" + (testing "It must have the same order." (is (= "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя" symbols))) - (testing "It must have 33 letters" + (testing "It must have 33 letters." (is (= 33 (count symbols)))))) (deftest ukrainian-alphabet-factory-test (let [symbols (ukrainian-alphabet-factory)] - (testing "It must have same order" + (testing "It must have the same order." (is (= "абвгґдеєжзиіїйклмнопрстуфхцчшщьюяАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ" symbols))) - (testing "It must have 2*33 letters" + (testing "It must have 2*33 letters." (is (= (* 2 33) (count symbols)))))) (deftest digit-set-factory-test (let [symbols (digit-set-factory)] - (testing "It must have same order" + (testing "It must have the same order." (is (= "0123456789" symbols))) - (testing "It must have 10 digits" + (testing "It must have 10 digits." (is (= 10 (count symbols)))))) +(deftest punctuation-symbol-factory-test + (let [symbols (punctuation-symbol-factory)] + (testing "It must have the same order." + (is (= ".,:;-!?" symbols))) + + (testing "It must have 7 symbols." + (is (= 7 (count symbols)))))) + +(deftest space-symbol-factory-test + (let [symbols (space-symbol-factory)] + (testing "It must have the same order." + (is (= " \t\n" symbols))) + + (testing "It must have 3 symbols." + (is (= 3 (count symbols)))))) + +(deftest default-symbol-factory-test + (testing "If language code is 'en', then it must have symbols." + (let [symbols (default-symbol-factory "en")] + (is (= 70 (count symbols))))) + + (testing "If language code is 'uk', then it must have symbols." + (let [symbols (default-symbol-factory "uk")] + (is (= 84 (count symbols))))) + + (testing "If language code is unidentified, then it must have the 'en'." + (let [symbols (default-symbol-factory "Maybe a code")] + (is (= 70 (count symbols)))))) +