[gnumeric] protect sign test from errors and non-numbers
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] protect sign test from errors and non-numbers
- Date: Sat, 12 Dec 2009 02:12:18 +0000 (UTC)
commit 4e104f6b539b73cc9c33d97d0ebc2ec01f2e39b1
Author: Andreas J. Guelzow <aguelzow pyrshep ca>
Date: Fri Dec 11 19:11:30 2009 -0700
protect sign test from errors and non-numbers
2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
* dialog-analysis-tool-sign-test.c (dialog_sign_test_tool):
check for fn_info plugin
2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
* analysis-sign-test.c (analysis_tool_sign_test_engine_run):
watch for errors and non-numbers
src/dialogs/ChangeLog | 5 ++
src/dialogs/dialog-analysis-tool-sign-test.c | 1 +
src/tools/ChangeLog | 5 ++
src/tools/analysis-sign-test.c | 72 ++++++++++++++++---------
4 files changed, 57 insertions(+), 26 deletions(-)
---
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 516c568..5c06eea 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,5 +1,10 @@
2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * dialog-analysis-tool-sign-test.c (dialog_sign_test_tool):
+ check for fn_info plugin
+
+2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* dialog-analysis-tool-sign-test.c: new
* sign-test.glade: new
* Makefile.am: add the above
diff --git a/src/dialogs/dialog-analysis-tool-sign-test.c b/src/dialogs/dialog-analysis-tool-sign-test.c
index 87cde91..3631a0c 100644
--- a/src/dialogs/dialog-analysis-tool-sign-test.c
+++ b/src/dialogs/dialog-analysis-tool-sign-test.c
@@ -190,6 +190,7 @@ dialog_sign_test_tool (WBCGtk *wbcg, Sheet *sheet, G_GNUC_UNUSED int n_median)
char const * plugins[] = { "Gnumeric_fnstat",
"Gnumeric_fnlogical",
"Gnumeric_fnmath",
+ "Gnumeric_fninfo",
NULL};
if ((wbcg == NULL) ||
diff --git a/src/tools/ChangeLog b/src/tools/ChangeLog
index 204e707..516cc75 100644
--- a/src/tools/ChangeLog
+++ b/src/tools/ChangeLog
@@ -1,5 +1,10 @@
2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * analysis-sign-test.c (analysis_tool_sign_test_engine_run):
+ watch for errors and non-numbers
+
+2009-12-11 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* analysis-sign-test.c: new
* analysis-sign-test.h: new
* Makefile.am: add the above
diff --git a/src/tools/analysis-sign-test.c b/src/tools/analysis-sign-test.c
index a3ff752..46d5fa8 100644
--- a/src/tools/analysis-sign-test.c
+++ b/src/tools/analysis-sign-test.c
@@ -45,12 +45,15 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
GnmExpr const *expr;
GnmExpr const *expr_neg;
GnmExpr const *expr_pos;
+ GnmExpr const *expr_isnumber;
GnmFunc *fd_median;
GnmFunc *fd_if;
GnmFunc *fd_sum;
GnmFunc *fd_min;
GnmFunc *fd_binomdist;
+ GnmFunc *fd_isnumber;
+ GnmFunc *fd_iferror;
fd_median = gnm_func_lookup_or_add_placeholder ("MEDIAN", dao->sheet ? dao->sheet->workbook : NULL, FALSE);
gnm_func_ref (fd_median);
@@ -62,6 +65,10 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
gnm_func_ref (fd_min);
fd_binomdist = gnm_func_lookup_or_add_placeholder ("BINOMDIST", dao->sheet ? dao->sheet->workbook : NULL, FALSE);
gnm_func_ref (fd_binomdist);
+ fd_isnumber = gnm_func_lookup_or_add_placeholder ("ISNUMBER", dao->sheet ? dao->sheet->workbook : NULL, FALSE);
+ gnm_func_ref (fd_isnumber);
+ fd_iferror = gnm_func_lookup_or_add_placeholder ("IFERROR", dao->sheet ? dao->sheet->workbook : NULL, FALSE);
+ gnm_func_ref (fd_iferror);
dao_set_italic (dao, 0, 0, 0, 9);
set_cell_text_col (dao, 0, 0, _("/Sign Test"
@@ -89,6 +96,12 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
dao_set_cell_expr (dao, col + 1, 5, make_cellref (-1,0));
}
+ expr_isnumber = gnm_expr_new_funcall3
+ (fd_if, gnm_expr_new_funcall1
+ (fd_isnumber, gnm_expr_new_constant (value_dup (val_org))),
+ gnm_expr_new_constant (value_new_int (1)),
+ gnm_expr_new_constant (value_new_int (0)));
+
expr = gnm_expr_new_funcall1
(fd_median,
gnm_expr_new_constant (value_dup (val_org)));
@@ -96,38 +109,42 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
expr_neg = gnm_expr_new_funcall1
(fd_sum,
- gnm_expr_new_funcall3
- (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
- GNM_EXPR_OP_LT, make_cellref (0,-1)),
- gnm_expr_new_constant (value_new_int (1)),
- gnm_expr_new_constant (value_new_int (0))));
+ gnm_expr_new_binary
+ (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_MULT,
+ gnm_expr_new_funcall2
+ (fd_iferror,
+ gnm_expr_new_funcall3
+ (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
+ GNM_EXPR_OP_LT, make_cellref (0,-1)),
+ gnm_expr_new_constant (value_new_int (1)),
+ gnm_expr_new_constant (value_new_int (0))),
+ gnm_expr_new_constant (value_new_int (0)))));
expr_pos = gnm_expr_new_funcall1
(fd_sum,
- gnm_expr_new_funcall3
- (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
- GNM_EXPR_OP_GT, make_cellref (0,-1)),
- gnm_expr_new_constant (value_new_int (1)),
- gnm_expr_new_constant (value_new_int (0))));
+ gnm_expr_new_binary
+ (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_MULT,
+ gnm_expr_new_funcall2
+ (fd_iferror,
+ gnm_expr_new_funcall3
+ (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
+ GNM_EXPR_OP_GT, make_cellref (0,-1)),
+ gnm_expr_new_constant (value_new_int (1)),
+ gnm_expr_new_constant (value_new_int (0))),
+ gnm_expr_new_constant (value_new_int (0)))));
expr = gnm_expr_new_funcall2
(fd_min, expr_neg, expr_pos);
dao_set_cell_array_expr (dao, col + 1, 3, expr);
- expr_neg = gnm_expr_new_funcall1
- (fd_sum,
- gnm_expr_new_funcall3
- (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
- GNM_EXPR_OP_LT, make_cellref (0,-2)),
- gnm_expr_new_constant (value_new_int (1)),
- gnm_expr_new_constant (value_new_int (0))));
- expr_pos = gnm_expr_new_funcall1
- (fd_sum,
- gnm_expr_new_funcall3
- (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (val_org),
- GNM_EXPR_OP_GT, make_cellref (0,-2)),
- gnm_expr_new_constant (value_new_int (1)),
- gnm_expr_new_constant (value_new_int (0))));
- expr = gnm_expr_new_funcall2
- (fd_sum, expr_neg, expr_pos);
+ expr = gnm_expr_new_funcall1
+ (fd_sum, gnm_expr_new_binary
+ (expr_isnumber, GNM_EXPR_OP_MULT,
+ gnm_expr_new_funcall2
+ (fd_iferror, gnm_expr_new_funcall3
+ (fd_if, gnm_expr_new_binary (gnm_expr_new_constant (value_dup (val_org)),
+ GNM_EXPR_OP_NOT_EQUAL, make_cellref (0,-2)),
+ gnm_expr_new_constant (value_new_int (1)),
+ gnm_expr_new_constant (value_new_int (0))),
+ gnm_expr_new_constant (value_new_int (0)))));
dao_set_cell_array_expr (dao, col + 1, 4, expr);
expr = gnm_expr_new_funcall4 (fd_binomdist, make_cellref (0,-3), make_cellref (0,-2),
@@ -139,6 +156,7 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
GNM_EXPR_OP_MULT, make_cellref (0,-1));
dao_set_cell_array_expr (dao, col + 1, 7, expr);
+ value_release (val_org);
}
gnm_func_unref (fd_median);
@@ -146,6 +164,8 @@ analysis_tool_sign_test_engine_run (data_analysis_output_t *dao,
gnm_func_unref (fd_min);
gnm_func_unref (fd_sum);
gnm_func_unref (fd_binomdist);
+ gnm_func_unref (fd_isnumber);
+ gnm_func_unref (fd_iferror);
dao_redraw_respan (dao);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]