[test] Free memory in hb-aots-tester
This commit is contained in:
parent
895162d6f3
commit
72489f3e0e
|
@ -23,16 +23,36 @@ ____________________________________________________________________________*/
|
||||||
|
|
||||||
static const bool verbose = true;
|
static const bool verbose = true;
|
||||||
|
|
||||||
|
struct TestData
|
||||||
|
{
|
||||||
|
TestData(hb_buffer_t *buffer_,
|
||||||
|
hb_face_t *face_,
|
||||||
|
hb_font_t *font_,
|
||||||
|
hb_feature_t *features_,
|
||||||
|
int num_features_)
|
||||||
|
: buffer(buffer_), face(face_), font(font_),
|
||||||
|
features(features_), num_features(num_features_)
|
||||||
|
{ }
|
||||||
|
~TestData()
|
||||||
|
{
|
||||||
|
free (features);
|
||||||
|
hb_face_destroy (face);
|
||||||
|
hb_font_destroy (font);
|
||||||
|
hb_buffer_destroy (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
hb_feature_t *gFeatures;
|
hb_buffer_t *buffer;
|
||||||
hb_font_t *gFont;
|
hb_face_t *face;
|
||||||
hb_face_t *gFace;
|
hb_font_t *font;
|
||||||
int gNbFeatures;
|
hb_feature_t *features;
|
||||||
|
int num_features;
|
||||||
|
};
|
||||||
|
|
||||||
hb_buffer_t *runTest(const char *testName,
|
TestData
|
||||||
const char *fontfileName,
|
runTest(const char *testName,
|
||||||
unsigned int *in, int nbIn,
|
const char *fontfileName,
|
||||||
unsigned int *select, int nbSelect)
|
unsigned int *in, int nbIn,
|
||||||
|
unsigned int *select, int nbSelect)
|
||||||
{
|
{
|
||||||
FILE *f = fopen (fontfileName, "rb");
|
FILE *f = fopen (fontfileName, "rb");
|
||||||
fseek(f, 0, SEEK_END);
|
fseek(f, 0, SEEK_END);
|
||||||
|
@ -94,20 +114,13 @@ int gNbFeatures;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gFeatures = features;
|
|
||||||
gNbFeatures = nbFeatures;
|
|
||||||
gFont = font;
|
|
||||||
gFace = face;
|
|
||||||
|
|
||||||
// shape
|
// shape
|
||||||
hb_shape(font, buffer, features, nbFeatures);
|
hb_shape(font, buffer, features, nbFeatures);
|
||||||
|
|
||||||
hb_blob_destroy(blob);
|
hb_blob_destroy(blob);
|
||||||
//hb_font_destroy(font);
|
|
||||||
//hb_face_destroy(face);
|
|
||||||
//free(features);
|
|
||||||
|
|
||||||
return buffer;
|
return TestData(buffer, face, font, features, nbFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,14 +144,14 @@ bool gsub_test(const char *testName,
|
||||||
int nbSelect, unsigned int *select,
|
int nbSelect, unsigned int *select,
|
||||||
int nbExpected, unsigned int *expected)
|
int nbExpected, unsigned int *expected)
|
||||||
{
|
{
|
||||||
hb_buffer_t *buffer = runTest(testName,
|
TestData data = runTest(testName,
|
||||||
fontfileName,
|
fontfileName,
|
||||||
in, nbIn,
|
in, nbIn,
|
||||||
select, nbSelect);
|
select, nbSelect);
|
||||||
|
|
||||||
// verify
|
// verify
|
||||||
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(buffer, 0);
|
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(data.buffer, 0);
|
||||||
unsigned int nbActual = hb_buffer_get_length(buffer);
|
unsigned int nbActual = hb_buffer_get_length(data.buffer);
|
||||||
|
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
|
||||||
|
@ -159,14 +172,13 @@ bool gsub_test(const char *testName,
|
||||||
FILE *tests_file = fopen (test_name, "a+");
|
FILE *tests_file = fopen (test_name, "a+");
|
||||||
if (!ok) fprintf (tests_file, "#");
|
if (!ok) fprintf (tests_file, "#");
|
||||||
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
||||||
for (unsigned int i = 0; i < gNbFeatures; i++)
|
for (unsigned int i = 0; i < data.num_features; i++)
|
||||||
{
|
{
|
||||||
if (i != 0) fprintf (tests_file, ",");
|
if (i != 0) fprintf (tests_file, ",");
|
||||||
char buf[255];
|
char buf[255];
|
||||||
hb_feature_to_string (&gFeatures[i], buf, sizeof (buf));
|
hb_feature_to_string (&data.features[i], buf, sizeof (buf));
|
||||||
fprintf (tests_file, "%s", buf);
|
fprintf (tests_file, "%s", buf);
|
||||||
}
|
}
|
||||||
free (gFeatures);
|
|
||||||
fprintf (tests_file, "\" --no-clusters --no-glyph-names --no-positions:");
|
fprintf (tests_file, "\" --no-clusters --no-glyph-names --no-positions:");
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nbIn; i++)
|
for (unsigned int i = 0; i < nbIn; i++)
|
||||||
|
@ -202,8 +214,6 @@ bool gsub_test(const char *testName,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_buffer_destroy(buffer);
|
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,14 +223,14 @@ bool cmap_test(const char *testName,
|
||||||
int nbSelect, unsigned int *select,
|
int nbSelect, unsigned int *select,
|
||||||
int nbExpected, unsigned int *expected)
|
int nbExpected, unsigned int *expected)
|
||||||
{
|
{
|
||||||
hb_buffer_t *buffer = runTest(testName,
|
TestData data = runTest(testName,
|
||||||
fontfileName,
|
fontfileName,
|
||||||
in, nbIn,
|
in, nbIn,
|
||||||
select, nbSelect);
|
select, nbSelect);
|
||||||
|
|
||||||
// verify
|
// verify
|
||||||
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(buffer, 0);
|
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(data.buffer, 0);
|
||||||
unsigned int nbActual = hb_buffer_get_length(buffer);
|
unsigned int nbActual = hb_buffer_get_length(data.buffer);
|
||||||
|
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
|
||||||
|
@ -241,14 +251,13 @@ bool cmap_test(const char *testName,
|
||||||
FILE *tests_file = fopen (test_name, "a+");
|
FILE *tests_file = fopen (test_name, "a+");
|
||||||
if (!ok) fprintf (tests_file, "#");
|
if (!ok) fprintf (tests_file, "#");
|
||||||
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
||||||
for (unsigned int i = 0; i < gNbFeatures; i++)
|
for (unsigned int i = 0; i < data.num_features; i++)
|
||||||
{
|
{
|
||||||
if (i != 0) fprintf (tests_file, ",");
|
if (i != 0) fprintf (tests_file, ",");
|
||||||
char buf[255];
|
char buf[255];
|
||||||
hb_feature_to_string (&gFeatures[i], buf, sizeof (buf));
|
hb_feature_to_string (&data.features[i], buf, sizeof (buf));
|
||||||
fprintf (tests_file, "%s", buf);
|
fprintf (tests_file, "%s", buf);
|
||||||
}
|
}
|
||||||
free (gFeatures);
|
|
||||||
fprintf (tests_file, "\" --no-clusters --no-glyph-names --no-positions --font-funcs=ot:");
|
fprintf (tests_file, "\" --no-clusters --no-glyph-names --no-positions --font-funcs=ot:");
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nbIn; i++)
|
for (unsigned int i = 0; i < nbIn; i++)
|
||||||
|
@ -284,8 +293,6 @@ bool cmap_test(const char *testName,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_buffer_destroy(buffer);
|
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -298,15 +305,15 @@ bool gpos_test(const char *testName,
|
||||||
int *x,
|
int *x,
|
||||||
int *y)
|
int *y)
|
||||||
{
|
{
|
||||||
hb_buffer_t *buffer = runTest(testName,
|
TestData data = runTest(testName,
|
||||||
fontfileName,
|
fontfileName,
|
||||||
in, nbIn,
|
in, nbIn,
|
||||||
0, 0);
|
0, 0);
|
||||||
|
|
||||||
// verify
|
// verify
|
||||||
unsigned int nbActual;
|
unsigned int nbActual;
|
||||||
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(buffer, &nbActual);
|
hb_glyph_info_t *actual = hb_buffer_get_glyph_infos(data.buffer, &nbActual);
|
||||||
hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
|
hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (data.buffer, NULL);
|
||||||
|
|
||||||
unsigned int *actualG = (unsigned int *) malloc(sizeof(*actualG) * nbActual);
|
unsigned int *actualG = (unsigned int *) malloc(sizeof(*actualG) * nbActual);
|
||||||
int *actualX = (int *) malloc(sizeof(*actualX) * nbActual);
|
int *actualX = (int *) malloc(sizeof(*actualX) * nbActual);
|
||||||
|
@ -319,7 +326,7 @@ bool gpos_test(const char *testName,
|
||||||
actualY[i] = curY + pos[i].y_offset;
|
actualY[i] = curY + pos[i].y_offset;
|
||||||
|
|
||||||
curX += pos[i].x_advance;
|
curX += pos[i].x_advance;
|
||||||
if (hb_ot_layout_get_glyph_class (gFace, actualG[i]) != HB_OT_LAYOUT_GLYPH_CLASS_MARK)
|
if (hb_ot_layout_get_glyph_class (data.face, actualG[i]) != HB_OT_LAYOUT_GLYPH_CLASS_MARK)
|
||||||
curX -= 1500;
|
curX -= 1500;
|
||||||
curY += pos[i].y_advance;
|
curY += pos[i].y_advance;
|
||||||
}
|
}
|
||||||
|
@ -374,14 +381,13 @@ bool gpos_test(const char *testName,
|
||||||
FILE *tests_file = fopen (test_name, "a+");
|
FILE *tests_file = fopen (test_name, "a+");
|
||||||
if (!ok) fprintf (tests_file, "#");
|
if (!ok) fprintf (tests_file, "#");
|
||||||
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
fprintf (tests_file, "../fonts/%s:--features=\"", fontfileName + 9);
|
||||||
for (unsigned int i = 0; i < gNbFeatures; i++)
|
for (unsigned int i = 0; i < data.num_features; i++)
|
||||||
{
|
{
|
||||||
if (i != 0) fprintf (tests_file, ",");
|
if (i != 0) fprintf (tests_file, ",");
|
||||||
char buf[255];
|
char buf[255];
|
||||||
hb_feature_to_string (&gFeatures[i], buf, sizeof (buf));
|
hb_feature_to_string (&data.features[i], buf, sizeof (buf));
|
||||||
fprintf (tests_file, "%s", buf);
|
fprintf (tests_file, "%s", buf);
|
||||||
}
|
}
|
||||||
free (gFeatures);
|
|
||||||
fprintf (tests_file, "\" --no-clusters --no-glyph-names --ned:");
|
fprintf (tests_file, "\" --no-clusters --no-glyph-names --ned:");
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nbIn; i++)
|
for (unsigned int i = 0; i < nbIn; i++)
|
||||||
|
@ -400,7 +406,7 @@ bool gpos_test(const char *testName,
|
||||||
int expected_x = x[i] + accumlatedAdvance;
|
int expected_x = x[i] + accumlatedAdvance;
|
||||||
int expected_y = y[i];
|
int expected_y = y[i];
|
||||||
if (expected_x || expected_y) fprintf (tests_file, "@%d,%d", expected_x, expected_y);
|
if (expected_x || expected_y) fprintf (tests_file, "@%d,%d", expected_x, expected_y);
|
||||||
if (hb_ot_layout_get_glyph_class (gFace, actualG[i]) != HB_OT_LAYOUT_GLYPH_CLASS_MARK)
|
if (hb_ot_layout_get_glyph_class (data.face, actualG[i]) != HB_OT_LAYOUT_GLYPH_CLASS_MARK)
|
||||||
accumlatedAdvance += 1500;
|
accumlatedAdvance += 1500;
|
||||||
}
|
}
|
||||||
fprintf (tests_file, "]");
|
fprintf (tests_file, "]");
|
||||||
|
@ -409,8 +415,6 @@ bool gpos_test(const char *testName,
|
||||||
fclose (tests_file);
|
fclose (tests_file);
|
||||||
|
|
||||||
|
|
||||||
hb_buffer_destroy(buffer);
|
|
||||||
|
|
||||||
free(actualG);
|
free(actualG);
|
||||||
free(actualX);
|
free(actualX);
|
||||||
free(actualY);
|
free(actualY);
|
||||||
|
|
Loading…
Reference in New Issue