Skip to content

Commit

Permalink
update tests according to new API
Browse files Browse the repository at this point in the history
  • Loading branch information
yigithanyigit committed Jul 6, 2024
1 parent 35bf717 commit 0c24291
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 92 deletions.
17 changes: 12 additions & 5 deletions libvmaf/test/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,13 @@ test_picture = executable('test_picture',
dependencies:[stdatomic_dependency, thread_lib, cuda_dependency],
)

test_propagate_metadata = executable('test_propagate_metadata',
['test.c', 'test_propagate_metadata.c', '../src/propagate_metadata.c'],
include_directories : [libvmaf_inc, test_inc, include_directories('../src/')],
)

test_feature_collector = executable('test_feature_collector',
['test.c', 'test_feature_collector.c', '../src/log.c', '../src/predict.c', '../src/svm.cpp'],
['test.c', 'test_feature_collector.c', '../src/log.c', '../src/predict.c', '../src/svm.cpp', '../src/propagate_metadata.c'],
include_directories : [libvmaf_inc, test_inc, include_directories('../src/feature/'), include_directories('../src')],
link_with : get_option('default_library') == 'both' ? libvmaf.get_static_lib() : libvmaf,
dependencies: cuda_dependency
Expand All @@ -45,10 +50,10 @@ test_model = executable('test_model',
)

test_predict = executable('test_predict',
['test.c', 'test_predict.c', '../src/dict.c',
['test.c', 'test_predict.c', '../src/dict.c', '../src/propagate_metadata.c',
'../src/feature/feature_collector.c', '../src/feature/alias.c', '../src/model.c', '../src/svm.cpp', '../src/log.c',
'../src/read_json_model.c', '../src/pdjson.c', json_model_c_sources, '../src/feature/feature_name.c', '../src/feature/feature_extractor.c'],
include_directories : [libvmaf_inc, test_inc, include_directories('../src')],
'../src/read_json_model.c', '../src/pdjson.c', json_model_c_sources, '../src/feature/feature_name.c', '../src/feature/feature_extractor.c',],
include_directories : [libvmaf_inc, test_inc, include_directories('../src/')],
link_with : get_option('default_library') == 'both' ? libvmaf.get_static_lib() : libvmaf,
c_args : vmaf_cflags_common,
cpp_args : vmaf_cflags_common,
Expand All @@ -57,7 +62,8 @@ test_predict = executable('test_predict',

test_feature_extractor = executable('test_feature_extractor',
['test.c', 'test_feature_extractor.c', '../src/mem.c', '../src/picture.c', '../src/ref.c',
'../src/dict.c', '../src/opt.c', '../src/log.c', '../src/predict.c', '../src/svm.cpp'],
'../src/dict.c', '../src/opt.c', '../src/log.c', '../src/predict.c', '../src/svm.cpp',
'../src/propagate_metadata.c'],
include_directories : [libvmaf_inc, test_inc, include_directories('../src/')],
dependencies : [math_lib, stdatomic_dependency, thread_lib, cuda_dependency],
objects : [
Expand Down Expand Up @@ -168,3 +174,4 @@ test('test_luminance_tools', test_luminance_tools)
test('test_cli_parse', test_cli_parse)
test('test_psnr', test_psnr)
test('test_framesync', test_framesync)
test('test_propagate_metadata', test_propagate_metadata)
86 changes: 3 additions & 83 deletions libvmaf/test/test_feature_collector.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static char* test_model_mount()
int err = 0;

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector, NULL);
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

VmafModelConfig model_cfg = { 0 };
Expand Down Expand Up @@ -82,7 +82,7 @@ static char* test_model_unmount()
int err = 0;

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector, NULL);
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

VmafModelConfig model_cfg = { 0 };
Expand Down Expand Up @@ -169,91 +169,12 @@ static char *test_feature_vector_init_append_and_destroy()
return NULL;
}

static char *test_feature_collector_init_append_get_and_destroy_with_meta()
{
int err;

VmafMetadata m = {
.callback = NULL,
.data = NULL,
.data_sz = 0,
};

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector, &m);
mu_assert("problem during vmaf_feature_collector_init", !err);
unsigned initial_capacity = feature_collector->capacity;
mu_assert("this test assumes an initial capacity of 8",
initial_capacity == 8);
err = vmaf_feature_collector_append(feature_collector, "feature0", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature1", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature2", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature3", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature4", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature5", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature6", 60., 1);
err |= vmaf_feature_collector_append(feature_collector, "feature7", 60., 1);
mu_assert("problem during vmaf_feature_collector_append", !err);
mu_assert("feature_collector->capacity should not have changed",
feature_collector->capacity == initial_capacity);
err = vmaf_feature_collector_append(feature_collector, "feature8", 60., 1);
mu_assert("problem during vmaf_feature_collector_append", !err);
mu_assert("feature_collector->capacity did not double its allocation",
feature_collector->capacity == initial_capacity * 2);

double score;
err = vmaf_feature_collector_get_score(feature_collector, "feature5",
&score, 1);
mu_assert("problem during vmaf_feature_collector_get_score", !err);
mu_assert("vmaf_feature_collector_get_score did not get the expected score",
score == 60.);
err = vmaf_feature_collector_get_score(feature_collector, "feature5",
&score, 2);
mu_assert("vmaf_feature_collector_get_score did not fail with bad index",
err);

err = vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate0", 100.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate1", 101.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate2", 102.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate3", 103.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate4", 104.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate5", 105.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate6", 106.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate7", 107.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate8", 108.);
err |= vmaf_feature_collector_set_aggregate(feature_collector,
"aggregate9", 109.);
mu_assert("problem during vmaf_feature_collector_set_aggregate", !err);

err = vmaf_feature_collector_get_aggregate(feature_collector,
"aggregate5", &score);
mu_assert("problem during vmaf_feature_collector_get_aggregate", !err);
mu_assert("unexpected aggreggate_score", score = 105.);
err = vmaf_feature_collector_get_aggregate(feature_collector,
"aggregate9", &score);
mu_assert("problem during vmaf_feature_collector_get_aggregate", !err);
mu_assert("unexpected aggreggate_score", score = 109.);

vmaf_feature_collector_destroy(feature_collector);
return NULL;

}

static char *test_feature_collector_init_append_get_and_destroy()
{
int err;

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector, NULL);
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);
unsigned initial_capacity = feature_collector->capacity;
mu_assert("this test assumes an initial capacity of 8",
Expand Down Expand Up @@ -324,7 +245,6 @@ char *run_tests()
{
mu_run_test(test_feature_vector_init_append_and_destroy);
mu_run_test(test_feature_collector_init_append_get_and_destroy);
mu_run_test(test_feature_collector_init_append_get_and_destroy_with_meta);
mu_run_test(test_aggregate_vector_init_append_and_destroy);
mu_run_test(test_model_mount);
mu_run_test(test_model_unmount);
Expand Down
4 changes: 2 additions & 2 deletions libvmaf/test/test_feature_extractor.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static char *test_feature_extractor_flush()
mu_assert("problem during vmaf_picture_alloc", !err);

VmafFeatureCollector *vfc;
err = vmaf_feature_collector_init(&vfc, NULL);
err = vmaf_feature_collector_init(&vfc);
mu_assert("vmaf_feature_collector_init", !err);

double score;
Expand Down Expand Up @@ -162,7 +162,7 @@ static char *test_feature_extractor_initialization_options()
mu_assert("problem during vmaf_picture_alloc", !err);

VmafFeatureCollector *vfc;
err = vmaf_feature_collector_init(&vfc, NULL);
err = vmaf_feature_collector_init(&vfc);
mu_assert("problem during vmaf_feature_collector_init", !err);

err = vmaf_feature_extractor_context_extract(fex_ctx, &ref, NULL, &dist,
Expand Down
151 changes: 151 additions & 0 deletions libvmaf/test/test_predict.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#include <stdint.h>

#include "feature/feature_collector.h"
#include "propagate_metadata.h"
#include "test.h"
#include "predict.h"
#include "predict.c"
Expand All @@ -30,6 +32,153 @@ typedef struct {
int flags;
} MetaStruct;


static char *test_predict_score_at_index()
{
int err;

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

VmafModel *model;
VmafModelConfig cfg = {
.name = "vmaf",
.flags = VMAF_MODEL_FLAGS_DEFAULT,
};
err = vmaf_model_load(&model, &cfg, "vmaf_v0.6.1");
mu_assert("problem during vmaf_model_load", !err);

for (unsigned i = 0; i < model->n_features; i++) {
err = vmaf_feature_collector_append(feature_collector,
model->feature[i].name, 60., 0);
mu_assert("problem during vmaf_feature_collector_append", !err);
}

double vmaf_score = 0.;
err = vmaf_predict_score_at_index(model, feature_collector, 0, &vmaf_score,
true, false, 0);
mu_assert("problem during vmaf_predict_score_at_index", !err);

vmaf_model_destroy(model);
vmaf_feature_collector_destroy(feature_collector);
return NULL;
}


void set_meta(void *data, const char *key, double d)
{
if (!data) return;
MetaStruct *meta = data;
char value[128];
snprintf(value, sizeof(value), "%f", d);
vmaf_dictionary_set(meta->metadata, key, value, meta->flags);
}

static char* test_propagate_metadata()
{
int err;

VmafDictionary *dict = NULL;
MetaStruct meta_data = {
.metadata = &dict,
.flags = 0,
};

VmafMetadataConfig m = {
.callback = set_meta,
.data = &meta_data,
.data_sz = sizeof(meta_data),
};

VmafFeatureCollector *feature_collector;
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

err = vmaf_feature_collector_register_metadata(feature_collector, &m);
mu_assert("problem during vmaf_feature_collector_register_metadata", !err);

VmafModel *model;
VmafModelConfig cfg = {
.name = "vmaf",
.flags = VMAF_MODEL_FLAGS_DEFAULT,
};
err = vmaf_model_load(&model, &cfg, "vmaf_v0.6.1");
mu_assert("problem during vmaf_model_load", !err);
err = vmaf_feature_collector_mount_model(feature_collector, model);
mu_assert("problem during vmaf_mount_model", !err);

for (unsigned i = 0; i < model->n_features; i++) {
err = vmaf_feature_collector_append(feature_collector,
model->feature[i].name, 60., 0);
mu_assert("problem during vmaf_feature_collector_append", !err);
}

VmafDictionaryEntry *e = vmaf_dictionary_get(&dict, "vmaf_0", 0);
mu_assert("error on propagaton metadata: propagated data wrong!",
!strcmp(e->val, "100.000000"));

vmaf_feature_collector_destroy(feature_collector);

m.data = NULL;
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

err = vmaf_feature_collector_register_metadata(feature_collector, &m);
mu_assert("problem during vmaf_feature_collector_register_metadata", !err);

for (unsigned i = 0; i < model->n_features; i++) {
err = vmaf_feature_collector_append(feature_collector,
model->feature[i].name, 60., 0);
mu_assert("problem during vmaf_feature_collector_append", !err);
}

vmaf_feature_collector_destroy(feature_collector);

m.data = &meta_data;
m.data_sz = 0;
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

err = vmaf_feature_collector_register_metadata(feature_collector, &m);
mu_assert("problem during vmaf_feature_collector_register_metadata", !err);

for (unsigned i = 0; i < model->n_features; i++) {
err = vmaf_feature_collector_append(feature_collector,
model->feature[i].name, 60., 0);
mu_assert("problem during vmaf_feature_collector_append", !err);
}

vmaf_feature_collector_destroy(feature_collector);

m.callback = NULL;
err = vmaf_feature_collector_init(&feature_collector);
mu_assert("problem during vmaf_feature_collector_init", !err);

err = vmaf_feature_collector_register_metadata(feature_collector, &m);
mu_assert("problem during vmaf_feature_collector_register_metadata", !err);

for (unsigned i = 0; i < model->n_features; i++) {
err = vmaf_feature_collector_append(feature_collector,
model->feature[i].name, 60., 0);
mu_assert("problem during vmaf_feature_collector_append", !err);
}

vmaf_feature_collector_destroy(feature_collector);

vmaf_model_destroy(model);
return NULL;

}


/*
typedef struct {
VmafDictionary **metadata;
int flags;
} MetaStruct;
static char *test_predict_score_at_index()
{
int err;
Expand Down Expand Up @@ -62,6 +211,7 @@ static char *test_predict_score_at_index()
return NULL;
}
void set_meta(void *data, const char *key, double d)
{
if (!data) return;
Expand Down Expand Up @@ -154,6 +304,7 @@ static char* test_propagate_metadata()
return NULL;
}
*/

static char *test_find_linear_function_parameters()
{
Expand Down
4 changes: 2 additions & 2 deletions libvmaf/test/test_psnr.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ static char *test_16b_large_diff()
err |= get_picture_16b(&pic2, 1);
mu_assert("test_16b_large_diff alloc error", !err);
VmafFeatureCollector *fc;
err |= vmaf_feature_collector_init(&fc, NULL);
err |= vmaf_feature_collector_init(&fc);
mu_assert("test_16b_large_diff vmaf_feature_collector_init error", !err);
PsnrState psnr_state = {
.enable_chroma = 1,
Expand Down Expand Up @@ -85,7 +85,7 @@ static char *test_16b_large_diff()
mu_assert("wrong mse_y", almost_equal(mse_y, 4294836225.0));
mu_assert("wrong mse_cb", almost_equal(mse_cb, 4294836225.0));
mu_assert("wrong mse_cr", almost_equal(mse_cr, 4294836225.0));

vmaf_feature_collector_destroy(fc);
vmaf_picture_unref(&pic1);
vmaf_picture_unref(&pic2);
Expand Down

0 comments on commit 0c24291

Please sign in to comment.