Esempio n. 1
0
static void
test_region_fitting ()
{
    GList* region;
    MetaRectangle rect;

    /* See test_basic_fitting() for how/why these automated random tests work */
    int i;
    region = get_screen_region (3);
    for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
        get_random_rect (&rect);
        g_assert (meta_rectangle_contained_in_region (region, &rect) == FALSE ||
                  meta_rectangle_could_fit_in_region (region, &rect) == TRUE);
    }
    meta_rectangle_free_list_and_elements (region);

    /* Do some manual tests too */
    region = get_screen_region (1);

    rect = meta_rect (50, 50, 400, 400);
    g_assert (meta_rectangle_could_fit_in_region (region, &rect));
    g_assert (meta_rectangle_contained_in_region (region, &rect));

    rect = meta_rect (250, 0, 500, 1150);
    g_assert (!meta_rectangle_could_fit_in_region (region, &rect));
    g_assert (!meta_rectangle_contained_in_region (region, &rect));

    rect = meta_rect (250, 0, 400, 400);
    g_assert (meta_rectangle_could_fit_in_region (region, &rect));
    g_assert (!meta_rectangle_contained_in_region (region, &rect));

    meta_rectangle_free_list_and_elements (region);

    region = get_screen_region (2);
    rect = meta_rect (1000, 50, 600, 1100);
    g_assert (meta_rectangle_could_fit_in_region (region, &rect));
    g_assert (!meta_rectangle_contained_in_region (region, &rect));

    meta_rectangle_free_list_and_elements (region);

    printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 2
0
static MetaStrut*
new_meta_strut (int x, int y, int width, int height, int side)
{
    MetaStrut* temporary;
    temporary = g_new (MetaStrut, 1);
    temporary->rect = meta_rect(x, y, width, height);
    temporary->side = side;

    return temporary;
}
Esempio n. 3
0
static void
test_overlap_funcs ()
{
  MetaRectangle temp1, temp2;
  int i;
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&temp1);
      get_random_rect (&temp2);
      g_assert (meta_rectangle_overlap (&temp1, &temp2) ==
                (meta_rectangle_horiz_overlap (&temp1, &temp2) &&
                 meta_rectangle_vert_overlap (&temp1, &temp2)));
    }

  temp1 = meta_rect ( 0, 0, 10, 10);
  temp2 = meta_rect (20, 0, 10,  5);
  g_assert (!meta_rectangle_overlap (&temp1, &temp2));
  g_assert (!meta_rectangle_horiz_overlap (&temp1, &temp2));
  g_assert ( meta_rectangle_vert_overlap (&temp1, &temp2));

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 4
0
static void
test_basic_fitting ()
{
  MetaRectangle temp1, temp2, temp3;
  int i;
  /* Four cases:
   *   case   temp1 fits temp2    temp1 could fit temp2
   *     1           Y                      Y
   *     2           N                      Y
   *     3           Y                      N
   *     4           N                      N
   * Of the four cases, case 3 is impossible.  An alternate way of looking
   * at this table is that either the middle column must be no, or the last
   * column must be yes.  So we test that.  Also, we can repeat the test
   * reversing temp1 and temp2.
   */
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&temp1);
      get_random_rect (&temp2);
      g_assert (meta_rectangle_contains_rect (&temp1, &temp2) == FALSE ||
                meta_rectangle_could_fit_rect (&temp1, &temp2) == TRUE);
      g_assert (meta_rectangle_contains_rect (&temp2, &temp1) == FALSE ||
                meta_rectangle_could_fit_rect (&temp2, &temp1) == TRUE);
    }

  temp1 = meta_rect ( 0, 0, 10, 10);
  temp2 = meta_rect ( 5, 5,  5,  5);
  temp3 = meta_rect ( 8, 2,  3,  7);
  g_assert ( meta_rectangle_contains_rect (&temp1, &temp2));
  g_assert (!meta_rectangle_contains_rect (&temp2, &temp1));
  g_assert (!meta_rectangle_contains_rect (&temp1, &temp3));
  g_assert ( meta_rectangle_could_fit_rect (&temp1, &temp3));
  g_assert (!meta_rectangle_could_fit_rect (&temp3, &temp2));

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 5
0
static GList*
get_screen_edges (int which)
{
  GList *ret;
  GSList *struts;
  MetaRectangle basic_rect;

  basic_rect = meta_rect (0, 0, 1600, 1200);
  ret = NULL;

  struts = get_strut_list (which);
  ret = meta_rectangle_find_onscreen_edges (&basic_rect, struts);
  free_strut_list (struts);

  return ret;
}
Esempio n. 6
0
static GList*
get_screen_region (int which)
{
  GList *ret;
  GSList *struts;
  MetaRectangle basic_rect;

  basic_rect = meta_rect (0, 0, 1600, 1200);
  ret = NULL;

  struts = get_strut_list (which);
  ret = meta_rectangle_get_minimal_spanning_set_for_region (&basic_rect, struts);
  free_strut_list (struts);

  return ret;
}
Esempio n. 7
0
static void
test_area ()
{
  MetaRectangle temp;
  int i;
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&temp);
      g_assert (meta_rectangle_area (&temp) == temp.width * temp.height);
    }

  temp = meta_rect (0, 0, 5, 7);
  g_assert (meta_rectangle_area (&temp) == 35);

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 8
0
static void
run_position_expression_tests (void)
{
#if 0
  int i;
  MetaPositionExprEnv env;

  i = 0;
  while (i < (int) G_N_ELEMENTS (position_expression_tests))
    {
      GError *err;
      gboolean retval;
      const PositionExpressionTest *test;
      PosToken *tokens;
      int n_tokens;
      int x, y;

      test = &position_expression_tests[i];

      if (g_getenv ("META_PRINT_TESTS") != NULL)
        g_print ("Test expression: \"%s\" expecting x = %d y = %d",
                 test->expr, test->expected_x, test->expected_y);

      err = NULL;

      env.rect = meta_rect (test->rect.x, test->rect.y,
                            test->rect.width, test->rect.height);
      env.object_width = -1;
      env.object_height = -1;
      env.left_width = 0;
      env.right_width = 0;
      env.top_height = 0;
      env.bottom_height = 0;
      env.title_width = 5;
      env.title_height = 5;
      env.icon_width = 32;
      env.icon_height = 32;
      env.mini_icon_width = 16;
      env.mini_icon_height = 16;
      env.theme = NULL;

      if (err == NULL)
        {
          retval = meta_parse_position_expression (tokens, n_tokens,
                                                   &env,
                                                   &x, &y,
                                                   &err);
        }

      if (retval && err)
        g_error (_("position expression test returned TRUE but set error"));
      if (!retval && err == NULL)
        g_error (_("position expression test returned FALSE but didn't set error"));
      if (((int) test->expected_error) != NO_ERROR)
        {
          if (err == NULL)
            g_error (_("Error was expected but none given"));
          if (err->code != (int) test->expected_error)
            g_error (_("Error %d was expected but %d given"),
                     test->expected_error, err->code);
        }
      else
        {
          if (err)
            g_error (_("Error not expected but one was returned: %s"),
                     err->message);

          if (x != test->expected_x)
            g_error (_("x value was %d, %d was expected"), x, test->expected_x);

          if (y != test->expected_y)
            g_error (_("y value was %d, %d was expected"), y, test->expected_y);
        }

      if (err)
        g_error_free (err);

      meta_pos_tokens_free (tokens, n_tokens);
      ++i;
    }
#endif
}
Esempio n. 9
0
static void
ensure_work_areas_validated (MetaWorkspace *workspace)
{
  GList         *windows;
  GList         *tmp;
  MetaRectangle  work_area;
  int            i;  /* C89 absolutely sucks... */

  if (!workspace->work_areas_invalid)
    return;

  g_assert (workspace->all_struts == NULL);
  g_assert (workspace->monitor_region == NULL);
  g_assert (workspace->screen_region == NULL);
  g_assert (workspace->screen_edges == NULL);
  g_assert (workspace->monitor_edges == NULL);

  /* STEP 1: Get the list of struts */

  workspace->all_struts = copy_strut_list (workspace->builtin_struts);

  windows = meta_workspace_list_windows (workspace);
  for (tmp = windows; tmp != NULL; tmp = tmp->next)
    {
      MetaWindow *win = tmp->data;
      GSList *s_iter;

      for (s_iter = win->struts; s_iter != NULL; s_iter = s_iter->next) {
        workspace->all_struts = g_slist_prepend (workspace->all_struts,
                                                 copy_strut(s_iter->data));
      }
    }
  g_list_free (windows);

  /* STEP 2: Get the maximal/spanning rects for the onscreen and
   *         on-single-monitor regions
   */  
  g_assert (workspace->monitor_region == NULL);
  g_assert (workspace->screen_region   == NULL);

  workspace->monitor_region = g_new (GList*,
                                      workspace->screen->n_monitor_infos);
  for (i = 0; i < workspace->screen->n_monitor_infos; i++)
    {
      workspace->monitor_region[i] =
        meta_rectangle_get_minimal_spanning_set_for_region (
          &workspace->screen->monitor_infos[i].rect,
          workspace->all_struts);
    }
  workspace->screen_region =
    meta_rectangle_get_minimal_spanning_set_for_region (
      &workspace->screen->rect,
      workspace->all_struts);

  /* STEP 3: Get the work areas (region-to-maximize-to) for the screen and
   *         monitors.
   */
  work_area = workspace->screen->rect;  /* start with the screen */
  if (workspace->screen_region == NULL)
    work_area = meta_rect (0, 0, -1, -1);
  else
    meta_rectangle_clip_to_region (workspace->screen_region,
                                   FIXED_DIRECTION_NONE,
                                   &work_area);

  /* Lots of paranoia checks, forcing work_area_screen to be sane */
#define MIN_SANE_AREA 100
  if (work_area.width < MIN_SANE_AREA)
    {
      meta_warning ("struts occupy an unusually large percentage of the screen; "
                    "available remaining width = %d < %d",
                    work_area.width, MIN_SANE_AREA);
      if (work_area.width < 1)
        {
          work_area.x = (workspace->screen->rect.width - MIN_SANE_AREA)/2;
          work_area.width = MIN_SANE_AREA;
        }
      else
        {
          int amount = (MIN_SANE_AREA - work_area.width)/2;
          work_area.x     -=   amount;
          work_area.width += 2*amount;
        }
    }
  if (work_area.height < MIN_SANE_AREA)
    {
      meta_warning ("struts occupy an unusually large percentage of the screen; "
                    "available remaining height = %d < %d",
                    work_area.height, MIN_SANE_AREA);
      if (work_area.height < 1)
        {
          work_area.y = (workspace->screen->rect.height - MIN_SANE_AREA)/2;
          work_area.height = MIN_SANE_AREA;
        }
      else
        {
          int amount = (MIN_SANE_AREA - work_area.height)/2;
          work_area.y      -=   amount;
          work_area.height += 2*amount;
        }
    }
  workspace->work_area_screen = work_area;
  meta_topic (META_DEBUG_WORKAREA,
              "Computed work area for workspace %d: %d,%d %d x %d\n",
              meta_workspace_index (workspace),
              workspace->work_area_screen.x,
              workspace->work_area_screen.y,
              workspace->work_area_screen.width,
              workspace->work_area_screen.height);    

  /* Now find the work areas for each monitor */
  g_free (workspace->work_area_monitor);
  workspace->work_area_monitor = g_new (MetaRectangle,
                                         workspace->screen->n_monitor_infos);

  for (i = 0; i < workspace->screen->n_monitor_infos; i++)
    {
      work_area = workspace->screen->monitor_infos[i].rect;

      if (workspace->monitor_region[i] == NULL)
        /* FIXME: constraints.c untested with this, but it might be nice for
         * a screen reader or magnifier.
         */
        work_area = meta_rect (work_area.x, work_area.y, -1, -1);
      else
        meta_rectangle_clip_to_region (workspace->monitor_region[i],
                                       FIXED_DIRECTION_NONE,
                                       &work_area);

      workspace->work_area_monitor[i] = work_area;
      meta_topic (META_DEBUG_WORKAREA,
                  "Computed work area for workspace %d "
                  "monitor %d: %d,%d %d x %d\n",
                  meta_workspace_index (workspace),
                  i,
                  workspace->work_area_monitor[i].x,
                  workspace->work_area_monitor[i].y,
                  workspace->work_area_monitor[i].width,
                  workspace->work_area_monitor[i].height);
    }

  /* STEP 4: Make sure the screen_region is nonempty (separate from step 2
   *         since it relies on step 3).
   */  
  if (workspace->screen_region == NULL)
    {
      MetaRectangle *nonempty_region;
      nonempty_region = g_new (MetaRectangle, 1);
      *nonempty_region = workspace->work_area_screen;
      workspace->screen_region = g_list_prepend (NULL, nonempty_region);
    }

  /* STEP 5: Cache screen and monitor edges for edge resistance and snapping */
  g_assert (workspace->screen_edges    == NULL);
  g_assert (workspace->monitor_edges  == NULL);
  workspace->screen_edges =
    meta_rectangle_find_onscreen_edges (&workspace->screen->rect,
                                        workspace->all_struts);
  tmp = NULL;
  for (i = 0; i < workspace->screen->n_monitor_infos; i++)
    tmp = g_list_prepend (tmp, &workspace->screen->monitor_infos[i].rect);
  workspace->monitor_edges =
    meta_rectangle_find_nonintersected_monitor_edges (tmp,
                                                       workspace->all_struts);
  g_list_free (tmp);

  /* We're all done, YAAY!  Record that everything has been validated. */
  workspace->work_areas_invalid = FALSE;

  {
    /*
     * Notify the compositor that the workspace geometry has changed.
     */
    MetaScreen     *screen = workspace->screen;
    MetaDisplay    *display = meta_screen_get_display (screen);
    MetaCompositor *comp = meta_display_get_compositor (display);

    if (comp)
      meta_compositor_update_workspace_geometry (comp, workspace);
  }
}
Esempio n. 10
0
static void
test_shoving_into_region ()
{
  GList* region;
  MetaRectangle rect, temp;
  FixedDirections fixed_directions = 0;
  int i;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&rect);
      if (meta_rectangle_could_fit_in_region (region, &rect))
        {
          meta_rectangle_shove_into_region (region, 0, &rect);
          g_assert (meta_rectangle_contained_in_region (region, &rect));
        }
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (2);

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (300,  950, 400, 200);
  meta_rectangle_shove_into_region (region,
                                    fixed_directions,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (425, 1000, 300, 200);
  temp = meta_rect (450, 1000, 300, 200);
  meta_rectangle_shove_into_region (region,
                                    fixed_directions,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (425, 1000, 300, 200);
  temp = meta_rect (425,  950, 300, 200);
  meta_rectangle_shove_into_region (region,
                                    FIXED_DIRECTION_X,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 300, 1000, 400, 200);
  temp = meta_rect (1200, 1000, 400, 200);
  meta_rectangle_shove_into_region (region,
                                    FIXED_DIRECTION_Y,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 800, 1150, 400,  50);  /* Completely "offscreen" :) */
  temp = meta_rect ( 800, 1050, 400,  50);
  meta_rectangle_shove_into_region (region,
                                    0,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (-1000,  0, 400, 150);  /* Offscreen in 2 directions */
  temp = meta_rect (    0, 20, 400, 150);
  meta_rectangle_shove_into_region (region,
                                    0,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 11
0
static void
test_clipping_to_region ()
{
  GList* region;
  MetaRectangle rect, temp;
  FixedDirections fixed_directions = 0;
  int i;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&rect);
      if (rect_overlaps_region (region, &rect))
        {
          meta_rectangle_clip_to_region (region, 0, &rect);
          g_assert (meta_rectangle_contained_in_region (region, &rect) == TRUE);
        }
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (2);

  rect = meta_rect (-50, -10, 10000, 10000);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (region->data, &rect));

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (300, 1000, 400, 150);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (450, 1000, 250, 200);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (400, 1000, 300, 150);
  meta_rectangle_clip_to_region (region,
                                 FIXED_DIRECTION_X,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (400, 1000, 300, 150);
  meta_rectangle_clip_to_region (region,
                                 FIXED_DIRECTION_X,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 12
0
static void
test_clamping_to_region ()
{
  GList* region;
  MetaRectangle rect;
  MetaRectangle min_size;
  FixedDirections fixed_directions;
  int i;

  min_size.height = min_size.width = 1;
  fixed_directions = 0;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      MetaRectangle temp;
      get_random_rect (&rect);
      temp = rect;
      meta_rectangle_clamp_to_fit_into_region (region,
                                               fixed_directions,
                                               &rect,
                                               &min_size);
      g_assert (meta_rectangle_could_fit_in_region (region, &rect) == TRUE);
      g_assert (rect.x == temp.x && rect.y == temp.y);
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (1);

  rect = meta_rect (50, 50, 10000, 10000);
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 1600 && rect.height == 1140);

  rect = meta_rect (275, -50, 410, 10000);
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1180);

  rect = meta_rect (50, 50, 10000, 10000);
  min_size.height = 1170;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1180);

  printf ("The next test intentionally causes a warning, "
          "but it can be ignored.\n");
  rect = meta_rect (50, 50, 10000, 10000);
  min_size.width = 600;  min_size.height = 1170;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 600 && rect.height == 1170);

  rect = meta_rect (350, 50, 100, 1100);
  min_size.width = 1;  min_size.height = 1;
  fixed_directions = FIXED_DIRECTION_X;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 100 && rect.height == 1100);

  rect = meta_rect (300, 70, 500, 1100);
  min_size.width = 1;  min_size.height = 1;
  fixed_directions = FIXED_DIRECTION_Y;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1100);

  printf ("The next test intentionally causes a warning, "
          "but it can be ignored.\n");
  rect = meta_rect (300, 70, 999999, 999999);
  min_size.width = 100;  min_size.height = 200;
  fixed_directions = FIXED_DIRECTION_Y;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 100 && rect.height == 999999);

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
Esempio n. 13
0
static void
test_gravity_resize ()
{
  MetaRectangle oldrect, rect, temp;

  rect.x = -500;  /* Some random amount not equal to oldrect.x to ensure that
                   * the resize is done with respect to oldrect instead of rect
                   */
  oldrect = meta_rect ( 50,  300, 250, 400);
  temp    = meta_rect ( 50,  300,  20,   5);
  meta_rectangle_resize_with_gravity (&oldrect,
                                      &rect,
                                      NorthWestGravity,
                                      20,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 50,  300, 250, 400);
  temp = meta_rect (165,  300,  20,   5);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      NorthGravity,
                                      20,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 50,  300, 250, 400);
  temp = meta_rect (280,  300,  20,   5);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      NorthEastGravity,
                                      20,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 50,  300, 250, 400);
  temp = meta_rect ( 50,  695,  50,   5);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      SouthWestGravity,
                                      50,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 50,  300, 250, 400);
  temp = meta_rect (150,  695,  50,   5);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      SouthGravity,
                                      50,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 50,  300, 250, 400);
  temp = meta_rect (250,  695,  50,   5);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      SouthEastGravity,
                                      50,
                                      5);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (167,  738, 237, 843);
  temp = meta_rect (167, 1113, 832,  93);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      WestGravity,
                                      832,
                                      93);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 167,  738, 237, 843);
  temp = meta_rect (-131, 1113, 833,  93);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      CenterGravity,
                                      832,
                                      93);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (270,  994, 430, 212);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      EastGravity,
                                      430,
                                      211);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (300, 1000, 430, 211);
  meta_rectangle_resize_with_gravity (&rect,
                                      &rect,
                                      StaticGravity,
                                      430,
                                      211);
  g_assert (meta_rectangle_equal (&rect, &temp));

  printf ("%s passed.\n", G_STRFUNC);
}