|
Packit |
67cb25 |
/* sort/test_source.c
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
67cb25 |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
67cb25 |
* the Free Software Foundation; either version 3 of the License, or (at
|
|
Packit |
67cb25 |
* your option) any later version.
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
67cb25 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
67cb25 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
67cb25 |
* General Public License for more details.
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
67cb25 |
* along with this program; if not, write to the Free Software
|
|
Packit |
67cb25 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void TYPE (test_sort_vector) (size_t N, size_t stride);
|
|
Packit |
67cb25 |
void FUNCTION (my, initialize) (TYPE (gsl_vector) * v);
|
|
Packit |
67cb25 |
void FUNCTION (my, randomize) (TYPE (gsl_vector) * v);
|
|
Packit |
67cb25 |
int FUNCTION (my, check) (TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig);
|
|
Packit |
67cb25 |
int FUNCTION (my, pcheck) (gsl_permutation * p, TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig);
|
|
Packit |
67cb25 |
int FUNCTION (my, scheck) (BASE * x, size_t k, TYPE (gsl_vector) * data);
|
|
Packit |
67cb25 |
int FUNCTION (my, lcheck) (BASE * x, size_t k, TYPE (gsl_vector) * data);
|
|
Packit |
67cb25 |
int FUNCTION (my, sicheck) (size_t * p, size_t k, gsl_permutation * perm,
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data);
|
|
Packit |
67cb25 |
int FUNCTION (my, licheck) (size_t * p, size_t k, gsl_permutation * perm,
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void
|
|
Packit |
67cb25 |
TYPE (test_sort_vector) (size_t N, size_t stride)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status;
|
|
Packit |
67cb25 |
size_t k = N/2;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_block) * b1 = FUNCTION (gsl_block, calloc) (N * stride);
|
|
Packit |
67cb25 |
TYPE (gsl_block) * b2 = FUNCTION (gsl_block, calloc) (N * stride);
|
|
Packit |
67cb25 |
TYPE (gsl_block) * b3 = FUNCTION (gsl_block, calloc) (N * stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * orig = FUNCTION (gsl_vector, alloc_from_block) (b1, 0, N, stride);
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data = FUNCTION (gsl_vector, alloc_from_block) (b2, 0, N, stride);
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data2 = FUNCTION (gsl_vector, alloc_from_block) (b3, 0, N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
BASE * small = (BASE *)malloc(k * sizeof(BASE));
|
|
Packit |
67cb25 |
BASE * large = (BASE *)malloc(k * sizeof(BASE));
|
|
Packit |
67cb25 |
size_t * index = (size_t *)malloc(k * sizeof(size_t));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_permutation *p = gsl_permutation_alloc (N);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (my, initialize) (orig);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* Already sorted */
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
status = FUNCTION (gsl_sort_vector, index) (p, data);
|
|
Packit |
67cb25 |
status |= FUNCTION (my, pcheck) (p, data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_sort_vector) (data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest) (small, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, scheck) (small, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest) (large, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, lcheck) (large, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, sicheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, licheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, ordered", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* Reverse the data */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, reverse) (data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
status = FUNCTION (gsl_sort_vector, index) (p, data);
|
|
Packit |
67cb25 |
status |= FUNCTION (my, pcheck) (p, data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_sort_vector) (data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, reverse) (data);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data2, data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_sort_vector2) (data, data2);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, reversed data", N, stride);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data2, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, reversed data2", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, reverse) (data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest) (small, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, scheck) (small, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest) (large, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, lcheck) (large, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, sicheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, licheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, reversed", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* Perform some shuffling */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
FUNCTION (my, randomize) (data);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data2, data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_sort_vector2) (data, data2);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, randomized data", N, stride);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data2, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting2, " NAME (gsl_vector) ", n = %u, stride = %u, randomized data2", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, orig);
|
|
Packit |
67cb25 |
FUNCTION (my, randomize) (data);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data2, data);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
status = FUNCTION (gsl_sort_vector, index) (p, data);
|
|
Packit |
67cb25 |
status |= FUNCTION (my, pcheck) (p, data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "indexing " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
TYPE (gsl_sort_vector) (data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, check) (data, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "sorting, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, memcpy) (data, data2);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest) (small, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, scheck) (small, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest) (large, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, lcheck) (large, k, orig);
|
|
Packit |
67cb25 |
gsl_test (status, "largest, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, smallest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, sicheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "smallest index, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_sort_vector, largest_index) (index, k, data);
|
|
Packit |
67cb25 |
status = FUNCTION (my, licheck) (index, k, p, data);
|
|
Packit |
67cb25 |
gsl_test (status, "largest index, " NAME (gsl_vector) ", n = %u, stride = %u, randomized", N, stride);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, free) (orig);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, free) (data);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, free) (data2);
|
|
Packit |
67cb25 |
FUNCTION (gsl_block, free) (b1);
|
|
Packit |
67cb25 |
FUNCTION (gsl_block, free) (b2);
|
|
Packit |
67cb25 |
FUNCTION (gsl_block, free) (b3);
|
|
Packit |
67cb25 |
gsl_permutation_free (p);
|
|
Packit |
67cb25 |
free (small);
|
|
Packit |
67cb25 |
free (large);
|
|
Packit |
67cb25 |
free (index);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void
|
|
Packit |
67cb25 |
FUNCTION (my, initialize) (TYPE (gsl_vector) * v)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
ATOMIC k = 0;
|
|
Packit |
67cb25 |
volatile ATOMIC kk;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* Must be sorted initially */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < v->size; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
kk = k;
|
|
Packit |
67cb25 |
k++;
|
|
Packit |
67cb25 |
/* Prevent overflow */
|
|
Packit |
67cb25 |
if (k < kk) k = kk;
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, set) (v, i, k);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void
|
|
Packit |
67cb25 |
FUNCTION (my, randomize) (TYPE (gsl_vector) * v)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < v->size; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t j = urand (v->size);
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, swap_elements) (v, i, j);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, check) (TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < data->size; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (FUNCTION (gsl_vector, get) (data, i) != FUNCTION (gsl_vector, get) (orig, i))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
#if DUMP_ERROR
|
|
Packit |
67cb25 |
size_t j;
|
|
Packit |
67cb25 |
for (j = 0 ; j < data->size; j++) {
|
|
Packit |
67cb25 |
printf("%u: " OUT_FORMAT " " OUT_FORMAT " %c\n", j,
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, get) (data, j),
|
|
Packit |
67cb25 |
FUNCTION (gsl_vector, get) (orig, j),
|
|
Packit |
67cb25 |
(i == j) ? '*' : ' ');
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
#endif
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, pcheck) (gsl_permutation * p, TYPE (gsl_vector) * data, TYPE (gsl_vector) * orig)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < p->size; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (FUNCTION (gsl_vector, get) (data, p->data[i]) != FUNCTION (gsl_vector, get) (orig, i))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, scheck) (BASE * x, size_t k, TYPE (gsl_vector) * data)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < k; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (x[i] != FUNCTION (gsl_vector, get) (data, i))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, lcheck) (BASE * x, size_t k, TYPE (gsl_vector) * data)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < k; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (x[i] != FUNCTION (gsl_vector, get) (data, data->size - i - 1))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, sicheck) (size_t * p1, size_t k, gsl_permutation * p,
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < k; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (FUNCTION(gsl_vector,get)(data,p1[i])
|
|
Packit |
67cb25 |
!= FUNCTION(gsl_vector,get)(data, p->data[i]))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
FUNCTION (my, licheck) (size_t * p1, size_t k, gsl_permutation * p,
|
|
Packit |
67cb25 |
TYPE (gsl_vector) * data)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < k; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
if (FUNCTION(gsl_vector,get)(data,p1[i])
|
|
Packit |
67cb25 |
!= FUNCTION(gsl_vector,get)(data, p->data[p->size - i - 1]))
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
return GSL_FAILURE;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|