return function()local C=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local q=C.Packages local t=require(q.Llama)local O=t.None local G=t.Dictionary local J=G.keys it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local C,q=pcall(function()J(0)end);(expect(string.find(q,"\101\120\112\101\099\116\101\100\044 \103\111\116"))).to.be.ok()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \097 \110\101\119 \116\097\098\108\101",function()local C={};(expect(J({C}))).never.to.equal(C)end)it("\115\104\111\117\108\100 \110\111\116 \109\117\116\097\116\101 \112\097\115\115\101\100 \105\110 \116\097\098\108\101\115",function()local C={foo=1;bar=2,baz=3}local q=0 setmetatable(C,{__newindex=function()q=q+1 end})J(C);(expect(q)).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \116\104\101 \099\111\114\114\101\099\116 \107\101\121\115",function()local C={foo=1;bar=2}local q={foo=1;bar=1}local t=J(C);(expect(#t)).to.equal(2)for C,t in ipairs(t)do(expect(q[t])).to.be.ok()q[t]=q[t]-1 end for C,q in pairs(q)do(expect(q)).to.equal(0)end end)it("\115\104\111\117\108\100 \119\111\114\107 \119\105\116\104 \097\110 \101\109\112\116\121 \116\097\098\108\101",function()local C=J({});(expect(next(C))).never.to.be.ok()end)it("\115\104\111\117\108\100 \099\111\110\116\097\105\110 \097 \078\111\110\101 \101\108\101\109\101\110\116 \105\102 \116\104\101\114\101 \105\115 \097 \078\111\110\101 \107\101\121 \105\110 \116\104\101 \100\105\099\116\105\111\110\097\114\121",function()local C={[O]="\102\111\111";bar="\098\097\114"}local q={[O]=1;bar=1}local t=J(C);(expect(#t)).to.equal(2)for C,t in ipairs(t)do(expect(q[t])).to.be.ok()q[t]=q[t]-1 end for C,q in pairs(q)do(expect(q)).to.equal(0)end end)end
return function()
	local ReplicatedStorage = game:GetService("ReplicatedStorage")

	local Packages = ReplicatedStorage.Packages
	local Llama = require(Packages.Llama)

	local None = Llama.None

	local Dictionary = Llama.Dictionary
	local keys = Dictionary.keys

	it("should validate types", function()
		local _, err = pcall(function()
			keys(0)
		end)

		expect(string.find(err, "expected, got")).to.be.ok()
	end)

	it("should return a new table", function()
		local a = {}

		expect(keys({a})).never.to.equal(a)
	end)

	it("should not mutate passed in tables", function()
		local a = {
			foo = 1,
			bar = 2,
			baz = 3,
		}
		local mutations = 0

		setmetatable(a, {
			__newindex = function()
				mutations = mutations + 1
			end,
		})

		keys(a)

		expect(mutations).to.equal(0)
	end)

	it("should return the correct keys", function()
		local a = {
			foo = 1,
			bar = 2,
		}
		local keyCount = {
			foo = 1,
			bar = 1,
		}
		local b = keys(a)

		expect(#b).to.equal(2)

		for _, key in ipairs(b) do
			expect(keyCount[key]).to.be.ok()
			keyCount[key] = keyCount[key] - 1
		end

		for _, count in pairs(keyCount) do
			expect(count).to.equal(0)
		end
	end)

	it("should work with an empty table", function()
		local a = keys({})

		expect(next(a)).never.to.be.ok()
	end)

	it("should contain a None element if there is a None key in the dictionary", function()
		local a = {
			[None] = "foo",
			bar = "bar"
		}
		local keyCount = {
			[None] = 1,
			bar = 1
		}
		local b = keys(a)

		expect(#b).to.equal(2)

		for _, key in ipairs(b) do
			expect(keyCount[key]).to.be.ok()
			keyCount[key] = keyCount[key] - 1
		end
		
		for _, count in pairs(keyCount) do
			expect(count).to.equal(0)
		end
	end)
end