EV-Hiredis

 view release on metacpan or  search on metacpan

deps/hiredis/test.c  view on Meta::CPAN

    redisReaderFree(reader);

    /* RESP3 verbatim strings (GitHub issue #802) */
    test("Can parse RESP3 verbatim strings: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader,(char*)"=10\r\ntxt:LOLWUT\r\n",17);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
        ((redisReply*)reply)->type == REDIS_REPLY_VERB &&
         !memcmp(((redisReply*)reply)->str,"LOLWUT", 6));
    freeReplyObject(reply);
    redisReaderFree(reader);

    /* RESP3 push messages (Github issue #815) */
    test("Can parse RESP3 push messages: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader,(char*)">2\r\n$6\r\nLOLWUT\r\n:42\r\n",21);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
        ((redisReply*)reply)->type == REDIS_REPLY_PUSH &&
        ((redisReply*)reply)->elements == 2 &&
        ((redisReply*)reply)->element[0]->type == REDIS_REPLY_STRING &&
        !memcmp(((redisReply*)reply)->element[0]->str,"LOLWUT",6) &&
        ((redisReply*)reply)->element[1]->type == REDIS_REPLY_INTEGER &&
        ((redisReply*)reply)->element[1]->integer == 42);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Can parse RESP3 doubles: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, ",3.14159265358979323846\r\n",25);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_DOUBLE &&
              fabs(((redisReply*)reply)->dval - 3.14159265358979323846) < 0.00000001 &&
              ((redisReply*)reply)->len == 22 &&
              strcmp(((redisReply*)reply)->str, "3.14159265358979323846") == 0);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Set error on invalid RESP3 double: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, ",3.14159\000265358979323846\r\n",26);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_ERR &&
              strcasecmp(reader->errstr,"Bad double value") == 0);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Correctly parses RESP3 double INFINITY: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, ",inf\r\n",6);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_DOUBLE &&
              isinf(((redisReply*)reply)->dval) &&
              ((redisReply*)reply)->dval > 0);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Correctly parses RESP3 double NaN: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, ",nan\r\n",6);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_DOUBLE &&
              isnan(((redisReply*)reply)->dval));
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Can parse RESP3 nil: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "_\r\n",3);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_NIL);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Set error on invalid RESP3 nil: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "_nil\r\n",6);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_ERR &&
              strcasecmp(reader->errstr,"Bad nil value") == 0);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Can parse RESP3 bool (true): ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "#t\r\n",4);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_BOOL &&
              ((redisReply*)reply)->integer);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Can parse RESP3 bool (false): ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "#f\r\n",4);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_OK &&
              ((redisReply*)reply)->type == REDIS_REPLY_BOOL &&
              !((redisReply*)reply)->integer);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Set error on invalid RESP3 bool: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "#foobar\r\n",9);
    ret = redisReaderGetReply(reader,&reply);
    test_cond(ret == REDIS_ERR &&
              strcasecmp(reader->errstr,"Bad bool value") == 0);
    freeReplyObject(reply);
    redisReaderFree(reader);

    test("Can parse RESP3 map: ");
    reader = redisReaderCreate();
    redisReaderFeed(reader, "%2\r\n+first\r\n:123\r\n$6\r\nsecond\r\n#t\r\n",34);
    ret = redisReaderGetReply(reader,&reply);



( run in 1.693 second using v1.01-cache-2.11-cpan-ad19def0cd9 )