From 2084481d9bedc48e8ac91825a3ccf2bf0bbf4806 Mon Sep 17 00:00:00 2001 From: Ronan Collobert Date: Fri, 6 Mar 2015 17:36:32 -0800 Subject: variable with default can be nil (and returns the default) + test case added --- graph.lua | 3 +++ init.lua | 4 ++-- test/test.lua | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/graph.lua b/graph.lua index 757d5fa..3d6cc55 100644 --- a/graph.lua +++ b/graph.lua @@ -60,6 +60,9 @@ local function rules2defaultrules(rules, rulesmask, rulestype) elseif rulemask == '2' then table.insert(defaultrules, rule) elseif rulemask == '3' then + if rule.default or rule.defaulta or rule.defaultf then + table.insert(defaultrules, rule) + end end end return defaultrules diff --git a/init.lua b/init.lua index 334b188..aafa5c5 100644 --- a/init.lua +++ b/init.lua @@ -23,7 +23,7 @@ local function generaterules(rules) local optperrule = {} for ridx, rule in ipairs(rules) do if rule.default ~= nil or rule.defaulta or rule.defaultf then - optperrule[ridx] = 2 -- here or not here + optperrule[ridx] = 3 -- here, nil or not here elseif rule.opt then optperrule[ridx] = 3 -- here, nil or not here else @@ -42,7 +42,7 @@ local function generaterules(rules) -- hence, the mask. for variant=nvariant,1,-1 do local r = variant - local rulemask = {} -- 1/2/3 means present/not present/opt + local rulemask = {} -- 1/2/3 means present [ordered]/not present [ordered]/ nil [named or ordered] for ridx=1,#rules do table.insert(rulemask, math.floor((r-1)/optperrulestride[ridx]) + 1) r = (r-1) % optperrulestride[ridx] + 1 diff --git a/test/test.lua b/test/test.lua index 385b374..17478be 100644 --- a/test/test.lua +++ b/test/test.lua @@ -272,8 +272,10 @@ foobar.addfive = argcheck{ assert(foobar:addfive() == '5.000000 + 5 = 10.000000 [msg = wassup] [self.checksum=1234567]') assert(foobar:addfive('paf') == '5.000000 + 5 = 10.000000 [msg = paf] [self.checksum=1234567]') +assert(foobar:addfive(nil, 'paf') == '5.000000 + 5 = 10.000000 [msg = paf] [self.checksum=1234567]') assert(foobar:addfive(6, 'paf') == '6.000000 + 5 = 11.000000 [msg = paf] [self.checksum=1234567]') assert(foobar:addfive(6) == '6.000000 + 5 = 11.000000 [msg = wassup] [self.checksum=1234567]') +assert(foobar:addfive(6, nil) == '6.000000 + 5 = 11.000000 [msg = wassup] [self.checksum=1234567]') assert(foobar:addfive{} == '5.000000 + 5 = 10.000000 [msg = wassup] [self.checksum=1234567]') assert(foobar:addfive{msg='paf'} == '5.000000 + 5 = 10.000000 [msg = paf] [self.checksum=1234567]') -- cgit v1.2.3