summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/fseek.f90
blob: acc8211a41495328e8880a98e325e6dd3da6dd8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
! { dg-do run { target fd_truncate } }

PROGRAM test_fseek
  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2, fd=10
  INTEGER :: ierr = 0

  ! expected position: 12, one leading blank + 10 + newline
  WRITE(fd, *) "1234567890"
  IF (FTELL(fd) /= 12) CALL abort()

  ! move backward from current position
  CALL FSEEK(fd, -12, SEEK_CUR, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= 0) CALL abort()

  ! move to negative position (error)
  CALL FSEEK(fd, -1, SEEK_SET, ierr)
  IF (ierr == 0 .OR. FTELL(fd) /= 0) CALL abort()

  ! move forward from end (12 + 10)
  CALL FSEEK(fd, 10, SEEK_END, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= 22) CALL abort()

  ! set position (0)
  CALL FSEEK(fd, 0, SEEK_SET, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= 0) CALL abort()

  ! move forward from current position
  CALL FSEEK(fd, 5, SEEK_CUR, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= 5) CALL abort()

  CALL FSEEK(fd, HUGE(0_1), SEEK_SET, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= HUGE(0_1)) CALL abort()

  CALL FSEEK(fd, HUGE(0_2), SEEK_SET, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= HUGE(0_2)) CALL abort()

  CALL FSEEK(fd, HUGE(0_4), SEEK_SET, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= HUGE(0_4)) CALL abort()
  
  CALL FSEEK(fd, -HUGE(0_4), SEEK_CUR, ierr)
  IF (ierr /= 0 .OR. FTELL(fd) /= 0) CALL abort()
END PROGRAM