anchor.diff:  
   -spec cfg_is_greater_than_equal(Key::atom(), Min::number() | atom()) -> boolean().
   cfg_is_greater_than_equal(_Key, failed) -> false; %% stop endless loop
  -cfg_is_greater_than_equal(Key, Min) when erlang:is_atom(Min) ->
  -    cfg_is_greater_than_equal(Key, read(Min));
  +cfg_is_greater_than_equal(Key, Min0) when erlang:is_atom(Min0) ->
  +    Min = read(Min0),
  +    %% stop endless loop (do not recurse!)
  +    IsGreaterThanEqual = fun(Value) -> (Value >= Min) end,
  +    Msg = io_lib:format("is not larger than or equal to ~p", [Min]),
  +    cfg_test_and_error(Key, IsGreaterThanEqual, Msg);
   cfg_is_greater_than_equal(Key, Min) ->
       IsGreaterThanEqual = fun(Value) -> (Value >= Min) end,
       Msg = io_lib:format("is not larger than or equal to ~p", [Min]),
  
positive.code: 
  -spec cfg_is_less_than_equal(Key::atom(), Max::number() | atom()) -> boolean().
  cfg_is_less_than_equal(_Key, failed) -> false; %% stop endless loop
  cfg_is_less_than_equal(Key, Max) when erlang:is_atom(Max) ->
      cfg_is_less_than_equal(Key, read(Max));
  cfg_is_less_than_equal(Key, Max) ->
      IsLessThanEqual = fun(Value) -> (Value =< Max) end,
      Msg = io_lib:format("is not less than or equal to ~p", [Max]),
  
negative.code: 
  -spec cfg_is_less_than(Key::atom(), Max::number() | atom()) -> boolean().
  cfg_is_less_than(_Key, failed) -> false; %% stop endless loop
  cfg_is_less_than(Key, Max0) when erlang:is_atom(Max0) ->
      Max = read(Max0),
      %% stop endless loop (do not recurse!)
      IsLessThan = fun(Value) -> (Value < Max) end,
      Msg = io_lib:format("is not less than ~p", [Max]),
      cfg_test_and_error(Key, IsLessThan, Msg);
  cfg_is_less_than(Key, Max) ->
      IsLessThan = fun(Value) -> (Value < Max) end,
      Msg = io_lib:format("is not less than ~p", [Max]),
  