Skip to content

Commit edf40dc

Browse files
committed
Introduced many tests
1 parent d76fb10 commit edf40dc

File tree

2 files changed

+573
-107
lines changed

2 files changed

+573
-107
lines changed

org/qmckl_electron.org

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -678,25 +678,32 @@ for (int64_t i=0 ; i<3*elec_num*walk_num ; ++i) {
678678
*** Get
679679

680680
#+begin_src c :comments org :tangle (eval h_func) :noweb yes
681-
qmckl_exit_code qmckl_get_electron_ee_distance(qmckl_context context, double* const distance);
681+
qmckl_exit_code
682+
qmckl_get_electron_ee_distance(qmckl_context context,
683+
double* const distance,
684+
const int64_t size_max);
682685
#+end_src
683686

684687
#+begin_src f90 :tangle (eval fh_func) :comments org :exports none
685688
interface
686-
integer(c_int32_t) function qmckl_get_electron_ee_distance(context, distance) &
689+
integer(c_int32_t) function qmckl_get_electron_ee_distance(context, distance, size_max) &
687690
bind(C)
688691
use, intrinsic :: iso_c_binding
689692
import
690693
implicit none
691694
integer (c_int64_t) , intent(in) , value :: context
692695
real (c_double ) , intent(out) :: distance(*)
696+
integer (c_int64_t) , intent(in) :: size_max
693697
end function
694698
end interface
695699
#+end_src
696700

697701

698702
#+begin_src c :comments org :tangle (eval c) :noweb yes :exports none
699-
qmckl_exit_code qmckl_get_electron_ee_distance(qmckl_context context, double* const distance)
703+
qmckl_exit_code
704+
qmckl_get_electron_ee_distance(qmckl_context context,
705+
double* const distance,
706+
const int64_t size_max)
700707
{
701708
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
702709
return QMCKL_NULL_CONTEXT;
@@ -707,10 +714,23 @@ qmckl_exit_code qmckl_get_electron_ee_distance(qmckl_context context, double* co
707714
rc = qmckl_provide_ee_distance(context);
708715
if (rc != QMCKL_SUCCESS) return rc;
709716

717+
if (distance == NULL) {
718+
return qmckl_failwith( context,
719+
QMCKL_INVALID_ARG_2,
720+
"qmckl_get_electron_ee_distance",
721+
"distance is a null pointer");
722+
}
723+
710724
qmckl_context_struct* const ctx = (qmckl_context_struct*) context;
711725
assert (ctx != NULL);
712726

713-
size_t sze = ctx->electron.num * ctx->electron.num * ctx->electron.walker.num;
727+
const int64_t sze = ctx->electron.num * ctx->electron.num * ctx->electron.walker.num;
728+
if (size_max < sze) {
729+
return qmckl_failwith( context,
730+
QMCKL_INVALID_ARG_3,
731+
"qmckl_get_electron_ee_distance",
732+
"size_max < num*num*walk_num");
733+
}
714734
memcpy(distance, ctx->electron.ee_distance, sze * sizeof(double));
715735

716736
return QMCKL_SUCCESS;
@@ -901,7 +921,7 @@ assert(qmckl_electron_provided(context));
901921

902922

903923
double ee_distance[walk_num * elec_num * elec_num];
904-
rc = qmckl_get_electron_ee_distance(context, ee_distance);
924+
rc = qmckl_get_electron_ee_distance(context, ee_distance, walk_num * elec_num * elec_num);
905925

906926
// (e1,e2,w)
907927
// (0,0,0) == 0.

0 commit comments

Comments
 (0)