patch 8.1.1111: it is not easy to check for infinity
Problem: It is not easy to check for infinity.
Solution: Add isinf(). (Ozaki Kiichi, closes #3787)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2eafe14..4a54d6d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -237,6 +237,7 @@
static void f_isdirectory(typval_T *argvars, typval_T *rettv);
static void f_islocked(typval_T *argvars, typval_T *rettv);
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
+static void f_isinf(typval_T *argvars, typval_T *rettv);
static void f_isnan(typval_T *argvars, typval_T *rettv);
#endif
static void f_items(typval_T *argvars, typval_T *rettv);
@@ -721,6 +722,9 @@
{"insert", 2, 3, f_insert},
{"invert", 1, 1, f_invert},
{"isdirectory", 1, 1, f_isdirectory},
+#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
+ {"isinf", 1, 1, f_isinf},
+#endif
{"islocked", 1, 1, f_islocked},
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
{"isnan", 1, 1, f_isnan},
@@ -6582,9 +6586,6 @@
#ifdef FEAT_TAG_BINS
"tag_binary",
#endif
-#ifdef FEAT_TAG_OLDSTATIC
- "tag_old_static",
-#endif
#ifdef FEAT_TCL
# ifndef DYNAMIC_TCL
"tcl",
@@ -7443,6 +7444,16 @@
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
/*
+ * "isinf()" function
+ */
+ static void
+f_isinf(typval_T *argvars, typval_T *rettv)
+{
+ if (argvars[0].v_type == VAR_FLOAT && isinf(argvars[0].vval.v_float))
+ rettv->vval.v_number = argvars[0].vval.v_float > 0.0 ? 1 : -1;
+}
+
+/*
* "isnan()" function
*/
static void
diff --git a/src/testdir/test_float_func.vim b/src/testdir/test_float_func.vim
index 32b985e..48fae74 100644
--- a/src/testdir/test_float_func.vim
+++ b/src/testdir/test_float_func.vim
@@ -288,13 +288,24 @@
call assert_fails("call trunc('')", 'E808:')
endfunc
+func Test_isinf()
+ call assert_equal(1, isinf(1.0/0.0))
+ call assert_equal(-1, isinf(-1.0/0.0))
+ call assert_false(isinf(1.0))
+ call assert_false(isinf(0.0/0.0))
+ call assert_false(isinf('a'))
+ call assert_false(isinf([]))
+ call assert_false(isinf({}))
+endfunc
+
func Test_isnan()
- call assert_equal(0, isnan(1.0))
- call assert_equal(1, isnan(0.0/0.0))
- call assert_equal(0, isnan(1.0/0.0))
- call assert_equal(0, isnan('a'))
- call assert_equal(0, isnan([]))
- call assert_equal(0, isnan({}))
+ call assert_true(isnan(0.0/0.0))
+ call assert_false(isnan(1.0))
+ call assert_false(isnan(1.0/0.0))
+ call assert_false(isnan(-1.0/0.0))
+ call assert_false(isnan('a'))
+ call assert_false(isnan([]))
+ call assert_false(isnan({}))
endfunc
" This was converted from test65
diff --git a/src/version.c b/src/version.c
index 38a7683..9c237e5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1111,
+/**/
1110,
/**/
1109,