text: !** Copyright (c) 1989, NVIDIA CORPORATION.  All rights reserved.
  !**
  !** Licensed under the Apache License, Version 2.0 (the "License");
  !** you may not use this file except in compliance with the License.
  !** You may obtain a copy of the License at
  !**
  !**     http://www.apache.org/licenses/LICENSE-2.0
  !**
  !** Unless required by applicable law or agreed to in writing, software
  !** distributed under the License is distributed on an "AS IS" BASIS,
  !** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  !** See the License for the specific language governing permissions and
  !** limitations under the License.
  
  !* Tests for runtime library MATMUL routines
  
  program p
    
    parameter(NbrTests=2112)
    parameter(o_extent=2)
    parameter(n_extent=6)
    parameter(m_extent=4)
    parameter(k_extent=8)
    
    integer*4, dimension(n_extent,m_extent) :: arr1
    integer*4, dimension(m_extent,k_extent) :: arr2
    integer*4, dimension(n_extent,k_extent) :: arr3
    integer*4, dimension(n_extent,m_extent,o_extent) :: arr4
    integer*4, dimension(n_extent,o_extent,m_extent) :: arr5
    integer*4, dimension(o_extent,n_extent,m_extent) :: arr6
    
    integer*4, dimension(o_extent,m_extent,k_extent) :: arr7
    integer*4, dimension(m_extent,o_extent,k_extent) :: arr8
    integer*4, dimension(m_extent,k_extent,o_extent) :: arr9
    
    integer*4, dimension(n_extent,k_extent,o_extent) :: arr10
    integer*4, dimension(n_extent,o_extent,k_extent) :: arr11
    integer*4, dimension(o_extent,n_extent,k_extent) :: arr12
    
    integer*4, dimension(2:n_extent+1,m_extent) :: arr13
    integer*4, dimension(2:m_extent+1,k_extent) :: arr14
    integer*4, dimension(2:n_extent+1,k_extent) :: arr15
    integer*4, dimension(n_extent,2:m_extent+1) :: arr16
    integer*4, dimension(m_extent,2:k_extent+1) :: arr17
    integer*4, dimension(n_extent,2:k_extent+1) :: arr18
    integer*4, dimension(n_extent,k_extent) :: arr19
  
    integer*4 :: expect(NbrTests) 
    integer*4 :: results(NbrTests)
    
    integer:: i,j
    
    data arr1 /0,1,2,3,4,5,6,7,8,9,10,11,			&
               12,13,14,15,16,17,18,19,20,22,22,23/
    data arr2 /0,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/
    data arr3 /0,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,44,45,46,47/
    data arr4 /0,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,44,45,46,47/
    data arr5 /0,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,44,45,46,47/
    data arr6 /0,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,44,45,46,47/
    data arr7 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63/
    data arr8 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63/
    data arr9 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63/
    data arr10 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63,64,65,66,67,68,69,70,71,		&
               72,73,74,75,76,77,78,79,80,81,82,83,		&
               84,85,86,87,88,89,90,91,92,93,94,95/
    data arr11 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63,64,65,66,67,68,69,70,71,		&
               72,73,74,75,76,77,78,79,80,81,82,83,		&
               84,85,86,87,88,89,90,91,92,93,94,95/
    data arr12 /0,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,44,45,46,47,		&
               48,49,50,51,52,53,54,55,56,57,58,59,		&
               60,61,62,63,64,65,66,67,68,69,70,71,		&
               72,73,74,75,76,77,78,79,80,81,82,83,		&
               84,85,86,87,88,89,90,91,92,93,94,95/
    data arr13 /0,1,2,3,4,5,6,7,8,9,10,11,                        &
               12,13,14,15,16,17,18,19,20,22,22,23/
    data arr14 /0,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/
    data arr15 /0,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,44,45,46,47/
    data arr16 /0,1,2,3,4,5,6,7,8,9,10,11,                        &
               12,13,14,15,16,17,18,19,20,22,22,23/
    data arr17 /0,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/
    data arr18 /0,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,44,45,46,47/
    
    data expect /  &
    ! test 1-48
        84, 90, 96, 105, 108, 114, 228, 250, 272, &
        301, 316, 338, 372, 410, 448, 497, 524, 562, &
        516, 570, 624, 693, 732, 786, 660, 730, 800, &
        889, 940, 1010, 804, 890, 976, 1085, 1148, 1234, &
        948, 1050, 1152, 1281, 1356, 1458, 1092, 1210, 1328, &
        1477, 1564, 1682, &
    ! test 49-96
        0, 90, 96, 105, 108, 114, 0, 250, 272, &
        301, 316, 338, 0, 410, 448, 497, 524, 562, &
        0, 570, 624, 693, 732, 786, 0, 730, 800, &
        889, 940, 1010, 0, 890, 976, 1085, 1148, 1234, &
        0, 1050, 1152, 1281, 1356, 1458, 0, 1210, 1328, &
        1477, 1564, 1682, &
    ! test 97-144
        84, 90, 96, 105, 108, 0, 228, 250, 272, &
        301, 316, 0, 372, 410, 448, 497, 524, 0, &
        516, 570, 624, 693, 732, 0, 660, 730, 800, &
        889, 940, 0, 804, 890, 976, 1085, 1148, 0, &
        948, 1050, 1152, 1281, 1356, 0, 1092, 1210, 1328, &
        1477, 1564, 0, &
    ! test 145-192
        84, 90, 96, 105, 108, 114, 228, 246, 264, &
        289, 300, 318, 372, 402, 432, 473, 492, 522, &
        516, 558, 600, 657, 684, 726, 660, 714, 768, &
        841, 876, 930, 804, 870, 936, 1025, 1068, 1134, &
        948, 1026, 1104, 1209, 1260, 1338, 1092, 1182, 1272, &
        1393, 1452, 1542, &
    ! test 193-240
        84, 90, 96, 105, 108, 114, 228, 246, 264, &
        289, 300, 318, 372, 402, 432, 473, 492, 522, &
        516, 558, 600, 657, 684, 726, 660, 714, 768, &
        841, 876, 930, 804, 870, 936, 1025, 1068, 1134, &
        948, 1026, 1104, 1209, 1260, 1338, 1092, 1182, 1272, &
        1393, 1452, 1542, &
    ! test 241-288
        30, 33, 36, 39, 42, 45, 102, 117, 132, &
        147, 162, 177, 174, 201, 228, 255, 282, 309, &
        246, 285, 324, 363, 402, 441, 318, 369, 420, &
        471, 522, 573, 390, 453, 516, 579, 642, 705, &
        462, 537, 612, 687, 762, 837, 534, 621, 708, &
        795, 882, 969, &
    !test 289-336
        30, 33, 36, 0, 0, 0, 102, 117, 132, &
        0, 0, 0, 174, 201, 228, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 337-384
        0, 0, 0, 0, 0, 0, 0, 246, 264, &
        289, 0, 0, 0, 402, 432, 473, 0, 0, &
        0, 558, 600, 657, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 385-432
        30, 33, 36, 39, 42, 45, 0, 0, 0, &
        0, 0, 0, 174, 201, 228, 255, 282, 309, &
        0, 0, 0, 0, 0, 0, 318, 369, 420, &
        471, 522, 573, 0, 0, 0, 0, 0, 0, &
        462, 537, 612, 687, 762, 837, 0, 0, 0, &
        0, 0, 0, &
    ! test 433-480
        48, 0, 54, 0, 60, 0, 192, 0, 222, &
        0, 252, 0, 336, 0, 390, 0, 444, 0, &
        480, 0, 558, 0, 636, 0, 624, 0, 726, &
        0, 828, 0, 768, 0, 894, 0, 1020, 0, &
        912, 0, 1062, 0, 1212, 0, 1056, 0, 1230, &
        0, 1404, 0, &
    ! test 481-528
        30, 0, 36, 0, 42, 0, 0, 0, 0, &
        0, 0, 0, 174, 0, 228, 0, 282, 0, &
        0, 0, 0, 0, 0, 0, 318, 0, 420, &
        0, 522, 0, 0, 0, 0, 0, 0, 0, &
        462, 0, 612, 0, 762, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 529-576
        48, 0, 54, 0, 60, 0, 0, 0, 0, &
        0, 0, 0, 336, 0, 390, 0, 444, 0, &
        0, 0, 0, 0, 0, 0, 624, 0, 726, &
        0, 828, 0, 0, 0, 0, 0, 0, 0, &
        912, 0, 1062, 0, 1212, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 577-624
        0, 0, 0, 0, 0, 0, 0, 138, 0, &
        174, 0, 210, 0, 0, 0, 0, 0, 0, &
        0, 306, 0, 390, 0, 474, 0, 0, 0, &
        0, 0, 0, 0, 474, 0, 606, 0, 738, &
        0, 0, 0, 0, 0, 0, 0, 642, 0, &
        822, 0, 1002, &
    !test 625-672
        0, 621, 0, 795, 0, 969, 0, 0, 0, &
        0, 0, 0, 0, 453, 0, 579, 0, 705, &
        0, 0, 0, 0, 0, 0, 0, 285, 0, &
        363, 0, 441, 0, 0, 0, 0, 0, 0, &
        0, 117, 0, 147, 0, 177, 0, 0, 0, &
        0, 0, 0, &
    ! test 673-720
        912, 0, 1062, 0, 1212, 0, 0, 0, 0, &
        0, 0, 0, 624, 0, 726, 0, 828, 0, &
        0, 0, 0, 0, 0, 0, 336, 0, 390, &
        0, 444, 0, 0, 0, 0, 0, 0, 0, &
        48, 0, 54, 0, 60, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 721-768
        0, 0, 0, 0, 0, 0, 0, 138, 0, &
        174, 0, 210, 0, 0, 0, 0, 0, 0, &
        0, 306, 0, 390, 0, 474, 0, 0, 0, &
        0, 0, 0, 0, 474, 0, 606, 0, 738, &
        0, 0, 0, 0, 0, 0, 0, 642, 0, &
        822, 0, 1002, &
    ! test 767-864
        0, 0, 0, 0, 0, 0, 0, 492, 528, &
        564, 0, 0, 0, 804, 864, 924, 0, 0, &
        0, 1116, 1200, 1284, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, &
    ! test 865-960
        102, 105, 108, 111, 114, 117, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 1542, 1593, 1644, &
        1695, 1746, 1797, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 2982, 3081, 3180, 3279, 3378, 3477, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        4422, 4569, 4716, 4863, 5010, 5157, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, &
    !test 961-1056
        0, 3576, 0, 0, 0, 3774, 0, 0, 0, &
        3972, 0, 0, 0, 4008, 0, 0, 0, 4230, &
        0, 0, 0, 4452, 0, 0, 0, 4440, 0, &
        0, 0, 4686, 0, 0, 0, 4932, 0, 0, &
        0, 4872, 0, 0, 0, 5142, 0, 0, 0, &
        5412, 0, 0, 0, 5304, 0, 0, 0, 5598, &
        0, 0, 0, 5892, 0, 0, 0, 5736, 0, &
        0, 0, 6054, 0, 0, 0, 6372, 0, 0, &
        0, 6168, 0, 0, 0, 6510, 0, 0, 0, &
        6852, 0, 0, 0, 6600, 0, 0, 0, 6966, &
        0, 0, 0, 7332, 0, 0, &
    ! test 1057-1152
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 294, 0, 324, 0, 354, 0, &
        0, 0, 0, 0, 0, 0, 1158, 0, 1284, &
        0, 1410, 0, 0, 0, 0, 0, 0, 0, &
        2022, 0, 2244, 0, 2466, 0, 0, 0, 0, &
        0, 0, 0, 2886, 0, 3204, 0, 3522, 0, &
        0, 0, 0, 0, 0, 0, &
    !test 1153-1248
        0, 0, 0, 0, 0, 0, 96, 0, 102, &
        0, 108, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 672, 0, 726, 0, 780, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        1248, 0, 1350, 0, 1452, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 1824, 0, 1974, &
        0, 2124, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, &
    ! test 1249-1344
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 789, 0, 0, 0, &
        867, 0, 0, 0, 945, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 1701, 0, 0, 0, 1875, 0, 0, &
        0, 2049, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 2613, &
        0, 0, 0, 2883, 0, 0, 0, 3153, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 3525, 0, 0, 0, &
        3891, 0, 0, 0, 4257, 0, &
    !test 1355-1440
        0, 2769, 0, 3501, 0, 4233, 0, 0, 0, &
        0, 0, 0, 0, 2409, 0, 3045, 0, 3681, &
        0, 0, 0, 0, 0, 0, 0, 2049, 0, &
        2589, 0, 3129, 0, 0, 0, 0, 0, 0, &
        0, 1689, 0, 2133, 0, 2577, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, &
    !test 1441-1536
        0, 0, 0, 0, 0, 0, 3720, 0, 4332, &
        0, 4944, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 2568, 0, 2988, 0, 3408, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        1416, 0, 1644, 0, 1872, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 264, 0, 300, &
        0, 336, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, &
    !test 1537-1632
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 474, 0, 0, &
        0, 594, 0, 0, 0, 714, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 1194, 0, 0, 0, 1506, 0, &
        0, 0, 1818, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        1914, 0, 0, 0, 2418, 0, 0, 0, 2922, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 2634, 0, 0, &
        0, 3330, 0, 0, 0, 4026, &
    ! test 11633-1680
        84, 90, 96, 105, 108, 114, 228, 250, 272, &
        301, 316, 338, 372, 410, 448, 497, 524, 562, &
        516, 570, 624, 693, 732, 786, 660, 730, 800, &
        889, 940, 1010, 804, 890, 976, 1085, 1148, 1234, &
        948, 1050, 1152, 1281, 1356, 1458, 1092, 1210, 1328, &
        1477, 1564, 1682, &
  
    ! test 1681-1728
        84, 90, 96, 105, 108, 114, 228, 250, 272, &
        301, 316, 338, 372, 410, 448, 497, 524, 562, &
        516, 570, 624, 693, 732, 786, 660, 730, 800, &
        889, 940, 1010, 804, 890, 976, 1085, 1148, 1234, &
        948, 1050, 1152, 1281, 1356, 1458, 1092, 1210, 1328, &
        1477, 1564, 1682, &
  
    ! test 1729-1776
        84, 90, 96, 105, 108, 0, 228, 250, 272, &
        301, 316, 0, 372, 410, 448, 497, 524, 0, &
        516, 570, 624, 693, 732, 0, 660, 730, 800, &
        889, 940, 0, 804, 890, 976, 1085, 1148, 0, &
        948, 1050, 1152, 1281, 1356, 0, 1092, 1210, 1328, &
        1477, 1564, 0, &
    ! test 1777-1824
        84, 90, 96, 105, 108, 114, 228, 246, 264, &
        289, 300, 318, 372, 402, 432, 473, 492, 522, &
        516, 558, 600, 657, 684, 726, 660, 714, 768, &
        841, 876, 930, 804, 870, 936, 1025, 1068, 1134, &
        948, 1026, 1104, 1209, 1260, 1338, 1092, 1182, 1272, &
        1393, 1452, 1542, &
    ! test 1825-1872
        84, 90, 96, 105, 108, 114, 228, 246, 264, &
        289, 300, 318, 372, 402, 432, 473, 492, 522, &
        516, 558, 600, 657, 684, 726, 660, 714, 768, &
        841, 876, 930, 804, 870, 936, 1025, 1068, 1134, &
        948, 1026, 1104, 1209, 1260, 1338, 1092, 1182, 1272, &
        1393, 1452, 1542, &
    ! test 1873-1920
        30, 33, 36, 39, 42, 45, 102, 117, 132, &
        147, 162, 177, 174, 201, 228, 255, 282, 309, &
        246, 285, 324, 363, 402, 441, 318, 369, 420, &
        471, 522, 573, 390, 453, 516, 579, 642, 705, &
        462, 537, 612, 687, 762, 837, 534, 621, 708, &
        795, 882, 969, &
    !test 1921-1968
        30, 33, 36, 0, 0, 0, 102, 117, 132, &
        0, 0, 0, 174, 201, 228, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 1969-2016
        0, 0, 0, 0, 0, 0, 0, 246, 264, &
        289, 0, 0, 0, 402, 432, 473, 0, 0, &
        0, 558, 600, 657, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, 0, 0, 0, 0, 0, 0, &
        0, 0, 0, &
    ! test 2017-2064
        30, 33, 36, 39, 42, 45, 0, 0, 0, &
        0, 0, 0, 174, 201, 228, 255, 282, 309, &
        0, 0, 0, 0, 0, 0, 318, 369, 420, &
        471, 522, 573, 0, 0, 0, 0, 0, 0, &
        462, 537, 612, 687, 762, 837, 0, 0, 0, &
        0, 0, 0, &
    ! test 2065-2112
        48, 0, 54, 0, 60, 0, 192, 0, 222, &
        0, 252, 0, 336, 0, 390, 0, 444, 0, &
        480, 0, 558, 0, 636, 0, 624, 0, 726, &
        0, 828, 0, 768, 0, 894, 0, 1020, 0, &
        912, 0, 1062, 0, 1212, 0, 1056, 0, 1230, &
        0, 1404, 0 /
    
    !test 1-48
    arr3=0
    arr3 = matmul(arr1,arr2)
    call assign_result(1,48,arr3,results)
    ! print *,"**** arr3 = matmul(arr1,arr2) ***"
    ! print *,arr3
    
    ! test 49-96
    arr3=0
    arr3(2:n_extent,:) = matmul(arr1(2:n_extent,:),arr2)
    call assign_result(49,96,arr3,results)
    ! print *,"**** arr3(2:n_extent,:) = matmul(arr1(2:n_extent,:),arr2) ***"
    ! print *,arr3
    
    ! test 97-144
    arr3=0
    arr3(1:n_extent-1,:) = matmul(arr1(1:n_extent-1,:),arr2)
    call assign_result(97,144,arr3,results)
    ! print *,"**** arr3(1:n_extent-1,:) = matmul(arr1(1:n_extent-1,:),arr2) ***"
    ! print *,arr3
    
    ! test 145-192
    arr3=0
    arr3 = matmul(arr1(:,2:m_extent),arr2(2:m_extent,:))
    call assign_result(145,192,arr3,results)
    ! print *,"**** arr3 = matmul(arr1(:,2:m_extent),arr2(2:m_extent,:)) ***"
    ! print *,arr3
    
    ! test 193-240
    arr3=0
    arr3 = matmul(arr1(:,2:m_extent),arr2(2:m_extent,:))
    call assign_result(193,240,arr3,results)
    ! print *,"**** arr3 = matmul(arr1(:,2:m_extent),arr2(2:m_extent,:)) ***"
    ! print *,arr3
    
    ! test 241-288
    arr3=0
    arr3 = matmul(arr1(:,1:m_extent-1),arr2(1:m_extent-1,:))
    call assign_result(241,288,arr3,results)
    ! print *,"**** arr3 = matmul(arr1(:,1:m_extent-1),arr2(1:m_extent-1,:)) ***"
    ! print *,arr3
    
    !test 289-336
    arr3=0
    arr3(1:3,1:3) = matmul(arr1(1:3,1:3),arr2(1:3,1:3))
    call assign_result(289,336,arr3,results)
    ! print *,"**** arr3(1:3,1:3) = matmul(arr1(1:3,1:3),arr2(1:3,1:3)) ***"
    ! print *,arr3
    
    ! test 337-384
    arr3=0
    arr3(2:4,2:4) = matmul(arr1(2:4,2:4),arr2(2:4,2:4))
    call assign_result(337,384,arr3,results)
    ! print *,"**** arr3(2:4,2:4) = matmul(arr1(2:4,2:4),arr2(2:4,2:4)) ***"
    ! print *,arr3
    
    ! test 385-432
    arr3=0
    arr3(:,1:k_extent:2) = matmul(arr1(:,1:m_extent-1),arr2(1:m_extent-1,1:k_extent:2))
    call assign_result(385,432,arr3,results)
    ! print *,"**** arr3(:,1:k_extent:2) = matmul(arr1(:,1:m_extent-1),arr2(1:m_extent-1,1:k_extent:2)) ***"
    ! print *,arr3
    
    ! test 433-480
    arr3=0
    arr3(1:n_extent:2,:) = matmul(arr1(1:n_extent:2,2:m_extent),arr2(1:m_extent-1,:))
    call assign_result(433,480,arr3,results)
    ! print *,"**** arr3(1:n_extent:2,:) = matmul(arr1(1:n_extent:2,2:m_extent),arr2(1:m_extent-1,:)) ***"
    ! print *,arr3
    
    ! test 481-528
    arr3=0
    arr3(1:n_extent:2,1:k_extent:2) = matmul(arr1(1:n_extent:2,1:m_extent-1),      &
                                             arr2(1:m_extent-1,1:k_extent:2))
    call assign_result(481,528,arr3,results)
    ! print *,"**** arr3(1:n_extent:2,1:k_extent:2) = matmul(arr1(1:n_extent:2,1:m_extent-1),arr2(1:m_extent-1,1:k_extent:2)) ***"
    ! print *,arr3
    
    ! test 529-576
    arr3=0
    arr3(1:n_extent-1:2,1:k_extent-1:2) = matmul(arr1(1:n_extent-1:2,2:m_extent),	&
                                                 arr2(1:m_extent-1,1:k_extent:2))
    call assign_result(529,576,arr3,results)
    ! print *,"**** arr3(1:n_extent-1:2,1:k_extent-1:2) = matmul(arr1(1:n_extent-1:2,2:m_extent),arr2(1:m_extent-1,1:k_extent:2))***"
    ! print *,arr3
    
    ! test 577-624
    arr3=0
    arr3(2:n_extent:2,2:k_extent:2) = matmul(arr1(2:n_extent:2,1:m_extent-1),	&
                                                 arr2(2:m_extent,2:k_extent:2))
    call assign_result(577,624,arr3,results)
    ! print *,"**** arr3(2:n_extent:2,2:k_extent:2) = matmul(arr1(2:n_extent:2,1:m_extent-1),arr2(2:m_extent,2:k_extent:2)) ***"
    ! print *,arr3
    
    !test 625-672
    arr3=0
    arr3(n_extent:1:-2,1:k_extent:2) = matmul(arr1(n_extent:1:-2,1:m_extent-1),      &
                                             arr2(1:m_extent-1,k_extent:1:-2))
    call assign_result(625,672,arr3,results)
    ! print *,"**** arr3(n_extent:1:-2,1:k_extent:2) = matmul(arr1(n_extent:1:-2,1:m_extent-1), arr2(1:m_extent-1,k_extent:1:-2)) ***"
    ! print *,arr3
    
    ! test 673-720
    arr3=0
    arr3(1:n_extent-1:2,k_extent-1:1:-2) = matmul(arr1(1:n_extent-1:2,m_extent:2:-1),	&
                                                 arr2(m_extent-1:1:-1,1:k_extent:2))
    call assign_result(673,720,arr3,results)
    ! print *,"**** arr3(1:n_extent-1:2,k_extent-1:1:-2) = matmul(arr1(1:n_extent-1:2,m_extent:2:-1),arr2(m_extent-1:1:-1,1:k_extent:2)) ***"
    ! print *,arr3
    
    ! test 721-768
    arr3=0
    arr3(n_extent:2:-2,k_extent:2:-2) = matmul(arr1(n_extent:2:-2,m_extent-1:1:-1),	&
                                                 arr2(m_extent:2:-1,k_extent:2:-2))
    call assign_result(721,768,arr3,results)
    ! print *,"**** arr3(n_extent:2:-2,k_extent:2:-2) = matmul(arr1(n_extent:2:-2,m_extent-1:1:-1),arr2(m_extent:2:-1,k_extent:2:-2)) ***"
    ! print *,arr3
    
    ! test 769-864
    arr10=0
    arr10(2:4,2:4:1) = matmul(arr4(2:4,2:4,1),arr7(1,2:4,2:4))
    call assign_result(769,864,arr10,results)
    ! print *,"**** arr10(2:4,2:4:1) = matmul(arr4(2:4,2:4,1),arr7(1,2:4,2:4)) ***"
    ! print *,arr10
    
    ! test 865-960
    arr11=0
    arr11(:,1,1:k_extent:2) = matmul(arr4(:,1:m_extent-1,2),arr8(1:m_extent-1,1,1:k_extent:2))
    call assign_result(865,960,arr11,results)
    ! print *,"**** arr11(:,1,1:k_extent:2) = matmul(arr4(:,1:m_extent-1,2),arr8(1:m_extent-1,1,1:k_extent:2)) ***"
    ! print *,arr11
    
    !test 961-1056
    arr12=0
    arr12(2,1:n_extent:2,:) = matmul(arr4(1:n_extent:2,2:m_extent,2),arr9(1:m_extent-1,:,2))
    call assign_result(961,1056,arr12,results)
    ! print *,"**** arr12(2,1:n_extent:2,:) = matmul(arr4(1:n_extent:2,2:m_extent,2),arr9(1:m_extent-1,:,2)) ***"
    ! print *,arr12
    
    ! test 1057-1152
    arr10=0
    arr10(1:n_extent:2,1:k_extent:2,2) = matmul(arr5(1:n_extent:2,2,1:m_extent-1),      &
                                             arr8(1:m_extent-1,2,1:k_extent:2))
    call assign_result(1057,1152,arr10,results)
    ! print *,"**** arr10(1:n_extent:2,1:k_extent:2,2) = matmul(arr5(1:n_extent:2,2,1:m_extent-1), arr8(1:m_extent-1,2,1:k_extent:2)) ***"
    ! print *,arr10
    
    !test 1153-1248
    arr11=0
    arr11(1:n_extent-1:2,2,1:k_extent-1:2) = matmul(arr5(1:n_extent-1:2,1,2:m_extent),	&
                                                 arr9(1:m_extent-1,1:k_extent:2,1))
    call assign_result(1153,1248,arr11,results)
    ! print *,"**** arr11(1:n_extent-1:2,2,1:k_extent-1:2) = matmul(arr5(1:n_extent-1:2,1,2:m_extent),arr9(1:m_extent-1,1:k_extent:2,1)) ***"
    ! print *,arr11
    
    ! test 1249-1344
    arr12=0
    arr12(1,2:n_extent:2,2:k_extent:2) = matmul(arr5(2:n_extent:2,2,1:m_extent-1),	&
                                                 arr7(2,2:m_extent,2:k_extent:2))
    call assign_result(1249,1344,arr12,results)
    ! print *,"**** arr12(1,2:n_extent:2,2:k_extent:2) = matmul(arr5(2:n_extent:2,2,1:m_extent-1), arr7(2,2:m_extent,2:k_extent:2)) ***"
    ! print *,arr12
    
    !test 1345-1440
    arr10=0
    arr10(n_extent:1:-2,1:k_extent:2,1) = matmul(arr6(2,n_extent:1:-2,1:m_extent-1),      &
                                             arr9(1:m_extent-1,k_extent:1:-2,2))
    call assign_result(1345,1440,arr10,results)
    ! print *,"**** arr10(n_extent:1:-2,1:k_extent:2,1) = matmul(arr6(2,n_extent:1:-2,1:m_extent-1),arr9(1:m_extent-1,k_extent:1:-2,2)) ***"
    ! print *,arr10
    
    !test 1441-1536
    arr11=0
    arr11(1:n_extent-1:2,2,k_extent-1:1:-2) = matmul(arr6(1,1:n_extent-1:2,m_extent:2:-1),	&
                                                 arr7(2,m_extent-1:1:-1,1:k_extent:2))
    call assign_result(1441,1536,arr11,results)
    ! print *,"**** arr11(1:n_extent-1:2,2,k_extent-1:1:-2) = matmul(arr6(1,1:n_extent-1:2,m_extent:2:-1),arr7(2,m_extent-1:1:-1,1:k_extent:2)) ***"
    ! print *,arr11
    
    !test 1537-1632
    arr12=0
    arr12(2,n_extent:2:-2,k_extent:2:-2) = matmul(arr6(2,n_extent:2:-2,m_extent-1:1:-1),	&
                                                 arr8(m_extent:2:-1,1,k_extent:2:-2))
    call assign_result(1537,1632,arr12,results)
    ! print *,"**** arr12(2,n_extent:2:-2,k_extent:2:-2) = matmul(arr6(2,n_extent:2:-2,m_extent-1:1:-1),arr8(m_extent:2:-1,1,k_extent:2:-2)) ***"
    ! print *,arr12
    
    arr19 = 0
  
    ! test 1633-1680
    arr15=0
    arr15 =  arr19 + matmul(arr13,arr14)
    call assign_result(1633,1680,arr15,results)
    ! print *,arr15
  
  
    ! test 1681-1728
    arr18=0
    arr18 = arr19 +  matmul(arr16,arr17)
    call assign_result(1681,1728,arr18,results)
    ! print *,arr15
  
    ! test 1729-1776
    arr15=0
    arr15(2:n_extent,:) = matmul(arr13(2:n_extent,:),arr14)
    call assign_result(1729,1776,arr15,results)
    ! print *,arr15
  
    ! test 1777-1824
    arr15=0
    arr15 = arr19 + matmul(arr13(:,2:m_extent),arr14(3:m_extent+1,:))
    call assign_result(1777,1824,arr15,results)
    ! print *,arr15
  
    ! test 1825-1872
    arr15=0
    arr15 = arr19 + matmul(arr13(:,2:m_extent),arr14(3:m_extent+1,:))
    call assign_result(1825,1872,arr15,results)
    ! print *,arr15
  
    ! test 1873-1920
    arr15=0
    arr15 = arr19 + matmul(arr13(:,1:m_extent-1),arr14(2:m_extent,:))
    call assign_result(1873,1920,arr15,results)
    !print *,arr15
  
    !test 1921-1968
    arr15=0
    arr15(2:4,1:3) = arr19(2:4,1:3) + matmul(arr13(2:4,1:3),arr14(2:4,1:3))
    call assign_result(1921,1968,arr15,results)
    ! print *,arr15
  
    ! test 1969-2016
    arr15=0
    arr15(3:5,2:4) = arr19(3:5,2:4) + matmul(arr13(3:5,2:4),arr14(3:5,2:4))
    call assign_result(1969,2016,arr15,results)
    ! print *,arr15
  
    ! test 2017-2064
    arr15=0
    arr15(:,1:k_extent:2) = arr19(:,1:k_extent:2) +  &
                           matmul(arr13(:,1:m_extent-1),arr14(2:m_extent,1:k_extent:2))
    call assign_result(2017,2064,arr15,results)
    ! print *,arr15
  
    ! test 2065-2112
    arr15=0
    arr15(2:n_extent+1:2,:) = arr19(2:n_extent+1:2,:) +   &
                             matmul(arr13(2:n_extent+1:2,2:m_extent),arr14(2:m_extent,:))
    call assign_result(2065,2112,arr15,results)
    ! print *,arr15
  
    call check(results, expect, NbrTests)
  end program
  
  subroutine assign_result(s_idx, e_idx , arr, rslt)
    integer*4, dimension(1:e_idx-s_idx+1) :: arr
    integer*4, dimension(e_idx) :: rslt
    integer:: s_idx, e_idx
  
    rslt(s_idx:e_idx) = arr
  
  end subroutine
  