| ! Program to test derived type initializers and constructors |
| program der_init |
| implicit none |
| type t |
| integer :: i |
| integer :: j = 4 |
| end type |
| integer :: m, n |
| |
| ! Explicit initializer |
| type (t) :: var = t(1, 2) |
| ! Type (default) initializer |
| type (t) :: var2 |
| ! Initialization of arrays |
| type (t), dimension(2) :: var3 |
| type (t), dimension(2) :: var4 = (/t(7, 9), t(8, 6)/) |
| |
| if (var%i .ne. 1 .or. var%j .ne. 2) call abort |
| if (var2%j .ne. 4) call abort |
| var2 = t(6, 5) |
| if (var2%i .ne. 6 .or. var2%j .ne. 5) call abort |
| |
| if ((var3(1)%j .ne. 4) .or. (var3(2)%j .ne. 4)) call abort |
| if ((var4(1)%i .ne. 7) .or. (var4(2)%i .ne. 8) & |
| .or. (var4(1)%j .ne. 9) .or. (var4(2)%j .ne. 6)) call abort |
| |
| ! Non-constant constructor |
| n = 1 |
| m = 5 |
| var2 = t(n, n + m) |
| if (var2%i .ne. 1 .or. var2%j .ne. 6) call abort |
| end program |