Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- USE AtonBase
- IF (OBJECT_ID('TEMPDB..#presets') IS NOT NULL) DROP TABLE #presets
- IF (OBJECT_ID('TEMPDB..#failed') IS NOT NULL) DROP TABLE #failed
- -- таблица с ожидаемыми резултатами
- CREATE TABLE #presets (
- num NUMERIC(19,8), -- число
- exp_text VARCHAR(255), -- ожидаемый результат прописью
- exp_curr_R VARCHAR(255), -- ожидаемый результат по валюте рубли
- exp_curr_U VARCHAR(255) -- ожидаемый результат по валюте доллары
- )
- -- ожидлаемые результаты
- INSERT INTO #presets
- VALUES
- (0, 'Ноль', 'рублей', 'долларов'),
- (1, 'Один', 'рубль', 'доллар'),
- (2, 'Два', 'рубля', 'доллара'),
- (4, 'Четыре', 'рубля', 'доллара'),
- (5, 'Пять', 'рублей', 'долларов'),
- (10, 'Десять', 'рублей', 'долларов'),
- (11, 'Одиннадцать', 'рублей', 'долларов'),
- (20, 'Двадцать', 'рублей', 'долларов'),
- (21, 'Двадцать один', 'рубль', 'доллар'),
- (22, 'Двадцать два', 'рубля', 'доллара'),
- (100, 'Сто', 'рублей', 'долларов'),
- (101, 'Сто один', 'рубль', 'доллар'),
- (102, 'Сто два', 'рубля', 'доллара'),
- (104, 'Сто четыре', 'рубля', 'доллара'),
- (105, 'Сто пять', 'рублей', 'долларов'),
- (200, 'Двести', 'рублей', 'долларов'),
- (0.1, 'Ноль целых одна десятая', 'рубля', 'доллара'),
- (0.01, 'Ноль целых одна сотая', 'рубля', 'доллара'),
- (0.2, 'Ноль целых две десятых', 'рубля', 'доллара'),
- (0.02, 'Ноль целых две сотых', 'рубля', 'доллара'),
- (0.11, 'Ноль целых одиннадцать сотых', 'рубля', 'доллара'),
- (1.11, 'Одна целая одиннадцать сотых', 'рубля', 'доллара'),
- (2.11, 'Две целых одиннадцать сотых', 'рубля', 'доллара'),
- (1231.11, 'Одна тысяча двести тридцать одна целая одиннадцать сотых', 'рубля', 'доллара'),
- (1232.51, 'Одна тысяча двести тридцать две целых пятьдесят одна сотая', 'рубля', 'доллара'),
- (1211.5, 'Одна тысяча двести одиннадцать целых пять десятых', 'рубля', 'доллара'),
- (13.051, 'Тринадцать целых пятьдесят одна тысячная', 'рубля', 'доллара'),
- (13.0071, 'Тринадцать целых семьдесят одна десятитысячная', 'рубля', 'доллара'),
- (2000000.5, 'Два миллиона целых пять десятых', 'рубля', 'доллара'),
- (1000001.5, 'Один миллион одна целая пять десятых', 'рубля', 'доллара'),
- (101000000, 'Сто один миллион', 'рублей', 'долларов'),
- (102000001.5, 'Сто два миллиона одна целая пять десятых', 'рубля', 'доллара'),
- (111000001.5, 'Сто одиннадцать миллионов одна целая пять десятых', 'рубля', 'доллара'),
- (112000001.5, 'Сто двенадцать миллионов одна целая пять десятых', 'рубля', 'доллара'),
- (0.11, 'Заведомо неверный текст', 'Заведомо неверный рубль', 'Заведомо неверный доллар'),
- (NULL, NULL, NULL, NULL)
- -- таблица с провалившимися тестами
- CREATE TABLE #failed (
- TYPE VARCHAR(255), -- на чём свалилось (текст, неверное склонение)
- num NUMERIC(19,8), -- число
- res_exp VARCHAR(255), -- ожидаемый результат
- res_act VARCHAR(255) -- фактический результат
- )
- -- для курсора
- DECLARE
- @num NUMERIC(19,8), -- число
- @exp_text VARCHAR(255), -- ожидаемый результат прописью
- @exp_curr_R VARCHAR(255), -- ожидаемый результат по валюте рубли
- @exp_curr_U VARCHAR(255), -- ожидаемый результат по валюте доллары
- @act_text VARCHAR(255),
- @act_curr_R VARCHAR(255),
- @act_curr_U VARCHAR(255)
- /*Объявляем курсор*/
- DECLARE vend_cursor CURSOR
- FOR SELECT * FROM #presets
- OPEN vend_cursor
- -- выбираем первую строку
- FETCH NEXT FROM vend_cursor INTO @num, @exp_text, @exp_curr_R, @exp_curr_U
- WHILE @@FETCH_STATUS = 0
- BEGIN
- -- получаем актуальные результаты
- SET @act_text = [dbo].[fnNum2Word] (@num, 11)
- SET @act_curr_R = [dbo].[fnNum2Word] (@num, 13)
- SET @act_curr_U = [dbo].[fnNum2Word] (@num, 12)
- -- проверка на текстовое преобразование
- IF @act_text <> @exp_text
- BEGIN
- -- SELECT @num, @exp_text as EXPECTED, @act_text as ACTUAL
- INSERT INTO #failed VALUES('Неверный текст', @num, @exp_text, @act_text)
- END
- -- проверка на склонение рублей
- IF @act_curr_R <> @exp_curr_R
- BEGIN
- --SELECT @num, @exp_curr_R as EXPECTED, @act_curr_R as ACTUAL
- INSERT INTO #failed VALUES('Неверное склонение', @num, @exp_text + ' ' + @exp_curr_R, @act_text + ' ' + UPPER(@act_curr_R))
- END
- -- проверка на склонение рублей
- IF @act_curr_U <> @exp_curr_U
- BEGIN
- --SELECT @num, @exp_curr_U as EXPECTED, @act_curr_U as ACTUAL -- проверка на склонение рублей
- INSERT INTO #failed VALUES('Неверное склонение', @num, @exp_text + ' ' + @exp_curr_U, @act_text + ' ' + UPPER(@act_curr_U))
- END
- -- выбираем следующую строку
- FETCH NEXT FROM vend_cursor INTO @num, @exp_text, @exp_curr_R, @exp_curr_U
- END
- CLOSE vend_cursor;
- DEALLOCATE vend_cursor;
- SELECT * FROM #failed
- RETURN
Advertisement
Add Comment
Please, Sign In to add comment