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

📄 test_source.c

📁 This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without ev
💻 C
📖 第 1 页 / 共 2 页
字号:
/* vector/test_source.c *  * Copyright (C) 1996, 1997, 1998, 1999, 2000 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 2 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) (size_t stride, size_t N);void FUNCTION (test, ops) (size_t stride1, size_t stride2, size_t N);void FUNCTION (test, file) (size_t stride, size_t N);void FUNCTION (test, text) (size_t stride, size_t N);void FUNCTION (test, trap) (size_t stride, size_t N);TYPE (gsl_vector) * FUNCTION(create, vector) (size_t stride, size_t N);#define TEST(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride=%d, N=%d", stride, N)#define TEST2(expr,desc) gsl_test((expr), NAME(gsl_vector) desc " stride1=%d, stride2=%d, N=%d", stride1, stride2, N)TYPE (gsl_vector) *FUNCTION(create, vector) (size_t stride, size_t N){    TYPE (gsl_vector) * v = FUNCTION (gsl_vector, calloc) (N*stride);    v->stride = stride;    v->size = N;    return v;}voidFUNCTION (test, func) (size_t stride, size_t N){  TYPE (gsl_vector) * v0;  TYPE (gsl_vector) * v;  QUALIFIED_VIEW(gsl_vector,view) view;  size_t i, j;  if (stride == 1)     {      v = FUNCTION (gsl_vector, calloc) (N);            TEST(v->data == 0, "_calloc pointer");      TEST(v->size != N, "_calloc size");      TEST(v->stride != 1, "_calloc stride");      {        int status = (FUNCTION(gsl_vector,isnull)(v) != 1);        TEST (status, "_isnull" DESC " on calloc vector");      }      FUNCTION (gsl_vector, free) (v);      /* free whatever is in v */    }  if (stride == 1)     {      v = FUNCTION (gsl_vector, alloc) (N);            TEST(v->data == 0, "_alloc pointer");      TEST(v->size != N, "_alloc size");      TEST(v->stride != 1, "_alloc stride");      FUNCTION (gsl_vector, free) (v);      /* free whatever is in v */    }  if (stride == 1)    {      v0 = FUNCTION (gsl_vector, alloc) (N);      view = FUNCTION (gsl_vector, subvector) (v0, 0, N);      v = &view.vector;    }  else    {      v0 = FUNCTION (gsl_vector, alloc) (N * stride);      for (i = 0; i < N*stride; i++)        {          v0->data[i] = i;        }            view = FUNCTION (gsl_vector, subvector_with_stride) (v0, 0, stride, N);      v = &view.vector;    }        {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i);      }    for (i = 0; i < N; i++)      {        if (v->data[i*stride] != (ATOMIC) (i))          status = 1;      };      TEST(status,"_set" DESC " writes into array");  }  {    int status = 0;    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i))          status = 1;      };    TEST (status, "_get" DESC " reads from array");  }    {    int status = 0;    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, ptr) (v, i) != v->data + i*stride)          status = 1;      };    TEST (status, "_ptr" DESC " access to array");  }  {    int status = 0;        for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, const_ptr) (v, i) != v->data + i*stride)          status = 1;      };        TEST (status, "_const_ptr" DESC " access to array");  }  {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set) (v, i, (ATOMIC) 0);      }        status = (FUNCTION(gsl_vector,isnull)(v) != 1);    TEST (status, "_isnull" DESC " on null vector") ;  }  {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i);      }        status = (FUNCTION(gsl_vector,isnull)(v) != 0);    TEST (status, "_isnull" DESC " on non-null vector") ;  }  {    int status = 0;        FUNCTION (gsl_vector, set_zero) (v);    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC)0)          status = 1;      };    TEST (status, "_setzero" DESC " on non-null vector") ;  }  {    int status = 0;        FUNCTION (gsl_vector, set_all) (v, (ATOMIC)27);    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (27))          status = 1;      };    TEST (status, "_setall" DESC " to non-zero value") ;  }  {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set_basis) (v, i);        for (j = 0; j < N; j++)          {            if (i == j)              {                if (FUNCTION (gsl_vector, get) (v, j) != (ATOMIC)1)                  status = 1 ;              }            else               {                if (FUNCTION (gsl_vector, get) (v, j) != (ATOMIC)(0))                  status = 1;              }          };      }    TEST (status, "_setbasis" DESC " over range") ;  }  {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i);      }    FUNCTION (gsl_vector, scale) (v, 2.0);    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i*2.0))          status = 1;      };    TEST (status, "_scale" DESC " by 2") ;  }  {    int status = 0;    FUNCTION (gsl_vector, add_constant) (v, (ATOMIC)7);    for (i = 0; i < N; i++)      {        if (FUNCTION (gsl_vector, get) (v, i) != (ATOMIC) (i*2.0 + 7))          status = 1;      };    TEST (status, "_add_constant" DESC) ;  }      {    int status = 0;    for (i = 0; i < N; i++)      {        FUNCTION (gsl_vector, set) (v, i, (ATOMIC) i);      }    FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ;        status = (FUNCTION(gsl_vector,get)(v,2) != 5) ;    status |= (FUNCTION(gsl_vector,get)(v,5) != 2) ;        FUNCTION (gsl_vector,swap_elements) (v, 2, 5) ;        status |= (FUNCTION(gsl_vector,get)(v,2) != 2) ;    status |= (FUNCTION(gsl_vector,get)(v,5) != 5) ;        TEST (status, "_swap_elements" DESC " (2,5)") ;  }  {    int status = 0;    FUNCTION (gsl_vector,reverse) (v) ;        for (i = 0; i < N; i++)      {        status |= (FUNCTION (gsl_vector, get) (v, i) !=  (ATOMIC) (N - i - 1));      }        TEST (status, "_reverse" DESC " reverses elements") ;  }  {    BASE exp_max = FUNCTION(gsl_vector,get)(v, 0);    BASE exp_min = FUNCTION(gsl_vector,get)(v, 0);    size_t exp_imax = 0, exp_imin = 0;    for (i = 0; i < N; i++)      {        BASE k = FUNCTION(gsl_vector, get) (v, i) ;        if (k < exp_min) {          exp_min = FUNCTION(gsl_vector, get) (v, i);          exp_imin = i;        }      }    for (i = 0; i < N; i++)      {        BASE k = FUNCTION(gsl_vector, get) (v, i) ;        if (k > exp_max) {          exp_max = FUNCTION(gsl_vector, get) (v, i) ;          exp_imax = i;        }       }    {      BASE max = FUNCTION(gsl_vector, max) (v) ;      TEST (max != exp_max, "_max returns correct maximum value");    }    {      BASE min = FUNCTION(gsl_vector, min) (v) ;      TEST (min != exp_min, "_min returns correct minimum value");    }    {      BASE min, max;      FUNCTION(gsl_vector, minmax) (v, &min, &max);      TEST (max != exp_max, "_minmax returns correct maximum value");      TEST (min != exp_min, "_minmax returns correct minimum value");

⌨️ 快捷键说明

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