#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <oski/oski.h>
#include "abort_prog.h"
#include "testvec.h"
#include "rand_util.h"
Defines | |
#define | MAX(a, b) ((a) > (b) ? (a) : (b)) |
Returns the larger of two input arguments. | |
#define | MIN(a, b) ((a) < (b) ? (a) : (b)) |
Returns the smaller of two input arguments. | |
Functions | |
static void | scatter (const oski_index_t *ind, const oski_value_t *val, oski_index_t len, oski_index_t index_base, oski_value_t *dest) |
Scatters the non-zero values in a compressed sparse vector representation into a dense (full) vector. | |
static void | scatter_zero (const oski_index_t *ind, oski_index_t len, oski_index_t index_base, oski_value_t *dest) |
Scatters the value '0' into a dense vector from a compressed sparse index vector. | |
static void | check_values (const oski_value_t a, const oski_value_t b, oski_index_t row, oski_index_t col) |
Looks at the absolute difference in magnitude between two scalar values, and aborts the program if they exceed (constant) * (machine epsilon). | |
static void | compare_row (const oski_matrix_t A, oski_index_t row, const oski_index_t *indp, oski_index_t len, oski_index_t index_base, const oski_value_t *full_row) |
Check that all the non-zeros physically stored in the raw CSR representation are correctly returned by oski_GetMatEntry(). | |
static void | compare_row_transimage (const oski_matrix_t A, oski_index_t row, const oski_index_t *indp, oski_index_t len, oski_inmatprop_t shape, oski_index_t index_base, const oski_value_t *full_row) |
Given a symmetric or Hermitian matrix for which A(i,j) is stored, checks that calling oski_GetMatEntry() to retrieve the (j, i) element returns the correct value. | |
static void | spot_check_row_read (const oski_matrix_t A, oski_index_t row, oski_index_t n, const oski_index_t *indp, oski_index_t len, oski_inmatprop_t shape, oski_index_t index_base, const oski_value_t *full_row) |
Randomly selects entries from the specified row of the given matrix and confirms that they correspond to the correct raw representation value. | |
static void | expand_full_row (const oski_index_t *indp, const oski_value_t *valp, oski_index_t len, oski_index_t index_base, oski_index_t implicit_diag, oski_index_t row, oski_index_t max_row_len, oski_value_t *full_row) |
Expands a sparse vector to a dense vector representation. | |
static void | zero_full_row (const oski_index_t *indp, oski_index_t len, oski_index_t index_base, oski_index_t implicit_diag, oski_index_t row, oski_index_t max_row_len, oski_value_t *full_row) |
Zeros the elements of a dense vector (full row) representation based on the sparse pattern. | |
static void | check_case_row_read (const oski_matrix_t A, oski_index_t row, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t m, oski_index_t n, oski_inmatprop_t shape, int implicit_diag, int index_base, oski_value_t *full_row) |
Performs a number of correctness tests related to reading entries in a given row of a matrix and its raw CSR representation. | |
static void | check_row_write (oski_matrix_t A, oski_matrix_t A_copy, oski_index_t row, const oski_index_t *indp, oski_index_t len, oski_index_t index_base, oski_value_t *full_row) |
Checks that all stored values in a given row are changed correctly. | |
static void | check_case_row_write (oski_matrix_t A, oski_matrix_t A_copy, oski_index_t row, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t m, oski_index_t n, oski_inmatprop_t shape, int implicit_diag, int index_base, oski_value_t *full_row) |
Performs a number of correctness tests related to modifying entries in a given row of a matrix and its raw CSR representation. | |
static const char * | tostring_shape (oski_inmatprop_t shape) |
static void | run_read_write_test_battery (oski_matrix_t A, oski_matrix_t A_copy, const oski_index_t *ptr, const oski_index_t *ind, oski_value_t *val, oski_index_t m, oski_index_t n, oski_inmatprop_t shape, int implicit_diag, int index_base) |
Given a matrix object and its corresponding raw CSR representation, executes a battery of tests to exercise oski_GetMatEntry() and oski_SetMatEntry(). | |
static void | check_case (oski_index_t m, oski_index_t n, oski_index_t max_nnz_row, oski_inmatprop_t shape, int implicit_diag, int index_base, const char *xform) |
static void | check_cases (oski_index_t max_rows, oski_index_t max_cols, oski_index_t max_nnz_row, const char *xform) |
Checks oski_GetMatEntry() and oski_SetMatEntry() for a variety of randomly generated input matrices. | |
int | main (int argc, char *argv[]) |
|
Performs a number of correctness tests related to reading entries in a given row of a matrix and its raw CSR representation. full_row is a temporary storage buffer of length at least 'n'. It must be initialized to zero, and on return from this routine, will be returned to a state of containing all zeros. |
|
Performs a number of correctness tests related to modifying entries in a given row of a matrix and its raw CSR representation. full_row is a temporary storage buffer of length at least 'n'. It must be initialized to zero, and on return from this routine, will be returned to a state of containing all zeros. |
|
Checks that all stored values in a given row are changed correctly. Leaves new values in full_row. |
|
Expands a sparse vector to a dense vector representation. Assumes indp has base given by index_base, but that row is always 1-based. |
|
Scatters the non-zero values in a compressed sparse vector representation into a dense (full) vector. For all 0 <= k < len, sets dest[ind[k]-b] = val[k], where b is the index base for values in ind. |
|
Scatters the value '0' into a dense vector from a compressed sparse index vector. For all 0 <= k < len, sets dest[ind[k]-b] = 0, where b is the index base for values in ind. |
|
Zeros the elements of a dense vector (full row) representation based on the sparse pattern. Assumes indp has base given by index_base, but that row is always 1-based. |