package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
var (
|
|
ErrHourlyRate = errors.New("invalid hourly rate")
|
|
ErrHoursWorked = errors.New("invalid hours worked per week")
|
|
)
|
|
|
|
func main() {
|
|
|
|
pay := payDay(100, 25)
|
|
fmt.Println(pay)
|
|
pay = payDay(100, 200)
|
|
fmt.Println(pay)
|
|
pay = payDay(60, 25)
|
|
fmt.Println(pay)
|
|
|
|
}
|
|
|
|
func payDay(hoursWorked, hourlyRate int) int {
|
|
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
if r == ErrHourlyRate {
|
|
fmt.Printf("hourly rate: %d -> err: %v\n\n", hourlyRate, r)
|
|
}
|
|
if r == ErrHoursWorked {
|
|
fmt.Printf("hours worked: %d -> err: %v\n\n", hoursWorked, r)
|
|
}
|
|
}
|
|
fmt.Printf("Pay was calculated based on:\nhours worked: %d\nhourly rate: %d\n",
|
|
hoursWorked, hourlyRate)
|
|
}()
|
|
|
|
if hourlyRate < 10 || hourlyRate > 75 {
|
|
panic(ErrHourlyRate)
|
|
}
|
|
if hoursWorked < 0 || hoursWorked > 80 {
|
|
panic(ErrHoursWorked)
|
|
}
|
|
|
|
if hoursWorked > 40 {
|
|
hoursOver := hoursWorked - 40
|
|
overTime := hoursOver * 2
|
|
regularPay := 40 * hourlyRate
|
|
return regularPay + overTime
|
|
}
|
|
|
|
return hoursWorked * hourlyRate
|
|
|
|
}
|