@@ -727,7 +727,7 @@ return describe("switch", function()
727727 end
728728 return assert .same (result , " matched cool" )
729729 end )
730- return it (" should handle switch in function call" , function ()
730+ it (" should handle switch in function call" , function ()
731731 local something = 1
732732 local getValue
733733 getValue = function ()
@@ -739,4 +739,247 @@ return describe("switch", function()
739739 end
740740 return assert .same (getValue (), " yes" )
741741 end )
742+ it (" should match empty list pattern with []" , function ()
743+ local emptyArray = { }
744+ local hashTable = {
745+ a = 1 ,
746+ b = 2
747+ }
748+ local arrayWithElements = {
749+ 1 ,
750+ 2 ,
751+ 3
752+ }
753+ local result1
754+ do
755+ local _type_0 = type (emptyArray )
756+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
757+ local _match_0 = false
758+ if _tab_0 then
759+ if # emptyArray == 0 then
760+ _match_0 = true
761+ result1 = " empty list"
762+ end
763+ end
764+ if not _match_0 then
765+ result1 = " not empty list"
766+ end
767+ end
768+ assert .same (result1 , " empty list" )
769+ local result2
770+ do
771+ local _type_0 = type (hashTable )
772+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
773+ local _match_0 = false
774+ if _tab_0 then
775+ if # hashTable == 0 then
776+ _match_0 = true
777+ result2 = " empty list"
778+ end
779+ end
780+ if not _match_0 then
781+ result2 = " not empty list"
782+ end
783+ end
784+ assert .same (result2 , " empty list" )
785+ local result3
786+ do
787+ local _type_0 = type (arrayWithElements )
788+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
789+ local _match_0 = false
790+ if _tab_0 then
791+ if # arrayWithElements == 0 then
792+ _match_0 = true
793+ result3 = " empty list"
794+ end
795+ end
796+ if not _match_0 then
797+ result3 = " not empty list"
798+ end
799+ end
800+ return assert .same (result3 , " not empty list" )
801+ end )
802+ it (" should match empty table pattern with {}" , function ()
803+ local emptyTable = { }
804+ local hashTable = {
805+ a = 1
806+ }
807+ local arrayTable = {
808+ 1
809+ }
810+ local result1
811+ do
812+ local _type_0 = type (emptyTable )
813+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
814+ local _match_0 = false
815+ if _tab_0 then
816+ if next (emptyTable ) == nil then
817+ _match_0 = true
818+ result1 = " empty table"
819+ end
820+ end
821+ if not _match_0 then
822+ result1 = " not empty table"
823+ end
824+ end
825+ assert .same (result1 , " empty table" )
826+ local result2
827+ do
828+ local _type_0 = type (hashTable )
829+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
830+ local _match_0 = false
831+ if _tab_0 then
832+ if next (hashTable ) == nil then
833+ _match_0 = true
834+ result2 = " empty table"
835+ end
836+ end
837+ if not _match_0 then
838+ result2 = " not empty table"
839+ end
840+ end
841+ assert .same (result2 , " not empty table" )
842+ local result3
843+ do
844+ local _type_0 = type (arrayTable )
845+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
846+ local _match_0 = false
847+ if _tab_0 then
848+ if next (arrayTable ) == nil then
849+ _match_0 = true
850+ result3 = " empty table"
851+ end
852+ end
853+ if not _match_0 then
854+ result3 = " not empty table"
855+ end
856+ end
857+ return assert .same (result3 , " not empty table" )
858+ end )
859+ it (" should distinguish between [] and {} patterns" , function ()
860+ local classify
861+ classify = function (x )
862+ local _type_0 = type (x )
863+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
864+ local _match_0 = false
865+ if _tab_0 then
866+ if next (x ) == nil then
867+ _match_0 = true
868+ return " truly empty"
869+ end
870+ end
871+ if not _match_0 then
872+ local _match_1 = false
873+ if _tab_0 then
874+ if # x == 0 then
875+ _match_1 = true
876+ return " no array elements"
877+ end
878+ end
879+ if not _match_1 then
880+ return " has elements"
881+ end
882+ end
883+ end
884+ assert .same (classify ({ }), " truly empty" )
885+ assert .same (classify ({
886+ a = 1
887+ }), " no array elements" )
888+ return assert .same (classify ({
889+ 1 ,
890+ 2
891+ }), " has elements" )
892+ end )
893+ it (" should handle empty list pattern with then syntax" , function ()
894+ local result
895+ do
896+ local _exp_0 = { }
897+ local _type_0 = type (_exp_0 )
898+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
899+ local _match_0 = false
900+ if _tab_0 then
901+ if # _exp_0 == 0 then
902+ _match_0 = true
903+ result = " matched"
904+ end
905+ end
906+ if not _match_0 then
907+ result = " not matched"
908+ end
909+ end
910+ return assert .same (result , " matched" )
911+ end )
912+ it (" should handle empty table pattern with then syntax" , function ()
913+ local result
914+ do
915+ local _exp_0 = { }
916+ local _type_0 = type (_exp_0 )
917+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
918+ local _match_0 = false
919+ if _tab_0 then
920+ if next (_exp_0 ) == nil then
921+ _match_0 = true
922+ result = " matched"
923+ end
924+ end
925+ if not _match_0 then
926+ result = " not matched"
927+ end
928+ end
929+ return assert .same (result , " matched" )
930+ end )
931+ return it (" should match empty patterns with multiple when branches" , function ()
932+ local emptyArray = { }
933+ local emptyHash = { }
934+ local result1
935+ do
936+ local _type_0 = type (emptyArray )
937+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
938+ local _match_0 = false
939+ if _tab_0 then
940+ if 1 == emptyArray [1 ] then
941+ _match_0 = true
942+ result1 = " has 1"
943+ end
944+ end
945+ if not _match_0 then
946+ local _match_1 = false
947+ if _tab_0 then
948+ if # emptyArray == 0 then
949+ _match_1 = true
950+ result1 = " empty list"
951+ end
952+ end
953+ if not _match_1 then
954+ result1 = " other"
955+ end
956+ end
957+ end
958+ assert .same (result1 , " empty list" )
959+ local result2
960+ do
961+ local _type_0 = type (emptyHash )
962+ local _tab_0 = " table" == _type_0 or " userdata" == _type_0
963+ local _match_0 = false
964+ if _tab_0 then
965+ if 1 == emptyHash .a then
966+ _match_0 = true
967+ result2 = " has a"
968+ end
969+ end
970+ if not _match_0 then
971+ local _match_1 = false
972+ if _tab_0 then
973+ if next (emptyHash ) == nil then
974+ _match_1 = true
975+ result2 = " empty table"
976+ end
977+ end
978+ if not _match_1 then
979+ result2 = " other"
980+ end
981+ end
982+ end
983+ return assert .same (result2 , " empty table" )
984+ end )
742985end )
0 commit comments