[petsc-dev] Introducing new "test harness" to PETSc

Barry Smith bsmith at mcs.anl.gov
Tue Jan 24 15:00:07 CST 2017


  I still don't understand. Can you point to a test and a subtest among the directories that have been converted so far. Or have no subtests been converted yet?


> On Jan 24, 2017, at 2:56 PM, Scott Kruger <kruger at txcorp.com> wrote:
> 
> 
> 
> On 1/24/17 9:57 AM, Barry Smith wrote:
>> 
>>  I don't really understand what a "sub-test" is, just any test in an example that is not first one? Aside from the suffix are "sub-tests" handled any different than the first test? I don't think they should be.
> 
> subtest has a one-to-one correspondence to an mpiexec call
> A test has a one-to-one correspondence to a shell script and make target.
> 
> For-loops that invoke mpiexec call multiple times => multiple sub-tests.
> There are also just multiple invocations by hand.
> 
> How to handle diffs?
> 
> Ultimately, it was decided to have one output file per shell script
> to avoid making things too confusing.
> 
> convertExamples.py handles most of these "reasonably" well.
> 
> Scott
> 
> 
>> 
>>> On Jan 24, 2017, at 10:10 AM, Scott Kruger <kruger at txcorp.com> wrote:
>>> 
>>> 	
>>> 
>>> On 1/23/17 11:23 PM, Tobin Isaac wrote:
>>>> How does tab completion work?  I've tried `make -f gmakefile sys<Tab>`
>>>> in zsh and bash but got nothing.
>>> 
>>> Good question.   I think this is handled by the bash-completion project
>>> which is normally an apt-get install or brew install, but has never
>>> worked on my mac for some reason.
>>> 
>>>> 
>>>> Thanks to everyone who worked on this, I just have two other
>>>> questions/requests:
>>>> 
>>>> - What’s the best way to update the test definitions after fiddling
>>>> with /*TEST*/ blocks?  It would be nice if gmakegentests.py would run
>>>> automatically when sources are newer than their tests.
>>> 
>>> I'll let Jed comment on this.  It's not trivial with the current method
>>> of specifying targets (gmake's lisp-like language), and even my
>>> first pedantic implementation (explicitly writing out targets for
>>> each test), I seem to recall it being brittle because of the global
>>> nature of the gmakegentest.py requiring the config.
>>> 
>>> My development workflow is generally:
>>> - edit source file
>>> - run gmakegentest.py
>>> - inspect shell script in $PETSC_ARCH/tests
>>> - run shell script by hand and edit as needed
>>> - test with makefile (either search or global) before commit
>>> 
>>> There is also config/testparse.py which can be run on an
>>> individual file if you just want to test the parsing:
>>> 
>>>> $PETSC_DIR/config/testparse.py -v 1 -t ex1.c
>>> ex1.c
>>>  runex1
>>>     filter: egrep "(PETSC ERROR)" | egrep "(main|CreateError|Error Created)" | cut -f1,2,3,4,5,6 -d" "
>>> 
>>>> 
>>>> - Is there a technical reason suffixes can only be specified at the
>>>> top level?  It would help with concision if subtest suffixes could
>>>> append to their parent suffixes.
>>> 
>>> Design decision on what should be a test an what should be a subtest.
>>> If you want your test to go to a different file, then it is now a test.
>>> Trying to do something more complicated would add
>>> unnecessary complexity.  If you do want some grouping, then it can
>>> be done with suffix itself; i.e., suffix does not have to be an
>>> integer, but can be an arbitrary string.
>>> 
>>> But perhaps I don't understand your use case.
>>> 
>>> Scott
>>> 
>>> 
>>> 
>>>> 
>>>> Cheers,
>>>> Toby
>>>> 
>>>> *From:* Jed Brown <mailto:jed at jedbrown.org>
>>>> *Sent:* ‎Tuesday‎, ‎17‎ ‎January‎, ‎2017 ‎20‎:‎55
>>>> *To:* Matthew Knepley <mailto:knepley at gmail.com>, Barry Smith
>>>> <mailto:bsmith at mcs.anl.gov>
>>>> *Cc:* petsc-dev <mailto:petsc-dev at mcs.anl.gov>
>>>> 
>>>> Matthew Knepley <knepley at gmail.com> writes:
>>>>> Gripes:
>>>>> 
>>>>> 1) How do I run an individual test run?
>>>> 
>>>> make -f gmakefile sys_tutorials-runex5
>>>> 
>>>> (tab completion works) or use a search that matches only that run.
>>>> 
>>>>> I use
>>>>> 
>>>>> make -f gmakefile test searchin=plex
>>>>> 
>>>>> to run plex tests, and I think
>>>>> 
>>>>> make -f gmakefile test searchin=plex*ex1
>>>> 
>>>> Due to make syntax, % is the internal string matcher.
>>>> 
>>>>> will work. However, how do I select ex1_2?
>>>> 
>>>> make -f gmakefile test search=plex%ex1_2
>>>> 
>>>>> 2) How do I replace the output which exists with the output of the
>>>>> current test run?
>>>>> 
>>>>> This is amazingly useful after changes.
>>>> 
>>>> I have this script ~/bin/diffupdate:
>>>> #!/bin/sh
>>>> 
>>>> args=
>>>> if [ "$1" = "-u" ]; then
>>>>   args="-u"
>>>>   shift
>>>> fi
>>>> new="$2"
>>>> ref="$1"
>>>> 
>>>> diff $args "$ref" "$new"
>>>> ret=$?
>>>> echo "Updating $new --> $ref"
>>>> mv "$new" "$ref"
>>>> exit $ret
>>>> 
>>>> 
>>>> Then I run
>>>> 
>>>> make -f gmakefile test search=plex% DIFF=diffupdate
>>>> 
>>>> It prints the diff and replaces the reference file (first argument) with
>>>> the second.
>>>> 
>>>>> 3) How do I give extra arguments with the make interface, rather than
>>>>> test_harness?
>>>> 
>>>> That is, run some modification of the test and still do the diff, but
>>>> don't change the reference output?  I have used PETSC_OPTIONS for that.
>>>> 
>>>> make .... PETSC_OPTIONS=-more_magic
>>>> 
>>>>> Once I have all the functionality of my Python stuff,  I will throw it
>>>> away.
>>>> 
>>> 
>>> --
>>> Tech-X Corporation               kruger at txcorp.com
>>> 5621 Arapahoe Ave, Suite A       Phone: (720) 974-1841
>>> Boulder, CO 80303                Fax:   (303) 448-7756
>> 
> 
> -- 
> Tech-X Corporation               kruger at txcorp.com
> 5621 Arapahoe Ave, Suite A       Phone: (720) 974-1841
> Boulder, CO 80303                Fax:   (303) 448-7756




More information about the petsc-dev mailing list