return function()local U=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local s=U.Packages local H=require(s.Llama)local X=H.None local Y=H.Dictionary local B=Y.values it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local U,s=pcall(function()B(0)end);(expect(string.find(s,"\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 U={};(expect(B({U}))).never.to.equal(U)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 U={foo=1,bar=2,baz=3}local s=0 setmetatable(U,{__newindex=function()s=s+1 end})B(U);(expect(s)).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 \118\097\108\117\101\115",function()local U={foo=1;bar=2;baz=3}local s={[1]=1;[2]=1;[3]=1}local H=B(U);(expect(#H)).to.equal(3)for U,H in ipairs(H)do(expect(s[H])).to.be.ok()s[H]=s[H]-1 end for U,s in pairs(s)do(expect(s)).to.equal(0)end end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \100\117\112\108\105\099\097\116\101\115 \105\102 \116\119\111 \118\097\108\117\101\115 \097\114\101 \116\104\101 \115\097\109\101",function()local U={foo=1,bar=2,baz=1}local s={[1]=2;[2]=1}local H=B(U);(expect(#H)).to.equal(3)for U,H in ipairs(H)do(expect(s[H])).to.be.ok()s[H]=s[H]-1 end for U,s in pairs(s)do(expect(s)).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 U=B({});(expect(next(U))).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 \118\097\108\117\101 \105\110 \116\104\101 \100\105\099\116\105\111\110\097\114\121",function()local U={foo=X,bar=2}local s={[X]=1,[2]=1}local H=B(U);(expect(#H)).to.equal(2)for U,H in ipairs(H)do(expect(s[H])).to.be.ok()s[H]=s[H]-1 end for U,s in pairs(s)do(expect(s)).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 values = Dictionary.values

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

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

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

		expect(values({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,
		})

		values(a)

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

	it("should return the correct values", function()
		local a = {
			foo = 1,
			bar = 2,
			baz = 3,
		}
		local valueCount = {
			[1] = 1,
			[2] = 1,
			[3] = 1,
		}
		local b = values(a)

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

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

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

	it("should return duplicates if two values are the same", function()
		local a = {
			foo = 1,
			bar = 2,
			baz = 1,
		}
		local valueCount = {
			[1] = 2,
			[2] = 1,
		}
		local b = values(a)

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

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

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

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

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

	it("should contain a None element if there is a None value in the dictionary", function()
		local a = {
			foo = None,
			bar = 2,
		}
		local valueCount = {
			[None] = 1,
			[2] = 1,
		}
		local b = values(a)

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

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