return function()local H=(game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")).Packages.Monolith local b=require(H.HashMap)local I=require(H.ArrayList)describe("\067\111\110\115\116\114\117\099\116\111\114",function()it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097\110 \101\109\112\116\121 \072\097\115\104\077\097\112",function()local H=b.new();(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097\110 \072\097\115\104\077\097\112 \102\114\111\109 \097 \116\097\098\108\101",function()local H={1,2,3;4;5}local I=b.new(H);(expect(I:Count())).to.equal(#H)local e=1 while I:Count()>0 do(expect(I:Contains(e))).to.equal(true)I:Remove(e)e=e+1 end end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097\110 \072\097\115\104\077\097\112 \102\114\111\109 \097 \067\111\108\108\101\099\116\105\111\110",function()local H=b.new({1;2,3,4;5})local I=b.new(H);(expect(I:Count())).to.equal(H:Count())for H,b in H:Enumerator()do(expect(I:Get(H))).to.equal(b)end end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \110\111\110-\116\097\098\108\101",function()(expect(function()b.new(true)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \098\111\111\108\101\097\110\046");(expect(function()b.new(1)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\117\109\098\101\114\046");(expect(function()b.new("\115\116\114\105\110\103")end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \115\116\114\105\110\103\046");(expect(function()b.new(function() end)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \102\117\110\099\116\105\111\110\046");(expect(function()b.new(Instance.new("\070\111\108\100\101\114"))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \117\115\101\114\100\097\116\097\046");(expect(function()b.new(coroutine.create(function() end))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \116\104\114\101\097\100\046")end)end)describe("\069\110\117\109\101\114\097\098\108\101 \073\110\116\101\114\102\097\099\101",function()describe("\069\110\117\109\101\114\097\116\111\114",function()it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097\110 \105\116\101\114\097\116\111\114 \103\101\110\101\114\097\116\111\114",function()local H=b.new()local I=H:Enumerator();(expect(I)).to.be.a("\102\117\110\099\116\105\111\110")end)it("\115\104\111\117\108\100 \101\110\117\109\101\114\097\116\101 \105\110 \097 \103\101\110\101\114\105\099 \102\111\114 \108\111\111\112",function()local H=b.new()local I=10 for b=1,I,1 do H:Add(b)end local e=0 for H,b in H:Enumerator()do e=e+1;(expect(H)).to.be.a("\110\117\109\098\101\114");(expect(b)).to.be.a("\098\111\111\108\101\097\110");(expect(H)).to.equal(e)end;(expect(e)).to.equal(I)end)end)end)describe("\067\111\108\108\101\099\116\105\111\110 \073\110\116\101\114\102\097\099\101",function()describe("\082\101\113\117\105\114\101\100 \077\101\116\104\111\100\115",function()describe("\067\111\110\116\097\105\110\115",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \101\108\101\109\101\110\116 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:Contains(0))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\110 \101\108\101\109\101\110\116 \119\104\101\110 \116\104\097\116 \101\108\101\109\101\110\116 \101\120\105\115\116\115",function()local H=b.new({1;2;3;4,5});(expect(H:Contains(1))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110 \101\108\101\109\101\110\116 \119\104\101\110 \116\104\097\116 \101\108\101\109\101\110\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1;2,3,4;5});(expect(H:Contains(0))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110 \101\108\101\109\101\110\116 \117\110\116\105\108 \105\116 \105\115 \097\100\100\101\100",function()local H=b.new({1;2;3;4,5});(expect(H:Contains(0))).to.equal(false)H:Add(0);(expect(H:Contains(0))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097\110 \101\108\101\109\101\110\116 \119\104\101\110 \105\116\115 \114\101\109\111\118\101\100",function()local H=b.new({1;2,3,4,5});(expect(H:Contains(1))).to.equal(true)H:Remove(1);(expect(H:Contains(1))).to.equal(false)end)end)describe("\067\111\110\116\097\105\110\115\065\108\108",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \101\108\101\109\101\110\116 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5});(expect(H:ContainsAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \122\101\114\111 \101\108\101\109\101\110\116\115 \119\104\101\110 \116\104\101 \112\114\111\118\105\100\101\100 \067\111\108\108\101\099\116\105\111\110 \105\115 \101\109\112\116\121",function()local H=b.new({1;2;3,4,5})local I=b.new();(expect(H:ContainsAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \097\108\108 \111\102 \116\104\101 \101\108\101\109\101\110\116\115 \101\120\105\115\116",function()local H=b.new({1;2;3,4,5})local I=b.fromTable({first=1,second=2,third=3,fourth=4,fifth=5});(expect(H:ContainsAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \105\116 \101\120\105\115\116\115",function()local H=b.new({1;2;3;4;5})local I=b.fromTable({third=3});(expect(H:ContainsAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \111\110\101 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1,2,4;5})local I=b.fromTable({first=1,second=2,third=3,fourth=4,fifth=5});(expect(H:ContainsAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \105\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1;2,4;5})local I=b.fromTable({third=3});(expect(H:ContainsAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \117\110\116\105\108 \116\104\101\121 \097\114\101 \097\100\100\101\100",function()local H=b.new()local I=b.fromTable({first=1;second=2});(expect(H:ContainsAll(I))).to.equal(false)H:Add(1);(expect(H:ContainsAll(I))).to.equal(false)H:Add(2);(expect(H:ContainsAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \116\104\101\121 \097\114\101 \114\101\109\111\118\101\100",function()local H=b.new({1;2,3;4;5})local I=b.fromTable({first=1;second=2,third=3,fourth=4,fifth=5});(expect(H:ContainsAll(I))).to.equal(true)H:Remove(1);(expect(H:ContainsAll(I))).to.equal(false)end)end)describe("\067\111\110\116\097\105\110\115\065\110\121",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \101\108\101\109\101\110\116 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1,second=2;third=3;fourth=4,fifth=5});(expect(H:ContainsAny(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \101\108\101\109\101\110\116 \119\104\101\110 \116\104\101 \112\114\111\118\105\100\101\100 \067\111\108\108\101\099\116\105\111\110 \105\115 \101\109\112\116\121",function()local H=b.new({1,2,3,4,5})local I=b.new();(expect(H:ContainsAny(I))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \116\104\101 \101\108\101\109\101\110\116\115 \101\120\105\115\116",function()local H=b.new({1,2,3;4;5})local I=b.fromTable({first=1,second=2,third=3;fourth=4,fifth=5});(expect(H:ContainsAny(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \105\116 \101\120\105\115\116\115",function()local H=b.new({1,2,3,4,5})local I=b.fromTable({third=3});(expect(H:ContainsAny(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \115\111\109\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \111\110\108\121 \111\110\101 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1,2,4;5})local I=b.fromTable({first=1,second=2,third=3,fourth=4,fifth=5});(expect(H:ContainsAny(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \105\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1;2,4;5})local I=b.fromTable({third=3});(expect(H:ContainsAny(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \101\108\101\109\101\110\116\115 \117\110\116\105\108 \116\104\101\121 \097\114\101 \097\100\100\101\100",function()local H=b.new()local I=b.fromTable({first=1;second=2});(expect(H:ContainsAny(I))).to.equal(false)H:Add(1);(expect(H:ContainsAny(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \116\104\101\121 \097\114\101 \097\108\108 \114\101\109\111\118\101\100",function()local H=b.new({1;2;3,4;5})local I=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5});(expect(H:ContainsAny(I))).to.equal(true)H:Remove(1);(expect(H:ContainsAny(I))).to.equal(true)H:Clear();(expect(H:ContainsAny(I))).to.equal(false)end)end)describe("\067\111\117\110\116",function()it("\115\104\111\117\108\100 \099\111\117\110\116 \122\101\114\111 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \099\111\117\110\116 \116\104\101 \110\117\109\098\101\114 \111\102 \101\108\101\109\101\110\116\115 \105\110 \116\104\101 \072\097\115\104\077\097\112",function()local H=b.new({1;2,3;4,5});(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \099\111\117\110\116 \110\101\119 \101\108\101\109\101\110\116\115 \119\104\101\110 \116\104\101\121 \097\114\101 \097\100\100\101\100",function()local H=b.new()local I=10;(expect(H:Count())).to.equal(0)for b=1,I,1 do H:Add(b);(expect(H:Count())).to.equal(b)end;(expect(H:Count())).to.equal(I)end)it("\115\104\111\117\108\100 \110\111\116 \099\111\117\110\116 \101\108\101\109\101\110\116\115 \097\102\116\101\114 \116\104\101\121 \097\114\101 \114\101\109\111\118\101\100",function()local H=b.new({1;2,3;4,5})local I=H:Count();(expect(I)).to.equal(5)local e=1 while I>0 do H:Remove(e)local b=I I=H:Count();(expect(I)).to.equal(b-1)e=e+1 end end)it("\115\104\111\117\108\100 \099\111\117\110\116 \122\101\114\111 \097\102\116\101\114 \098\101\105\110\103 \099\108\101\097\114\101\100",function()local H=b.new({1;2,3,4,5});(expect(H:Count())).to.equal(5)H:Clear();(expect(H:Count())).to.equal(0)end)end)describe("\069\109\112\116\121",function()it("\115\104\111\117\108\100 \098\101 \101\109\112\116\121 \119\104\101\110 \105\110\115\116\097\110\116\105\097\116\101\100",function()local H=b.new();(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \098\101 \101\109\112\116\121 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1});(expect(H:Empty())).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \098\101 \101\109\112\116\121 \119\105\116\104 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2,3,4;5});(expect(H:Empty())).to.equal(false)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \098\101 \101\109\112\116\121 \097\102\116\101\114 \097\110 \101\108\101\109\101\110\116 \105\115 \097\100\100\101\100",function()local H=b.new();(expect(H:Empty())).to.equal(true)H:Add(1);(expect(H:Empty())).to.equal(false)end)it("\115\104\111\117\108\100 \098\101 \101\109\112\116\121 \097\102\116\101\114 \097\108\108 \101\108\101\109\101\110\116\115 \097\114\101 \114\101\109\111\118\101\100",function()local H=b.new({1,2;3;4,5})local I=1 while H:Count()>0 do(expect(H:Empty())).to.equal(false)H:Remove(I)I=I+1 end;(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \098\101 \101\109\112\116\121 \097\102\116\101\114 \098\101\105\110\103 \099\108\101\097\114\101\100",function()local H=b.new({1,2;3;4,5});(expect(H:Empty())).to.equal(false)H:Clear();(expect(H:Empty())).to.equal(true)end)end)describe("\084\111\065\114\114\097\121",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \097 \116\097\098\108\101",function()local H=b.new();(expect(H:ToArray())).to.be.a("\116\097\098\108\101")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \116\097\098\108\101 \111\102 \116\104\101 \115\097\109\101 \115\105\122\101",function()local H=b.new({1;2;3;4;5});(expect(#H:ToArray())).to.equal(H:Count())end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097\110 \101\109\112\116\121 \116\097\098\108\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(#H:ToArray())).to.equal(0)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \116\097\098\108\101 \119\105\116\104 \116\104\101 \115\097\109\101 \101\108\101\109\101\110\116\115 \097\110\100 \111\114\100\101\114 \111\102 \101\110\117\109\101\114\097\116\105\111\110",function()local H=b.new({1;2,3;4;5})local I=H:ToArray();(expect(#I)).to.equal(H:Count())for b,I in ipairs(I)do(expect(H:Contains(I[1]))).to.equal(true)end end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \111\110\108\121 \097\114\114\097\121 \105\110\100\101\120\097\098\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1,2,3;4;5})local I=H:ToArray()local e=0 for H in pairs(I)do e=e+1 end;(expect(e)).to.equal(#I)end)end)describe("\084\111\084\097\098\108\101",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \097 \116\097\098\108\101",function()local H=b.new();(expect(H:ToTable())).to.be.a("\116\097\098\108\101")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \116\097\098\108\101 \111\102 \116\104\101 \115\097\109\101 \115\105\122\101",function()local H=b.new({1,2,3,4;5});(expect(#H:ToTable())).to.equal(H:Count())end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097\110 \101\109\112\116\121 \116\097\098\108\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(#H:ToTable())).to.equal(0)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \116\097\098\108\101 \119\105\116\104 \116\104\101 \115\097\109\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2;3,4;5})for b in pairs(H:ToTable())do(expect(H:Contains(b))).to.equal(true)end end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \116\097\098\108\101 \119\105\116\104 \097\108\108 \099\111\110\116\105\097\110\101\100 \105\110\100\105\099\101\115 \097\115 \116\104\101\105\114 \118\097\108\117\101\115",function()local H=b.fromTable({[1]=1;[2]=2;[3]=3;[4]=4;[5]=5})for H,b in pairs(H:ToTable())do(expect(b)).to.equal(H)end end)end)end)describe("\079\112\116\105\111\110\097\108 \077\101\116\104\111\100\115",function()describe("\065\100\100",function()it("\115\104\111\117\108\100 \097\100\100 \101\108\101\109\101\110\116\115 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()H:Add(1);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \097\100\100 \101\108\101\109\101\110\116\115 \119\104\101\110 \110\111\116 \101\109\112\116\121",function()local H=b.new({1,2;3;4;5})H:Add(6);(expect(H:Count())).to.equal(6)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \097\100\100\105\110\103 \097\110 \101\108\101\109\101\110\116",function()local H=b.new();(expect(H:Add(1))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \110\111\116 \097\100\100\105\110\103 \097\110 \101\108\101\109\101\110\116",function()local H=b.new({1});(expect(H:Add(1))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \097\100\100 \100\117\112\108\105\099\097\116\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;1;1,1;1});(expect(H:Count())).to.equal(1)H:Add(1);(expect(H:Count())).to.equal(1)end)end)describe("\065\100\100\065\108\108",function()it("\115\104\111\117\108\100 \097\100\100 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1;second=2,third=3;fourth=4,fifth=5})H:AddAll(I);(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \097\100\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1})H:AddAll(I);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \097\100\100 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \110\111\116 \101\109\112\116\121",function()local H=b.new({1;2,3,4,5})local I=b.fromTable({first=6,second=7;third=8;fourth=9,fifth=0})H:AddAll(I);(expect(H:Count())).to.equal(10)end)it("\115\104\111\117\108\100 \097\100\100 \111\110\101 \101\108\101\109\101\110\116 \119\104\101\110 \110\111\116 \101\109\112\116\121",function()local H=b.new({1;2;3;4;5})local I=b.fromTable({first=6})H:AddAll(I);(expect(H:Count())).to.equal(6)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \097\100\100\105\110\103 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new()local I=b.fromTable({first=6;second=7,third=8,fourth=9,fifth=10});(expect(H:AddAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \097\100\100\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new()local I=b.fromTable({first=6});(expect(H:AddAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \110\111\116 \097\100\100\105\110\103 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({6;7;8;9,10})local I=b.fromTable({first=6;second=7;third=8;fourth=9,fifth=10});(expect(H:AddAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \110\111\116 \097\100\100\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({6,7;8;9;10})local I=b.fromTable({first=6});(expect(H:AddAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \097\100\100\105\110\103 \115\111\109\101 \101\108\101\109\101\110\116\115\044 \098\117\116 \110\111\116 \111\116\104\101\114\115",function()local H=b.new({6;7,8})local I=b.fromTable({first=6,second=7,third=8,fourth=9;fifth=10});(expect(H:AddAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \097\100\100 \109\117\108\116\105\112\108\101 \100\117\112\108\105\099\097\116\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;1;1,1,1})local I=b.fromTable({first=1,second=1;third=1;fourth=1;fifth=1});(expect(H:Count())).to.equal(1)H:AddAll(I);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \110\111\116 \097\100\100 \111\110\101 \100\117\112\108\105\099\097\116\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=b.fromTable({first=1})H:AddAll(I);(expect(H:Count())).to.equal(1)end)end)describe("\067\108\101\097\114",function()it("\115\104\111\117\108\100 \099\108\101\097\114 \097\108\108 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2;3,4;5});(expect(H:Empty())).to.equal(false)H:Clear();(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\108\101\097\114 \119\104\101\110 \097\108\114\101\097\100\121 \101\109\112\116\121",function()local H=b.new()H:Clear();(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\108\101\097\114 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})H:Clear();(expect(H:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\108\101\097\114 \119\105\116\104 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2,3,4;5})H:Clear();(expect(H:Empty())).to.equal(true)end)end)describe("\082\101\109\111\118\101",function()it("\115\104\111\117\108\100 \115\117\099\099\101\115\115\102\117\108\108\121 \097\116\116\101\109\112\116 \116\111 \114\101\109\111\118\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(function()H:Remove(1)end)).never.to.throw()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \114\101\109\111\118\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:Remove(1))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})H:Remove(1);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1});(expect(H:Remove(1))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \097\110 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1,2,3,4;5})H:Remove(3);(expect(H:Count())).to.equal(4)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \097\110 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1,2;3;4;5});(expect(H:Remove(3))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \114\101\109\111\118\101 \119\104\101\110 \116\104\101 \101\108\101\109\101\110\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1;2;3;4;5})H:Remove(6);(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \097\110 \101\108\101\109\101\110\116 \105\115\110\'\116 \114\101\109\111\118\101\100",function()local H=b.new({1;2;3,4,5});(expect(H:Remove(6))).to.equal(false)end)end)describe("\082\101\109\111\118\101\065\108\108",function()it("\115\104\111\117\108\100 \115\117\099\099\101\115\115\102\117\108\108\121 \097\116\116\101\109\112\116 \116\111 \114\101\109\111\118\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.new({1;2,3,4,5});(expect(function()H:RemoveAll(I)end)).never.to.throw()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \114\101\109\111\118\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.new({1;2;3;4;5});(expect(H:RemoveAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=b.new({1})H:RemoveAll(I);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=b.new({1});(expect(H:RemoveAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \119\105\116\104 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115",function()local H=b.new({1})local I=b.new({1;2,3,4;5})H:RemoveAll(I);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \119\105\116\104 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115",function()local H=b.new({1})local I=b.new({1;2;3,4,5});(expect(H:RemoveAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \111\110\101 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1;2,3;4,5})local I=b.new({1})H:RemoveAll(I);(expect(H:Count())).to.equal(4)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \111\110\101 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1,2;3,4;5})local I=b.new({1});(expect(H:RemoveAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \114\101\109\111\118\101 \119\104\101\110 \116\104\101 \101\108\101\109\101\110\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.new({1;2;3,4,5})local I=b.new({0})H:RemoveAll(I);(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \097\110 \101\108\101\109\101\110\116 \105\115\110\'\116 \114\101\109\111\118\101\100",function()local H=b.new({1;2,3,4,5})local I=b.new({0});(expect(H:RemoveAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2;3,4;5})local I=b.new({1;2,3,4,5})H:RemoveAll(I);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\109\111\118\105\110\103 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115",function()local H=b.new({1,2,3;4,5})local I=b.new({1;2,3;4;5});(expect(H:RemoveAll(I))).to.equal(true)end)end)describe("\082\101\116\097\105\110\065\108\108",function()it("\115\104\111\117\108\100 \115\117\099\099\101\115\115\102\117\108\108\121 \097\116\116\101\109\112\116 \116\111 \114\101\116\097\105\110 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.new({1;2,3;4;5});(expect(function()H:RetainAll(I)end)).never.to.throw()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.new({1;2,3,4;5});(expect(H:RetainAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=b.new({1})H:RetainAll(I);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=b.new({1});(expect(H:RetainAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \119\105\116\104 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115 \116\111 \114\101\116\097\105\110",function()local H=b.new({1})local I=b.new({1;2,3,4;5})H:RetainAll(I);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \119\105\116\104 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115 \116\111 \114\101\116\097\105\110",function()local H=b.new({1})local I=b.new({1;2,3,4;5});(expect(H:RetainAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \114\101\116\097\105\110 \111\110\101 \101\108\101\109\101\110\116 \116\104\097\116 \100\111\101\115 \110\111\116 \109\097\116\099\104",function()local H=b.new({1})local I=b.new({0})H:RetainAll(I);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \110\111\116 \114\101\116\097\105\110\105\110\103 \111\110\101 \101\108\101\109\101\110\116 \116\104\097\116 \100\111\101\115 \110\111\116 \109\097\116\099\104",function()local H=b.new({1})local I=b.new({0});(expect(H:RetainAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \111\110\101 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1;2;3;4,5})local I=b.new({3})H:RetainAll(I);(expect(H:Count())).to.equal(1)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \111\110\101 \101\108\101\109\101\110\116 \102\114\111\109 \109\097\110\121",function()local H=b.new({1,2,3;4;5})local I=b.new({3});(expect(H:RetainAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \110\111 \101\108\101\109\101\110\116\115 \119\104\101\110 \111\110\101 \101\108\101\109\101\110\116 \100\111\101\115 \110\111\116 \109\097\116\099\104",function()local H=b.new({1;2;3,4;5})local I=b.new({6})H:RetainAll(I);(expect(H:Count())).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \110\111\116 \114\101\116\097\105\110\105\110\103 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1,2,3,4;5})local I=b.new({6});(expect(H:RetainAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \109\111\114\101 \101\120\105\115\116",function()local H=b.new({1,2;3;4,5})local I=b.new({1;3,5})H:RetainAll(I);(expect(H:Count())).to.equal(3)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \109\111\114\101 \101\120\105\115\116",function()local H=b.new({1,2;3;4,5})local I=b.new({1;3;5});(expect(H:RetainAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \109\117\108\116\105\112\108\101 \101\108\101\109\101\110\116\115 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \114\101\116\097\105\110 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2,3,4;5})local I=b.new({0,1,3})H:RetainAll(I);(expect(H:Count())).to.equal(2)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\114\117\101 \119\104\101\110 \097\116\116\101\109\112\105\110\103 \116\111 \114\101\116\097\105\110 \119\105\116\104 \101\120\099\101\115\115 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2;3;4,5})local I=b.new({0;1;3});(expect(H:RetainAll(I))).to.equal(true)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \097\108\108 \101\108\101\109\101\110\116\115",function()local H=b.new({1,2;3,4,5})local I=b.new({1,2;3,4,5})H:RetainAll(I);(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \114\101\116\097\105\110\105\110\103 \097\108\108 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2,3,4;5})local I=b.new({1,2;3,4;5});(expect(H:RetainAll(I))).to.equal(false)end)it("\115\104\111\117\108\100 \114\101\116\097\105\110 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \114\101\116\097\105\110 \101\120\099\101\115\115",function()local H=b.new({1;2,3;4,5})local I=b.new({0,1,2;3;4,5})H:RetainAll(I);(expect(H:Count())).to.equal(5)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \102\097\108\115\101 \119\104\101\110 \097\116\116\101\109\112\116\105\110\103 \116\111 \114\101\116\097\105\110 \101\120\099\101\101\115\115 \097\110\100 \114\101\116\097\105\110\105\110\103 \097\108\108 \101\108\101\109\101\110\116\115",function()local H=b.new({1,2;3,4,5})local I=b.new({0,1;2,3;4,5});(expect(H:RetainAll(I))).to.equal(false)end)end)end)end)describe("\077\097\112 \073\110\116\101\114\102\097\099\101",function()describe("\082\101\113\117\105\114\101\100 \077\101\116\104\111\100\115",function()describe("\102\114\111\109\084\097\098\108\101",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097 \116\097\098\108\101 \105\115 \110\111\116 \112\114\111\118\105\100\101\100",function()(expect(function()b.fromTable(nil)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\105\108\046");(expect(function()b.fromTable(true)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \098\111\111\108\101\097\110\046");(expect(function()b.fromTable(1)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\117\109\098\101\114\046");(expect(function()b.fromTable("\115\116\114\105\110\103")end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \115\116\114\105\110\103\046");(expect(function()b.fromTable(function() end)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \102\117\110\099\116\105\111\110\046");(expect(function()b.fromTable(Instance.new("\070\111\108\100\101\114"))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \117\115\101\114\100\097\116\097\046");(expect(function()b.fromTable(coroutine.create(function() end))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \116\104\114\101\097\100\046")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \101\109\112\116\121 \116\097\098\108\101",function()local H={}local I=b.fromTable(H);(expect(I:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \116\097\098\108\101 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H={first=true}local I=b.fromTable(H);(expect(I:Count())).to.equal(1);(expect(I:Get("\102\105\114\115\116"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \116\097\098\108\101 \119\105\116\104 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H={first=true;second=true;third=true,fourth=true,fifth=true}local I=b.fromTable(H);(expect(I:Count())).to.equal(5);(expect(I:Get("\102\105\114\115\116"))).to.equal(true);(expect(I:Get("\115\101\099\111\110\100"))).to.equal(true);(expect(I:Get("\116\104\105\114\100"))).to.equal(true);(expect(I:Get("\102\111\117\114\116\104"))).to.equal(true);(expect(I:Get("\102\105\102\116\104"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \116\097\098\108\101 \119\105\116\104 \100\105\115\112\097\114\097\116\101 \101\108\101\109\101\110\116\115",function()local H={first=true,second=1,third=0;fourth=false;fifth="\102\105\102\116\104"}local I=b.fromTable(H);(expect(I:Count())).to.equal(5);(expect(I:Get("\102\105\114\115\116"))).to.equal(true);(expect(I:Get("\115\101\099\111\110\100"))).to.equal(1);(expect(I:Get("\116\104\105\114\100"))).to.equal(0);(expect(I:Get("\102\111\117\114\116\104"))).to.equal(false);(expect(I:Get("\102\105\102\116\104"))).to.equal("\102\105\102\116\104")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \110\111\110-\109\097\112 \116\097\098\108\101",function()local H={"\102\105\114\115\116","\115\101\099\111\110\100","\116\104\105\114\100","\102\111\117\114\116\104";"\102\105\102\116\104"}local I=b.fromTable(H);(expect(I:Count())).to.equal(5);(expect(I:Get(1))).to.equal("\102\105\114\115\116");(expect(I:Get(2))).to.equal("\115\101\099\111\110\100");(expect(I:Get(3))).to.equal("\116\104\105\114\100");(expect(I:Get(4))).to.equal("\102\111\117\114\116\104");(expect(I:Get(5))).to.equal("\102\105\102\116\104")end)end)describe("\102\114\111\109\065\114\114\097\121",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097 \116\097\098\108\101 \105\115 \110\111\116 \112\114\111\118\105\100\101\100",function()(expect(function()b.fromArray(nil)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\105\108\046");(expect(function()b.fromArray(true)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \098\111\111\108\101\097\110\046");(expect(function()b.fromArray(1)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\117\109\098\101\114\046");(expect(function()b.fromArray("\115\116\114\105\110\103")end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \115\116\114\105\110\103\046");(expect(function()b.fromArray(function() end)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \102\117\110\099\116\105\111\110\046");(expect(function()b.fromArray(Instance.new("\070\111\108\100\101\114"))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \117\115\101\114\100\097\116\097\046");(expect(function()b.fromArray(coroutine.create(function() end))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \116\104\114\101\097\100\046")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \101\109\112\116\121 \097\114\114\097\121",function()local H={}local I=b.fromArray(H);(expect(I:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \097\114\114\097\121 \119\105\116\104 \111\110\101 \112\097\105\114",function()local H={{"\102\105\114\115\116",true}}local I=b.fromArray(H);(expect(I:Count())).to.equal(1);(expect(I:Get("\102\105\114\115\116"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \097\114\114\097\121 \119\105\116\104 \109\097\110\121 \112\097\105\114\115",function()local H={{"\102\105\114\115\116";true};{"\115\101\099\111\110\100",true};{"\116\104\105\114\100",true},{"\102\111\117\114\116\104",true},{"\102\105\102\116\104",true}}local I=b.fromArray(H);(expect(I:Count())).to.equal(5);(expect(I:Get("\102\105\114\115\116"))).to.equal(true);(expect(I:Get("\115\101\099\111\110\100"))).to.equal(true);(expect(I:Get("\116\104\105\114\100"))).to.equal(true);(expect(I:Get("\102\111\117\114\116\104"))).to.equal(true);(expect(I:Get("\102\105\102\116\104"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \097\114\114\097\121 \119\105\116\104 \112\097\105\114\115 \111\102 \100\105\115\112\097\114\097\116\101 \118\097\108\117\101\115",function()local H={{"\102\105\114\115\116",true},{"\115\101\099\111\110\100",1};{"\116\104\105\114\100";0},{"\102\111\117\114\116\104",false};{"\102\105\102\116\104","\102\105\102\116\104"}}local I=b.fromArray(H);(expect(I:Count())).to.equal(5);(expect(I:Get("\102\105\114\115\116"))).to.equal(true);(expect(I:Get("\115\101\099\111\110\100"))).to.equal(1);(expect(I:Get("\116\104\105\114\100"))).to.equal(0);(expect(I:Get("\102\111\117\114\116\104"))).to.equal(false);(expect(I:Get("\102\105\102\116\104"))).to.equal("\102\105\102\116\104")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097\110 \097\114\114\097\121 \105\115 \097 \110\111\110-\109\097\112 \097\114\114\097\121",function()local H={"\102\105\114\115\116";"\115\101\099\111\110\100","\116\104\105\114\100";"\102\111\117\114\116\104","\102\105\102\116\104"};(expect(function()b.fromArray(H)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \097\114\114\097\121 \099\111\110\116\097\105\110\105\110\103 \097\110\121 \110\111\110-\112\097\105\114\046")end)end)describe("\102\114\111\109\080\097\105\114\115",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097 \116\097\098\108\101 \105\115 \110\111\116 \112\114\111\118\105\100\101\100",function()(expect(function()b.fromPairs(nil)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\105\108\046");(expect(function()b.fromPairs(true)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \098\111\111\108\101\097\110\046");(expect(function()b.fromPairs(1)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \110\117\109\098\101\114\046");(expect(function()b.fromPairs("\115\116\114\105\110\103")end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \115\116\114\105\110\103\046");(expect(function()b.fromPairs(function() end)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \102\117\110\099\116\105\111\110\046");(expect(function()b.fromPairs(Instance.new("\070\111\108\100\101\114"))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \117\115\101\114\100\097\116\097\046");(expect(function()b.fromPairs(coroutine.create(function() end))end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \116\121\112\101 \116\104\114\101\097\100\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097 \067\111\108\108\101\099\116\105\111\110 \105\115 \110\111\116 \112\114\111\118\105\100\101\100",function()(expect(function()b.fromPairs({})end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \110\111\110-\067\111\108\108\101\099\116\105\111\110 \116\097\098\108\101\046")end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097\110 \101\109\112\116\121 \067\111\108\108\101\099\116\105\111\110",function()local H=I.new({})local e=b.fromPairs(H);(expect(e:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \111\110\101 \112\097\105\114",function()local H=I.new({{"\102\105\114\115\116",true}})local e=b.fromPairs(H);(expect(e:Count())).to.equal(1);(expect(e:Get("\102\105\114\115\116"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \109\097\110\121 \112\097\105\114\115",function()local H=I.new({{"\102\105\114\115\116",true};{"\115\101\099\111\110\100",true};{"\116\104\105\114\100",true},{"\102\111\117\114\116\104";true};{"\102\105\102\116\104";true}})local e=b.fromPairs(H);(expect(e:Count())).to.equal(5);(expect(e:Get("\102\105\114\115\116"))).to.equal(true);(expect(e:Get("\115\101\099\111\110\100"))).to.equal(true);(expect(e:Get("\116\104\105\114\100"))).to.equal(true);(expect(e:Get("\102\111\117\114\116\104"))).to.equal(true);(expect(e:Get("\102\105\102\116\104"))).to.equal(true)end)it("\115\104\111\117\108\100 \099\114\101\097\116\101 \097 \072\097\115\104\077\097\112 \102\114\111\109 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \112\097\105\114\115 \111\102 \100\105\115\112\097\114\097\116\101 \118\097\108\117\101\115",function()local H=I.new({{"\102\105\114\115\116";true};{"\115\101\099\111\110\100";1},{"\116\104\105\114\100";0};{"\102\111\117\114\116\104";false},{"\102\105\102\116\104","\102\105\102\116\104"}})local e=b.fromPairs(H);(expect(e:Count())).to.equal(5);(expect(e:Get("\102\105\114\115\116"))).to.equal(true);(expect(e:Get("\115\101\099\111\110\100"))).to.equal(1);(expect(e:Get("\116\104\105\114\100"))).to.equal(0);(expect(e:Get("\102\111\117\114\116\104"))).to.equal(false);(expect(e:Get("\102\105\102\116\104"))).to.equal("\102\105\102\116\104")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \105\102 \097 \067\111\108\108\101\099\116\105\111\110 \105\115 \097 \110\111\110-\109\097\112 \067\111\108\108\101\099\116\105\111\110",function()local H=I.new({"\102\105\114\115\116","\115\101\099\111\110\100","\116\104\105\114\100";"\102\111\117\114\116\104";"\102\105\102\116\104"});(expect(function()b.fromPairs(H)end)).to.throw("\067\097\110\110\111\116 \099\111\110\115\116\114\117\099\116 \072\097\115\104\077\097\112 \102\114\111\109 \067\111\108\108\101\099\116\105\111\110 \099\111\110\116\097\105\110\105\110\103 \097\110\121 \110\111\110-\112\097\105\114\046")end)end)describe("\067\111\110\116\097\105\110\115\075\101\121",function()it("\115\104\111\117\108\100 \098\101 \116\104\101 \115\097\109\101 \097\115 \067\111\110\116\097\105\110\115",function()(expect(b.ContainsKey)).to.equal(b.Contains)end)end)describe("\067\111\110\116\097\105\110\115\065\108\108\075\101\121\115",function()it("\115\104\111\117\108\100 \098\101 \116\104\101 \115\097\109\101 \097\115 \067\111\110\116\097\105\110\115\065\108\108",function()(expect(b.ContainsAllKeys)).to.equal(b.ContainsAll)end)end)describe("\067\111\110\116\097\105\110\115\065\110\121\075\101\121\115",function()it("\115\104\111\117\108\100 \098\101 \116\104\101 \115\097\109\101 \097\115 \067\111\110\116\097\105\110\115\065\110\121",function()(expect(b.ContainsAnyKeys)).to.equal(b.ContainsAny)end)end)describe("\067\111\110\116\097\105\110\115\086\097\108\117\101",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097 \118\097\108\117\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:ContainsValue(0))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097 \118\097\108\117\101 \119\104\101\110 \105\116 \101\120\105\115\116\115",function()local H=b.fromTable({first=1});(expect(H:ContainsValue(1))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097 \118\097\108\117\101 \119\104\101\110 \116\104\101 \118\097\108\117\101 \100\111\101\115\110\'\116 \101\120\105\115\116",function()local H=b.fromTable({first=1;second=2;third=3});(expect(H:ContainsValue(4))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097 \118\097\108\117\101 \117\110\116\105\108 \105\116 \105\115 \097\100\100\101\100",function()local H=b.fromTable({first=1,second=2,third=3});(expect(H:ContainsValue(4))).to.equal(false)H:Set("\102\111\117\114\116\104",4);(expect(H:ContainsValue(4))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097 \118\097\108\117\101 \097\102\116\101\114 \105\116\115 \114\101\109\111\118\101\100",function()local H=b.fromTable({first=1,second=2,third=3});(expect(H:ContainsValue(3))).to.equal(true)H:Set("\116\104\105\114\100",nil);(expect(H:ContainsValue(3))).to.equal(false)end)end)describe("\067\111\110\116\097\105\110\115\065\108\108\086\097\108\117\101\115",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \118\097\108\117\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5});(expect(H:ContainsAllValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \122\101\114\111 \118\097\108\117\101\115 \119\104\101\110 \116\104\101 \112\114\111\118\105\100\101\100 \067\111\108\108\101\099\116\105\111\110 \105\115 \101\109\112\116\121",function()local H=b.fromTable({first=1,second=2,third=3,fourth=4,fifth=5})local I=b.new();(expect(H:ContainsAllValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \118\097\108\117\101\115 \119\104\101\110 \097\108\108 \111\102 \116\104\101 \101\108\101\109\101\110\116\115 \101\120\105\115\116",function()local H=b.fromTable({first=1,second=2;third=3;fourth=4,fifth=5})local I=b.fromTable({first=1;second=2;third=3,fourth=4;fifth=5});(expect(H:ContainsAllValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \111\110\101 \118\097\108\117\101 \119\104\101\110 \105\116 \101\120\105\115\116\115",function()local H=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5})local I=b.fromTable({third=3});(expect(H:ContainsAllValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\108\108 \118\097\108\117\101\115 \119\104\101\110 \111\110\101 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.fromTable({first=1;second=2,fourth=4;fifth=5})local I=b.fromTable({first=1;second=2,third=3,fourth=4,fifth=5});(expect(H:ContainsAllValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \111\110\101 \118\097\108\117\101 \119\104\101\110 \105\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.fromTable({first=1;second=2,fourth=4;fifth=5})local I=b.fromTable({third=3});(expect(H:ContainsAllValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \118\097\108\117\101\115 \117\110\116\105\108 \116\104\101\121 \097\114\101 \097\100\100\101\100",function()local H=b.new()local I=b.fromTable({first=1,second=2});(expect(H:ContainsAllValues(I))).to.equal(false)H:Add("\102\105\114\115\116",1);(expect(H:ContainsAllValues(I))).to.equal(false)H:Add("\115\101\099\111\110\100",2);(expect(H:ContainsAllValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097\108\108 \118\097\108\117\101\115 \119\104\101\110 \116\104\101\121 \097\114\101 \114\101\109\111\118\101\100",function()local H=b.fromTable({first=1,second=2;third=3;fourth=4,fifth=5})local I=b.fromTable({first=1,second=2,third=3,fourth=4;fifth=5});(expect(H:ContainsAllValues(I))).to.equal(true)H:Remove("\102\105\114\115\116");(expect(H:ContainsAllValues(I))).to.equal(false)end)end)describe("\067\111\110\116\097\105\110\115\065\110\121\086\097\108\117\101\115",function()it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121 \118\097\108\117\101 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=b.fromTable({first=1,second=2,third=3;fourth=4,fifth=5});(expect(H:ContainsAnyValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \097\110\121\116\104\105\110\103 \119\104\101\110 \116\104\101 \112\114\111\118\105\100\101\100 \067\111\108\108\101\099\116\105\111\110 \105\115 \101\109\112\116\121",function()local H=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5})local I=b.new();(expect(H:ContainsAnyValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \102\105\110\100 \097\108\108 \118\097\108\117\101\115 \119\104\101\110 \116\104\101 \101\108\101\109\101\110\116\115 \101\120\105\115\116",function()local H=b.fromTable({first=1,second=2,third=3;fourth=4;fifth=5})local I=b.fromTable({first=1,second=2;third=3,fourth=4;fifth=5});(expect(H:ContainsAnyValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \111\110\101 \118\097\108\117\101 \119\104\101\110 \105\116 \101\120\105\115\116\115",function()local H=b.fromTable({first=1;second=2;third=3;fourth=4,fifth=5})local I=b.fromTable({third=3});(expect(H:ContainsAnyValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \102\105\110\100 \115\111\109\101 \118\097\108\117\101\115 \119\104\101\110 \111\110\108\121 \111\110\101 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.fromTable({first=1,second=2;fourth=4;fifth=5})local I=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5});(expect(H:ContainsAnyValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \111\110\101 \118\097\108\117\101 \119\104\101\110 \105\116 \100\111\101\115 \110\111\116 \101\120\105\115\116",function()local H=b.fromTable({first=1;second=2,fourth=4;fifth=5})local I=b.fromTable({third=3});(expect(H:ContainsAnyValues(I))).to.equal(false)end)it("\115\104\111\117\108\100 \110\111\116 \102\105\110\100 \118\097\108\117\101\115 \117\110\116\105\108 \116\104\101\121 \097\114\101 \097\100\100\101\100",function()local H=b.new()local I=b.fromTable({first=1,second=2});(expect(H:ContainsAnyValues(I))).to.equal(false)H:Add("\102\105\114\115\116",1);(expect(H:ContainsAnyValues(I))).to.equal(true)end)it("\115\104\111\117\108\100 \110\111 \108\111\110\103\101\114 \102\105\110\100 \097\108\108 \118\097\108\117\101\115 \119\104\101\110 \116\104\101\121 \097\114\101 \097\108\108 \114\101\109\111\118\101\100",function()local H=b.fromTable({first=1;second=2;third=3,fourth=4,fifth=5})local I=b.fromTable({first=1,second=2;third=3;fourth=4,fifth=5});(expect(H:ContainsAnyValues(I))).to.equal(true)H:Remove("\102\105\114\115\116");(expect(H:ContainsAnyValues(I))).to.equal(true)H:Clear();(expect(H:ContainsAnyValues(I))).to.equal(false)end)end)describe("\075\101\121\115",function()it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097\110 \101\109\112\116\121 \083\101\116 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=H:Keys();(expect(I:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \083\101\116 \119\105\116\104 \116\104\101 \101\108\101\109\101\110\116 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.new({1})local I=H:Keys();(expect(I:Count())).to.equal(1);(expect(I:Contains(1))).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \083\101\116 \119\105\116\104 \097\108\108 \101\108\101\109\101\110\116\115 \119\105\116\104 \097 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.new({1;2;3;4,5})local I=H:Keys();(expect(I:Count())).to.equal(5);(expect(I:Contains(1))).to.equal(true);(expect(I:Contains(2))).to.equal(true);(expect(I:Contains(3))).to.equal(true);(expect(I:Contains(4))).to.equal(true);(expect(I:Contains(5))).to.equal(true)end)end)describe("\086\097\108\117\101\115",function()it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097\110 \101\109\112\116\121 \067\111\108\108\101\099\116\105\111\110 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=H:Values();(expect(I:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \116\104\101 \118\097\108\117\101 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.fromTable({first=1})local I=H:Values();(expect(I:Count())).to.equal(1);(expect(I:Contains(1))).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \097\108\108 \118\097\108\117\101\115 \119\105\116\104 \097 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1;second=2,third=3;fourth=4;fifth=5})local I=H:Values();(expect(I:Count())).to.equal(5);(expect(I:Contains(1))).to.equal(true);(expect(I:Contains(2))).to.equal(true);(expect(I:Contains(3))).to.equal(true);(expect(I:Contains(4))).to.equal(true);(expect(I:Contains(5))).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \100\117\112\108\105\099\097\116\101 \118\097\108\117\101\115",function()local H=b.fromTable({first=1;second=1;third=2;fourth=2,fifth=3})local I=H:Values();(expect(I:Count())).to.equal(5);(expect(I:Contains(1))).to.equal(true);(expect(I:Contains(2))).to.equal(true);(expect(I:Contains(3))).to.equal(true)I:Remove(1)I:Remove(2)I:Remove(3);(expect(I:Count())).to.equal(2);(expect(I:Contains(1))).to.equal(true);(expect(I:Contains(2))).to.equal(true)end)end)describe("\080\097\105\114\115",function()it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097\110 \101\109\112\116\121 \067\111\108\108\101\099\116\105\111\110 \119\104\101\110 \101\109\112\116\121",function()local H=b.new()local I=H:Pairs();(expect(I:Empty())).to.equal(true)end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \116\104\101 \112\097\105\114 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.fromTable({first=1})local I=H:Pairs();(expect(I:Count())).to.equal(1)for b,I in I:Enumerator()do(expect(H:ContainsKey(I[1]))).to.equal(true);(expect(H:Get(I[1]))).to.equal(I[2])end end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \097\108\108 \112\097\105\114\115 \119\105\116\104 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1;second=2;third=3,fourth=4;fifth=5})local I=H:Pairs();(expect(I:Count())).to.equal(5)for b,I in I:Enumerator()do(expect(H:ContainsKey(I[1]))).to.equal(true);(expect(H:Get(I[1]))).to.equal(I[2])end end)it("\115\104\111\117\108\100 \112\114\111\118\105\100\101 \097 \067\111\108\108\101\099\116\105\111\110 \119\105\116\104 \100\117\112\108\105\099\097\116\101 \118\097\108\117\101\115",function()local H=b.fromTable({first=1;second=1;third=2;fourth=2;fifth=3})local I=H:Pairs();(expect(I:Count())).to.equal(5)for b,I in I:Enumerator()do(expect(H:ContainsKey(I[1]))).to.equal(true);(expect(H:Get(I[1]))).to.equal(I[2])end end)end)describe("\071\101\116",function()it("\115\104\111\117\108\100 \103\101\116 \110\105\108 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:Get(0))).to.equal(nil)end)it("\115\104\111\117\108\100 \103\101\116 \116\104\101 \118\097\108\117\101 \111\102 \097\110 \101\108\101\109\101\110\116 \119\104\101\110 \111\110\101 \101\120\105\115\116\115",function()local H=b.fromTable({first=1});(expect(H:Get("\102\105\114\115\116"))).to.equal(1)end)it("\115\104\111\117\108\100 \103\101\116 \110\105\108 \119\104\101\110 \097\110 \101\108\101\109\101\110\116 \100\111\101\115\110\'\116 \101\120\105\115\116 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.fromTable({first=1});(expect(H:Get("\115\101\099\111\110\100"))).to.equal(nil)end)it("\115\104\111\117\108\100 \103\101\116 \116\104\101 \118\097\108\117\101 \111\102 \097\108\108 \101\108\101\109\101\110\116\115 \119\104\101\110 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1,second=2,third=3;fourth=4,fifth=5});(expect(H:Get("\102\105\114\115\116"))).to.equal(1);(expect(H:Get("\115\101\099\111\110\100"))).to.equal(2);(expect(H:Get("\116\104\105\114\100"))).to.equal(3);(expect(H:Get("\102\111\117\114\116\104"))).to.equal(4);(expect(H:Get("\102\105\102\116\104"))).to.equal(5)end)it("\115\104\111\117\108\100 \103\101\116 \110\105\108 \119\104\101\110 \097\110 \101\108\101\109\101\110\116 \100\111\101\115\110\'\116 \101\120\105\115\116 \119\105\116\104 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1;second=2,third=3,fourth=4,fifth=5});(expect(H:Get("\115\105\120\116\104"))).to.equal(nil)end)end)end)describe("\079\112\116\105\111\110\097\108 \077\101\116\104\111\100\115",function()describe("\083\101\116",function()it("\115\104\111\117\108\100 \115\101\116 \097 \107\101\121 \119\104\101\110 \101\109\112\116\121",function()local H=b.new();(expect(H:Get("\102\105\114\115\116"))).to.equal(nil)H:Set("\102\105\114\115\116",1);(expect(H:Get("\102\105\114\115\116"))).to.equal(1)end)it("\115\104\111\117\108\100 \115\101\116 \097 \110\101\119 \107\101\121 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.fromTable({first=1})H:Set("\115\101\099\111\110\100",2);(expect(H:Get("\102\105\114\115\116"))).to.equal(1);(expect(H:Get("\115\101\099\111\110\100"))).to.equal(2)end)it("\115\104\111\117\108\100 \115\101\116 \097\110 \101\120\105\115\116\105\110\103 \107\101\121 \119\105\116\104 \111\110\101 \101\108\101\109\101\110\116",function()local H=b.fromTable({first=1});(expect(H:Get("\102\105\114\115\116"))).to.equal(1)H:Set("\102\105\114\115\116",2);(expect(H:Get("\102\105\114\115\116"))).to.equal(2)end)it("\115\104\111\117\108\100 \115\101\116 \097 \110\101\119 \107\101\121 \119\105\116\104 \097 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1,second=2,third=3;fourth=4,fifth=5})H:Set("\115\105\120\116\104",6);(expect(H:Get("\102\105\114\115\116"))).to.equal(1);(expect(H:Get("\115\101\099\111\110\100"))).to.equal(2);(expect(H:Get("\116\104\105\114\100"))).to.equal(3);(expect(H:Get("\102\111\117\114\116\104"))).to.equal(4);(expect(H:Get("\102\105\102\116\104"))).to.equal(5);(expect(H:Get("\115\105\120\116\104"))).to.equal(6)end)it("\115\104\111\117\108\100 \115\101\116 \097\110 \101\120\105\115\116\105\110\103 \107\101\121 \119\105\116\104 \097 \109\097\110\121 \101\108\101\109\101\110\116\115",function()local H=b.fromTable({first=1,second=2;third=3,fourth=4,fifth=5});(expect(H:Get("\102\105\114\115\116"))).to.equal(1);(expect(H:Get("\115\101\099\111\110\100"))).to.equal(2);(expect(H:Get("\116\104\105\114\100"))).to.equal(3);(expect(H:Get("\102\111\117\114\116\104"))).to.equal(4);(expect(H:Get("\102\105\102\116\104"))).to.equal(5)H:Set("\116\104\105\114\100",6);(expect(H:Get("\102\105\114\115\116"))).to.equal(1);(expect(H:Get("\115\101\099\111\110\100"))).to.equal(2);(expect(H:Get("\116\104\105\114\100"))).to.equal(6);(expect(H:Get("\102\111\117\114\116\104"))).to.equal(4);(expect(H:Get("\102\105\102\116\104"))).to.equal(5)end)end)end)end)end
--- Tests for the @{HashMap} class.

return function()
	local module = game:GetService("ReplicatedStorage").Packages.Monolith
	local HashMap = require(module.HashMap)
	local ArrayList = require(module.ArrayList)

	describe("Constructor", function()
		it("should create an empty HashMap", function()
			local map = HashMap.new()
			expect(map:Empty()).to.equal(true)
		end)

		it("should create an HashMap from a table", function()
			local items = { 1, 2, 3, 4, 5 }
			local map = HashMap.new(items)
			expect(map:Count()).to.equal(#items)
			local index = 1
			while map:Count() > 0 do
				expect(map:Contains(index)).to.equal(true)
				map:Remove(index)
				index = index + 1
			end
		end)

		it("should create an HashMap from a Collection", function()
			local items = HashMap.new({ 1, 2, 3, 4, 5 })
			local map = HashMap.new(items)
			expect(map:Count()).to.equal(items:Count())
			for i, v in items:Enumerator() do
				expect(map:Get(i)).to.equal(v)
			end
		end)

		it("should error when attempting to create a HashMap from a non-table", function()
			expect(function()
				HashMap.new(true)
			end).to.throw("Cannot construct HashMap from type boolean.")
			expect(function()
				HashMap.new(1)
			end).to.throw("Cannot construct HashMap from type number.")
			expect(function()
				HashMap.new("string")
			end).to.throw("Cannot construct HashMap from type string.")
			expect(function()
				HashMap.new(function() end)
			end).to.throw("Cannot construct HashMap from type function.")
			expect(function()
				HashMap.new(Instance.new("Folder"))
			end).to.throw("Cannot construct HashMap from type userdata.")
			expect(function()
				HashMap.new(coroutine.create(function() end))
			end).to.throw("Cannot construct HashMap from type thread.")
		end)
	end)

	describe("Enumerable Interface", function()
		describe("Enumerator", function()
			it("should provide an iterator generator", function()
				local map = HashMap.new()
				local generator = map:Enumerator()
				expect(generator).to.be.a("function")
			end)

			it("should enumerate in a generic for loop", function()
				local map = HashMap.new()
				local total = 10
				for i = 1, total do
					map:Add(i)
				end

				local count = 0
				for i, v in map:Enumerator() do
					count = count + 1
					expect(i).to.be.a("number")
					expect(v).to.be.a("boolean")
					expect(i).to.equal(count)
				end

				expect(count).to.equal(total)
			end)
		end)
	end)

	describe("Collection Interface", function()
		describe("Required Methods", function()
			describe("Contains", function()
				it("should not find any element when empty", function()
					local map = HashMap.new()
					expect(map:Contains(0)).to.equal(false)
				end)

				it("should find an element when that element exists", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Contains(1)).to.equal(true)
				end)

				it("should not find an element when that element does not exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Contains(0)).to.equal(false)
				end)

				it("should not find an element until it is added", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Contains(0)).to.equal(false)
					map:Add(0)
					expect(map:Contains(0)).to.equal(true)
				end)

				it("should no longer find an element when its removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Contains(1)).to.equal(true)
					map:Remove(1)
					expect(map:Contains(1)).to.equal(false)
				end)
			end)

			describe("ContainsAll", function()
				it("should not find any element when empty", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAll(contained)).to.equal(false)
				end)

				it("should find all zero elements when the provided Collection is empty", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.new()
					expect(map:ContainsAll(contained)).to.equal(true)
				end)

				it("should find all elements when all of the elements exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAll(contained)).to.equal(true)
				end)

				it("should find one element when it exists", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAll(contained)).to.equal(true)
				end)

				it("should not find all elements when one does not exist", function()
					local map = HashMap.new({ 1, 2, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAll(contained)).to.equal(false)
				end)

				it("should not find one element when it does not exist", function()
					local map = HashMap.new({ 1, 2, 4, 5 })
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAll(contained)).to.equal(false)
				end)

				it("should not find all elements until they are added", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
					})
					expect(map:ContainsAll(contained)).to.equal(false)
					map:Add(1)
					expect(map:ContainsAll(contained)).to.equal(false)
					map:Add(2)
					expect(map:ContainsAll(contained)).to.equal(true)
				end)

				it("should no longer find all elements when they are removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAll(contained)).to.equal(true)
					map:Remove(1)
					expect(map:ContainsAll(contained)).to.equal(false)
				end)
			end)

			describe("ContainsAny", function()
				it("should not find any element when empty", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAny(contained)).to.equal(false)
				end)

				it("should not find any element when the provided Collection is empty", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.new()
					expect(map:ContainsAny(contained)).to.equal(false)
				end)

				it("should find all elements when the elements exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAny(contained)).to.equal(true)
				end)

				it("should find one element when it exists", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAny(contained)).to.equal(true)
				end)

				it("should not find some elements when only one does not exist", function()
					local map = HashMap.new({ 1, 2, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAny(contained)).to.equal(true)
				end)

				it("should not find one element when it does not exist", function()
					local map = HashMap.new({ 1, 2, 4, 5 })
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAny(contained)).to.equal(false)
				end)

				it("should not find elements until they are added", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
					})
					expect(map:ContainsAny(contained)).to.equal(false)
					map:Add(1)
					expect(map:ContainsAny(contained)).to.equal(true)
				end)

				it("should no longer find all elements when they are all removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAny(contained)).to.equal(true)
					map:Remove(1)
					expect(map:ContainsAny(contained)).to.equal(true)
					map:Clear()
					expect(map:ContainsAny(contained)).to.equal(false)
				end)
			end)

			describe("Count", function()
				it("should count zero when empty", function()
					local map = HashMap.new()
					expect(map:Count()).to.equal(0)
				end)

				it("should count the number of elements in the HashMap", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Count()).to.equal(5)
				end)

				it("should count new elements when they are added", function()
					local map = HashMap.new()
					local total = 10
					expect(map:Count()).to.equal(0)
					for i = 1, total do
						map:Add(i)
						expect(map:Count()).to.equal(i)
					end
					expect(map:Count()).to.equal(total)
				end)

				it("should not count elements after they are removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local count = map:Count()
					expect(count).to.equal(5)
					local index = 1
					while count > 0 do
						map:Remove(index)
						local oldCount = count
						count = map:Count()
						expect(count).to.equal(oldCount - 1)
						index = index + 1
					end
				end)

				it("should count zero after being cleared", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Count()).to.equal(5)
					map:Clear()
					expect(map:Count()).to.equal(0)
				end)
			end)

			describe("Empty", function()
				it("should be empty when instantiated", function()
					local map = HashMap.new()
					expect(map:Empty()).to.equal(true)
				end)

				it("should not be empty with one element", function()
					local map = HashMap.new({ 1 })
					expect(map:Empty()).to.equal(false)
				end)

				it("should not be empty with multiple elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Empty()).to.equal(false)
				end)

				it("should no longer be empty after an element is added", function()
					local map = HashMap.new()
					expect(map:Empty()).to.equal(true)
					map:Add(1)
					expect(map:Empty()).to.equal(false)
				end)

				it("should be empty after all elements are removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local index = 1
					while map:Count() > 0 do
						expect(map:Empty()).to.equal(false)
						map:Remove(index)
						index = index + 1
					end
					expect(map:Empty()).to.equal(true)
				end)

				it("should be empty after being cleared", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Empty()).to.equal(false)
					map:Clear()
					expect(map:Empty()).to.equal(true)
				end)
			end)

			describe("ToArray", function()
				it("should return a table", function()
					local map = HashMap.new()
					expect(map:ToArray()).to.be.a("table")
				end)

				it("should create a table of the same size", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(#map:ToArray()).to.equal(map:Count())
				end)

				it("should create an empty table when empty", function()
					local map = HashMap.new()
					expect(#map:ToArray()).to.equal(0)
				end)

				it("should create a table with the same elements and order of enumeration", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local array = map:ToArray()
					expect(#array).to.equal(map:Count())
					for _, v in ipairs(array) do
						expect(map:Contains(v[1])).to.equal(true)
					end
				end)

				it("should provide only array indexable elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local array = map:ToArray()
					local count = 0
					for _ in pairs(array) do
						count = count + 1
					end
					expect(count).to.equal(#array)
				end)
			end)

			describe("ToTable", function()
				it("should return a table", function()
					local map = HashMap.new()
					expect(map:ToTable()).to.be.a("table")
				end)

				it("should create a table of the same size", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(#map:ToTable()).to.equal(map:Count())
				end)

				it("should create an empty table when empty", function()
					local map = HashMap.new()
					expect(#map:ToTable()).to.equal(0)
				end)

				it("should create a table with the same elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					for i in pairs(map:ToTable()) do
						expect(map:Contains(i)).to.equal(true)
					end
				end)

				it("should provide a table with all contianed indices as their values", function()
					local map = HashMap.fromTable({
						[1] = 1,
						[2] = 2,
						[3] = 3,
						[4] = 4,
						[5] = 5,
					})
					for i, v in pairs(map:ToTable()) do
						expect(v).to.equal(i)
					end
				end)
			end)
		end)

		describe("Optional Methods", function()
			describe("Add", function()
				it("should add elements when empty", function()
					local map = HashMap.new()
					map:Add(1)
					expect(map:Count()).to.equal(1)
				end)

				it("should add elements when not empty", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					map:Add(6)
					expect(map:Count()).to.equal(6)
				end)

				it("should return true when adding an element", function()
					local map = HashMap.new()
					expect(map:Add(1)).to.equal(true)
				end)

				it("should return false when not adding an element", function()
					local map = HashMap.new({ 1 })
					expect(map:Add(1)).to.equal(false)
				end)

				it("should not add duplicate elements", function()
					local map = HashMap.new({ 1, 1, 1, 1, 1 })
					expect(map:Count()).to.equal(1)
					map:Add(1)
					expect(map:Count()).to.equal(1)
				end)
			end)

			describe("AddAll", function()
				it("should add multiple elements when empty", function()
					local map = HashMap.new()
					local add = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					map:AddAll(add)
					expect(map:Count()).to.equal(5)
				end)

				it("should add one element when empty", function()
					local map = HashMap.new()
					local add = HashMap.fromTable({
						first = 1,
					})
					map:AddAll(add)
					expect(map:Count()).to.equal(1)
				end)

				it("should add multiple elements when not empty", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local add = HashMap.fromTable({
						first = 6,
						second = 7,
						third = 8,
						fourth = 9,
						fifth = 0,
					})
					map:AddAll(add)
					expect(map:Count()).to.equal(10)
				end)

				it("should add one element when not empty", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local add = HashMap.fromTable({
						first = 6,
					})
					map:AddAll(add)
					expect(map:Count()).to.equal(6)
				end)

				it("should return true when adding multiple elements", function()
					local map = HashMap.new()
					local add = HashMap.fromTable({
						first = 6,
						second = 7,
						third = 8,
						fourth = 9,
						fifth = 10,
					})
					expect(map:AddAll(add)).to.equal(true)
				end)

				it("should return true when adding one element", function()
					local map = HashMap.new()
					local add = HashMap.fromTable({
						first = 6,
					})
					expect(map:AddAll(add)).to.equal(true)
				end)

				it("should return false when not adding multiple elements", function()
					local map = HashMap.new({ 6, 7, 8, 9, 10 })
					local add = HashMap.fromTable({
						first = 6,
						second = 7,
						third = 8,
						fourth = 9,
						fifth = 10,
					})
					expect(map:AddAll(add)).to.equal(false)
				end)

				it("should return false when not adding one element", function()
					local map = HashMap.new({ 6, 7, 8, 9, 10 })
					local add = HashMap.fromTable({
						first = 6,
					})
					expect(map:AddAll(add)).to.equal(false)
				end)

				it("should return true when adding some elements, but not others", function()
					local map = HashMap.new({ 6, 7, 8 })
					local add = HashMap.fromTable({
						first = 6,
						second = 7,
						third = 8,
						fourth = 9,
						fifth = 10,
					})
					expect(map:AddAll(add)).to.equal(true)
				end)

				it("should not add multiple duplicate elements", function()
					local map = HashMap.new({ 1, 1, 1, 1, 1 })
					local add = HashMap.fromTable({
						first = 1,
						second = 1,
						third = 1,
						fourth = 1,
						fifth = 1,
					})
					expect(map:Count()).to.equal(1)
					map:AddAll(add)
					expect(map:Count()).to.equal(1)
				end)

				it("should not add one duplicate element", function()
					local map = HashMap.new({ 1 })
					local add = HashMap.fromTable({
						first = 1,
					})
					map:AddAll(add)
					expect(map:Count()).to.equal(1)
				end)
			end)

			describe("Clear", function()
				it("should clear all elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Empty()).to.equal(false)
					map:Clear()
					expect(map:Empty()).to.equal(true)
				end)

				it("should clear when already empty", function()
					local map = HashMap.new()
					map:Clear()
					expect(map:Empty()).to.equal(true)
				end)

				it("should clear with one element", function()
					local map = HashMap.new({ 1 })
					map:Clear()
					expect(map:Empty()).to.equal(true)
				end)

				it("should clear with multiple elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					map:Clear()
					expect(map:Empty()).to.equal(true)
				end)
			end)

			describe("Remove", function()
				it("should successfully attempt to remove when empty", function()
					local map = HashMap.new()
					expect(function()
						map:Remove(1)
					end).never.to.throw()
				end)

				it("should return false when attempting to remove when empty", function()
					local map = HashMap.new()
					expect(map:Remove(1)).to.equal(false)
				end)

				it("should remove one element", function()
					local map = HashMap.new({ 1 })
					map:Remove(1)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when removing one element", function()
					local map = HashMap.new({ 1 })
					expect(map:Remove(1)).to.equal(true)
				end)

				it("should remove an element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					map:Remove(3)
					expect(map:Count()).to.equal(4)
				end)

				it("should return true when removing an element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Remove(3)).to.equal(true)
				end)

				it("should not remove when the element does not exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					map:Remove(6)
					expect(map:Count()).to.equal(5)
				end)

				it("should return false when an element isn't removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:Remove(6)).to.equal(false)
				end)
			end)

			describe("RemoveAll", function()
				it("should successfully attempt to remove when empty", function()
					local map = HashMap.new()
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(function()
						map:RemoveAll(remove)
					end).never.to.throw()
				end)

				it("should return false when attempting to remove when empty", function()
					local map = HashMap.new()
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RemoveAll(remove)).to.equal(false)
				end)

				it("should remove one element", function()
					local map = HashMap.new({ 1 })
					local remove = HashMap.new({ 1 })
					map:RemoveAll(remove)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when removing one element", function()
					local map = HashMap.new({ 1 })
					local remove = HashMap.new({ 1 })
					expect(map:RemoveAll(remove)).to.equal(true)
				end)

				it("should remove with excess elements", function()
					local map = HashMap.new({ 1 })
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					map:RemoveAll(remove)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when removing with excess elements", function()
					local map = HashMap.new({ 1 })
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RemoveAll(remove)).to.equal(true)
				end)

				it("should remove one element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 1 })
					map:RemoveAll(remove)
					expect(map:Count()).to.equal(4)
				end)

				it("should return true when removing one element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 1 })
					expect(map:RemoveAll(remove)).to.equal(true)
				end)

				it("should not remove when the element does not exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 0 })
					map:RemoveAll(remove)
					expect(map:Count()).to.equal(5)
				end)

				it("should return false when an element isn't removed", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 0 })
					expect(map:RemoveAll(remove)).to.equal(false)
				end)

				it("should remove multiple elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					map:RemoveAll(remove)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when removing multiple elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local remove = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RemoveAll(remove)).to.equal(true)
				end)
			end)

			describe("RetainAll", function()
				it("should successfully attempt to retain when empty", function()
					local map = HashMap.new()
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(function()
						map:RetainAll(retain)
					end).never.to.throw()
				end)

				it("should return false when retaining when empty", function()
					local map = HashMap.new()
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RetainAll(retain)).to.equal(false)
				end)

				it("should retain one element", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 1 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(1)
				end)

				it("should return false when retaining one element", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 1 })
					expect(map:RetainAll(retain)).to.equal(false)
				end)

				it("should retain with excess elements to retain", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(1)
				end)

				it("should return false when retaining with excess elements to retain", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RetainAll(retain)).to.equal(false)
				end)

				it("should not retain one element that does not match", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 0 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when not retaining one element that does not match", function()
					local map = HashMap.new({ 1 })
					local retain = HashMap.new({ 0 })
					expect(map:RetainAll(retain)).to.equal(true)
				end)

				it("should retain one element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 3 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(1)
				end)

				it("should return true when retaining one element from many", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 3 })
					expect(map:RetainAll(retain)).to.equal(true)
				end)

				it("should retain no elements when one element does not match", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 6 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(0)
				end)

				it("should return true when not retaining one element", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 6 })
					expect(map:RetainAll(retain)).to.equal(true)
				end)

				it("should retain multiple elements when more exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 1, 3, 5 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(3)
				end)

				it("should return true when retaining multiple elements when more exist", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 1, 3, 5 })
					expect(map:RetainAll(retain)).to.equal(true)
				end)

				it("should retain multiple elements when attempting to retain excess elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 0, 1, 3 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(2)
				end)

				it("should return true when attemping to retain with excess elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 0, 1, 3 })
					expect(map:RetainAll(retain)).to.equal(true)
				end)

				it("should retain all elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(5)
				end)

				it("should return false when retaining all elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 1, 2, 3, 4, 5 })
					expect(map:RetainAll(retain)).to.equal(false)
				end)

				it("should retain all elements when attempting to retain excess", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 0, 1, 2, 3, 4, 5 })
					map:RetainAll(retain)
					expect(map:Count()).to.equal(5)
				end)

				it("should return false when attempting to retain exceess and retaining all elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local retain = HashMap.new({ 0, 1, 2, 3, 4, 5 })
					expect(map:RetainAll(retain)).to.equal(false)
				end)
			end)
		end)
	end)

	describe("Map Interface", function()
		describe("Required Methods", function()
			describe("fromTable", function()
				it("should error if a table is not provided", function()
					expect(function()
						HashMap.fromTable(nil)
					end).to.throw("Cannot construct HashMap from type nil.")
					expect(function()
						HashMap.fromTable(true)
					end).to.throw("Cannot construct HashMap from type boolean.")
					expect(function()
						HashMap.fromTable(1)
					end).to.throw("Cannot construct HashMap from type number.")
					expect(function()
						HashMap.fromTable("string")
					end).to.throw("Cannot construct HashMap from type string.")
					expect(function()
						HashMap.fromTable(function() end)
					end).to.throw("Cannot construct HashMap from type function.")
					expect(function()
						HashMap.fromTable(Instance.new("Folder"))
					end).to.throw("Cannot construct HashMap from type userdata.")
					expect(function()
						HashMap.fromTable(coroutine.create(function() end))
					end).to.throw("Cannot construct HashMap from type thread.")
				end)

				it("should create a HashMap from an empty table", function()
					local table = {}
					local map = HashMap.fromTable(table)
					expect(map:Empty()).to.equal(true)
				end)

				it("should create a HashMap from a table with one element", function()
					local table = {
						first = true,
					}
					local map = HashMap.fromTable(table)
					expect(map:Count()).to.equal(1)
					expect(map:Get("first")).to.equal(true)
				end)

				it("should create a HashMap from a table with many elements", function()
					local table = {
						first = true,
						second = true,
						third = true,
						fourth = true,
						fifth = true,
					}
					local map = HashMap.fromTable(table)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(true)
					expect(map:Get("third")).to.equal(true)
					expect(map:Get("fourth")).to.equal(true)
					expect(map:Get("fifth")).to.equal(true)
				end)

				it("should create a HashMap from a table with disparate elements", function()
					local table = {
						first = true,
						second = 1,
						third = 0,
						fourth = false,
						fifth = "fifth",
					}
					local map = HashMap.fromTable(table)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(1)
					expect(map:Get("third")).to.equal(0)
					expect(map:Get("fourth")).to.equal(false)
					expect(map:Get("fifth")).to.equal("fifth")
				end)

				it("should create a HashMap from a non-map table", function()
					local table = {
						"first",
						"second",
						"third",
						"fourth",
						"fifth",
					}
					local map = HashMap.fromTable(table)
					expect(map:Count()).to.equal(5)
					expect(map:Get(1)).to.equal("first")
					expect(map:Get(2)).to.equal("second")
					expect(map:Get(3)).to.equal("third")
					expect(map:Get(4)).to.equal("fourth")
					expect(map:Get(5)).to.equal("fifth")
				end)
			end)

			describe("fromArray", function()
				it("should error if a table is not provided", function()
					expect(function()
						HashMap.fromArray(nil)
					end).to.throw("Cannot construct HashMap from type nil.")
					expect(function()
						HashMap.fromArray(true)
					end).to.throw("Cannot construct HashMap from type boolean.")
					expect(function()
						HashMap.fromArray(1)
					end).to.throw("Cannot construct HashMap from type number.")
					expect(function()
						HashMap.fromArray("string")
					end).to.throw("Cannot construct HashMap from type string.")
					expect(function()
						HashMap.fromArray(function() end)
					end).to.throw("Cannot construct HashMap from type function.")
					expect(function()
						HashMap.fromArray(Instance.new("Folder"))
					end).to.throw("Cannot construct HashMap from type userdata.")
					expect(function()
						HashMap.fromArray(coroutine.create(function() end))
					end).to.throw("Cannot construct HashMap from type thread.")
				end)

				it("should create a HashMap from an empty array", function()
					local table = {}
					local map = HashMap.fromArray(table)
					expect(map:Empty()).to.equal(true)
				end)

				it("should create a HashMap from an array with one pair", function()
					local table = {
						{ "first", true },
					}
					local map = HashMap.fromArray(table)
					expect(map:Count()).to.equal(1)
					expect(map:Get("first")).to.equal(true)
				end)

				it("should create a HashMap from an array with many pairs", function()
					local table = {
						{ "first", true },
						{ "second", true },
						{ "third", true },
						{ "fourth", true },
						{ "fifth", true },
					}
					local map = HashMap.fromArray(table)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(true)
					expect(map:Get("third")).to.equal(true)
					expect(map:Get("fourth")).to.equal(true)
					expect(map:Get("fifth")).to.equal(true)
				end)

				it("should create a HashMap from an array with pairs of disparate values", function()
					local table = {
						{ "first", true },
						{ "second", 1 },
						{ "third", 0 },
						{ "fourth", false },
						{ "fifth", "fifth" },
					}
					local map = HashMap.fromArray(table)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(1)
					expect(map:Get("third")).to.equal(0)
					expect(map:Get("fourth")).to.equal(false)
					expect(map:Get("fifth")).to.equal("fifth")
				end)

				it("should error if an array is a non-map array", function()
					local table = {
						"first",
						"second",
						"third",
						"fourth",
						"fifth",
					}
					expect(function()
						HashMap.fromArray(table)
					end).to.throw("Cannot construct HashMap from array containing any non-pair.")
				end)
			end)

			describe("fromPairs", function()
				it("should error if a table is not provided", function()
					expect(function()
						HashMap.fromPairs(nil)
					end).to.throw("Cannot construct HashMap from type nil.")
					expect(function()
						HashMap.fromPairs(true)
					end).to.throw("Cannot construct HashMap from type boolean.")
					expect(function()
						HashMap.fromPairs(1)
					end).to.throw("Cannot construct HashMap from type number.")
					expect(function()
						HashMap.fromPairs("string")
					end).to.throw("Cannot construct HashMap from type string.")
					expect(function()
						HashMap.fromPairs(function() end)
					end).to.throw("Cannot construct HashMap from type function.")
					expect(function()
						HashMap.fromPairs(Instance.new("Folder"))
					end).to.throw("Cannot construct HashMap from type userdata.")
					expect(function()
						HashMap.fromPairs(coroutine.create(function() end))
					end).to.throw("Cannot construct HashMap from type thread.")
				end)

				it("should error if a Collection is not provided", function()
					expect(function()
						HashMap.fromPairs({})
					end).to.throw("Cannot construct HashMap from non-Collection table.")
				end)

				it("should create a HashMap from an empty Collection", function()
					local pairs = ArrayList.new({})
					local map = HashMap.fromPairs(pairs)
					expect(map:Empty()).to.equal(true)
				end)

				it("should create a HashMap from a Collection with one pair", function()
					local pairs = ArrayList.new({
						{ "first", true },
					})
					local map = HashMap.fromPairs(pairs)
					expect(map:Count()).to.equal(1)
					expect(map:Get("first")).to.equal(true)
				end)

				it("should create a HashMap from a Collection with many pairs", function()
					local pairs = ArrayList.new({
						{ "first", true },
						{ "second", true },
						{ "third", true },
						{ "fourth", true },
						{ "fifth", true },
					})
					local map = HashMap.fromPairs(pairs)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(true)
					expect(map:Get("third")).to.equal(true)
					expect(map:Get("fourth")).to.equal(true)
					expect(map:Get("fifth")).to.equal(true)
				end)

				it("should create a HashMap from a Collection with pairs of disparate values", function()
					local pairs = ArrayList.new({
						{ "first", true },
						{ "second", 1 },
						{ "third", 0 },
						{ "fourth", false },
						{ "fifth", "fifth" },
					})
					local map = HashMap.fromPairs(pairs)
					expect(map:Count()).to.equal(5)
					expect(map:Get("first")).to.equal(true)
					expect(map:Get("second")).to.equal(1)
					expect(map:Get("third")).to.equal(0)
					expect(map:Get("fourth")).to.equal(false)
					expect(map:Get("fifth")).to.equal("fifth")
				end)

				it("should error if a Collection is a non-map Collection", function()
					local pairs = ArrayList.new({
						"first",
						"second",
						"third",
						"fourth",
						"fifth",
					})
					expect(function()
						HashMap.fromPairs(pairs)
					end).to.throw("Cannot construct HashMap from Collection containing any non-pair.")
				end)
			end)

			describe("ContainsKey", function()
				it("should be the same as Contains", function()
					expect(HashMap.ContainsKey).to.equal(HashMap.Contains)
				end)
			end)

			describe("ContainsAllKeys", function()
				it("should be the same as ContainsAll", function()
					expect(HashMap.ContainsAllKeys).to.equal(HashMap.ContainsAll)
				end)
			end)

			describe("ContainsAnyKeys", function()
				it("should be the same as ContainsAny", function()
					expect(HashMap.ContainsAnyKeys).to.equal(HashMap.ContainsAny)
				end)
			end)

			describe("ContainsValue", function()
				it("should not find a value when empty", function()
					local map = HashMap.new()
					expect(map:ContainsValue(0)).to.equal(false)
				end)

				it("should find a value when it exists", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					expect(map:ContainsValue(1)).to.equal(true)
				end)

				it("should not find a value when the value doesn't exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
					})
					expect(map:ContainsValue(4)).to.equal(false)
				end)

				it("should not find a value until it is added", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
					})
					expect(map:ContainsValue(4)).to.equal(false)
					map:Set("fourth", 4)
					expect(map:ContainsValue(4)).to.equal(true)
				end)

				it("should no longer find a value after its removed", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
					})
					expect(map:ContainsValue(3)).to.equal(true)
					map:Set("third", nil)
					expect(map:ContainsValue(3)).to.equal(false)
				end)
			end)

			describe("ContainsAllValues", function()
				it("should not find any value when empty", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAllValues(contained)).to.equal(false)
				end)

				it("should find all zero values when the provided Collection is empty", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.new()
					expect(map:ContainsAllValues(contained)).to.equal(true)
				end)

				it("should find all values when all of the elements exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAllValues(contained)).to.equal(true)
				end)

				it("should find one value when it exists", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAllValues(contained)).to.equal(true)
				end)

				it("should not find all values when one does not exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAllValues(contained)).to.equal(false)
				end)

				it("should not find one value when it does not exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAllValues(contained)).to.equal(false)
				end)

				it("should not find values until they are added", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
					})
					expect(map:ContainsAllValues(contained)).to.equal(false)
					map:Add("first", 1)
					expect(map:ContainsAllValues(contained)).to.equal(false)
					map:Add("second", 2)
					expect(map:ContainsAllValues(contained)).to.equal(true)
				end)

				it("should no longer find all values when they are removed", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAllValues(contained)).to.equal(true)
					map:Remove("first")
					expect(map:ContainsAllValues(contained)).to.equal(false)
				end)
			end)

			describe("ContainsAnyValues", function()
				it("should not find any value when empty", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(false)
				end)

				it("should not find anything when the provided Collection is empty", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.new()
					expect(map:ContainsAnyValues(contained)).to.equal(false)
				end)

				it("should find all values when the elements exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(true)
				end)

				it("should find one value when it exists", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(true)
				end)

				it("should find some values when only one does not exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(true)
				end)

				it("should not find one value when it does not exist", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						third = 3,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(false)
				end)

				it("should not find values until they are added", function()
					local map = HashMap.new()
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(false)
					map:Add("first", 1)
					expect(map:ContainsAnyValues(contained)).to.equal(true)
				end)

				it("should no longer find all values when they are all removed", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local contained = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:ContainsAnyValues(contained)).to.equal(true)
					map:Remove("first")
					expect(map:ContainsAnyValues(contained)).to.equal(true)
					map:Clear()
					expect(map:ContainsAnyValues(contained)).to.equal(false)
				end)
			end)

			describe("Keys", function()
				it("should provide an empty Set when empty", function()
					local map = HashMap.new()
					local keys = map:Keys()
					expect(keys:Empty()).to.equal(true)
				end)

				it("should provide a Set with the element with one element", function()
					local map = HashMap.new({ 1 })
					local keys = map:Keys()
					expect(keys:Count()).to.equal(1)
					expect(keys:Contains(1)).to.equal(true)
				end)

				it("should provide a Set with all elements with a many elements", function()
					local map = HashMap.new({ 1, 2, 3, 4, 5 })
					local keys = map:Keys()
					expect(keys:Count()).to.equal(5)
					expect(keys:Contains(1)).to.equal(true)
					expect(keys:Contains(2)).to.equal(true)
					expect(keys:Contains(3)).to.equal(true)
					expect(keys:Contains(4)).to.equal(true)
					expect(keys:Contains(5)).to.equal(true)
				end)
			end)

			describe("Values", function()
				it("should provide an empty Collection when empty", function()
					local map = HashMap.new()
					local values = map:Values()
					expect(values:Empty()).to.equal(true)
				end)

				it("should provide a Collection with the value with one element", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					local values = map:Values()
					expect(values:Count()).to.equal(1)
					expect(values:Contains(1)).to.equal(true)
				end)

				it("should provide a Collection with all values with a many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local values = map:Values()
					expect(values:Count()).to.equal(5)
					expect(values:Contains(1)).to.equal(true)
					expect(values:Contains(2)).to.equal(true)
					expect(values:Contains(3)).to.equal(true)
					expect(values:Contains(4)).to.equal(true)
					expect(values:Contains(5)).to.equal(true)
				end)

				it("should provide a Collection with duplicate values", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 1,
						third = 2,
						fourth = 2,
						fifth = 3,
					})
					local values = map:Values()
					expect(values:Count()).to.equal(5)
					expect(values:Contains(1)).to.equal(true)
					expect(values:Contains(2)).to.equal(true)
					expect(values:Contains(3)).to.equal(true)
					values:Remove(1)
					values:Remove(2)
					values:Remove(3)
					expect(values:Count()).to.equal(2)
					expect(values:Contains(1)).to.equal(true)
					expect(values:Contains(2)).to.equal(true)
				end)
			end)

			describe("Pairs", function()
				it("should provide an empty Collection when empty", function()
					local map = HashMap.new()
					local pairs = map:Pairs()
					expect(pairs:Empty()).to.equal(true)
				end)

				it("should provide a Collection with the pair with one element", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					local pairs = map:Pairs()
					expect(pairs:Count()).to.equal(1)
					for _, value in pairs:Enumerator() do
						expect(map:ContainsKey(value[1])).to.equal(true)
						expect(map:Get(value[1])).to.equal(value[2])
					end
				end)

				it("should provide a Collection with all pairs with many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					local pairs = map:Pairs()
					expect(pairs:Count()).to.equal(5)
					for _, value in pairs:Enumerator() do
						expect(map:ContainsKey(value[1])).to.equal(true)
						expect(map:Get(value[1])).to.equal(value[2])
					end
				end)

				it("should provide a Collection with duplicate values", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 1,
						third = 2,
						fourth = 2,
						fifth = 3,
					})
					local pairs = map:Pairs()
					expect(pairs:Count()).to.equal(5)
					for _, value in pairs:Enumerator() do
						expect(map:ContainsKey(value[1])).to.equal(true)
						expect(map:Get(value[1])).to.equal(value[2])
					end
				end)
			end)

			describe("Get", function()
				it("should get nil when empty", function()
					local map = HashMap.new()
					expect(map:Get(0)).to.equal(nil)
				end)

				it("should get the value of an element when one exists", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					expect(map:Get("first")).to.equal(1)
				end)

				it("should get nil when an element doesn't exist with one element", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					expect(map:Get("second")).to.equal(nil)
				end)

				it("should get the value of all elements when many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:Get("first")).to.equal(1)
					expect(map:Get("second")).to.equal(2)
					expect(map:Get("third")).to.equal(3)
					expect(map:Get("fourth")).to.equal(4)
					expect(map:Get("fifth")).to.equal(5)
				end)

				it("should get nil when an element doesn't exist with many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:Get("sixth")).to.equal(nil)
				end)
			end)
		end)

		describe("Optional Methods", function()
			describe("Set", function()
				it("should set a key when empty", function()
					local map = HashMap.new()
					expect(map:Get("first")).to.equal(nil)
					map:Set("first", 1)
					expect(map:Get("first")).to.equal(1)
				end)

				it("should set a new key with one element", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					map:Set("second", 2)
					expect(map:Get("first")).to.equal(1)
					expect(map:Get("second")).to.equal(2)
				end)

				it("should set an existing key with one element", function()
					local map = HashMap.fromTable({
						first = 1,
					})
					expect(map:Get("first")).to.equal(1)
					map:Set("first", 2)
					expect(map:Get("first")).to.equal(2)
				end)

				it("should set a new key with a many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					map:Set("sixth", 6)
					expect(map:Get("first")).to.equal(1)
					expect(map:Get("second")).to.equal(2)
					expect(map:Get("third")).to.equal(3)
					expect(map:Get("fourth")).to.equal(4)
					expect(map:Get("fifth")).to.equal(5)
					expect(map:Get("sixth")).to.equal(6)
				end)

				it("should set an existing key with a many elements", function()
					local map = HashMap.fromTable({
						first = 1,
						second = 2,
						third = 3,
						fourth = 4,
						fifth = 5,
					})
					expect(map:Get("first")).to.equal(1)
					expect(map:Get("second")).to.equal(2)
					expect(map:Get("third")).to.equal(3)
					expect(map:Get("fourth")).to.equal(4)
					expect(map:Get("fifth")).to.equal(5)
					map:Set("third", 6)
					expect(map:Get("first")).to.equal(1)
					expect(map:Get("second")).to.equal(2)
					expect(map:Get("third")).to.equal(6)
					expect(map:Get("fourth")).to.equal(4)
					expect(map:Get("fifth")).to.equal(5)
				end)
			end)
		end)
	end)
end
