Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id q7AIVKnC028365 for ; Fri, 10 Aug 2012 20:31:21 +0200 Received: (qmail 26286 invoked by alias); 10 Aug 2012 18:31:15 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 10 Aug 2012 18:31:14 -0000 Received: from relay.uni-heidelberg.de (EHLO relay.uni-heidelberg.de) [129.206.100.212] by mx0.gmx.net (mx072) with SMTP; 10 Aug 2012 20:31:14 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id q7AITFw1006495 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 10 Aug 2012 20:29:15 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.8/8.13.1) with ESMTP id q7AEavLt008220; Fri, 10 Aug 2012 20:29:15 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 2687071 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Fri, 10 Aug 2012 20:29:15 +0200 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.13.8/8.13.1) with ESMTP id q7AITFHd007351 for ; Fri, 10 Aug 2012 20:29:15 +0200 Received: from mail-vb0-f49.google.com (mail-vb0-f49.google.com [209.85.212.49]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id q7AITAaB009617 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=FAIL) for ; Fri, 10 Aug 2012 20:29:14 +0200 Received: by vbbfo1 with SMTP id fo1so2524153vbb.22 for ; Fri, 10 Aug 2012 11:29:10 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.98.101 with SMTP id eh5mr2901055vdb.8.1344623350558; Fri, 10 Aug 2012 11:29:10 -0700 (PDT) Received: by 10.220.143.84 with HTTP; Fri, 10 Aug 2012 11:29:09 -0700 (PDT) References: <502502DA.7050009@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 X-Spam-Whitelist: Message-ID: Date: Fri, 10 Aug 2012 20:29:09 +0200 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Bruno Le Floch Subject: Re: Examples of l3doc & unit testing? To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: <502502DA.7050009@gmail.com> Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (BackTrace mail analyze); Detail=5D7Q89H36p4L00VTXC6D4q0N+AH0PUCnGL2vqOgpaBYL16oitsMrgDt/NQNpSCZFFjDOy 97xb7Zpf+wZnd5ZXNcvLDXR3Wg3wRjdQbwEMh8=V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 7118 Hi all, >> The important non-functional requirement is that it works >> >> - automatically >> - and reasonably fast >> >> Obviously you have to run TeX on the test files, but doing the >> comparison using TeX is not very time efficient. >> >> Now is it important that it is OS independent? Only if your goal is to >> have *many* people use the mechanism and so far that wasn't really part >> of the spec. I would add to your list - easy to install / understand => more people run the testsuite => it is easier for people outside the kernel team to add tests. In particular, many of the l3packages are drastically lacking tests. >> Perl is easily available both for unix and windows so effectively for >> developers the current system is not to difficult to install or use. >> The idea of using Lua is interesting, but as Joseph said, it is not that >> this would then work out of the box for most people either (not now >> anyway). >> >> Midterm, or if we think that this should be a package outside expl3 or >> 2e core development, it would perhaps be a good option though, but for >> now my feeling is it would mean putting resources onto something that >> doesn't actually bring any new value. Agreed. > > I think the big question is what is your goal here. My main goal > > initially (for 2e and later for l3 code) was to have a robust test > > suite that would enable us to identity issues upfront when making > > changes or additions. And that on the whole has been very successful > > in the past (provided as Joseph said, people wrote test files :-) > > I can relate to that. :) Writing tests is one of the major concerns of > the software industry. There's a lot of levels on how to test code, from > unit to integration, and approaches, from the bowels to the interface - > the Software Engineering wolves love these concepts. :P Of course, each > project has its own needs and requiments. For LaTeX3, IMHO, it's > critical to have every bit of code - from a lovely high level interface > to an obscure undocumented feature - exhaustively tested. We're working on it, and I think most of l3kernel is tested. Obviously not enough, as I keep finding obscure bugs. Latest one: the msg system sometimes x-expands several times in a row the same arguments. It'll get fixed soon. One thing that we don't have is detailed information about which functions are tested. I've added recently a "tested = " key to the macro environment in l3doc, but I've only used it in a couple of modules, and the key is entirely ignored. It may be good to extend this to other modules. > > The important non-functional requirement is that it works > > > > - automatically > > - and reasonably fast > > Agreed. Though a bunch of tests might require a reasonable amount of > time, each test should be as simple as possible, thus making its > checking relatively fast. My priority is to go for thorough tests which test all corner cases, rather than fast ones. I may be wrong doing that, though, since the tests are starting to take a rather long time to build. > > Now is it important that it is OS independent? Only if your goal is to > > have *many* people use the mechanism and so far that wasn't really > > part of the spec. > > I believe that OS independent test suites might help us catch things > that are OS-specific, or even detect possible issues with a certain > vendor implementation. Again, I speak as an outsider; I have no idea how > the code actually works. One of my main concerns, after looking at the plethora of Makefiles and make.bat is that there is a lot of redundancy there, which means that (1) changes don't propagate well (2) we occasionally forget to add a module to the Makefile of the parent directory, and it never gets tested, installed, unless someone is working on that module. So I guess that in the LaTeX3 case the discussion should be extended to the build system as a whole: the test system works well, as Frank says. It would be nice if we could get rid of Makefiles and make.bat, and replace them by light-weight configuration files. After all, the Makefiles are all very similar, so a top-level Lua script (or other) should be able to do most of the work. > > Perl is easily available both for unix and windows so effectively for > > developers the current system is not to difficult to install or use. > > The idea of using Lua is interesting, but as Joseph said, it is not > > that this would then work out of the box for most people either (not > > now anyway). > > I share the same opinion. :) One idea I see is to pack the test system > as a batteries-included file (.sh for Unix, .exe for Windows) packing > the interpreter together. I've seen this before with some languages - > Ruby, Python, Perl, Java - and it's doable. Of course, there's a > drawback of having the payload of the virtual machine / interpreter > bundled with the script, but at least it would be very easy to deploy. > Or we can write the system with another language - say C - and generate > a binary file. There is also the question of licenses if you bundle an external dependency with the code repo. I really don't know the details, perhaps Frank has some ideas? > I like the idea of using Lua. Enrico and I wrote a Lua script and the > deployment in TeX Live was very, very easy. It runs under texlua, which > is already available in the modern TeX distros. If the guy doesn't have > a TeX distro, why in the Earth he wants to run a LaTeX3 test suite? :P The guy might have an old TeX distro :). Probably you're right that all potential LaTeX3 testers probably have a reasonably up-to-date distro. However, how "up-to-date" does it have to be? Anyone knows when texlua was introduced? > > not sure they are alternatives, but there could be approaches that are > > worth incorporating into the current setup. > > One possibility is to have a test spec, so we can have a "generic" test > infrastructure which reads this spec and "knows" how to perform a > certain analysis. Can you elaborate? Currently we simply run some functions, and check the output. > I volunteer myself to help. :) You guys know that TeX is still a monster > to me, but at least I think I can help in other battle fronts. :) Yeay! One problem with building a build system in Lua is that Lua does not provide any function to list files in a directory. The only way in pure Lua is to do the equivalent of \immediate\write18{os-specific command}. There are external libraries which do that in an os-dependent way. Paulo, how hard would it be to ship the LuaFileSystem library with a hypothetical Lua-based test file? Regards, Bruno