Added simple context sharing test program.
diff --git a/tests/sharing.c b/tests/sharing.c
new file mode 100644
index 0000000..765b4ec
--- /dev/null
+++ b/tests/sharing.c
@@ -0,0 +1,144 @@
+//========================================================================
+// Context sharing test program
+// Copyright (c) Camilla Berglund <elmindreda@elmindreda.org>
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+//
+// This program is used to test sharing of objects between contexts
+//
+//========================================================================
+
+#include <GL/glfw3.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static GLFWwindow open_window(const char* title, GLFWwindow share)
+{
+    GLFWwindow window;
+
+    window = glfwOpenWindow(400, 400, GLFW_WINDOWED, title, share);
+    if (!window)
+        return NULL;
+
+    glfwSwapInterval(1);
+
+    return window;
+}
+
+static GLuint create_texture(void)
+{
+    int x, y;
+    char pixels[256 * 256];
+    GLuint texture;
+
+    glGenTextures(1, &texture);
+    glBindTexture(GL_TEXTURE_2D, texture);
+
+    for (y = 0;  y < 256;  y++)
+    {
+        for (x = 0;  x < 256;  x++)
+            pixels[y * 256 + x] = rand() % 256;
+    }
+
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+    return texture;
+}
+
+static void draw_quad(GLuint texture)
+{
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluOrtho2D(0.f, 1.f, 0.f, 1.f);
+
+    glEnable(GL_TEXTURE_2D);
+    glBindTexture(GL_TEXTURE_2D, texture);
+    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+    glColor3f(0.6f, 0.f, 0.6f);
+
+    glBegin(GL_QUADS);
+
+    glTexCoord2f(0.f, 0.f);
+    glVertex2f(0.f, 0.f);
+
+    glTexCoord2f(1.f, 0.f);
+    glVertex2f(1.f, 0.f);
+
+    glTexCoord2f(1.f, 1.f);
+    glVertex2f(1.f, 1.f);
+
+    glTexCoord2f(0.f, 1.f);
+    glVertex2f(0.f, 1.f);
+
+    glEnd();
+}
+
+int main(int argc, char** argv)
+{
+    GLFWwindow windows[2];
+    GLuint texture;
+
+    if (!glfwInit())
+    {
+        fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
+        exit(EXIT_FAILURE);
+    }
+
+    windows[0] = open_window("First", NULL);
+    if (!windows[0])
+    {
+        fprintf(stderr, "Failed to open first GLFW window: %s\n", glfwErrorString(glfwGetError()));
+        exit(EXIT_FAILURE);
+    }
+
+    texture = create_texture();
+
+    windows[1] = open_window("Second", windows[0]);
+    if (!windows[1])
+    {
+        fprintf(stderr, "Failed to open second GLFW window: %s\n", glfwErrorString(glfwGetError()));
+        exit(EXIT_FAILURE);
+    }
+
+    while (glfwIsWindow(windows[0]) && glfwIsWindow(windows[1]))
+    {
+        glfwMakeWindowCurrent(windows[0]);
+        glClear(GL_COLOR_BUFFER_BIT);
+        draw_quad(texture);
+        glfwSwapBuffers();
+
+        glfwMakeWindowCurrent(windows[1]);
+        glClear(GL_COLOR_BUFFER_BIT);
+        draw_quad(texture);
+        glfwSwapBuffers();
+
+        glfwWaitEvents();
+    }
+
+    glfwTerminate();
+    exit(EXIT_SUCCESS);
+}
+