mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-10-31 03:24:04 +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
 |