anchor.diff:  -export([vnf_identity/1             %% identity transformation, no change of value
           ,vnf_lcase_ascii/1          %% lower case ascci, allow empty strings
           ,vnf_lcase_ascii_ne/1       %% lower case ascci non-empty
  +        ,vnf_integer/1              %% accept integers (convert if necessary) return ?nav on failure 
  +        ,vnf_float/1                %% accept floats (convert if necessary) return ?nav on failure 
           ]).
   
   %% ==================================================================
   %% index filter funs
   %% ==================================================================
   -export([iff_true/1
  +        ,iff_binterm_list/1         %% true for binstrings representing a list 
  +        ,iff_binterm_list_1/1       %% true for binstrings representing a list with one element (root object type) 
  +        ,iff_list_pattern/2         %% used in generated iff
  +        ]).
  +
  +-export([gen_iff_binterm_list_pattern/1      %% used to generated iff fun from key pattern
           ]).
   
   -export([preview/7      %% (IndexTable,ID,Type,SearchStrategies,SearchTerm,Limit,Iff) -> [{Strategy,Key,Value,Stu}]
  
positive.code: vnf_lcase_ascii_ne(<<>>) -> ?nav;
  vnf_lcase_ascii_ne(Text) -> vnf_lcase_ascii(Text).
  
  %% ===================================================================
  %% Index filter funs (decide if an index row candidate should be put)
  %% ===================================================================
  
  iff_true({_Key,_Value}) -> true.
  
  
  %% ===================================================================
  
negative.code:         fun teardown/1,
          {with, [
                fun string_operations/1
                , fun iff_functions/1
          ]}}.    
  
  iff_functions(_) ->
      ?Info("---TEST---~p:iff_functions~n", [?MODULE]),
      ?assertEqual(true, iff_list_pattern([1,2,3],[1,2,3])),
      ?assertEqual(true, iff_list_pattern([1,2,3],[1,'_',3])),
      ?assertEqual(true, iff_list_pattern([1,2,3],[1,2,'_'])),
      ?assertEqual(true, iff_list_pattern([1,2,3],['_','_','_'])),
      ?assertEqual(true, iff_list_pattern([1,2,3],[1,'*'])),
      ?assertEqual(true, iff_list_pattern([1,2,3,4,5],[1,'*'])),
      ?assertEqual(true, iff_list_pattern([1,2,3],['*'])),
      ?assertEqual(true, iff_list_pattern([1,2],['*'])),
      ?assertEqual(true, iff_list_pattern([1],['*'])),
      ?assertEqual(true, iff_list_pattern([],['*'])),
      ?assertEqual(true, iff_list_pattern([1,2,3],['_',2,3])),
      ?assertEqual(true, iff_list_pattern([1,2,3],['_','_',3])),
      ?assertEqual(false, iff_list_pattern([1,2,3],[1,'_'])),
      ?assertEqual(false, iff_list_pattern([2,3],[1,'_'])),
      ?assertEqual(false, iff_list_pattern([2,3],[2,'_','_'])),
      ?assertEqual(false, iff_list_pattern([1,2],['_'])).
  
  
  string_operations(_) ->
      ?Info("---TEST---~p:string_operations~n", [?MODULE]),
  