コード例 #1
0
ファイル: testparams.c プロジェクト: davidhernon/libmapper-1
int main()
{
    lo_arg *args[20], **a;
    mapper_message_t msg;
    int port=1234, src_length=4, i;
    float r[4] = {1.0, 2.0, -15.0, 25.0};
    int result = 0;

    printf("1: expected success\n");

    args[0]  = (lo_arg*)"@IP";
    args[1]  = (lo_arg*)"127.0.0.1";
    args[2]  = (lo_arg*)"@srcMin";
    args[3]  = (lo_arg*)&r[0];
    args[4]  = (lo_arg*)&r[1];
    args[5]  = (lo_arg*)&r[2];
    args[6]  = (lo_arg*)&r[3];
    args[7]  = (lo_arg*)"@port";
    args[8]  = (lo_arg*)&port;
    args[9]  = (lo_arg*)"@srcType";
    args[10] = (lo_arg*)"f";
    args[11] = (lo_arg*)"@srcLength";
    args[12] = (lo_arg*)&src_length;

    int rc = mapper_msg_parse_params(&msg, "/test", "sssffffsiscsi", 13, args);
    if (rc) {
        printf("1: Error parsing.\n");
        return 1;
    }

    a = mapper_msg_get_param(&msg, AT_IP);
    if (!a) {
        printf("1: Could not get @IP param.\n");
        return 1;
    }
    if (strcmp(&(*a)->s, "127.0.0.1")!=0)
        result |= 1;
    printf("1: @IP = \"%s\" %s\n", &(*a)->s,
           result ? "WRONG" : "(correct)");
    if (result) return result;

    a = mapper_msg_get_param(&msg, AT_PORT);
    if (!a) {
        printf("1: Could not get @port param.\n");
        return 1;
    }
    if ((*a)->i!=1234)
        result |= 1;
    printf("1: @port = %d %s\n", (*a)->i,
           result ? "WRONG" : "(correct)");
    if (result) return result;

    a = mapper_msg_get_param(&msg, AT_SRC_MIN);
    int count = mapper_msg_get_length(&msg, AT_SRC_MIN);
    if (!a) {
        printf("1: Could not get @src_min param.\n");
        return 1;
    }
    if (count != 4) {
        printf("1: Wrong count returned for @scr_min param.\n");
    }
    for (i=0; i<count; i++) {
        if ((*a)->f!=r[i])
            result |= 1;
        printf("1: @src_min[%d] = %f %s\n", i, (*a++)->f,
               result ? "WRONG" : "(correct)");
        if (result) return result;
    }

    /*****/

    printf("2: deliberately malformed message\n");

    args[0] = (lo_arg*)"@port";
    args[1] = (lo_arg*)&port;
    args[2] = (lo_arg*)"@IP";

    rc = mapper_msg_parse_params(&msg, "/test", "sis", 3, args);
    if (rc) {
        printf("2: Error parsing.\n");
        return 1;
    }

    a = mapper_msg_get_param(&msg, AT_PORT);
    if (!a) {
        printf("2: Could not get @port param.\n");
        return 1;
    }

    a = mapper_msg_get_param(&msg, AT_IP);
    if (a) {
        printf("2: Error, should not have been able to retrieve @IP param.\n");
        return 1;
    }

    /*****/

    printf("Test PASSED.\n");
    return 0;
}
コード例 #2
0
ファイル: testdb.c プロジェクト: sofian/libmapper
int main()
{
    lo_arg *args[20];
    mapper_message_t msg;
    int port=1234;
    int zero=0, one=1;
    mapper_db_t db_t, *db = &db_t;
    memset(db, 0, sizeof(db_t));

    /* Test the database functions */

    args[0] = (lo_arg*)"@port";
    args[1] = (lo_arg*)&port;
    args[2] = (lo_arg*)"@IP";
    args[3] = (lo_arg*)"localhost";

    if (mapper_msg_parse_params(&msg, "/registered", "siss", 4, args))
    {
        printf("1: Error, parsing failed.\n");
        return 1;
    }

    mapper_db_add_or_update_device_params(db, "/testdb.1", &msg);
    mapper_db_add_or_update_device_params(db, "/testdb__.2", &msg);
    mapper_db_add_or_update_device_params(db, "/testdb.3", &msg);
    mapper_db_add_or_update_device_params(db, "/testdb__.4", &msg);

    args[0] = (lo_arg*)"@direction";
    args[1] = (lo_arg*)"input";
    args[2] = (lo_arg*)"@type";
    args[3] = (lo_arg*)"f";
    args[4] = (lo_arg*)"@IP";
    args[5] = (lo_arg*)"localhost";

    if (mapper_msg_parse_params(&msg, "/testdb.1/signal",
                                "sc", 2, args))
    {
        printf("2: Error, parsing failed.\n");
        return 1;
    }

    mapper_db_add_or_update_signal_params(db, "/in1", "/testdb.1", &msg);
    mapper_db_add_or_update_signal_params(db, "/in2", "/testdb.1", &msg);
    mapper_db_add_or_update_signal_params(db, "/in2", "/testdb.1", &msg);

    args[1] = (lo_arg*)"output";

    if (mapper_msg_parse_params(&msg, "/testdb.1/signal",
                                "sc", 2, args))
    {
        printf("2: Error, parsing failed.\n");
        return 1;
    }

    mapper_db_add_or_update_signal_params(db, "/out1", "/testdb.1", &msg);
    mapper_db_add_or_update_signal_params(db, "/out2", "/testdb.1", &msg);
    mapper_db_add_or_update_signal_params(db, "/out1", "/testdb__.2", &msg);

    args[0] = (lo_arg*)"@mode";
    args[1] = (lo_arg*)"bypass";
    args[2] = (lo_arg*)"@clipMin";
    args[3] = (lo_arg*)"none";

    if (mapper_msg_parse_params(&msg, "/connected",
                                "ssss", 4, args))
    {
        printf("4: Error, parsing failed.\n");
        return 1;
    }

    mapper_db_add_or_update_connection_params(db, "/testdb.1/out2",
            "/testdb__.2/in1", &msg);
    mapper_db_add_or_update_connection_params(db, "/testdb__.2/out1",
            "/testdb.1/in1", &msg);

    args[0] = (lo_arg*)"@mode";
    args[1] = (lo_arg*)"expression";
    args[2] = (lo_arg*)"@expression";
    args[3] = (lo_arg*)"(x-10)*80";
    args[4] = (lo_arg*)"@clipMin";
    args[5] = (lo_arg*)"none";
    args[6] = (lo_arg*)"@range";
    args[7] = (lo_arg*)&zero;
    args[8] = (lo_arg*)&one;
    args[9] = (lo_arg*)&zero;
    args[10] = (lo_arg*)&one;

    if (mapper_msg_parse_params(&msg, "/connected",
                                "sssssssiiii", 11, args))
    {
        printf("5: Error, parsing failed.\n");
        return 1;
    }

    mapper_db_add_or_update_connection_params(db, "/testdb.1/out1",
            "/testdb__.2/in2", &msg);
    mapper_db_add_or_update_connection_params(db, "/testdb.1/out1",
            "/testdb__.2/in1", &msg);
    mapper_db_add_or_update_connection_params(db, "/testdb__.2/out2",
            "/testdb.1/in2", &msg);

    if (mapper_msg_parse_params(&msg, "/linked",
                                "", 0, args))
    {
        printf("6: Error, parsing failed (on no args!)\n");
        return 1;
    }

    mapper_db_add_or_update_link_params(db, "/testdb.1", "/testdb__.2", &msg);
    mapper_db_add_or_update_link_params(db, "/testdb__.2", "/testdb.3", &msg);
    mapper_db_add_or_update_link_params(db, "/testdb__.2", "/testdb.3", &msg);
    mapper_db_add_or_update_link_params(db, "/testdb.3", "/testdb.1", &msg);
    mapper_db_add_or_update_link_params(db, "/testdb__.2", "/testdb__.4", &msg);

    /*********/

    trace("Dump:\n");
    mapper_db_dump(db);

    /*********/

    printf("\n--- Devices ---\n");

    printf("\nWalk the whole database:\n");
    mapper_db_device *pdev = mapper_db_get_all_devices(db);
    int count=0;
    if (!pdev) {
        printf("mapper_db_get_all_devices() returned 0.\n");
        return 1;
    }
    if (!*pdev) {
        printf("mapper_db_get_all_devices() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (pdev) {
        count ++;
        printf("  name=%s, host=%s, port=%d\n",
               (*pdev)->name, (*pdev)->host, (*pdev)->port);
        pdev = mapper_db_device_next(pdev);
    }

    if (count != 4) {
        printf("Expected 4 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind /testdb.3:\n");

    mapper_db_device dev = mapper_db_get_device_by_name(db, "/testdb.3");
    if (!dev) {
        printf("Not found.\n");
        return 1;
    }

    printf("  name=%s, host=%s, port=%d\n",
           dev->name, dev->host, dev->port);

    /*********/

    printf("\nFind /dummy:\n");

    dev = mapper_db_get_device_by_name(db, "/dummy");
    if (dev) {
        printf("unexpected found /dummy: %p\n", dev);
        return 1;
    }
    printf("  not found, good.\n");

    /*********/

    printf("\nFind matching '__':\n");

    pdev = mapper_db_match_devices_by_name(db, "__");

    count=0;
    if (!pdev) {
        printf("mapper_db_match_device_by_name() returned 0.\n");
        return 1;
    }
    if (!*pdev) {
        printf("mapper_db_match_device_by_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (pdev) {
        count ++;
        printf("  name=%s, host=%s, port=%d\n",
               (*pdev)->name, (*pdev)->host, (*pdev)->port);
        pdev = mapper_db_device_next(pdev);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\n--- Signals ---\n");

    printf("\nFind all inputs for device '/testdb.1':\n");

    mapper_db_signal *psig =
        mapper_db_get_inputs_by_device_name(db, "/testdb.1");

    count=0;
    if (!psig) {
        printf("mapper_db_get_inputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_get_inputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind all outputs for device '/testdb.1':\n");

    psig = mapper_db_get_outputs_by_device_name(db, "/testdb.1");

    count=0;
    if (!psig) {
        printf("mapper_db_get_outputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_get_outputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind all inputs for device '/testdb__.2':\n");

    psig = mapper_db_get_inputs_by_device_name(db, "/testdb__.2");

    count=0;
    if (psig) {
        printf("mapper_db_get_inputs_by_device_name() "
               "incorrectly found something.\n");
        printsignal(*psig);
        return 1;
    }
    else
        printf("  correctly returned 0.\n");

    /*********/

    printf("\nFind all outputs for device '/testdb__.2':\n");

    psig = mapper_db_get_outputs_by_device_name(db, "/testdb__.2");

    count=0;
    if (!psig) {
        printf("mapper_db_get_outputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_get_outputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 1) {
        printf("Expected 1 record, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind matching input 'in' for device '/testdb.1':\n");

    psig = mapper_db_match_inputs_by_device_name(db, "/testdb.1", "in");

    count=0;
    if (!psig) {
        printf("mapper_db_match_inputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_match_inputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind matching output 'out' for device '/testdb.1':\n");

    psig = mapper_db_match_outputs_by_device_name(db, "/testdb.1", "out");

    count=0;
    if (!psig) {
        printf("mapper_db_match_outputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_match_outputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind matching output 'out' for device '/testdb__.2':\n");

    psig = mapper_db_match_outputs_by_device_name(db, "/testdb__.2", "out");

    count=0;
    if (!psig) {
        printf("mapper_db_match_outputs_by_device_name() returned 0.\n");
        return 1;
    }
    if (!*psig) {
        printf("mapper_db_match_outputs_by_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (psig) {
        count ++;
        printsignal(*psig);
        psig = mapper_db_signal_next(psig);
    }

    if (count != 1) {
        printf("Expected 1 record, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\n--- connections ---\n");

    printf("\nFind connections with source 'out1':\n");

    mapper_db_connection* pcon =
        mapper_db_get_connections_by_src_signal_name(db, "out1");

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_src_signal_name() returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_src_signal_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 3) {
        printf("Expected 3 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind connections for device 'testdb.1', "
           "source 'out1':\n");

    pcon = mapper_db_get_connections_by_src_device_and_signal_names(db, "testdb.1",
            "/out1");

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_src_device_and_signal_names() "
               "returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_src_device_and_signal_names() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind connections with destination 'in2':\n");

    pcon = mapper_db_get_connections_by_dest_signal_name(db, "in2");

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_dest_signal_name() returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_dest_signal_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind connections for device 'testdb__.2', "
           "destination 'in1':\n");

    pcon = mapper_db_get_connections_by_dest_device_and_signal_names(db,
            "testdb__.2",
            "/in1");

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_dest_device_and_signal_names() "
               "returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_dest_device_and_signal_names() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind connections for input device 'testdb__.2', signal 'out1',"
           "\n                 and output device 'testdb.1', signal 'in1':\n");

    pcon = mapper_db_get_connections_by_device_and_signal_names(
               db, "testdb__.2", "out1", "testdb.1", "in1");

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_device_and_signal_names() "
               "returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_device_and_signal_names() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 1) {
        printf("Expected 1 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind connections for input device 'testdb__.2', signals "
           "matching 'out',"
           "\n                 and output device 'testdb.1', all signals:\n");

    pcon = mapper_db_get_connections_by_signal_queries(db,
            mapper_db_match_outputs_by_device_name(db, "/testdb__.2", "out"),
            mapper_db_get_inputs_by_device_name(db, "/testdb.1"));

    count=0;
    if (!pcon) {
        printf("mapper_db_get_connections_by_signal_queries() "
               "returned 0.\n");
        return 1;
    }
    if (!*pcon) {
        printf("mapper_db_get_connections_by_signal_queries() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (pcon) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*pcon)->src_name, (*pcon)->dest_name);
        pcon = mapper_db_connection_next(pcon);
    }

    if (count != 1) {
        printf("Expected 1 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\n--- Links ---\n");

    printf("\nFind matching links with source '/testdb__.2':\n");

    mapper_db_link* plink =
        mapper_db_get_links_by_src_device_name(db, "/testdb__.2");

    count=0;
    if (!plink) {
        printf("mapper_db_get_links_by_src_device_name() returned 0.\n");
        return 1;
    }
    if (!*plink) {
        printf("mapper_db_get_links_by_src_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (plink) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*plink)->src_name, (*plink)->dest_name);
        plink = mapper_db_link_next(plink);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind matching links with destination '/testdb__.4':\n");

    plink = mapper_db_get_links_by_dest_device_name(db, "/testdb__.4");

    count=0;
    if (!plink) {
        printf("mapper_db_get_links_by_dest_device_name() returned 0.\n");
        return 1;
    }
    if (!*plink) {
        printf("mapper_db_get_links_by_dest_device_name() returned something "
               "which pointed to 0.\n");
        return 1;
    }

    while (plink) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*plink)->src_name, (*plink)->dest_name);
        plink = mapper_db_link_next(plink);
    }

    if (count != 1) {
        printf("Expected 1 record, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind links with source matching 'db' and "
           "destination matching '__':\n");

    pdev = mapper_db_match_devices_by_name(db, "db");

    if (!pdev) {
        printf("mapper_db_match_device_by_name() returned 0.\n");
        return 1;
    }

    mapper_db_device_t **pdev2 = mapper_db_match_devices_by_name(db, "__");

    if (!pdev2) {
        printf("mapper_db_match_device_by_name() returned 0.\n");
        return 1;
    }

    plink = mapper_db_get_links_by_src_dest_devices(db, pdev, pdev2);

    count=0;
    if (!plink) {
        printf("mapper_db_get_links_by_src_dest_devices() returned 0.\n");
        return 1;
    }
    if (!*plink) {
        printf("mapper_db_get_links_by_src_dest_devices() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (plink) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*plink)->src_name, (*plink)->dest_name);
        plink = mapper_db_link_next(plink);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nFind any links with source matching '2':\n");

    pdev = mapper_db_match_devices_by_name(db, "2");

    if (!pdev) {
        printf("mapper_db_match_device_by_name() returned 0.\n");
        return 1;
    }

    pdev2 = mapper_db_get_all_devices(db);

    if (!pdev2) {
        printf("mapper_db_get_all_devices() returned 0.\n");
        return 1;
    }

    plink = mapper_db_get_links_by_src_dest_devices(db, pdev, pdev2);

    count=0;
    if (!plink) {
        printf("mapper_db_get_links_by_src_dest_devices() returned 0.\n");
        return 1;
    }
    if (!*plink) {
        printf("mapper_db_get_links_by_src_dest_devices() "
               "returned something which pointed to 0.\n");
        return 1;
    }

    while (plink) {
        count ++;
        printf("  source=%s, dest=%s\n",
               (*plink)->src_name, (*plink)->dest_name);
        plink = mapper_db_link_next(plink);
    }

    if (count != 2) {
        printf("Expected 2 records, but counted %d.\n", count);
        return 1;
    }

    /*********/

    printf("\nTest PASSED.\n");
    return 0;
}
コード例 #3
0
ファイル: testparams.c プロジェクト: EQ4/libmapper
int main(int argc, char **argv)
{
    lo_arg *args[20], **a;
    mapper_message_t msg;
    int port=1234, src_length=4;
    float r[4] = {1.0, 2.0, -15.0, 25.0};
    int i, j, result = 0;

    // process flags for -v verbose, -h help
    for (i = 1; i < argc; i++) {
        if (argv[i] && argv[i][0] == '-') {
            int len = strlen(argv[i]);
            for (j = 1; j < len; j++) {
                switch (argv[i][j]) {
                    case 'h':
                        eprintf("testdb.c: possible arguments "
                                "-q quiet (suppress output), "
                                "-h help\n");
                        return 1;
                        break;
                    case 'q':
                        verbose = 0;
                        break;
                    default:
                        break;
                }
            }
        }
    }

    eprintf("1: expected success\n");

    args[0]  = (lo_arg*)"@IP";
    args[1]  = (lo_arg*)"127.0.0.1";
    args[2]  = (lo_arg*)"@srcMin";
    args[3]  = (lo_arg*)&r[0];
    args[4]  = (lo_arg*)&r[1];
    args[5]  = (lo_arg*)&r[2];
    args[6]  = (lo_arg*)&r[3];
    args[7]  = (lo_arg*)"@port";
    args[8]  = (lo_arg*)&port;
    args[9]  = (lo_arg*)"@srcType";
    args[10] = (lo_arg*)"f";
    args[11] = (lo_arg*)"@srcLength";
    args[12] = (lo_arg*)&src_length;

    int rc = mapper_msg_parse_params(&msg, "/test", "sssffffsiscsi", 13, args);
    if (rc) {
        eprintf("1: Error parsing.\n");
        result = 1;
        goto done;
    }

    a = mapper_msg_get_param(&msg, AT_IP);
    if (!a) {
        eprintf("1: Could not get @IP param.\n");
        result = 1;
        goto done;
    }
    if (strcmp(&(*a)->s, "127.0.0.1")!=0)
        result |= 1;
    eprintf("1: @IP = \"%s\" %s\n", &(*a)->s, result ? "WRONG" : "(correct)");
    if (result)
        goto done;

    a = mapper_msg_get_param(&msg, AT_PORT);
    if (!a) {
        eprintf("1: Could not get @port param.\n");
        result = 1;
        goto done;
    }
    if ((*a)->i!=1234)
        result |= 1;
    eprintf("1: @port = %d %s\n", (*a)->i, result ? "WRONG" : "(correct)");
    if (result)
        goto done;

    a = mapper_msg_get_param(&msg, AT_SRC_MIN);
    int count = mapper_msg_get_length(&msg, AT_SRC_MIN);
    if (!a) {
        eprintf("1: Could not get @src_min param.\n");
        result = 1;
        goto done;
    }
    if (count != 4) {
        eprintf("1: Wrong count returned for @scr_min param.\n");
    }
    for (i=0; i<count; i++) {
        if (a[i]->f!=r[i])
            result = 1;
        eprintf("1: @src_min[%d] = %f %s\n", i, a[i]->f,
                result ? "WRONG" : "(correct)");
        if (result)
            goto done;
    }

    /*****/

    eprintf("2: deliberately malformed message\n");

    args[0] = (lo_arg*)"@port";
    args[1] = (lo_arg*)&port;
    args[2] = (lo_arg*)"@IP";

    rc = mapper_msg_parse_params(&msg, "/test", "sis", 3, args);
    if (rc) {
        eprintf("2: Error parsing.\n");
        result = 1;
        goto done;
    }

    a = mapper_msg_get_param(&msg, AT_PORT);
    if (!a) {
        eprintf("2: Could not get @port param.\n");
        result = 1;
        goto done;
    }

    a = mapper_msg_get_param(&msg, AT_IP);
    if (a) {
        eprintf("2: Error, should not have been able to retrieve @IP param.\n");
        result = 1;
        goto done;
    }

    /*****/
done:
    if (!verbose)
        printf("..................................................");
    printf("Test %s.\n", result ? "FAILED" : "PASSED");
    return result;
}