introduce isNaturalNumber()
authorDenis Ovsienko <denis@ovsienko.info>
Fri, 18 May 2018 12:57:33 +0000 (13:57 +0100)
committerDenis Ovsienko <denis@ovsienko.info>
Fri, 18 May 2018 12:57:33 +0000 (13:57 +0100)
In this case a separate unary function does a better job than the second
optional argument to isUnsignedInteger(), whether implicit or explicit.
Use it in decodeVLANCK() and questionMarks(). Add some tests.

tests/PureFunctionTest.php
wwwroot/inc/functions.php

index 787fce82061aff02705626b8d382656d2ee67ece..3e8ba834f7ae40dca09a5165006f72dbef5da970 100644 (file)
@@ -413,6 +413,27 @@ class PureFunctionTest extends RTTestCase
                        array ('isUnsignedInteger', '1.5', FALSE),
                        array ('isUnsignedInteger', '2', TRUE),
 
+                       array ('isNaturalNumber', -2, FALSE),
+                       array ('isNaturalNumber', -1.5, FALSE),
+                       array ('isNaturalNumber', -1, FALSE),
+                       array ('isNaturalNumber', 0, FALSE),
+                       array ('isNaturalNumber', 0.0, FALSE),
+                       array ('isNaturalNumber', 1, TRUE),
+                       array ('isNaturalNumber', 1.5, FALSE),
+                       array ('isNaturalNumber', 2, TRUE),
+                       array ('isNaturalNumber', NULL, FALSE),
+                       array ('isNaturalNumber', FALSE, FALSE),
+                       array ('isNaturalNumber', TRUE, FALSE),
+                       array ('isNaturalNumber', '', FALSE),
+                       array ('isNaturalNumber', '-2', FALSE),
+                       array ('isNaturalNumber', '-1.5', FALSE),
+                       array ('isNaturalNumber', '-1', FALSE),
+                       array ('isNaturalNumber', '0', FALSE),
+                       array ('isNaturalNumber', '0.0', FALSE),
+                       array ('isNaturalNumber', '1', TRUE),
+                       array ('isNaturalNumber', '1.5', FALSE),
+                       array ('isNaturalNumber', '2', TRUE),
+
                        array ('isHTMLColor', FALSE, FALSE),
                        array ('isHTMLColor', TRUE, FALSE),
                        array ('isHTMLColor', NULL, FALSE),
index 5e02adf7b367c671efcf2ffb9668945c702a41b6..27fb4602ef21255a1a20baca7404b7fa77c8c216 100644 (file)
@@ -201,6 +201,11 @@ function isUnsignedInteger ($arg, $allow_zero = FALSE)
        return isInteger ($arg) && $arg >= ($allow_zero ? 0 : 1);
 }
 
+function isNaturalNumber ($arg)
+{
+       return isInteger ($arg) && $arg >= 1;
+}
+
 function isHTMLColor ($color)
 {
        return 1 == preg_match ('/^[0-9A-F]{6}$/i', $color);
@@ -3512,7 +3517,7 @@ function decodeVLANCK ($string)
        $matches = array();
        if (1 != preg_match ('/^([[:digit:]]+)-([[:digit:]]+)$/', $string, $matches))
                throw new InvalidArgException ('VLAN compound key', $string, 'format error');
-       if (! isUnsignedInteger ($matches[1]))
+       if (! isNaturalNumber ($matches[1]))
                throw new InvalidArgException ('VLAN compound key', $string, 'domain ID cannot be 0');
        if (! isValidVLANID ($matches[2]))
                throw new InvalidArgException ('VLAN compound key', $string, 'invalid VLAN ID');
@@ -4981,7 +4986,7 @@ function usort_portlist (&$portnames)
 // the string will be a part of an SQL query.
 function questionMarks ($count)
 {
-       if (! isUnsignedInteger ($count))
+       if (! isNaturalNumber ($count))
                throw new InvalidArgException ('count', $count, 'must be greater than zero');
        return implode (', ', array_fill (0, $count, '?'));
 }