Print

Print


Hello Frank,

thank you for your time.

> I took your package pushed it into my environment and first of all tried to
> run our test suite against it. Of course that ended up in a huge number of
> failures.

I'm sorry about that. I'm couldn't get "make check" to work (on a
clean svn download), and I'm investigating that (I probably misplaced
some file, or permissions).

So my testing is a bit klunky right now.

>  - first discuss it
>  - initially provide compatibly code
>  - and only at a later stage retire something

Right. I should have double-checked: I lost quite a few variants along
the way as well, and unfortunately, I was working from a version of
l3seq which was a few weeks old.

> there are a number of advantages to this most importantly for me that we can
> run the test suite against the new code. So far I added

After a manual grep (more or less), I think we need to add the following.

%
% \section{Compatibility}
%
% Getting elements from the left (top of the stack).
%    \begin{macrocode}
\cs_generate_variant:Nn \seq_get_left:NN {cN}
\cs_new_eq:NN \seq_get:cN \seq_get_left:cN
\cs_new_eq:NN \seq_top:NN \seq_get_left:NN
\cs_new_eq:NN \seq_top:cN \seq_get_left:cN
%    \end{macrocode}
%
%    \begin{macrocode}
\cs_new:Npn \seq_pop:NN #1#2 {
   \seq_pop_left_with:Nn #1 {\tl_set:Nn #2}
}
\cs_new:Npn \seq_gpop:NN #1#2 {
   \seq_gpop_left_with:Nn #1 {\tl_set:Nn #2}
}
\cs_generate_variant:Nn \seq_pop:NN {cN}
\cs_generate_variant:Nn \seq_gpop:NN {cN}
%    \end{macrocode}
%
% Mapping functions
%    \begin{macrocode}
\cs_new_eq:NN \seq_map_break: \seq_break:
\cs_new_eq:NN \seq_map_break:n \seq_break:n
\cs_new_eq:NN \seq_map_function:NN \seq_map_function:Nn
\cs_new_eq:NN \seq_map_function:cN \seq_map_function:cn
%    \end{macrocode}
%
% Auxiliary functions (needed?).
%    \begin{macrocode}
\cs_new:Npn \seq_remove_duplicates_aux:NN {
  \seq_remove_duplicates_aux:NNN \seq_if_in:NnF}
\cs_new:Npn \seq_remove_duplicates_aux:n {
  \seq_remove_duplicates_aux:Nn \seq_if_in:NnF}
\cs_new_protected:Npn \seq_put_aux:Nnn #1 #2 #3 {
  \tl_set:Nx #1 {\exp_not:n {#2} \exp_not:V {#1} \exp_not:n {#3}}}
\cs_new_protected:Npn \seq_pop_aux:nnNN #1 #2 #3 #4 {
  \seq_pop_left_aux:Nnn #3 {#1} {#2 #4}}
%    \end{macrocode}
%
% Function that seems used in "l3file", but defined nowhere in
% the current implementation??
%    \begin{macrocode}
\cs_new_eq:NN \seq_remove_all_in:Nn \seq_remove_element:Nn
%    \end{macrocode}
%
% Removed because I can't figure out any sensible way to support
% those internal functions:
% \cs{seq_map_variable_aux:Nnw},
% \cs{seq_pop_aux:w},
% \cs{seq_elt:w},
% \cs{seq_elt_end:},
% \cs{seq_get_aux:w},
% \cs{seq_put_aux:w}.

Hopefully that's ok. Of course, if other modules happen to try and
define their own seq functions using \seq_elt:w, then that's not going
to work.

> but that is not enough there are still several areas where the test files
> for the seq module fail ... but on the whole the implementation looks
> already good.

If possible, could you send me a log of those tests that fail? It
would help me find all the missing functions.

> So I propose we first make your implementation support the current
> interfaces (even if only by compatibility code) so that the files m3seq00... are
> properly processed and in parallel discuss its individual merrits
> and preferably we should at the same time write some additional tests for
> any functionality that has changed or is additionally there (Joseph will tell
> you that I'm pestering him about writing test cases in parallel wil code, but it
> really helps to nail down interfaces and ensure that they aren't violated
> later)

As I said, I can't run "make check" right now. Is it possible to run
single tests "by hand"?

Then there is the issue of l3candidates, which I have not
re-programmed yet, as well as the quicksort defined in l3prg.dtx

Thanks again for your comments,
-- Bruno