Как применить утверждения для Eiffel через командную строку?

Eiffel имеет функцию Design by Contract. В соответствии с этим для любой подпрограммы существует проверка того, что такие утверждения, как require и ensure, должны быть истинными. Однако мне не удалось выяснить, как применить правило через командную строку, согласно которому, если утверждения ложны, должна быть ошибка/исключение, выданное компилятором или во время выполнения.

Например, если это корневой класс,

class
    APPLICATION

inherit
    ARGUMENTS

create
    make

feature {NONE}


    object: TEST1
    make
            -- Run application.
        do          
            create object
            object.function(-1)
            print(object.value)
        end
end

а это класс TEST1

class
    TEST1

feature

    value: INTEGER
            -- value for testing
    function(val: INTEGER)
            -- Assign
        require
            val>0
        do
            value:=val
        ensure
            value>0     
        end

end

Программа компилируется и выполняется без ошибок, несмотря на то, что оба утверждения нарушены.

Я компилирую с помощью

ec application.e

Однако Eiffel Studio сообщает о нарушении контракта.

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


person GoodDeeds    schedule 05.11.2016    source источник
comment
Вы когда-нибудь встречали решение для этого?   -  person Jatin Sharma    schedule 12.11.2019
comment
@JatinSharma Я не очень уверен, вы можете попробовать ответ ниже или посмотреть, поможет ли это: eiffel.org/doc/eiffelstudio/   -  person GoodDeeds    schedule 14.11.2019


Ответы (1)


Похоже, что версия EiffelStudio с графическим интерфейсом и версия EiffelStudio для командной строки используют разные значения по умолчанию при создании новых проектов: версия для командной строки отключает мониторинг утверждений, а версия с графическим интерфейсом включает мониторинг утверждений. Фактически вы можете открыть проект, созданный с помощью версии для командной строки, в графическом интерфейсе или, наоборот, скомпилировать проект, созданный в версии с графическим интерфейсом, с помощью компилятора командной строки. Настройки проекта хранятся в .ecf файле и являются частью проекта, т.е. этот .ecf файл должен распространяться вместе с проектом.

Чтобы решить конкретную проблему, которую вы описали, откройте .ecf в графическом интерфейсе пользователя (Файл | Открыть проект | Добавить проект | Открыть), затем перейдите к Проект | Настройки проекта | Утверждения, включите все утверждения и нажмите Сохранить, выйдите из версии с графическим интерфейсом. Теперь, когда вы перекомпилируете свой проект из командной строки, утверждения будут включены, и вы получите трассировку исключения во время выполнения, как и ожидалось.

person Alexander Kogtenkov    schedule 05.11.2016
comment
Это не работает для меня. Параметр показывает, что для всех утверждений установлено значение true, но программа все же проходит, даже если утверждение нарушается, когда я запускаю ее с помощью bash. - person GoodDeeds; 05.11.2016
comment
@GoodDeeds, не могли бы вы попытаться удалить каталог EIFGENs, сохранив application.ecf в верхней части проекта, и перекомпилировать с нуля? - person Alexander Kogtenkov; 05.11.2016