--!native
--!nonstrict
--!optimize 2
-- Compiled with roblox-ts v2.3.0
local TS = _G[script]
--/ <reference types="@rbxts/testez/globals" />
local MinPriorityQueue = TS.import(script, script.Parent.Parent, "min-priority-queue").MinPriorityQueue
return function()
	describe("MinPriorityQueue", function()
		describe("constructor", function()
			it("should return a MinPriorityQueue", function()
				expect(TS.instanceof(MinPriorityQueue.new(), MinPriorityQueue)).to.equal(true)
			end)
		end)
		describe("MinPriorityQueue.isEmpty", function()
			it("should return a boolean", function()
				expect(MinPriorityQueue.new():isEmpty()).to.be.a("boolean")
			end)
			it("should return true if empty", function()
				expect(MinPriorityQueue.new():isEmpty()).to.equal(true)
			end)
			it("should return false if not empty", function()
				local queue = MinPriorityQueue.new()
				queue:insertWithPriority("value", 1)
				expect(queue:isEmpty()).to.equal(false)
			end)
		end)
		describe("MinPriorityQueue.insertWithPriority", function()
			it("should return a number", function()
				expect(MinPriorityQueue.new():insertWithPriority("1", 1)).to.be.a("number")
			end)
			it("should insert into the proper location", function()
				local queue = MinPriorityQueue.new()
				queue:insertWithPriority("2", 2)
				queue:insertWithPriority("3", 3)
				expect(queue:insertWithPriority("1", 1)).to.equal(2)
			end)
		end)
		describe("MinPriorityQueue.changePriority", function()
			it("should return a number", function()
				local queue = MinPriorityQueue.new()
				queue:insertWithPriority("1", 4)
				queue:insertWithPriority("2", 2)
				queue:insertWithPriority("3", 3)
				expect(queue:changePriority("1", 1)).to.be.a("number")
			end)
			it("should return adjusted location", function()
				local queue = MinPriorityQueue.new()
				queue:insertWithPriority("1", 4)
				queue:insertWithPriority("2", 2)
				queue:insertWithPriority("3", 3)
				expect(queue:changePriority("1", 1)).to.equal(2)
			end)
			it("should throw if the passed value is null", function()
				expect(function()
					return MinPriorityQueue.new():changePriority("1", 1)
				end).to:throw()
			end)
		end)
	end)
end
