⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_source.c

📁 math library from gnu
💻 C
📖 第 1 页 / 共 2 页
字号:
/* matrix/test_source.c *  * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */void FUNCTION (test, func) (void);void FUNCTION (test, trap) (void);void FUNCTION (test, text) (void);void FUNCTION (test, binary) (void);#define TEST(expr,desc) gsl_test((expr), NAME(gsl_matrix) desc " M=%d, N=%d", M, N)voidFUNCTION (test, func) (void){  TYPE (gsl_vector) * v;  size_t i, j;  size_t k = 0;  TYPE (gsl_matrix) * m = FUNCTION (gsl_matrix, alloc) (M, N);  gsl_test (m->data == 0, NAME (gsl_matrix) "_alloc returns valid pointer");  gsl_test (m->size1 != M, NAME (gsl_matrix) "_alloc returns valid size1");  gsl_test (m->size2 != N, NAME (gsl_matrix) "_alloc returns valid size2");  gsl_test (m->tda != N, NAME (gsl_matrix) "_alloc returns valid tda");  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          k++;          FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k);        }    }  {    status = 0;    k = 0;    for (i = 0; i < M; i++)      {        for (j = 0; j < N; j++)          {            k++;            if (m->data[i * N + j] != (BASE) k)              status = 1;          };      };    gsl_test (status, NAME (gsl_matrix) "_set writes into array");  }  {    status = 0;    k = 0;    for (i = 0; i < M; i++)      {        for (j = 0; j < N; j++)          {            k++;            if (FUNCTION (gsl_matrix, get) (m, i, j) != (BASE) k)              status = 1;          };      };    gsl_test (status, NAME (gsl_matrix) "_get reads from array");  }  FUNCTION (gsl_matrix, free) (m);      /* free whatever is in m */  m = FUNCTION (gsl_matrix, calloc) (M, N);  v = FUNCTION (gsl_vector, calloc) (N);  {    int status = (FUNCTION(gsl_matrix,isnull)(m) != 1);    TEST (status, "_isnull" DESC " on calloc matrix");        status = (FUNCTION(gsl_matrix,ispos)(m) != 0);    TEST (status, "_ispos" DESC " on calloc matrix");        status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on calloc matrix");    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1);    TEST (status, "_isnonneg" DESC " on calloc matrix");  }  k = 0;  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          k++;          FUNCTION (gsl_matrix, set) (m, i, j, (BASE) k);        }    }  {    status = 0;    k = 0;    for (i = 0; i < M; i++)      {        FUNCTION (gsl_matrix, get_row) (v, m, i);        for (j = 0; j < N; j++)          {            k++;            if (v->data[j] != (BASE) k)              status = 1;          }      }    gsl_test (status, NAME (gsl_matrix) "_get_row extracts row");  }  {    BASE exp_max = FUNCTION(gsl_matrix, get) (m, 0, 0);    BASE exp_min = FUNCTION(gsl_matrix, get) (m, 0, 0);    size_t exp_imax = 0, exp_jmax = 0, exp_imin = 0, exp_jmin = 0;    for (i = 0; i < M; i++)      {        for (j = 0; j < N; j++)          {            BASE k = FUNCTION(gsl_matrix, get) (m, i, j);            if (k > exp_max) {              exp_max =  FUNCTION(gsl_matrix, get) (m, i, j);              exp_imax = i;              exp_jmax = j;            }            if (k < exp_min) {              exp_min =  FUNCTION(gsl_matrix, get) (m, i, j);              exp_imin = i;              exp_jmin = j;            }          }      }    {      BASE max = FUNCTION(gsl_matrix, max) (m) ;      gsl_test (max != exp_max, NAME(gsl_matrix) "_max returns correct maximum value");    }    {      BASE min = FUNCTION(gsl_matrix, min) (m) ;            gsl_test (min != exp_min, NAME(gsl_matrix) "_min returns correct minimum value");    }    {      BASE min, max;      FUNCTION(gsl_matrix, minmax) (m, &min, &max);      gsl_test (max != exp_max, NAME(gsl_matrix) "_minmax returns correct maximum value");      gsl_test (min != exp_min, NAME(gsl_matrix) "_minmax returns correct minimum value");    }    {      size_t imax, jmax;      FUNCTION(gsl_matrix, max_index) (m, &imax, &jmax) ;      gsl_test (imax != exp_imax, NAME(gsl_matrix) "_max_index returns correct maximum i");      gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_max_index returns correct maximum j");    }    {      size_t imin, jmin;      FUNCTION(gsl_matrix, min_index) (m, &imin, &jmin) ;      gsl_test (imin != exp_imin, NAME(gsl_matrix) "_min_index returns correct minimum i");      gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_min_index returns correct minimum j");    }    {      size_t imin, jmin, imax, jmax;      FUNCTION(gsl_matrix, minmax_index) (m,  &imin, &jmin, &imax, &jmax);      gsl_test (imax != exp_imax, NAME(gsl_matrix) "_minmax_index returns correct maximum i");      gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_minmax_index returns correct maximum j");      gsl_test (imin != exp_imin, NAME(gsl_matrix) "_minmax_index returns correct minimum i");      gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_minmax_index returns correct minimum j");    }#if FP    FUNCTION(gsl_matrix,set)(m, 2, 3, GSL_NAN);    exp_min = GSL_NAN; exp_max = GSL_NAN;    exp_imin = 2; exp_jmin = 3;    exp_imax = 2; exp_jmax = 3;    {      BASE max = FUNCTION(gsl_matrix, max) (m) ;      gsl_test_abs (max,exp_max, 0, NAME(gsl_matrix) "_max returns correct maximum value for NaN");    }    {      BASE min = FUNCTION(gsl_matrix, min) (m) ;            gsl_test_abs (min, exp_min, 0, NAME(gsl_matrix) "_min returns correct minimum value for NaN");    }    {      BASE min, max;      FUNCTION(gsl_matrix, minmax) (m, &min, &max);      gsl_test_abs (max, exp_max, 0, NAME(gsl_matrix) "_minmax returns correct maximum value for NaN");      gsl_test_abs (min, exp_min, 0, NAME(gsl_matrix) "_minmax returns correct minimum value for NaN");    }    {      size_t imax, jmax;      FUNCTION(gsl_matrix, max_index) (m, &imax, &jmax) ;      gsl_test (imax != exp_imax, NAME(gsl_matrix) "_max_index returns correct maximum i for NaN");      gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_max_index returns correct maximum j for NaN");    }    {      size_t imin, jmin;      FUNCTION(gsl_matrix, min_index) (m, &imin, &jmin) ;      gsl_test (imin != exp_imin, NAME(gsl_matrix) "_min_index returns correct minimum i for NaN");      gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_min_index returns correct minimum j for NaN");    }    {      size_t imin, jmin, imax, jmax;      FUNCTION(gsl_matrix, minmax_index) (m,  &imin, &jmin, &imax, &jmax);      gsl_test (imax != exp_imax, NAME(gsl_matrix) "_minmax_index returns correct maximum i for NaN");      gsl_test (jmax != exp_jmax, NAME(gsl_matrix) "_minmax_index returns correct maximum j for NaN");      gsl_test (imin != exp_imin, NAME(gsl_matrix) "_minmax_index returns correct minimum i for NaN");      gsl_test (jmin != exp_jmin, NAME(gsl_matrix) "_minmax_index returns correct minimum j for NaN");    }#endif   }  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) 0);        }    }  {    status = (FUNCTION(gsl_matrix,isnull)(m) != 1);    TEST (status, "_isnull" DESC " on null matrix") ;    status = (FUNCTION(gsl_matrix,ispos)(m) != 0);    TEST (status, "_ispos" DESC " on null matrix") ;    status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on null matrix") ;    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1);    TEST (status, "_isnonneg" DESC " on null matrix") ;  }  k = 0;  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          k++;          FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) (k % 10));        }    }  {    status = (FUNCTION(gsl_matrix,isnull)(m) != 0);    TEST (status, "_isnull" DESC " on non-negative matrix") ;    status = (FUNCTION(gsl_matrix,ispos)(m) != 0);    TEST (status, "_ispos" DESC " on non-negative matrix") ;    status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on non-negative matrix") ;    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1);    TEST (status, "_isnonneg" DESC " on non-negative matrix") ;  }#ifndef UNSIGNED  k = 0;  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          ATOMIC mij = ((++k) % 10)  - (ATOMIC) 5;          FUNCTION (gsl_matrix, set) (m, i, j, mij);        }    }  {    status = (FUNCTION(gsl_matrix,isnull)(m) != 0);    TEST (status, "_isnull" DESC " on mixed matrix") ;    status = (FUNCTION(gsl_matrix,ispos)(m) != 0);    TEST (status, "_ispos" DESC " on mixed matrix") ;    status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on mixed matrix") ;    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 0);    TEST (status, "_isnonneg" DESC " on mixed matrix") ;  }  k = 0;  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          k++;          FUNCTION (gsl_matrix, set) (m, i, j, -(ATOMIC) (k % 10));        }    }  {    status = (FUNCTION(gsl_matrix,isnull)(m) != 0);    TEST (status, "_isnull" DESC " on non-positive matrix") ;    status = (FUNCTION(gsl_matrix,ispos)(m) != 0);    TEST (status, "_ispos" DESC " on non-positive matrix") ;    status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on non-positive matrix") ;    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 0);    TEST (status, "_isnonneg" DESC " on non-positive matrix") ;  }#endif  k = 0;  for (i = 0; i < M; i++)    {      for (j = 0; j < N; j++)        {          k++;          FUNCTION (gsl_matrix, set) (m, i, j, (ATOMIC) (k % 10 + 1));        }    }  {    status = (FUNCTION(gsl_matrix,isnull)(m) != 0);    TEST (status, "_isnull" DESC " on positive matrix") ;    status = (FUNCTION(gsl_matrix,ispos)(m) != 1);    TEST (status, "_ispos" DESC " on positive matrix") ;    status = (FUNCTION(gsl_matrix,isneg)(m) != 0);    TEST (status, "_isneg" DESC " on positive matrix") ;    status = (FUNCTION(gsl_matrix,isnonneg)(m) != 1);    TEST (status, "_isnonneg" DESC " on positive matrix") ;  }#if (!defined(UNSIGNED) && !defined(BASE_CHAR))  k = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -