Files
mercury/tests/hard_coded/getopt_maybe_option.m
Peter Wang 064e9ddf1d Add regression test for maybe_int/maybe_string options.
tests/hard_coded/.gitignore:
tests/hard_coded/Mmakefile:
tests/hard_coded/getopt_maybe_option.exp:
tests/hard_coded/getopt_maybe_option.m:
    Add test case for preceding fix for maybe_string options.
2022-11-08 17:14:25 +11:00

76 lines
2.0 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
:- module getopt_maybe_option.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
%---------------------------------------------------------------------------%
:- implementation.
:- import_module getopt.
:- import_module list.
:- import_module maybe.
:- type option
---> i1
; i2
; s1
; s2.
:- type option_table == option_table(option).
:- pred short_option(character::in, option::out) is semidet.
short_option('i', i1).
:- pred long_option(string::in, option::out) is semidet.
long_option("i1", i1).
long_option("i2", i2).
long_option("s1", s1).
long_option("s2", s2).
:- pred option_default(option::out, option_data::out) is multi.
option_default(i1, maybe_int(no)).
option_default(i2, maybe_int(no)).
option_default(s1, maybe_string(no)).
option_default(s2, maybe_string(no)).
main(!IO) :-
OptionOps = option_ops_multi(short_option, long_option, option_default),
Args = [
"--no-i1",
"--i2", "123",
"--no-s1",
"--s2", "STR"
],
getopt.process_options(OptionOps, Args, _NonOptionArgs, OptionResult),
(
OptionResult = ok(OptionTable),
getopt.lookup_maybe_int_option(OptionTable, i1, I1),
getopt.lookup_maybe_int_option(OptionTable, i2, I2),
getopt.lookup_maybe_string_option(OptionTable, s1, S1),
getopt.lookup_maybe_string_option(OptionTable, s2, S2),
io.write_string("option i1: ", !IO),
io.print_line(I1, !IO),
io.write_string("option i2: ", !IO),
io.print_line(I2, !IO),
io.write_string("option s1: ", !IO),
io.print_line(S1, !IO),
io.write_string("option s2: ", !IO),
io.print_line(S2, !IO)
;
OptionResult = error(Error),
Msg = option_error_to_string(Error),
io.print_line(Msg, !IO)
).