Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11

Как написать тест для программы?

14.10.2018, 20:15. Показов 1527. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть программы заключается в создании последовательности строк.Каждая строка состоит из слов разделенных пробелами.
Нужно написать программу обеспечивающую ввод строк и их корректировку. Корректировка заключается в :
1) если слово стоит на нечетном месте и начинается на букву 'л' то слово удалить
2) если слово стоит на четном месте и начинается на букву 'н' то слово заменить на то что пользователь введет с клавиатуры
на печать вывести исходную и скорректированную последовательности строк.

А так же написать тест что генерирует случайные строки в соответствии с правилами.

не могу сделать генерацию чисел
а так же не представляю связь между тестом и вводом слова в тесте
поэтому и вбиваю 123
но ничего не работает(
интернет пишет что все правильно






Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require './31.rb'
arr_str = []
puts 'Введите колличество строк'
x = gets.to_i
x.times do |i|
puts 'введите строку'
arr_str[i] = gets.chomp
arr_str[i] = arr_str[i].split
end
 
print 'исходная строка: '
y = arr_str
print "#{y} \n"
 
arr_str.length.times do |i|
arr_str = b(arr_str, i)
end
 
print "#{arr_str} \n"
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def b(str, iii)
x = str
y = x[iii].length
y = 0...y
x = c(x, iii, y)
print "#{x} \n"
x = d(x, iii, y)
print "#{x} \n"
a(x, iii)
end
 
def a(xxx, iii)
if xxx.length - 1 == iii
iii += 1
iii.times do |i|
xxx[i].delete(nil)
end
end
xxx
end
 
def c(xxx, iii, yyy)
yyy.each do |i|
xxx[iii][i] = nil if i.odd? && xxx[iii][i].chars.first == 'л'
end
xxx
end
 
def d(xxx, iii, yyy)
yyy.each do |i|
xxx[iii][i] = gets.chomp if i.even? && xxx[iii][i].chars.first == 'н'
end
xxx
end
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
require 'minitest/autorun'
require 'minitest/unit.rb'
require_relative '31.rb'
 
# Тест функции строк
class StrTest < MiniTest::Unit::TestCase
def test
output = gen_wordf(rand(3..5))
input = '123'
add_words(output, input)
assert_equal input, b(output, 0)
end
end
 
def gen_wordf(size)
x = 'н' + (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
x += 'л' + (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
end
 
def gen_word(size)
x = (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
end
 
def add_words(output, input)
rand(2..10).times do
word = gen_word(rand(3..5))
if word.chars.first == 'л' && output.length.even?
output « ' '
output « word
elsif word.chars.first == 'н' && output.length.odd?
output « ' '
input « ' '
output « word
input « '123'
elsif word.chars.first == 'н' && word.chars.first == 'л'
output « ' '
input « ' '
output « word
input « word
end
end
end
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2018, 20:15
Ответы с готовыми решениями:

Как написать тест для авторизованного пользователя?
помогите пожалуйста советом. я написал тест для экшена edit: test &quot;should get edit&quot; do get :edit, id: @user ...

Не получается написать тест для проверки программы
Доброго времени суток! Perl мой первый язык программирования и я совсем недавно начал его изучать, пока все более или менее получалось по...

Как написать модульный тест для функции main
имеется функция нахождения максимального из трех целых чисел int main() { int a, b, c, mx; printf (&quot;Insert...

3
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
15.10.2018, 10:05
Цитата Сообщение от vergto Посмотреть сообщение
Ruby
1
2
3
4
5
6
7
8
9
def a(xxx, iii)
if xxx.length - 1 == iii
iii += 1
iii.times do |i|
xxx[i].delete(nil)
end
end
xxx
end
Голова потом не кружится от всех этих xxx и iii?

Во-первых: Правила форума
5.18 Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Ну да ладно, код есть... Итак.

Создаёте папку projects в домашнем каталоге.
Дальше в командной строке
Bash
1
2
3
4
5
6
7
bundle gem string_corrector --mit --test=minitest
cd string_corrector
bundle install
git add .
git commit -m 'Init repo'
# run your favorite editor
atom . | sublime . | vim | etc...
Правите string_corrector.gemspec. Что править вам подскажет rake, просто запросите список доступных команд rake --tasks

И пишите первый тест ./test/string_corrector_test.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
require "test_helper"
 
class StringCorrectorTest < Minitest::Test
  def test_that_it_has_a_version_number
    refute_nil ::StringCorrector::VERSION
  end
 
  def test_delete_odd_words
    str = 'люблю я макароны'
    result = 'я макароны'
    assert_equal StringCorrector.call(str), result
  end
end
Запускаете
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 22810
 
# Running:
 
E.
 
Finished in 0.001701s, 1175.6836 runs/s, 587.8418 assertions/s.
 
  1) Error:
StringCorrectorTest#test_delete_odd_words:
NoMethodError: undefined method `call' for StringCorrector:Module
    /home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:12:in `test_delete_odd_words'
 
2 runs, 1 assertions, 0 failures, 1 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Правильно, нет такого метода - добавим ./lib/string_corrector.rb
Ruby
1
2
3
4
5
6
7
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
 
  end
end
Запускаете опять:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 44068
 
# Running:
 
.F
 
Finished in 0.001384s, 1444.7401 runs/s, 1444.7401 assertions/s.
 
  1) Failure:
StringCorrectorTest#test_delete_odd_words [/home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:12]:
Expected: "я макароны"
  Actual: nil
 
2 runs, 2 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Отлично, рантайм ошибок нет, тест фейлится. Впрочем, как и должен (наш метод ничего не возвращает).

Пишем реализацию ./lib/string_corrector.rb
Ruby
1
2
3
4
5
6
7
8
9
10
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
    str.split(' ').each_with_object([]).with_index do |(w, acc), i|
      next if (i + 1).odd? && w.start_with?('л')
      acc << w
    end.join(' ')
  end
end
Запускаем опять:
Bash
1
2
3
4
5
6
7
8
9
10
$ rake test
Run options: --seed 9247
 
# Running:
 
..
 
Finished in 0.001538s, 1300.4163 runs/s, 1300.4163 assertions/s.
 
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
Класс
Bash
1
2
git add .
git commit -m 'Implemented odd words deletion'
Дальше пишем тест, на четные и буквы "н" ./test/string_corrector_test.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
require "test_helper"
 
class StringCorrectorTest < Minitest::Test
  # code omit for bravity
 
  def test_change_even_words
    str = 'я никогда не сплю'
    result = 'я всегда не сплю'
 
    assert_equal result, StringCorrector.call(str) { 'всегда' }
  end
end
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 61342
 
# Running:
 
F..
 
Finished in 0.002274s, 1319.4573 runs/s, 1319.4573 assertions/s.
 
  1) Failure:
StringCorrectorTest#test_change_even_words [/home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:19]:
Expected: "я всегда не сплю"
  Actual: "я никогда не сплю"
 
3 runs, 3 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Всё норм, тест, как и ожидалось, красный. Реализуем
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
    str.split(' ').each_with_object([]).with_index do |(w, acc), i|
      next if (i + 1).odd? && w.start_with?('л')
 
      word = if (i + 1).even? && w.start_with?('н')
        block_given? ? yield : ''
      else
        w
      end
 
      acc << word
    end.join(' ')
  end
end
Bash
1
2
3
4
5
6
7
8
9
10
$ rake test
Run options: --seed 44458
 
# Running:
 
...
 
Finished in 0.001703s, 1761.8020 runs/s, 1761.8020 assertions/s.
 
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips
Ну и вот: red, green и мы молодцы
Bash
1
2
git add .
git commit -m 'Implemented even words replace'
дальше рефактор и т. д. и т. п.
0
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
15.10.2018, 21:30  [ТС]
Цитата Сообщение от j2FunOnly Посмотреть сообщение
rake --tasks
уже на этом этапе перестает работать выдавая куча ошибок
Цитата Сообщение от j2FunOnly Посмотреть сообщение
rake test
здесь аналогичная ситуация

и зачем мы создали проект новый, в него кинуть файл , или нужно подключить как то программу ?

0
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
15.10.2018, 21:55  [ТС]
Цитата Сообщение от j2FunOnly Посмотреть сообщение
git add .
мне по заданию нужно 1 файлик с тестом
то есть как я и пытался сделать изначально
вроде бы у меня не так уж и плохо получилось
только не работает
не могу сделать саму генерацию русского слова и занесения его в список
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2018, 21:55
Помогаю со студенческими работами здесь

Меню для программы-тест
Народ, помогите пожалуйста!!!!!!!!!!!! У меня есть код проги-теста, нужно сделать для неё меню!!! оч нада!!! плс! Меню нужно елементарное...

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать интерфейс(скины как это сделано в программе...

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать интерфейс(скины как это сделано в программе...

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать интерфейс(скины как это сделано в программе...

Как написать код для этой программы
Даны действительные числа a, h, натуральное число n. Вычислить F(a)+2F(a+h)+2F(a+2h)+...+2F(a+(n-1)h)+F(a+nh), где F(x)=(x2+1)cos2(x). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru