### Question:
KRunOptions { public boolean io() { if (io != null && io == true && search()) { throw KEMException.criticalError("You cannot specify both --io on and --search"); } if (io != null && io == true && experimental.ltlmc()) { throw KEMException.criticalError("You cannot specify both --io on and --ltlmc"); } if (io != null && io == true && experimental.debugger()) { throw KEMException.criticalError("You cannot specify both --io on and --debugger"); } if (search() || experimental.prove != null || experimental.ltlmc() || experimental.debugger()) { return false; } if (io == null) { return true; } return io; }  boolean io(); boolean search(); SearchType searchType(); @ParametersDelegate
    transient GlobalOptions global; @ParametersDelegate
    public ConfigurationCreationOptions configurationCreation; @ParametersDelegate
    public ColorOptions color; @Parameter(names={"--output", "-o"}, converter=OutputModeConverter.class,
            description="How to display krun results. <mode> is either [pretty|sound|kast|binary|none|nowrap].")
    public OutputModes output; @Parameter(names="--search", description="In conjunction with it you can specify 3 options that are optional: pattern (the pattern used for search), bound (the number of desired solutions) and depth (the maximum depth of the search).")
    public boolean search; @Parameter(names="--pattern", description="Specify a term and/or side condition that the result of execution or search must match in order to succeed. Return the resulting matches as a list of substitutions. In conjunction with it you can specify other 2 options that are optional: bound (the number of desired solutions) and depth (the maximum depth of the search).")
    public String pattern; @Parameter(names="--exit-code", description="Specify a matching pattern containing an integer variable which will be used as the exit status of krun.")
    public String exitCodePattern; @Parameter(names="--bound", description="The number of desired solutions for search.")
    public Integer bound; @Parameter(names="--depth", description="The maximum number of computational steps to execute or search the definition for.")
    public Integer depth; @Parameter(names="--graph", description="Displays the search graph generated by the last search.")
    public boolean graph; @Parameter(names="--output-file", description="Store output in the file instead of displaying it.")
    public String outputFile; @ParametersDelegate
    public Experimental experimental; }### Answer:
@Test public void testOn() { KRunOptions options = new KRunOptions(); new JCommander(options, "--statistics", "on", "--io", "on"); assertTrue(options.experimental.statistics); assertTrue(options.io()); }
@Test public void testOff() { KRunOptions options = new KRunOptions(); new JCommander(options, "--statistics", "off", "--io", "off"); assertFalse(options.experimental.statistics); assertFalse(options.io()); }