diff --git a/tests/unittests/unittests.cpp b/tests/unittests/unittests.cpp
index 7391e13..7ae84da 100644
--- a/tests/unittests/unittests.cpp
+++ b/tests/unittests/unittests.cpp
@@ -24,6 +24,8 @@
 #include <Windows.h>
 #endif
 
+#define EXPECT_GLENUM_EQ(expected, actual) EXPECT_EQ(static_cast<GLenum>(expected), static_cast<GLenum>(actual))
+
 class SwiftShaderTest : public testing::Test
 {
 protected:
@@ -95,8 +97,6 @@
 			EGL_ALPHA_SIZE,			8,
 			EGL_NONE
 		};
-
-		EGLConfig config;
 		EGLint num_config = -1;
 		EGLBoolean success = eglChooseConfig(display, configAttributes, &config, 1, &num_config);
 		EXPECT_EQ(EGL_SUCCESS, eglGetError());
@@ -165,7 +165,7 @@
 			EXPECT_EQ(context, currentContext);
 		}
 
-		EXPECT_EQ((GLenum)GL_NO_ERROR, glGetError());
+		EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
 	}
 
 	void Uninitialize()
@@ -203,8 +203,71 @@
 		EXPECT_EQ((EGLBoolean)EGL_TRUE, success);
 	}
 
+	GLuint createProgram(const std::string& vs, const std::string& fs)
+	{
+		GLuint program = glCreateProgram();
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		GLuint vsShader = glCreateShader(GL_VERTEX_SHADER);
+		const char* vsSource[1] = { vs.c_str() };
+		glShaderSource(vsShader, 1, vsSource, nullptr);
+		glCompileShader(vsShader);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		GLuint fsShader = glCreateShader(GL_FRAGMENT_SHADER);
+		const char* fsSource[1] = { fs.c_str() };
+		glShaderSource(fsShader, 1, fsSource, nullptr);
+		glCompileShader(fsShader);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		glAttachShader(program, vsShader);
+		glAttachShader(program, fsShader);
+		glLinkProgram(program);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		return program;
+	}
+
+	void drawQuad(GLuint program)
+	{
+		GLint prevProgram = 0;
+		glGetIntegerv(GL_CURRENT_PROGRAM, &prevProgram);
+
+		glUseProgram(program);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		GLint posLoc = glGetAttribLocation(program, "position");
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		GLint location = glGetUniformLocation(program, "tex");
+		ASSERT_NE(-1, location);
+		glUniform1i(location, 0);
+
+		float vertices[18] = { -1.0f,  1.0f, 0.5f,
+		                       -1.0f, -1.0f, 0.5f,
+		                        1.0f, -1.0f, 0.5f,
+		                       -1.0f,  1.0f, 0.5f,
+		                        1.0f, -1.0f, 0.5f,
+		                        1.0f,  1.0f, 0.5f };
+
+		glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, 0, vertices);
+		glEnableVertexAttribArray(posLoc);
+		glDrawArrays(GL_TRIANGLES, 0, 6);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+
+		glVertexAttribPointer(posLoc, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
+		glDisableVertexAttribArray(posLoc);
+		glUseProgram(prevProgram);
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
+	}
+
+	EGLDisplay getDisplay() const { return display; }
+	EGLDisplay getConfig() const { return config; }
+	EGLSurface getSurface() const { return surface; }
+	EGLContext getContext() const { return context; }
 private:
 	EGLDisplay display;
+	EGLConfig config;
 	EGLSurface surface;
 	EGLContext context;
 };
@@ -214,15 +277,15 @@
 	Initialize(2, true);
 
 	const GLubyte *glVendor = glGetString(GL_VENDOR);
-	EXPECT_EQ((GLenum)GL_NO_ERROR, glGetError());
+	EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
 	EXPECT_STREQ("Google Inc.", (const char*)glVendor);
 
 	const GLubyte *glRenderer = glGetString(GL_RENDERER);
-	EXPECT_EQ((GLenum)GL_NO_ERROR, glGetError());
+	EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
 	EXPECT_STREQ("Google SwiftShader", (const char*)glRenderer);
 
 	const GLubyte *glVersion = glGetString(GL_VERSION);
-	EXPECT_EQ((GLenum)GL_NO_ERROR, glGetError());
+	EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
 	EXPECT_THAT((const char*)glVersion, testing::HasSubstr("OpenGL ES 2.0 SwiftShader "));
 
 	Uninitialize();
@@ -262,11 +325,11 @@
 
 	// Defining level 0 is allowed
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	// Defining level other than 0 is not allowed
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 
 	GLint maxSize = 0;
 	glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB, &maxSize);
@@ -280,9 +343,9 @@
 
 	// Defining a texture larger than the max size is disallowed
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, maxSize + 1, maxSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, maxSize, maxSize + 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 
 	Uninitialize();
 }
@@ -299,7 +362,7 @@
 		GLuint tex = 1;
 		glBindTexture(GL_TEXTURE_2D, tex);
 		glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16, 16, 0, 128, data);
-		EXPECT_EQ(GL_NONE, glGetError());
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	}
 
 	// Rectangle textures cannot be compressed
@@ -307,7 +370,7 @@
 		GLuint tex = 2;
 		glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
 		glCompressedTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16, 16, 0, 128, data);
-		EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+		EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	}
 
 	Uninitialize();
@@ -323,7 +386,7 @@
 		GLuint tex = 1;
 		glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
 		glTexStorage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_RGBA8UI, 16, 16);
-		EXPECT_EQ(GL_NONE, glGetError());
+		EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	}
 
 	// Having more than one level is not allowed
@@ -333,7 +396,7 @@
 		// Use 5 levels because the EXT_texture_storage extension requires a mip chain all the way
 		// to a 1x1 mip.
 		glTexStorage2D(GL_TEXTURE_RECTANGLE_ARB, 5, GL_RGBA8UI, 16, 16);
-		EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+		EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 	}
 
 	GLint maxSize = 0;
@@ -353,16 +416,16 @@
 		GLuint tex = 4;
 		glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
 		glTexStorage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_RGBA8UI, maxSize + 1, maxSize);
-		EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+		EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 		glTexStorage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_RGBA8UI, maxSize, maxSize + 1);
-		EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+		EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 	}
 
 	// Compressed formats are disallowed
 	GLuint tex = 5;
 	glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
 	glTexStorage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 16, 16);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 
 	Uninitialize();
 }
@@ -378,39 +441,39 @@
 	// Only wrap mode CLAMP_TO_EDGE is supported
 	// Wrap S
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 
 	// Wrap T
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 
 	// Min filter has to be nearest or linear
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-	EXPECT_EQ(GL_INVALID_ENUM, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_ENUM, glGetError());
 
 	// Base level has to be 0
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_BASE_LEVEL, 0);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 	glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_BASE_LEVEL, 1);
-	EXPECT_EQ(GL_INVALID_OPERATION, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_OPERATION, glGetError());
 
 	Uninitialize();
 }
@@ -423,19 +486,19 @@
 	GLuint tex = 1;
 	glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	GLuint fbo = 1;
 	glBindFramebuffer(GL_FRAMEBUFFER, fbo);
 
 	// Using level 0 of a rectangle texture is valid.
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ARB, tex, 0);
-	EXPECT_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	// Setting level != 0 is invalid
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ARB, tex, 1);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 
 	Uninitialize();
 }
@@ -447,11 +510,11 @@
 
 	GLuint tex = 1;
 	glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	unsigned char green[4] = { 0, 255, 0, 255 };
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, green);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	const std::string vs =
 		"attribute vec4 position;\n"
@@ -469,25 +532,7 @@
 		"    gl_FragColor = texture2DRect(tex, vec2(0, 0));\n"
 		"}\n";
 
-	GLuint program = glCreateProgram();
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLuint vsShader = glCreateShader(GL_VERTEX_SHADER);
-	const char* vsSource[1] = { vs.c_str() };
-	glShaderSource(vsShader, 1, vsSource, nullptr);
-	glCompileShader(vsShader);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLuint fsShader = glCreateShader(GL_FRAGMENT_SHADER);
-	const char* fsSource[1] = { fs.c_str() };
-	glShaderSource(fsShader, 1, fsSource, nullptr);
-	glCompileShader(fsShader);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	glAttachShader(program, vsShader);
-	glAttachShader(program, fsShader);
-	glLinkProgram(program);
-	EXPECT_EQ(GL_NONE, glGetError());
+	GLuint program = createProgram(vs, fs);
 
 	glUseProgram(program);
 	GLint location = glGetUniformLocation(program, "tex");
@@ -496,36 +541,13 @@
 
 	glClearColor(0.0, 0.0, 0.0, 0.0);
 	glClear(GL_COLOR_BUFFER_BIT);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
-	GLint prevProgram = 0;
-	glGetIntegerv(GL_CURRENT_PROGRAM, &prevProgram);
-
-	glUseProgram(program);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLint posLoc = glGetAttribLocation(program, "position");
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	float vertices[18] = { -1.0f,  1.0f, 0.5f,
-						   -1.0f, -1.0f, 0.5f,
-							1.0f, -1.0f, 0.5f,
-						   -1.0f,  1.0f, 0.5f,
-							1.0f, -1.0f, 0.5f,
-							1.0f,  1.0f, 0.5f };
-	glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, 0, vertices);
-	glEnableVertexAttribArray(posLoc);
-	glDrawArrays(GL_TRIANGLES, 0, 6);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	glVertexAttribPointer(posLoc, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
-	glDisableVertexAttribArray(posLoc);
-	glUseProgram(prevProgram);
-	EXPECT_EQ(GL_NONE, glGetError());
+	drawQuad(program);
 
 	compareColor(green);
 
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	Uninitialize();
 }
@@ -537,11 +559,11 @@
 
 	GLuint tex = 1;
 	glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	unsigned char green[4] = { 0, 255, 0, 255 };
 	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, green);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	const std::string vs =
 		"#version 300 es\n"
@@ -562,26 +584,7 @@
 		"    fragColor = texture(tex, vec2(0, 0));\n"
 		"}\n";
 
-	GLuint program = glCreateProgram();
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLuint vsShader = glCreateShader(GL_VERTEX_SHADER);
-	const char* vsSource[1] = { vs.c_str() };
-	glShaderSource(vsShader, 1, vsSource, nullptr);
-	glCompileShader(vsShader);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLuint fsShader = glCreateShader(GL_FRAGMENT_SHADER);
-	const char* fsSource[1] = { fs.c_str() };
-	glShaderSource(fsShader, 1, fsSource, nullptr);
-	glCompileShader(fsShader);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	glAttachShader(program, vsShader);
-	glAttachShader(program, fsShader);
-	glLinkProgram(program);
-	EXPECT_EQ(GL_NONE, glGetError());
-
+	GLuint program = createProgram(vs, fs);
 	glUseProgram(program);
 	GLint location = glGetUniformLocation(program, "tex");
 	ASSERT_NE(-1, location);
@@ -589,36 +592,13 @@
 
 	glClearColor(0.0, 0.0, 0.0, 0.0);
 	glClear(GL_COLOR_BUFFER_BIT);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
-	GLint prevProgram = 0;
-	glGetIntegerv(GL_CURRENT_PROGRAM, &prevProgram);
-
-	glUseProgram(program);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	GLint posLoc = glGetAttribLocation(program, "position");
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	float vertices[18] = { -1.0f,  1.0f, 0.5f,
-						   -1.0f, -1.0f, 0.5f,
-							1.0f, -1.0f, 0.5f,
-						   -1.0f,  1.0f, 0.5f,
-							1.0f, -1.0f, 0.5f,
-							1.0f,  1.0f, 0.5f };
-	glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, 0, vertices);
-	glEnableVertexAttribArray(posLoc);
-	glDrawArrays(GL_TRIANGLES, 0, 6);
-	EXPECT_EQ(GL_NONE, glGetError());
-
-	glVertexAttribPointer(posLoc, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
-	glDisableVertexAttribArray(posLoc);
-	glUseProgram(prevProgram);
-	EXPECT_EQ(GL_NONE, glGetError());
+	drawQuad(program);
 
 	compareColor(green);
 
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	Uninitialize();
 }
@@ -636,8 +616,8 @@
 	GLuint fbo = 1;
 	glBindFramebuffer(GL_FRAMEBUFFER, fbo);
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ARB, tex, 0);
-	EXPECT_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	// Clearing a texture is just as good as checking we can render to it, right?
 	glClearColor(0.0, 1.0, 0.0, 1.0);
@@ -645,7 +625,7 @@
 
 	unsigned char green[4] = { 0, 255, 0, 255 };
 	compareColor(green);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	Uninitialize();
 }
@@ -659,15 +639,15 @@
 
 	GLint minFilter = 0;
 	glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, &minFilter);
-	EXPECT_EQ(GL_LINEAR, minFilter);
+	EXPECT_GLENUM_EQ(GL_LINEAR, minFilter);
 
 	GLint wrapS = 0;
 	glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, &wrapS);
-	EXPECT_EQ(GL_CLAMP_TO_EDGE, wrapS);
+	EXPECT_GLENUM_EQ(GL_CLAMP_TO_EDGE, wrapS);
 
 	GLint wrapT = 0;
 	glGetTexParameteriv(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, &wrapT);
-	EXPECT_EQ(GL_CLAMP_TO_EDGE, wrapT);
+	EXPECT_GLENUM_EQ(GL_CLAMP_TO_EDGE, wrapT);
 
 	Uninitialize();
 }
@@ -683,15 +663,15 @@
 	glBindFramebuffer(GL_FRAMEBUFFER, 0);
 	glClearColor(0, 1, 0, 1);
 	glClear(GL_COLOR_BUFFER_BIT);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	// Error case: level != 0
 	glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 1, GL_RGBA8, 0, 0, 1, 1, 0);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 
 	// level = 0 works and defines the texture.
 	glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, 0, 0, 1, 1, 0);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	GLuint fbo = 1;
 	glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -699,7 +679,7 @@
 
 	unsigned char green[4] = { 0, 255, 0, 255 };
 	compareColor(green);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	Uninitialize();
 }
@@ -717,15 +697,15 @@
 	glBindFramebuffer(GL_FRAMEBUFFER, 0);
 	glClearColor(0, 1, 0, 1);
 	glClear(GL_COLOR_BUFFER_BIT);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	// Error case: level != 0
 	glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 1, 0, 0, 0, 0, 1, 1);
-	EXPECT_EQ(GL_INVALID_VALUE, glGetError());
+	EXPECT_GLENUM_EQ(GL_INVALID_VALUE, glGetError());
 
 	// level = 0 works and defines the texture.
 	glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, 0, 0, 1, 1);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	GLuint fbo = 1;
 	glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -733,7 +713,7 @@
 
 	unsigned char green[4] = { 0, 255, 0, 255 };
 	compareColor(green);
-	EXPECT_EQ(GL_NONE, glGetError());
+	EXPECT_GLENUM_EQ(GL_NONE, glGetError());
 
 	Uninitialize();
 }
