Есть ли стандартный исходный файл C для теста компилятора? [Дубликат]

Это происходит из-за того, что неявный фид строки, также известный как символ новой строки \n, добавляется ко всем пользовательским вводам терминала, поскольку он сообщает потоку начать новую строку. Вы можете смело учитывать это, используя std::getline при проверке нескольких строк ввода пользователя. Поведение по умолчанию std::getline будет читать все до и включая символ новой строки \n из объекта входного потока, который в этом случае является std::cin.

#include 
#include 

int main()
{
    std::string name;
    std::string state;

    if (std::getline(std::cin, name) && std::getline(std::cin, state))
    {
        std::cout << "Your name is " << name << " and you live in " << state;
    }
    return 0;
}
Input:

"John"
"New Hampshire"

Output:

"Your name is John and you live in New Hampshire"
blockquote >

37
задан Aditya Sehgal 9 July 2009 в 19:25
поделиться

7 ответов

Есть несколько комплектов тестов компилятора. Нам посчастливилось использовать тестовый набор Plum Hall для компилятора C. Он состоит из большого набора C-кода, специально написанного для тестирования по языковому стандарту. Он проверяет, что компилятор может обрабатывать синтаксис и семантику языка.

9
ответ дан Trent 21 August 2018 в 23:00
поделиться
  • 1
    Не отвечает на все, но ссылка отличная. Благодарю. – Aditya Sehgal 14 July 2009 в 12:19
  • 2
    Любая альтернатива с открытым исходным кодом для Plum Hall? – smwikipedia 13 March 2018 в 03:57

Общая практика заключается в создании большого набора небольших программ, каждый из которых демонстрирует одни аспекты компилятора. Они будут включать как компиляцию программы, так и те, которые не должны. Генерал ASM, выходящий из задней части, не проверяется, а скорее запускается программа и проверяется выход. Что касается того, как убедиться, что в тестовых случаях нет ошибок: сделайте их маленькими, как и по 5-10 строк.

Эти тестовые комплекты могут быть очень большими, как в сотнях до тысяч тестов (для пример: устаревший набор тестов для языка программирования D ) и обычно включают один или несколько тестовых примеров для каждой ошибки, когда-либо сообщаемой.

6
ответ дан BCS 21 August 2018 в 23:00
поделиться
  • 1
    но если я делаю небольшие исходные файлы и тестирую их индивидуально, как это гарантирует, что все они будут работать, когда часть одной и той же программы. Например, я забираю проект с открытым исходным кодом и компилятор my освобождается от него. – Aditya Sehgal 9 July 2009 в 19:18
  • 2
    Это не так. Но гораздо более вероятно, что ваш компилятор не сможет выполнить одну из небольших программ. Нет никакого способа доказать, что компилятор может правильно скомпилировать любой источник - это будет эквивалентно решению проблемы остановки. – user 9 July 2009 в 19:29
  • 3
    Как правило, вы получаете смешение тестовых примеров, которые генерируются из спецификации языка (в основном, очень маленькой) и случаев из ошибок (как можно уменьшить размер файла воспроизведения). Что касается знания того, что все будет работать во всех случаях, я не уверен, что вы можете (для большинства языков) даже доказать, что спецификация является последовательной, и тем более, что она реализована правильно. – BCS 9 July 2009 в 19:37
  • 4
    разве не странно, что что-то вроде этого не стандартизировано или, по крайней мере, предпринимается попытка стандартизировать его. – Aditya Sehgal 10 July 2009 в 06:58

Компилятор Eiffel является открытым исходным кодом и имеет обширную библиотеку тестовых примеров и внутренних контрактов на проектирование.

http://dev.eiffel.com

2
ответ дан clemahieu 21 August 2018 в 23:00
поделиться

Ранее был задан вопрос, связанный с этим для C , но он сводится к тщательно составленному тестовому набору компиляторов.

Что касается того, когда компиляторы неправильно кода, я Спасибо, что достаточно часто в моей профессиональной карьере, спасибо. Это случалось все меньше и меньше с течением времени, но я нашел ошибку в компиляторах MS C ++, нацеленных на CLI на этой неделе.

2
ответ дан Community 21 August 2018 в 23:00
поделиться

Идея скомпилировать большой проект с открытым исходным кодом:

Вы можете взять проект, в котором есть набор тестов. Затем вы скомпилируете проект и его тестовый набор и посмотрите, проходят ли тесты. Чтобы проверить эти результаты, вы компилируете проект и набор тестов с другим компилятором и снова запускаете тесты.

4
ответ дан Eike 21 August 2018 в 23:00
поделиться

GCC имеет довольно большой набор тестов ( https://gcc.gnu.org/onlinedocs/gccint/Testsuites.html#Testsuites ). Он доступен в SCM: https://github.com/gcc-mirror/gcc/tree/master/gcc/testsuite

0
ответ дан Koubi 21 August 2018 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: