return function()local E=(game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")).Packages.Monolith local p=require(E.Queue)describe("\067\111\110\115\116\114\117\099\116\111\114",function()it("\115\104\111\117\108\100 \098\101 \097\098\108\101 \116\111 \098\101 \105\110\115\116\097\110\116\105\097\116\101\100",function()local E=p.new();(expect(E)).to.be.ok()end)end)describe("\069\110\117\109\101\114\097\098\108\101 \073\110\116\101\114\102\097\099\101",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \069\110\117\109\101\114\097\116\111\114 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Enumerator()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \069\110\117\109\101\114\097\116\111\114 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)end)describe("\067\111\108\108\101\099\116\105\111\110 \073\110\116\101\114\102\097\099\101",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \067\111\110\116\097\105\110\115 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Contains()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \067\111\110\116\097\105\110\115 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \067\111\110\116\097\105\110\115\065\108\108 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.ContainsAll()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \067\111\110\116\097\105\110\115\065\108\108 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \067\111\110\116\097\105\110\115\065\110\121 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.ContainsAny()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \067\111\110\116\097\105\110\115\065\110\121 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \067\111\117\110\116 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Count()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \067\111\117\110\116 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \069\109\112\116\121 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Empty()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \069\109\112\116\121 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \084\111\065\114\114\097\121 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.ToArray()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \084\111\065\114\114\097\121 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \084\111\084\097\098\108\101 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.ToTable()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \084\111\084\097\098\108\101 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \065\100\100 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Add()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \065\100\100 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \065\100\100\065\108\108 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.AddAll()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \065\100\100\065\108\108 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \067\108\101\097\114 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Clear()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \067\108\101\097\114 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \082\101\109\111\118\101 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Remove()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \082\101\109\111\118\101 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \082\101\109\111\118\101\065\108\108 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.RemoveAll()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \082\101\109\111\118\101\065\108\108 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \082\101\116\097\105\110\065\108\108 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.RetainAll()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \082\101\116\097\105\110\065\108\108 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)end)describe("\081\117\101\117\101 \073\110\116\101\114\102\097\099\101",function()it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \070\105\114\115\116 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.First()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \070\105\114\115\116 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \080\117\115\104 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Push()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \080\117\115\104 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)it("\115\104\111\117\108\100 \101\114\114\111\114 \119\104\101\110 \083\104\105\102\116 \105\115 \110\111\116 \111\118\101\114\114\105\100\100\101\110",function()local E=p.new();(expect(function()E.Shift()end)).to.throw("\065\098\115\116\114\097\099\116 \109\101\116\104\111\100 \083\104\105\102\116 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \105\110 \102\105\114\115\116 \099\111\110\099\114\101\116\101 \115\117\098\099\108\097\115\115\046 \067\097\108\108\101\100 \100\105\114\101\099\116\108\121 \102\114\111\109 \081\117\101\117\101\046")end)end)end
--- Tests for the @{Queue} interface.

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

	describe("Constructor", function()
		it("should be able to be instantiated", function()
			local queue = Queue.new()
			expect(queue).to.be.ok()
		end)
	end)

	describe("Enumerable Interface", function()
		it("should error when Enumerator is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Enumerator()
			end).to.throw(
				"Abstract method Enumerator must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)
	end)

	describe("Collection Interface", function()
		it("should error when Contains is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Contains()
			end).to.throw(
				"Abstract method Contains must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when ContainsAll is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.ContainsAll()
			end).to.throw(
				"Abstract method ContainsAll must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when ContainsAny is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.ContainsAny()
			end).to.throw(
				"Abstract method ContainsAny must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Count is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Count()
			end).to.throw(
				"Abstract method Count must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Empty is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Empty()
			end).to.throw(
				"Abstract method Empty must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when ToArray is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.ToArray()
			end).to.throw(
				"Abstract method ToArray must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when ToTable is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.ToTable()
			end).to.throw(
				"Abstract method ToTable must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Add is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Add()
			end).to.throw(
				"Abstract method Add must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when AddAll is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.AddAll()
			end).to.throw(
				"Abstract method AddAll must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Clear is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Clear()
			end).to.throw(
				"Abstract method Clear must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Remove is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Remove()
			end).to.throw(
				"Abstract method Remove must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when RemoveAll is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.RemoveAll()
			end).to.throw(
				"Abstract method RemoveAll must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when RetainAll is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.RetainAll()
			end).to.throw(
				"Abstract method RetainAll must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)
	end)

	describe("Queue Interface", function()
		it("should error when First is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.First()
			end).to.throw(
				"Abstract method First must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Push is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Push()
			end).to.throw(
				"Abstract method Push must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)

		it("should error when Shift is not overridden", function()
			local queue = Queue.new()
			expect(function()
				queue.Shift()
			end).to.throw(
				"Abstract method Shift must be overridden in first concrete subclass. Called directly from Queue."
			)
		end)
	end)
end
