https://github.com/martinstereo/funtemps
https://github.com/martinstereo/funtemps
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/martinstereo/funtemps
- Owner: martinstereo
- License: cc0-1.0
- Created: 2023-02-07T20:45:18.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-09T17:43:02.000Z (about 2 years ago)
- Last Synced: 2025-02-03T04:31:46.220Z (4 months ago)
- Language: Go
- Size: 32.2 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# is105test
Mal for oppgave "Testing".## Notat angående testing av Float64
Når man sammenlignet to verdier av typen float64, spiller presisjon er rolle.
Alle reelle tall, representert i en datamaskin, har begrenset antall desimaler,
dvs. verdien er avrundet.I testene kan man ikke teste på absolutte verdier til flyttall, så man må
bestemme hvilke nøyaktighet man trenger og teste mot den.
Man kan sammenligne to flyttall med funksjonen Abs() fra pakken math.
```
difference := math.Abs(a - b)
```
Intuitivt virker dette bra, men en liten forskjell på verdien for to store
tall, kan være en stor forskjell for to små tall. Metoden man bruker er beregning
av en relativ forskjell ved å dele differansen med den absolutte
verdien til den andre input (b) => difference/math.Abs(b).
Da blir funksjonen slik:
```
func withinTolerance(a, b, error float64) bool {
// Først sjekk om tallene er nøyaktig like
if a == b {
return true
}difference := math.Abs(a - b)
// Siden vi skal dele med b, må vi sjekke om den er 0
// Hvis b er 0, returner avgjørelsen om d er mindre enn feilmarginen
// som vi aksepterer
if b == 0 {
return difference < error
}// Tilslutt sjekk den relative differanse mot feilmargin
return (difference/math.Abs(b)) < error
}
```
Det er anbefalt å bruke denne funksjonen i testene hvor float64 er innvolvert.
Testen vi hadde foreslått var
```
for _, tc := range tests {
got := FarhenheitToCelsius(tc.input)
if !reflect.DeepEqual(tc.want, got) {
t.Errorf("expected: %v, got: %v", tc.want, got)
}
}
```Og hvis vi erstatter !reflect.DeepEqual(tc.want, got) med
!withinTolerance(tc.want, got, 1e-12) så får vi
```
for _, tc := range tests {
got := FarhenheitToCelsius(tc.input)
if !withinTolerance(tc.want, got, 1e-12) {
t.Errorf("expected: %.18f, got: %.18f", tc.want, got)
}
}
```
## Referanser
Gerardi, R. (2021, December 21). Testing Floating Point Numbers in Go - The Pragmatic Programmers - Medium. Medium; The Pragmatic Programmers. https://medium.com/pragmatic-programmers/testing-floating-point-numbers-in-go-9872fe6de17f