mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-11-04 13:34:00 +01:00 
			
		
		
		
	- added missing unittest for c - added further function lists for ada, fortran, fortran77, haskell from previous PR of MAPJe71_functionlist_update3 - added simple rust function list - unittest files from the internet probably no complex ones - added to installer Fix #9698, close #3393, close #9727
		
			
				
	
	
		
			153 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
! Fortran Time Module
 | 
						|
!
 | 
						|
!  To Use:
 | 
						|
!    1) declare a ClockTime variable: type (ClockTime) :: Timer 
 | 
						|
!    2) Set a beginning Time: call set(Timer)
 | 
						|
!    3a) Print Elapsed Time: printTime(Timer)
 | 
						|
!    3b) Print Remaining Time: printRemainingTime(Timer,ratio)
 | 
						|
!    3c) Predict Completion Time: predict(Timer,ratio)
 | 
						|
! 
 | 
						|
! Copyright (c) 2008 Charles O'Neill
 | 
						|
! 
 | 
						|
! Permission is hereby granted, free of charge, to any person
 | 
						|
! obtaining a copy of this software and associated documentation
 | 
						|
! files (the "Software"), to deal in the Software without
 | 
						|
! restriction, including without limitation the rights to use,
 | 
						|
! copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
						|
! copies of the Software, and to permit persons to whom the
 | 
						|
! Software is furnished to do so, subject to the following
 | 
						|
! conditions:
 | 
						|
! 
 | 
						|
! The above copyright notice and this permission notice shall be
 | 
						|
! included in all copies or substantial portions of the Software.
 | 
						|
! 
 | 
						|
! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
						|
! EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
						|
! OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
						|
! NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 | 
						|
! HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
						|
! WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
! FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
						|
! OTHER DEALINGS IN THE SOFTWARE.
 | 
						|
 | 
						|
module ClockTiming
 | 
						|
  implicit none
 | 
						|
 | 
						|
  ! Integer Precision
 | 
						|
  integer, parameter :: IS = 2
 | 
						|
  ! Real Single Precision
 | 
						|
  integer, parameter :: SP = 4  ! 4 gives 32 bits 
 | 
						|
  ! Real Double Precision
 | 
						|
  integer, parameter :: DP = 8  ! 4 gives 32 bits, 8 gives 64 bits (double)
 | 
						|
 | 
						|
  type ClockTime
 | 
						|
     private
 | 
						|
     real(SP)  :: time_begin
 | 
						|
  end type
 | 
						|
 | 
						|
  ! Time Constants
 | 
						|
  real(SP),parameter :: SecondsPerMinutes = 60.0
 | 
						|
  real(SP),parameter :: MinutesPerHour = 60.0
 | 
						|
  real(SP),parameter :: HoursPerDay = 24.0
 | 
						|
    
 | 
						|
  real(SP),parameter :: PrintMaxSeconds = 90.0d0
 | 
						|
  real(SP),parameter :: PrintMaxMinutes = SecondsPerMinutes*MinutesPerHour
 | 
						|
  real(SP),parameter :: PrintMaxHours = SecondsPerMinutes*MinutesPerHour*HoursPerDay
 | 
						|
    
 | 
						|
  !.................................  
 | 
						|
  ! Public Interfaces to ClockTime Data
 | 
						|
  
 | 
						|
  ! Resets timer to zero
 | 
						|
  interface set
 | 
						|
     module procedure setTime
 | 
						|
  end interface
 | 
						|
  
 | 
						|
  ! Returns elapsed time
 | 
						|
  interface get
 | 
						|
     module procedure getTime
 | 
						|
  end interface
 | 
						|
  
 | 
						|
  ! Prints total elapsed time
 | 
						|
  interface printTime
 | 
						|
     module procedure printTime
 | 
						|
  end interface
 | 
						|
 | 
						|
  ! Prints total remaining time
 | 
						|
  interface printRemainingTime
 | 
						|
    module procedure PrintTimeSecondsHoursDays
 | 
						|
  end interface
 | 
						|
  
 | 
						|
  ! Predicts total elapsed time 
 | 
						|
  interface predict
 | 
						|
     module procedure PredictTime
 | 
						|
  end interface
 | 
						|
 | 
						|
  private :: setTime, getTime, PredictTime, PrintTimeSecondsHoursDays
 | 
						|
 | 
						|
contains
 | 
						|
 | 
						|
  ! Resets timer to zero
 | 
						|
  subroutine setTime(this)
 | 
						|
    implicit none
 | 
						|
    type (ClockTime)   :: this
 | 
						|
    ! CPU_TIME is the system's clock time function 
 | 
						|
    CALL CPU_TIME ( this%time_begin )
 | 
						|
  end subroutine setTime
 | 
						|
 | 
						|
  ! Returns elapsed time
 | 
						|
  function getTime(this)
 | 
						|
    implicit none
 | 
						|
    real(SP) :: getTime, time_end
 | 
						|
    type (ClockTime)   :: this
 | 
						|
    CALL CPU_TIME ( time_end )
 | 
						|
    getTime=time_end - this%time_begin
 | 
						|
  end function getTime
 | 
						|
 | 
						|
  ! Prints total elapsed time
 | 
						|
  subroutine printTime(this)
 | 
						|
    implicit none
 | 
						|
    type (ClockTime)   :: this
 | 
						|
    write(*,'(/ '' Operation time '', f8.3, '' seconds.'')') getTime(this)
 | 
						|
  end subroutine printTime
 | 
						|
 | 
						|
  ! Predicts remaining time before completion
 | 
						|
  function PredictTime(this,CompletionRatio)
 | 
						|
    implicit none
 | 
						|
    real(SP) :: PredictTime
 | 
						|
    type (ClockTime) :: this
 | 
						|
    real(SP)   :: CompletionRatio
 | 
						|
    ! Definitions:
 | 
						|
    ! CompletionRatio = Ratio of Completed Tasks to Total Tasks
 | 
						|
    ! Time_Remaining = Time_TotalPredicted - Time_elapsed 
 | 
						|
    !                = Time_elapsed/CompletionRatio*(1-CompletionRatio)
 | 
						|
    PredictTime = getTime(this)*(1-CompletionRatio)/CompletionRatio
 | 
						|
  end function PredictTime
 | 
						|
 | 
						|
  ! Pretty Prints remaining time
 | 
						|
  subroutine PrintTimeSecondsHoursDays(this, PredictionRatio)
 | 
						|
    ! Choose to output either seconds, hours or days depending on magnitude
 | 
						|
    implicit none    
 | 
						|
    type (ClockTime)   :: this    
 | 
						|
    real(SP) :: PredictionRatio
 | 
						|
    real(SP) :: Seconds
 | 
						|
    
 | 
						|
    Seconds = PredictTime(this,PredictionRatio)
 | 
						|
    
 | 
						|
    if(Seconds<PrintMaxSeconds)then
 | 
						|
        ! Seconds
 | 
						|
        write(*,'(  f5.1 , '' seconds'')',advance='no') Seconds
 | 
						|
    elseif(Seconds<PrintMaxMinutes)then
 | 
						|
        ! Minutes
 | 
						|
        write(*,'(  f5.1 , '' minutes'')',advance='no') Seconds/SecondsPerMinutes
 | 
						|
    elseif(Seconds<PrintMaxHours)then
 | 
						|
        ! Hours
 | 
						|
        write(*,'(  f5.1 , '' hours'')',advance='no') Seconds/SecondsPerMinutes/MinutesPerHour
 | 
						|
    else
 | 
						|
        ! Days
 | 
						|
        write(*,'(  f5.1 , '' days'')',advance='no') Seconds/SecondsPerMinutes/MinutesPerHour/HoursPerDay
 | 
						|
    endif
 | 
						|
        
 | 
						|
  end subroutine
 | 
						|
 | 
						|
end module
 |