#!/bin/bash -xe cmd=./natest echo "Single match and wildcard" $cmd 'a=1' 'a=1' $cmd '(a=1)' 'a=1' $cmd 'a=*' 'a=1' $cmd 'a=*' 'a=2' ! $cmd 'a=1' 'a=2' ! $cmd 'a=1' 'b=1' ! $cmd 'a=*' 'b=1' echo "Single OR" $cmd 'a=1 or b=1' 'a=1' $cmd 'a=1 or b=1' 'b=1' $cmd '(a=1 or b=1)' 'a=1' $cmd '(a=1) or (b=1)' 'b=1' ! $cmd 'a=1 or b=1' 'c=1' ! $cmd 'a=1 or b=1' 'b=2' echo "Hex string byte comparison" $cmd 'a=1 or b=[414243]' 'b=ABC' ! $cmd 'a=1 or b=[414243]' 'b=ABZ' ! $cmd 'a=1 or b=[41424]' 'b=ABC' echo "Multiple OR" $cmd 'a=1 or b=1 or b=2' 'a=1' $cmd 'a=1 or b=1 or b=2' 'b=1' $cmd 'a=1 or b=1 or b=2' 'b=2' ! $cmd 'a=1 or b=1 or b=2' 'a=2' 'b=3' echo "Single AND and wildcard" $cmd 'a=1 and b=1' 'a=1' 'b=1' $cmd 'a=1 and b=*' 'a=1' 'b=1' $cmd 'a=1 and b=*' 'a=1' 'b=2' ! $cmd 'a=1 and b=1' 'a=1' ! $cmd 'a=1 and b=1' 'b=1' echo "Multiple AND with some arbitrary nesting" $cmd 'a=1 and b=1 and c=1' 'a=1' 'b=1' 'c=1' $cmd '(a=1 and (b=1 and c=1))' 'a=1' 'b=1' 'c=1' ! $cmd 'a=1 and b=1 and c=1' 'b=1' 'c=1' echo "Combinations" $cmd 'a=1 and b=1 or b=2' 'a=1' 'b=1' $cmd 'a=1 and b=1 or b=2' 'a=1' 'b=2' $cmd '(a=1 and b=1) or b=2' 'b=2' $cmd '(a=1 and b=1) or b=2' 'a=1' 'b=1' ! $cmd 'a=1 and b=1 or b=2' 'b=2' ! $cmd 'a=1 and b=1 or b=2' 'a=1' 'b=3' ! $cmd '(a=1 and b=1) or b=2' 'b=1' ! $cmd '(a=1 and b=1) or b=2' 'a=2' 'b=1' $cmd 'a=1 or b=1 and c=1' 'a=1' $cmd 'a=1 or (b=1 and c=1)' 'a=1' $cmd 'a=1 or b=1 and c=1' 'b=1' 'c=1' $cmd 'a=1 or (b=1 and c=1)' 'b=1' 'c=1' ! $cmd 'a=1 or b=1 and c=1' 'a=2' 'b=1' 'c=2' ! $cmd 'a=1 or b=1 and c=1' 'b=1' 'c=2' $cmd '(a=1 or b=1) and c=1' 'a=1' 'c=1' $cmd '(a=1 or b=1) and c=1' 'b=1' 'c=1' ! $cmd '(a=1 or b=1) and c=1' 'a=1' ! $cmd '(a=1 or b=1) and c=1' 'b=1' ! $cmd '(a=1 or b=1) and c=1' 'c=1' $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=1' 'b=1' $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=2' 'b=1' $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=1' 'b=2' 'c=1' $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=2' 'b=2' 'c=1' ! $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=2' 'b=3' 'c=1' ! $cmd '((a=1 or a=2) and (b=1 or (b=2 and c=1)))' 'a=2' 'b=2' 'c=2' echo "Parse errors" ! $cmd '(a=)' 'a=1' ! $cmd '(a=1 b=1)' 'a=1' ! $cmd '((a=1 or b=1)' 'a=1' ! $cmd 'a=1 or' 'a=1' ! $cmd 'a or b' 'a=1' ! $cmd '((a=1)or b=1)' 'a=1'