repeat83

autotest by sql

Sep 10th, 2019
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.19 KB | None | 0 0
  1.  
  2. USE AtonBase
  3. IF (OBJECT_ID('TEMPDB..#presets') IS NOT NULL) DROP TABLE #presets
  4. IF (OBJECT_ID('TEMPDB..#failed') IS NOT NULL) DROP TABLE #failed
  5.  
  6. -- таблица с ожидаемыми резултатами
  7. CREATE TABLE #presets (
  8.     num NUMERIC(19,8), -- число
  9.     exp_text VARCHAR(255), -- ожидаемый результат прописью
  10.     exp_curr_R VARCHAR(255), -- ожидаемый результат по валюте рубли
  11.     exp_curr_U VARCHAR(255) -- ожидаемый результат по валюте доллары
  12. )
  13. -- ожидлаемые результаты
  14. INSERT INTO #presets
  15. VALUES
  16.     (0, 'Ноль', 'рублей', 'долларов'),
  17.     (1, 'Один', 'рубль', 'доллар'),
  18.     (2, 'Два', 'рубля', 'доллара'),
  19.     (4, 'Четыре', 'рубля', 'доллара'),
  20.     (5, 'Пять', 'рублей', 'долларов'),
  21.     (10, 'Десять', 'рублей', 'долларов'),
  22.     (11, 'Одиннадцать', 'рублей', 'долларов'),
  23.     (20, 'Двадцать', 'рублей', 'долларов'),
  24.     (21, 'Двадцать один', 'рубль', 'доллар'),
  25.     (22, 'Двадцать два', 'рубля', 'доллара'),
  26.     (100, 'Сто', 'рублей', 'долларов'),
  27.     (101, 'Сто один', 'рубль', 'доллар'),
  28.     (102, 'Сто два', 'рубля', 'доллара'),
  29.     (104, 'Сто четыре', 'рубля', 'доллара'),
  30.     (105, 'Сто пять', 'рублей', 'долларов'),
  31.     (200, 'Двести', 'рублей', 'долларов'),
  32.     (0.1, 'Ноль целых одна десятая', 'рубля', 'доллара'),
  33.     (0.01, 'Ноль целых одна сотая', 'рубля', 'доллара'),
  34.     (0.2, 'Ноль целых две десятых', 'рубля', 'доллара'),
  35.     (0.02, 'Ноль целых две сотых', 'рубля', 'доллара'),
  36.     (0.11, 'Ноль целых одиннадцать сотых', 'рубля', 'доллара'),
  37.     (1.11, 'Одна целая одиннадцать сотых', 'рубля', 'доллара'),
  38.     (2.11, 'Две целых одиннадцать сотых', 'рубля', 'доллара'),
  39.  
  40.     (1231.11, 'Одна тысяча двести тридцать одна целая одиннадцать сотых', 'рубля', 'доллара'),
  41.     (1232.51, 'Одна тысяча двести тридцать две целых пятьдесят одна сотая', 'рубля', 'доллара'),
  42.     (1211.5, 'Одна тысяча двести одиннадцать целых пять десятых', 'рубля', 'доллара'),
  43.  
  44.     (13.051, 'Тринадцать целых пятьдесят одна тысячная', 'рубля', 'доллара'),
  45.     (13.0071, 'Тринадцать целых семьдесят одна десятитысячная', 'рубля', 'доллара'),
  46.     (2000000.5, 'Два миллиона целых пять десятых', 'рубля', 'доллара'),
  47.     (1000001.5, 'Один миллион одна целая пять десятых', 'рубля', 'доллара'),
  48.     (101000000, 'Сто один миллион', 'рублей', 'долларов'),
  49.     (102000001.5, 'Сто два миллиона одна целая пять десятых', 'рубля', 'доллара'),
  50.     (111000001.5, 'Сто одиннадцать миллионов одна целая пять десятых', 'рубля', 'доллара'),
  51.     (112000001.5, 'Сто двенадцать миллионов одна целая пять десятых', 'рубля', 'доллара'),
  52.  
  53.     (0.11, 'Заведомо неверный текст', 'Заведомо неверный рубль', 'Заведомо неверный доллар'),
  54.     (NULL, NULL, NULL, NULL)
  55.  
  56.  
  57. -- таблица с провалившимися тестами
  58. CREATE TABLE #failed (
  59.     TYPE VARCHAR(255), -- на чём свалилось (текст, неверное склонение)
  60.     num NUMERIC(19,8), -- число
  61.     res_exp VARCHAR(255), -- ожидаемый результат
  62.     res_act VARCHAR(255) -- фактический результат
  63. )
  64.  
  65. -- для курсора
  66. DECLARE
  67.     @num NUMERIC(19,8), -- число
  68.     @exp_text VARCHAR(255), -- ожидаемый результат прописью
  69.     @exp_curr_R VARCHAR(255), -- ожидаемый результат по валюте рубли
  70.     @exp_curr_U VARCHAR(255), -- ожидаемый результат по валюте доллары
  71.     @act_text VARCHAR(255),
  72.     @act_curr_R VARCHAR(255),
  73.     @act_curr_U VARCHAR(255)
  74.  
  75. /*Объявляем курсор*/
  76. DECLARE vend_cursor CURSOR  
  77.     FOR SELECT * FROM #presets  
  78. OPEN vend_cursor  
  79. -- выбираем первую строку
  80. FETCH NEXT FROM vend_cursor INTO @num, @exp_text, @exp_curr_R, @exp_curr_U
  81. WHILE @@FETCH_STATUS = 0
  82. BEGIN
  83.     -- получаем актуальные результаты
  84.     SET @act_text = [dbo].[fnNum2Word] (@num, 11)
  85.     SET @act_curr_R = [dbo].[fnNum2Word] (@num, 13)
  86.     SET @act_curr_U = [dbo].[fnNum2Word] (@num, 12)
  87.  
  88.      -- проверка на текстовое преобразование
  89.     IF @act_text <> @exp_text
  90.     BEGIN
  91. --      SELECT @num, @exp_text as EXPECTED, @act_text as ACTUAL
  92.         INSERT INTO #failed VALUES('Неверный текст', @num, @exp_text, @act_text)
  93.     END
  94.    
  95.     -- проверка на склонение рублей
  96.     IF @act_curr_R <> @exp_curr_R
  97.     BEGIN
  98.         --SELECT @num, @exp_curr_R as EXPECTED, @act_curr_R as ACTUAL
  99.         INSERT INTO #failed VALUES('Неверное склонение', @num, @exp_text + ' ' + @exp_curr_R, @act_text + ' ' + UPPER(@act_curr_R))
  100.     END
  101.    
  102.     -- проверка на склонение рублей
  103.     IF @act_curr_U <> @exp_curr_U
  104.     BEGIN
  105.         --SELECT @num, @exp_curr_U as EXPECTED, @act_curr_U as ACTUAL -- проверка на склонение рублей
  106.                 INSERT INTO #failed VALUES('Неверное склонение', @num, @exp_text + ' ' + @exp_curr_U, @act_text + ' ' + UPPER(@act_curr_U))
  107.  
  108.     END
  109.  
  110.     -- выбираем следующую строку
  111.     FETCH NEXT FROM vend_cursor INTO @num, @exp_text, @exp_curr_R, @exp_curr_U
  112. END
  113. CLOSE vend_cursor;
  114. DEALLOCATE vend_cursor;
  115.  
  116. SELECT * FROM #failed
  117. RETURN
Advertisement
Add Comment
Please, Sign In to add comment