---
include: rocblas_common.yaml
include: known_bugs.yaml

Definitions:
  - &small_matrix_size_range
    - { M:     1, stride_a:       1 }
    - { M:     1, stride_a:       1 }
    - { M:    10, stride_a:       100 }
    - { M:    1, stride_a:       1 }
    - { M:    10, stride_a:      55 }
    - { M:   100, stride_a:    40000 }

  - &special_case_range
    - { M: 0, incx: 1, batch_count: 1, stride_a: 1 }
    - { M: 1, incx: 1, batch_count: 0, stride_a: 1 }

    - { M: -1, incx: 1, batch_count:  0, stride_a: 1 }
    - { M:  0, incx: 0, batch_count:  0, stride_a: 1 }
    - { M:  0, incx: 1, batch_count: -1, stride_a: 1 }

  - &medium_matrix_size_range
    - { M:   300, stride_a:   160000 }
    - { M:   600, stride_a:   400000 }

  - &large_matrix_size_range
    - { M:  1000, stride_a:  1000000 }
    - { M:  2000, stride_a:  4000000 }
    - { M:  4011, stride_a: 16088200 }
    - { M:  8000, stride_a: 64000000 }

  - &incx_range
    - [2, -2, 1, -1, 3, 10]

  - &incx_range_small
    - [ 2 ]

Tests:
- name: tpmv_bad_arg
  category: pre_checkin
  function: tpmv_bad_arg
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  fortran: [ false, true ]

- name: tpmv_arg_checks
  category: quick
  function:
  - tpmv: *single_double_precisions
  - tmpv_batched: *single_double_precisions
  - tpmv_strided_batched: *single_double_precisions
  uplo: L
  transA: N
  diag: N
  matrix_size: *special_case_range

- name: tpmv_small
  category: quick
  function: tpmv
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range_small
  fortran: true

- name: tpmv_small
  category: quick
  function: tpmv
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range

- name: tpmv_medium
  category: pre_checkin
  function: tpmv
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *medium_matrix_size_range
  incx: *incx_range

- name: tpmv_large
  category: nightly
  function: tpmv
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [  N, T, C ]
  diag: [N, U]
  matrix_size: *large_matrix_size_range
  incx: *incx_range_small

- name: tpmv_batched_bad_arg
  category: pre_checkin
  function: tpmv_batched_bad_arg
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [  N, T, C ]
  diag: [N, U]
  fortran: [ false, true ]

- name: tpmv_batched_small
  category: quick
  function: tpmv_batched
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range_small
  batch_count: [ -1, 0, 3 ]
  fortran: true

- name: tpmv_batched_small
  category: quick
  function: tpmv_batched
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range
  batch_count: [ 1, 3 ]

- name: tpmv_batched_medium
  category: pre_checkin
  function: tpmv_batched
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *medium_matrix_size_range
  incx: *incx_range
  batch_count: [ 3 ]

- name: tpmv_batched_large
  category: nightly
  function: tpmv_batched
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *large_matrix_size_range
  incx: *incx_range_small
  batch_count: [ 3 ]

- name: tpmv_strided_batched_bad_arg
  category: pre_checkin
  function: tpmv_strided_batched_bad_arg
  precision: *single_double_precisions
  transA: N
  uplo: [L]
  transA: [  T ]
  diag: [N]
  stride_scale: [ 1 ]

- name: tpmv_strided_batched_small
  category: quick
  function: tpmv_strided_batched
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range_small
  batch_count: [ -1, 0, 3 ]
  stride_scale: [ 2 ]
  fortran: true

- name: tpmv_strided_batched_small
  category: quick
  function: tpmv_strided_batched
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *small_matrix_size_range
  incx: *incx_range
  batch_count: [ 1, 3 ]
  stride_scale: [ 2 ]

- name: tpmv_strided_batched_medium
  category: pre_checkin
  function: tpmv_strided_batched
  precision: *single_double_precisions_complex_real
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *medium_matrix_size_range
  incx: *incx_range
  batch_count: [ 3 ]
  stride_scale: [ 1.2 ]

- name: tpmv_strided_batched_large
  category: nightly
  function: tpmv_strided_batched
  precision: *single_double_precisions
  uplo: [L, U]
  transA: [N, T, C]
  diag: [N, U]
  matrix_size: *large_matrix_size_range
  incx: *incx_range_small
  batch_count: [ 3 ]
  stride_scale: [ 1.2 ]
...
