fUnit 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/{LICENSE → COPYING} +21 -21
 - data/README +26 -2
 - data/Rakefile +97 -0
 - data/docs/html/classes/Funit.html +390 -0
 - data/docs/html/classes/Funit/Assertions.html +285 -0
 - data/docs/html/classes/Funit/Compiler.html +160 -0
 - data/docs/html/classes/Funit/Depend.html +441 -0
 - data/docs/html/classes/Funit/TestSuite.html +417 -0
 - data/docs/html/created.rid +1 -0
 - data/docs/html/files/COPYING.html +563 -0
 - data/docs/html/files/README.html +151 -0
 - data/docs/html/files/lib/funit/assertions_rb.html +101 -0
 - data/docs/html/files/lib/funit/fortran_deps_rb.html +107 -0
 - data/docs/html/files/lib/funit/functions_rb.html +101 -0
 - data/docs/html/files/lib/funit/test_suite_rb.html +101 -0
 - data/docs/html/files/lib/funit_rb.html +111 -0
 - data/docs/html/fr_class_index.html +31 -0
 - data/docs/html/fr_file_index.html +33 -0
 - data/docs/html/fr_method_index.html +59 -0
 - data/docs/html/index.html +24 -0
 - data/docs/html/rdoc-style.css +208 -0
 - data/examples/CFD/FluxFunctions.f90 +35 -0
 - data/examples/CFD/FluxFunctionsMT.f90 +336 -0
 - data/examples/CFD/FluxFunctionsMT.ftk +49 -0
 - data/examples/CFD/Gammas.f90 +8 -0
 - data/examples/CFD/GasModel.f90 +17 -0
 - data/examples/CFD/GasModelMT.f90 +173 -0
 - data/examples/CFD/GasModelMT.ftk +22 -0
 - data/examples/CFD/TestRunner +0 -0
 - data/examples/CFD/TestRunner.f90 +23 -0
 - data/examples/CFD/fluxfunctions.mod +45 -0
 - data/examples/CFD/gammas.mod +20 -0
 - data/examples/CFD/gasmodel.mod +30 -0
 - data/examples/CFD/gasmodelmt.mod +27 -0
 - data/examples/StopWatch/StopWatch.f90 +50 -0
 - data/examples/StopWatch/StopWatchMT.f90 +343 -0
 - data/examples/StopWatch/StopWatchMT.ftk +73 -0
 - data/examples/StopWatch/TestRunner +0 -0
 - data/examples/StopWatch/TestRunner.f90 +23 -0
 - data/examples/StopWatch/stopwatch.mod +34 -0
 - data/examples/StopWatch/stopwatchmt.mod +27 -0
 - data/lib/funit.rb +1 -6
 - data/lib/funit/fortran_deps.rb +112 -0
 - data/lib/funit/functions.rb +2 -5
 - data/tests/tc_fortran_deps.rb +2 -2
 - metadata +73 -22
 - data/INSTALL +0 -19
 - data/lib/fortran_deps.rb +0 -109
 
| 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            integer, dimension(8) :: dateAndTime1, dateAndTime2
         
     | 
| 
      
 2 
     | 
    
         
            +
            real :: seconds
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            beginSetup
         
     | 
| 
      
 5 
     | 
    
         
            +
              NotInitialized = .TRUE.
         
     | 
| 
      
 6 
     | 
    
         
            +
              last    = 0
         
     | 
| 
      
 7 
     | 
    
         
            +
              seconds = HUGE(0.0)
         
     | 
| 
      
 8 
     | 
    
         
            +
            endSetup
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            beginTest SystemDateAndTimeWorks
         
     | 
| 
      
 11 
     | 
    
         
            +
             call date_and_time(values=dateAndTime1)
         
     | 
| 
      
 12 
     | 
    
         
            +
             IsTrue( dateAndTime1(1) /= -huge(0) )
         
     | 
| 
      
 13 
     | 
    
         
            +
             IsTrue( size(dateAndTime1,1) == 8 )
         
     | 
| 
      
 14 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ! test secBetween
         
     | 
| 
      
 17 
     | 
    
         
            +
            beginTest OneMSecDifference
         
     | 
| 
      
 18 
     | 
    
         
            +
              dateAndTime1 = (/ 2000, 1, 1, 0, 0, 0, 0, 0 /)
         
     | 
| 
      
 19 
     | 
    
         
            +
              dateAndTime2 = (/ 2000, 1, 1, 0, 0, 0, 0, 1 /)
         
     | 
| 
      
 20 
     | 
    
         
            +
              seconds = SecBetween(dateAndTime1, dateAndTime2)
         
     | 
| 
      
 21 
     | 
    
         
            +
              IsRealEqual(seconds, 0.001)
         
     | 
| 
      
 22 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            beginTest MinuteRollover
         
     | 
| 
      
 25 
     | 
    
         
            +
              dateAndTime1 = (/ 2000, 1, 1, 0, 0, 0,59, 0 /)
         
     | 
| 
      
 26 
     | 
    
         
            +
              dateAndTime2 = (/ 2000, 1, 1, 0, 0, 1, 0, 0 /)
         
     | 
| 
      
 27 
     | 
    
         
            +
              seconds = SecBetween(dateAndTime1, dateAndTime2)
         
     | 
| 
      
 28 
     | 
    
         
            +
              IsRealEqual(seconds, 1.0)
         
     | 
| 
      
 29 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            ! test secSinceLast
         
     | 
| 
      
 32 
     | 
    
         
            +
            beginTest InitializationState
         
     | 
| 
      
 33 
     | 
    
         
            +
              IsTrue(notInitialized)
         
     | 
| 
      
 34 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 35 
     | 
    
         
            +
              IsFalse(notInitialized)
         
     | 
| 
      
 36 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 37 
     | 
    
         
            +
              IsFalse(notInitialized)
         
     | 
| 
      
 38 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            beginTest InitiallyReturnsZero
         
     | 
| 
      
 41 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 42 
     | 
    
         
            +
              IsRealEqual(seconds, 0.0)
         
     | 
| 
      
 43 
     | 
    
         
            +
              call timeDelay(seconds)
         
     | 
| 
      
 44 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 45 
     | 
    
         
            +
              IsTrue( seconds /= 0.0 )
         
     | 
| 
      
 46 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            subroutine timeDelay (sum)
         
     | 
| 
      
 49 
     | 
    
         
            +
              integer :: i
         
     | 
| 
      
 50 
     | 
    
         
            +
              real    :: sum
         
     | 
| 
      
 51 
     | 
    
         
            +
              do i = 1, 1000000
         
     | 
| 
      
 52 
     | 
    
         
            +
               sum = sum + i
         
     | 
| 
      
 53 
     | 
    
         
            +
              enddo
         
     | 
| 
      
 54 
     | 
    
         
            +
            end subroutine timeDelay
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            beginTest ComputesSeconds
         
     | 
| 
      
 57 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 58 
     | 
    
         
            +
              call timeDelay (seconds)
         
     | 
| 
      
 59 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 60 
     | 
    
         
            +
              IsTrue( seconds > 0.0 )
         
     | 
| 
      
 61 
     | 
    
         
            +
            endTest
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            beginTest ComputesSecondsSpecial
         
     | 
| 
      
 64 
     | 
    
         
            +
              real :: expectedSeconds
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 67 
     | 
    
         
            +
              dateAndTime1 = last
         
     | 
| 
      
 68 
     | 
    
         
            +
              call timeDelay (seconds)
         
     | 
| 
      
 69 
     | 
    
         
            +
              seconds = secSinceLast()
         
     | 
| 
      
 70 
     | 
    
         
            +
              dateAndTime2 = last
         
     | 
| 
      
 71 
     | 
    
         
            +
              expectedSeconds = secBetween(dateAndTime1,dateAndTime2)
         
     | 
| 
      
 72 
     | 
    
         
            +
              IsRealEqual(seconds, expectedSeconds)
         
     | 
| 
      
 73 
     | 
    
         
            +
            endTest
         
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ! TestRunner.f90 - runs Fortran mobility test suites
         
     | 
| 
      
 2 
     | 
    
         
            +
            !
         
     | 
| 
      
 3 
     | 
    
         
            +
            ! [Dynamically generated by funit Ruby script Sun Apr 09 01:07:09 EDT 2006.]
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            program TestRunner
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             use StopWatchMT
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             implicit none
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             integer :: numTests, numAsserts, numAssertsTested, numFailures
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             print *, ""
         
     | 
| 
      
 14 
     | 
    
         
            +
             print *, "StopWatch test suite:"
         
     | 
| 
      
 15 
     | 
    
         
            +
             call MTStopWatch( numTests, &
         
     | 
| 
      
 16 
     | 
    
         
            +
                    numAsserts, numAssertsTested, numFailures )
         
     | 
| 
      
 17 
     | 
    
         
            +
             print *, "Passed", numAssertsTested, "of", numAsserts, &
         
     | 
| 
      
 18 
     | 
    
         
            +
                      "possible asserts comprising", &
         
     | 
| 
      
 19 
     | 
    
         
            +
                       numTests-numFailures, "of", numTests, "tests." 
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             print *, ""
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            end program TestRunner
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            G95 module created on Sun Apr  9 01:07:09 2006 from ./StopWatch.f90
         
     | 
| 
      
 2 
     | 
    
         
            +
            If you edit this, you'll get what you deserve.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            (() () () () () () () () () () () () () () () () () () () () ())
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ()
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ()
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ()
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ()
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            (2 'secbetween' 'stopwatch' 1 ((PROCEDURE UNKNOWN MODULE-PROC DECL
         
     | 
| 
      
 15 
     | 
    
         
            +
            FUNCTION) (REAL 4 ()) 0 0 (3 NONE 4 NONE) () '' () ())
         
     | 
| 
      
 16 
     | 
    
         
            +
            5 'secsincelast' 'stopwatch' 1 ((PROCEDURE UNKNOWN MODULE-PROC DECL
         
     | 
| 
      
 17 
     | 
    
         
            +
            FUNCTION) (REAL 4 ()) 0 0 () () '' () ())
         
     | 
| 
      
 18 
     | 
    
         
            +
            6 'stopwatch' 'stopwatch' 1 ((MODULE UNKNOWN UNKNOWN UNKNOWN) (UNKNOWN 0
         
     | 
| 
      
 19 
     | 
    
         
            +
            ()) 0 0 () () '' () ())
         
     | 
| 
      
 20 
     | 
    
         
            +
            7 'notinitialized' 'stopwatch' 1 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN) (
         
     | 
| 
      
 21 
     | 
    
         
            +
            LOGICAL 4 ()) 0 0 () () '' () ())
         
     | 
| 
      
 22 
     | 
    
         
            +
            8 'last' 'stopwatch' 1 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN DIMENSION) (
         
     | 
| 
      
 23 
     | 
    
         
            +
            INTEGER 4 ()) 0 0 () (1 EXPLICIT (CONSTANT (INTEGER 4 ()) 0 '1') (
         
     | 
| 
      
 24 
     | 
    
         
            +
            CONSTANT (INTEGER 4 ()) 0 '8')) '' () ())
         
     | 
| 
      
 25 
     | 
    
         
            +
            3 'begindnt' '' 9 ((VARIABLE IN UNKNOWN UNKNOWN DIMENSION DUMMY) (
         
     | 
| 
      
 26 
     | 
    
         
            +
            INTEGER 4 ()) 0 0 () (1 EXPLICIT (CONSTANT (INTEGER 4 ()) 0 '1') (
         
     | 
| 
      
 27 
     | 
    
         
            +
            CONSTANT (INTEGER 4 ()) 0 '8')) '' () ())
         
     | 
| 
      
 28 
     | 
    
         
            +
            4 'enddnt' '' 9 ((VARIABLE IN UNKNOWN UNKNOWN DIMENSION DUMMY) (INTEGER
         
     | 
| 
      
 29 
     | 
    
         
            +
            4 ()) 0 0 () (1 EXPLICIT (CONSTANT (INTEGER 4 ()) 0 '1') (CONSTANT (
         
     | 
| 
      
 30 
     | 
    
         
            +
            INTEGER 4 ()) 0 '8')) '' () ())
         
     | 
| 
      
 31 
     | 
    
         
            +
            )
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ('last' 0 8 'notinitialized' 0 7 'stopwatch' 0 6 'secsincelast' 0 5
         
     | 
| 
      
 34 
     | 
    
         
            +
            'secbetween' 0 2)
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            G95 module created on Sun Apr  9 01:07:09 2006 from ./StopWatchMT.f90
         
     | 
| 
      
 2 
     | 
    
         
            +
            If you edit this, you'll get what you deserve.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            (() () () () () () () () () () () () () () () () () () () () ())
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ()
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ()
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ()
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ()
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            (2 'mtstopwatch' 'stopwatchmt' 1 ((PROCEDURE UNKNOWN MODULE-PROC DECL
         
     | 
| 
      
 15 
     | 
    
         
            +
            SUBROUTINE) (PROCEDURE 0 ()) 0 0 (3 NONE 4 NONE 5 NONE 6 NONE) () '' ()
         
     | 
| 
      
 16 
     | 
    
         
            +
            ())
         
     | 
| 
      
 17 
     | 
    
         
            +
            3 'ntests' '' 7 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN DUMMY) (INTEGER 4 ())
         
     | 
| 
      
 18 
     | 
    
         
            +
            0 0 () () '' () ())
         
     | 
| 
      
 19 
     | 
    
         
            +
            4 'nasserts' '' 7 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN DUMMY) (INTEGER 4 ())
         
     | 
| 
      
 20 
     | 
    
         
            +
            0 0 () () '' () ())
         
     | 
| 
      
 21 
     | 
    
         
            +
            6 'nfailures' '' 7 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN DUMMY) (INTEGER 4
         
     | 
| 
      
 22 
     | 
    
         
            +
            ()) 0 0 () () '' () ())
         
     | 
| 
      
 23 
     | 
    
         
            +
            5 'nassertstested' '' 7 ((VARIABLE UNKNOWN UNKNOWN UNKNOWN DUMMY) (
         
     | 
| 
      
 24 
     | 
    
         
            +
            INTEGER 4 ()) 0 0 () () '' () ())
         
     | 
| 
      
 25 
     | 
    
         
            +
            )
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ('mtstopwatch' 0 2)
         
     | 
    
        data/lib/funit.rb
    CHANGED
    
    | 
         @@ -1,17 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'funit/functions'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'funit/fortran_deps'
         
     | 
| 
       2 
3 
     | 
    
         
             
            require 'funit/assertions'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'funit/test_suite'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module Funit
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
7 
     | 
    
         
             
              def runAllFtks
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
8 
     | 
    
         
             
                Compiler.new # a test for compiler env set (remove this later)
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
9 
     | 
    
         
             
                writeTestRunner(testSuites = parseCommandLine)
         
     | 
| 
       12 
10 
     | 
    
         | 
| 
       13 
11 
     | 
    
         
             
                # convert each *MT.ftk file into a pure Fortran9x file:
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
12 
     | 
    
         
             
                testSuites.each do |testSuite|
         
     | 
| 
       16 
13 
     | 
    
         
             
                  testSuiteF90 = TestSuite.new(testSuite)
         
     | 
| 
       17 
14 
     | 
    
         
             
                end
         
     | 
| 
         @@ -19,7 +16,5 @@ module Funit 
     | 
|
| 
       19 
16 
     | 
    
         
             
                compileTests testSuites
         
     | 
| 
       20 
17 
     | 
    
         | 
| 
       21 
18 
     | 
    
         
             
                raise "Failed to execute TestRunner" unless system("./TestRunner")
         
     | 
| 
       22 
     | 
    
         
            -
             
         
     | 
| 
       23 
19 
     | 
    
         
             
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
20 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,112 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This scripts finds dependencies for f90 code
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            raise "Need Ruby version >= 1.8, current using #{VERSION}" unless String.instance_methods.include? "match"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Funit
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              class Depend
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :file_dependencies, :source_files
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def initialize( searchPath = %w[ ../lib . ] )
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @parsed = Array.new
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @hash = build_hash_of_modules_in_files_within searchPath
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @file_dependencies = Hash.new
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @source_files = Array.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def modules_used_in( file )
         
     | 
| 
      
 19 
     | 
    
         
            +
                  modules = IO.readlines( file ).map do |line|
         
     | 
| 
      
 20 
     | 
    
         
            +
                    $1.downcase if line.match( /^\s*use\s+(\w+)/i )
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end.uniq.compact
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def modules_defined_in( file )
         
     | 
| 
      
 25 
     | 
    
         
            +
                  modules = IO.readlines( file ).map do |line| 
         
     | 
| 
      
 26 
     | 
    
         
            +
                    $1.downcase if line.match( /^\s*module\s+(\w+)/i )
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end.uniq.compact
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def build_dictionary_of_modules_in( files )
         
     | 
| 
      
 31 
     | 
    
         
            +
                  file_containing_module = Hash.new
         
     | 
| 
      
 32 
     | 
    
         
            +
                  files.each do |file|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    modules_defined_in( file ).each{ |mod| file_containing_module[mod]=file }
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  file_containing_module
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                def fortran_files_within( search_path = %w[ ../lib . ] )
         
     | 
| 
      
 39 
     | 
    
         
            +
                  source = search_path.map{ |path| Dir[path+"/*.[fF]90"] }
         
     | 
| 
      
 40 
     | 
    
         
            +
                  source.flatten!.uniq!
         
     | 
| 
      
 41 
     | 
    
         
            +
                  source.delete_if{ |file| File.lstat(file).symlink? }
         
     | 
| 
      
 42 
     | 
    
         
            +
                  source.delete_if{ |file| file.match(/lmpi_module_template.F90/) }
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def build_hash_of_modules_in_files_within( searchPath = %w[../lib .] )
         
     | 
| 
      
 46 
     | 
    
         
            +
                  build_dictionary_of_modules_in( fortran_files_within( searchPath ) )
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def makefile_dependency_line( source )
         
     | 
| 
      
 50 
     | 
    
         
            +
                  realSource = source.sub(/PHYSICS_DUMMY/,'PHYSICS_MODULES')# What's this?
         
     | 
| 
      
 51 
     | 
    
         
            +
                  sourceNoPath = File.basename source
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @source_files.push sourceNoPath.gsub(%r|^.*/|,'')
         
     | 
| 
      
 53 
     | 
    
         
            +
                  output = ''
         
     | 
| 
      
 54 
     | 
    
         
            +
                  if (File.expand_path(source) != File.expand_path(sourceNoPath))
         
     | 
| 
      
 55 
     | 
    
         
            +
                    output += sourceNoPath+ ": " + realSource + "\n"
         
     | 
| 
      
 56 
     | 
    
         
            +
                    output += "\tln -sf "+realSource+" .\n"
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  output += source.gsub(/\.(f|F)90$/, ".o").gsub(%r|^.*/|,"" ) +
         
     | 
| 
      
 59 
     | 
    
         
            +
                            ": " + source.gsub(%r|^.*/|,"" ) 
         
     | 
| 
      
 60 
     | 
    
         
            +
                  modules_used_in( source ).each do |use|
         
     | 
| 
      
 61 
     | 
    
         
            +
                    unless @hash[use]
         
     | 
| 
      
 62 
     | 
    
         
            +
                      unless ( use=~/f90_unix/ || use=~/nas_system/ )
         
     | 
| 
      
 63 
     | 
    
         
            +
                        $stderr.puts "Warning: unable to locate module #{use} used in #{source}." if $DEBUG
         
     | 
| 
      
 64 
     | 
    
         
            +
                      end
         
     | 
| 
      
 65 
     | 
    
         
            +
                      next
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    output = output + " \\\n " +
         
     | 
| 
      
 68 
     | 
    
         
            +
                             @hash[use].gsub(/\.(f|F)90$/, ".o").gsub(%r|^.*/|,"" )
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                  output+"\n"
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                def dependencies( start )
         
     | 
| 
      
 74 
     | 
    
         
            +
                  modules = modules_used_in( start )
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @parsed = @parsed || [start]
         
     | 
| 
      
 76 
     | 
    
         
            +
                  newSourceFiles = modules.collect{ |mod| @hash[mod] }.compact
         
     | 
| 
      
 77 
     | 
    
         
            +
                  makefile_dependency_line(start) +
         
     | 
| 
      
 78 
     | 
    
         
            +
                  newSourceFiles.collect do |file|
         
     | 
| 
      
 79 
     | 
    
         
            +
                    next if @parsed.include?(file)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @parsed.push file
         
     | 
| 
      
 81 
     | 
    
         
            +
                    dependencies file
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end.to_s
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                def source_file_dependencies( head_f90 )
         
     | 
| 
      
 86 
     | 
    
         
            +
                  modules_head_uses = modules_used_in( head_f90 )
         
     | 
| 
      
 87 
     | 
    
         
            +
                  required_f90s = modules_head_uses.map{ |mod| @hash[mod] }.compact
         
     | 
| 
      
 88 
     | 
    
         
            +
                  @file_dependencies[head_f90] = required_f90s
         
     | 
| 
      
 89 
     | 
    
         
            +
                  required_f90s.each do |required_f90|
         
     | 
| 
      
 90 
     | 
    
         
            +
                    next if @parsed.include?(required_f90)
         
     | 
| 
      
 91 
     | 
    
         
            +
                    source_file_dependencies( required_f90 )
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  @parsed.push head_f90
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                def required_source_files( head_f90 )
         
     | 
| 
      
 97 
     | 
    
         
            +
                  @parsed.clear
         
     | 
| 
      
 98 
     | 
    
         
            +
                  source_file_dependencies( head_f90 )
         
     | 
| 
      
 99 
     | 
    
         
            +
                  sources = Array.new
         
     | 
| 
      
 100 
     | 
    
         
            +
                  while !@file_dependencies.empty? do
         
     | 
| 
      
 101 
     | 
    
         
            +
                    no_dependents_pair = @file_dependencies.detect{ |h,d| d == [] }
         
     | 
| 
      
 102 
     | 
    
         
            +
                    no_dependents = no_dependents_pair.first
         
     | 
| 
      
 103 
     | 
    
         
            +
                    sources.push no_dependents
         
     | 
| 
      
 104 
     | 
    
         
            +
                    @file_dependencies.delete(no_dependents){ |el| "#{el} not found" }
         
     | 
| 
      
 105 
     | 
    
         
            +
                    @file_dependencies.each_value{ |deps| deps.delete(no_dependents) }
         
     | 
| 
      
 106 
     | 
    
         
            +
                  end
         
     | 
| 
      
 107 
     | 
    
         
            +
                  sources
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
              end # class
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            end # module
         
     | 
    
        data/lib/funit/functions.rb
    CHANGED
    
    | 
         @@ -17,7 +17,7 @@ Fortran compiler environment variable 'F9X' not set: 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  raise(errorMessage) unless @name = name
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end # class
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
              def requestedModules(moduleNames)
         
     | 
| 
       23 
23 
     | 
    
         
             
                if (moduleNames.empty?)
         
     | 
| 
         @@ -104,8 +104,6 @@ program TestRunner 
     | 
|
| 
       104 
104 
     | 
    
         
             
              end
         
     | 
| 
       105 
105 
     | 
    
         | 
| 
       106 
106 
     | 
    
         
             
              def compileTests testSuites
         
     | 
| 
       107 
     | 
    
         
            -
                require 'fortran_deps'
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
107 
     | 
    
         
             
                puts "computing dependencies"
         
     | 
| 
       110 
108 
     | 
    
         
             
                dependencies = Depend.new(['.', '../LibF90', '../PHYSICS_DEPS'])
         
     | 
| 
       111 
109 
     | 
    
         
             
                puts "locating associated source files and sorting for compilation"
         
     | 
| 
         @@ -114,11 +112,10 @@ program TestRunner 
     | 
|
| 
       114 
112 
     | 
    
         
             
                puts compile = "#{ENV['F9X']} #{ENV['F9X_LDFLAGS']} -o TestRunner \\\n  #{requiredSources.join(" \\\n  ")}"
         
     | 
| 
       115 
113 
     | 
    
         | 
| 
       116 
114 
     | 
    
         
             
                raise "Compile failed." unless system(compile)
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
115 
     | 
    
         
             
              end
         
     | 
| 
       119 
116 
     | 
    
         | 
| 
       120 
117 
     | 
    
         
             
              # set some regular expressions:
         
     | 
| 
       121 
118 
     | 
    
         
             
              $keyword = /(begin|end)(Setup|Teardown|Test)|Is(RealEqual|Equal|False|True|EqualWithin)\(.*\)/i
         
     | 
| 
       122 
119 
     | 
    
         
             
              $commentLine = /^\s*!/
         
     | 
| 
       123 
120 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
            end # module 
     | 
| 
      
 121 
     | 
    
         
            +
            end # module
         
     | 
    
        data/tests/tc_fortran_deps.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            $:.unshift File.join( File.dirname(__FILE__), '..', 'lib' )
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'test/unit'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'fortran_deps'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'funit/fortran_deps'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'fileutils'
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            class TestFortranDeps < Test::Unit::TestCase
         
     | 
| 
         @@ -30,7 +30,7 @@ class TestFortranDeps < Test::Unit::TestCase 
     | 
|
| 
       30 
30 
     | 
    
         
             
              File.open('externalUse.f90','w') do |f|
         
     | 
| 
       31 
31 
     | 
    
         
             
               f.puts "program user\nuse cantFindModule\nend program"
         
     | 
| 
       32 
32 
     | 
    
         
             
              end
         
     | 
| 
       33 
     | 
    
         
            -
              @dep = Depend.new
         
     | 
| 
      
 33 
     | 
    
         
            +
              @dep = Funit::Depend.new
         
     | 
| 
       34 
34 
     | 
    
         
             
             end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
             def test_finds_which_modules_a_source_file_uses
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -3,15 +3,18 @@ rubygems_version: 0.8.11 
     | 
|
| 
       3 
3 
     | 
    
         
             
            specification_version: 1
         
     | 
| 
       4 
4 
     | 
    
         
             
            name: fUnit
         
     | 
| 
       5 
5 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       6 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
       7 
     | 
    
         
            -
            date: 2006-04- 
     | 
| 
      
 6 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2006-04-09 00:00:00 -04:00
         
     | 
| 
       8 
8 
     | 
    
         
             
            summary: A Fortran Unit Testing Framework
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       10 
10 
     | 
    
         
             
              - lib
         
     | 
| 
       11 
11 
     | 
    
         
             
            email: funit-support@rubyforge.org
         
     | 
| 
       12 
12 
     | 
    
         
             
            homepage: http://funit.rubyforge.org/
         
     | 
| 
       13 
13 
     | 
    
         
             
            rubyforge_project: funit
         
     | 
| 
       14 
     | 
    
         
            -
            description: 
         
     | 
| 
      
 14 
     | 
    
         
            +
            description: "FUnit is a unit testing framework for Fortran modules. Unit tests are written in
         
     | 
| 
      
 15 
     | 
    
         
            +
              Fortran fragments that use a small set of testing-specific extensions.  FUnit
         
     | 
| 
      
 16 
     | 
    
         
            +
              transforms these fragments into valid Fortran code and compiles, links, and runs
         
     | 
| 
      
 17 
     | 
    
         
            +
              them against the module under test."
         
     | 
| 
       15 
18 
     | 
    
         
             
            autorequire: funit
         
     | 
| 
       16 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       17 
20 
     | 
    
         
             
            bindir: bin
         
     | 
| 
         @@ -29,23 +32,37 @@ cert_chain: 
     | 
|
| 
       29 
32 
     | 
    
         
             
            authors: 
         
     | 
| 
       30 
33 
     | 
    
         
             
              - fUnit Team
         
     | 
| 
       31 
34 
     | 
    
         
             
            files: 
         
     | 
| 
      
 35 
     | 
    
         
            +
              - COPYING
         
     | 
| 
      
 36 
     | 
    
         
            +
              - Rakefile
         
     | 
| 
      
 37 
     | 
    
         
            +
              - README
         
     | 
| 
       32 
38 
     | 
    
         
             
              - bin/funit
         
     | 
| 
       33 
     | 
    
         
            -
              - tests/tc_compile.rb
         
     | 
| 
       34 
     | 
    
         
            -
              - tests/tc_fortran_deps.rb
         
     | 
| 
       35 
     | 
    
         
            -
              - tests/tc_funit.rb
         
     | 
| 
       36 
     | 
    
         
            -
              - tests/tc_test_suite.rb
         
     | 
| 
       37 
     | 
    
         
            -
              - tests/ts_funit.rb
         
     | 
| 
       38 
     | 
    
         
            -
              - lib/clean
         
     | 
| 
       39 
     | 
    
         
            -
              - lib/fortran_deps.rb
         
     | 
| 
       40 
     | 
    
         
            -
              - lib/funit
         
     | 
| 
       41 
     | 
    
         
            -
              - lib/funit.rb
         
     | 
| 
       42 
     | 
    
         
            -
              - lib/mklinks
         
     | 
| 
       43 
     | 
    
         
            -
              - lib/funit/assertions.rb
         
     | 
| 
       44 
     | 
    
         
            -
              - lib/funit/functions.rb
         
     | 
| 
       45 
     | 
    
         
            -
              - lib/funit/test_suite.rb
         
     | 
| 
       46 
39 
     | 
    
         
             
              - docs/HISTORY
         
     | 
| 
      
 40 
     | 
    
         
            +
              - docs/html
         
     | 
| 
       47 
41 
     | 
    
         
             
              - docs/spiel
         
     | 
| 
       48 
42 
     | 
    
         
             
              - docs/why
         
     | 
| 
      
 43 
     | 
    
         
            +
              - docs/html/classes
         
     | 
| 
      
 44 
     | 
    
         
            +
              - docs/html/created.rid
         
     | 
| 
      
 45 
     | 
    
         
            +
              - docs/html/files
         
     | 
| 
      
 46 
     | 
    
         
            +
              - docs/html/fr_class_index.html
         
     | 
| 
      
 47 
     | 
    
         
            +
              - docs/html/fr_file_index.html
         
     | 
| 
      
 48 
     | 
    
         
            +
              - docs/html/fr_method_index.html
         
     | 
| 
      
 49 
     | 
    
         
            +
              - docs/html/index.html
         
     | 
| 
      
 50 
     | 
    
         
            +
              - docs/html/rdoc-style.css
         
     | 
| 
      
 51 
     | 
    
         
            +
              - docs/html/classes/Funit
         
     | 
| 
      
 52 
     | 
    
         
            +
              - docs/html/classes/Funit.html
         
     | 
| 
      
 53 
     | 
    
         
            +
              - docs/html/classes/Funit/Assertions.html
         
     | 
| 
      
 54 
     | 
    
         
            +
              - docs/html/classes/Funit/Compiler.html
         
     | 
| 
      
 55 
     | 
    
         
            +
              - docs/html/classes/Funit/Depend.html
         
     | 
| 
      
 56 
     | 
    
         
            +
              - docs/html/classes/Funit/TestSuite.html
         
     | 
| 
      
 57 
     | 
    
         
            +
              - docs/html/files/COPYING.html
         
     | 
| 
      
 58 
     | 
    
         
            +
              - docs/html/files/lib
         
     | 
| 
      
 59 
     | 
    
         
            +
              - docs/html/files/README.html
         
     | 
| 
      
 60 
     | 
    
         
            +
              - docs/html/files/lib/funit
         
     | 
| 
      
 61 
     | 
    
         
            +
              - docs/html/files/lib/funit_rb.html
         
     | 
| 
      
 62 
     | 
    
         
            +
              - docs/html/files/lib/funit/assertions_rb.html
         
     | 
| 
      
 63 
     | 
    
         
            +
              - docs/html/files/lib/funit/fortran_deps_rb.html
         
     | 
| 
      
 64 
     | 
    
         
            +
              - docs/html/files/lib/funit/functions_rb.html
         
     | 
| 
      
 65 
     | 
    
         
            +
              - docs/html/files/lib/funit/test_suite_rb.html
         
     | 
| 
       49 
66 
     | 
    
         
             
              - docs/spiel/slides.tex
         
     | 
| 
       50 
67 
     | 
    
         
             
              - docs/why/F90testRun
         
     | 
| 
       51 
68 
     | 
    
         
             
              - docs/why/F90testRun.ps
         
     | 
| 
         @@ -68,16 +85,50 @@ files: 
     | 
|
| 
       68 
85 
     | 
    
         
             
              - docs/why/portrait
         
     | 
| 
       69 
86 
     | 
    
         
             
              - docs/why/TestRunner.f90
         
     | 
| 
       70 
87 
     | 
    
         
             
              - docs/why/TestRunner.f90.ps
         
     | 
| 
       71 
     | 
    
         
            -
              -  
     | 
| 
       72 
     | 
    
         
            -
              -  
     | 
| 
       73 
     | 
    
         
            -
              -  
     | 
| 
      
 88 
     | 
    
         
            +
              - examples/CFD
         
     | 
| 
      
 89 
     | 
    
         
            +
              - examples/StopWatch
         
     | 
| 
      
 90 
     | 
    
         
            +
              - examples/CFD/FluxFunctions.f90
         
     | 
| 
      
 91 
     | 
    
         
            +
              - examples/CFD/fluxfunctions.mod
         
     | 
| 
      
 92 
     | 
    
         
            +
              - examples/CFD/FluxFunctionsMT.f90
         
     | 
| 
      
 93 
     | 
    
         
            +
              - examples/CFD/FluxFunctionsMT.ftk
         
     | 
| 
      
 94 
     | 
    
         
            +
              - examples/CFD/Gammas.f90
         
     | 
| 
      
 95 
     | 
    
         
            +
              - examples/CFD/gammas.mod
         
     | 
| 
      
 96 
     | 
    
         
            +
              - examples/CFD/GasModel.f90
         
     | 
| 
      
 97 
     | 
    
         
            +
              - examples/CFD/gasmodel.mod
         
     | 
| 
      
 98 
     | 
    
         
            +
              - examples/CFD/GasModelMT.f90
         
     | 
| 
      
 99 
     | 
    
         
            +
              - examples/CFD/GasModelMT.ftk
         
     | 
| 
      
 100 
     | 
    
         
            +
              - examples/CFD/gasmodelmt.mod
         
     | 
| 
      
 101 
     | 
    
         
            +
              - examples/CFD/TestRunner
         
     | 
| 
      
 102 
     | 
    
         
            +
              - examples/CFD/TestRunner.f90
         
     | 
| 
      
 103 
     | 
    
         
            +
              - examples/StopWatch/StopWatch.f90
         
     | 
| 
      
 104 
     | 
    
         
            +
              - examples/StopWatch/stopwatch.mod
         
     | 
| 
      
 105 
     | 
    
         
            +
              - examples/StopWatch/StopWatchMT.f90
         
     | 
| 
      
 106 
     | 
    
         
            +
              - examples/StopWatch/StopWatchMT.ftk
         
     | 
| 
      
 107 
     | 
    
         
            +
              - examples/StopWatch/stopwatchmt.mod
         
     | 
| 
      
 108 
     | 
    
         
            +
              - examples/StopWatch/TestRunner
         
     | 
| 
      
 109 
     | 
    
         
            +
              - examples/StopWatch/TestRunner.f90
         
     | 
| 
      
 110 
     | 
    
         
            +
              - lib/clean
         
     | 
| 
      
 111 
     | 
    
         
            +
              - lib/funit
         
     | 
| 
      
 112 
     | 
    
         
            +
              - lib/funit.rb
         
     | 
| 
      
 113 
     | 
    
         
            +
              - lib/mklinks
         
     | 
| 
      
 114 
     | 
    
         
            +
              - lib/funit/assertions.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
              - lib/funit/fortran_deps.rb
         
     | 
| 
      
 116 
     | 
    
         
            +
              - lib/funit/functions.rb
         
     | 
| 
      
 117 
     | 
    
         
            +
              - lib/funit/test_suite.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
              - tests/tc_compile.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
              - tests/tc_fortran_deps.rb
         
     | 
| 
      
 120 
     | 
    
         
            +
              - tests/tc_funit.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
              - tests/tc_test_suite.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
              - tests/ts_funit.rb
         
     | 
| 
       74 
123 
     | 
    
         
             
            test_files: 
         
     | 
| 
       75 
124 
     | 
    
         
             
              - tests/ts_funit.rb
         
     | 
| 
       76 
     | 
    
         
            -
            rdoc_options:  
     | 
| 
      
 125 
     | 
    
         
            +
            rdoc_options: 
         
     | 
| 
      
 126 
     | 
    
         
            +
              - "--inline-source"
         
     | 
| 
      
 127 
     | 
    
         
            +
              - "--main"
         
     | 
| 
      
 128 
     | 
    
         
            +
              - README
         
     | 
| 
       77 
129 
     | 
    
         
             
            extra_rdoc_files: 
         
     | 
| 
       78 
130 
     | 
    
         
             
              - README
         
     | 
| 
       79 
     | 
    
         
            -
              -  
     | 
| 
       80 
     | 
    
         
            -
              - INSTALL
         
     | 
| 
      
 131 
     | 
    
         
            +
              - COPYING
         
     | 
| 
       81 
132 
     | 
    
         
             
            executables: 
         
     | 
| 
       82 
133 
     | 
    
         
             
              - funit
         
     | 
| 
       83 
134 
     | 
    
         
             
            extensions: []
         
     |