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

Scott Kruger kruger at txcorp.com
Tue Jan 24 10:10:10 CST 2017


	

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



More information about the petsc-dev mailing list