예제 #1
0
void DMTest::testTempVar()
{
    // Test add temp variables
    
    //! test bool
    TEMP_VAR->set("test_bool", true);
    CCASSERT(TEMP_VAR->getBool("test_bool"), "");
    TEMP_VAR->set("test_bool", false);
    CCASSERT(!TEMP_VAR->getBool("test_bool"), "");
    
    CCASSERT(!TEMP_VAR->getBool("test_bool2"),"");
    
    //! test int
    CCASSERT(TEMP_VAR->getInt("int1")==0,"");
    TEMP_VAR->set("int1", 100);
    CCASSERT(TEMP_VAR->getInt("int1")==100,"");
    TEMP_VAR->set("int1", -99);
    CCASSERT(TEMP_VAR->getInt("int1")==-99,"");
    
    //! test uint
    unsigned int ui = 91900;
    CCASSERT(TEMP_VAR->getUint("uint1")==0,"");
    TEMP_VAR->set("uint1", ui);
    CCASSERT(TEMP_VAR->getUint("uint1")==ui,"");
    TEMP_VAR->set("uint1", ui+1);
    CCASSERT(TEMP_VAR->getUint("uint1")==91901,"");
    
    //!test int64
    int64_t i64 = 288288;
    CCASSERT(TEMP_VAR->getInt64("int64")==0,"");
    TEMP_VAR->set("int64", i64);
    CCASSERT(TEMP_VAR->getInt64("int64")==i64,"");
    TEMP_VAR->set("int64", i64-8);
    CCASSERT(TEMP_VAR->getInt64("int64")==288280,"");
    
    //!test uint64
    uint64_t ui64 = 9999999;
    CCASSERT(TEMP_VAR->getUint64("uint64")==0,"");
    TEMP_VAR->set("uint64", ui64);
    CCASSERT(TEMP_VAR->getUint64("uint64")==ui64,"");
    TEMP_VAR->set("uint64", ui64 + 1);
    CCASSERT(TEMP_VAR->getUint64("uint64")==10000000,"");

    //!test double
    CCASSERT(TEMP_VAR->getDouble("double1")==0,"");
    TEMP_VAR->set("double1", 10.01);
    CCASSERT(TEMP_VAR->getDouble("double1")==10.01,"");
    TEMP_VAR->set("double1", -1001.99);
    CCASSERT(TEMP_VAR->getDouble("double1")==-1001.99, "");
    
    //! test string
    CCASSERT(TEMP_VAR->getCharArray("string1")==nullptr, "");
    TEMP_VAR->set("string1", "i am a const char* !");
    CCASSERT(strcmp(TEMP_VAR->getCharArray("string1"), "i am a const char* !") == 0 , "");
    TEMP_VAR->set("string1", "i am not the same");
    const char* string1 = TEMP_VAR->getCharArray("string1");
    CCASSERT(strcmp(string1, "i am not the same") == 0, "");
    
    TEMP_VAR->set("string2", std::string("hello"));
    CCASSERT(TEMP_VAR->getString("string2").compare("hello") == 0, "");
    std::string another("world");
    TEMP_VAR->set("string2", another);
    CCASSERT(TEMP_VAR->getString("string2").compare("world") == 0, "");
    
    //! test map
    std::unordered_map<std::string, int> testmap = {{"key1", 0}, {"key2", 1}, {"key3", 2}};
    //! resetmap
    TEMP_VAR->set("map1", testmap); //left value
    
    TEMP_VAR->set("map2", std::unordered_map<std::string, double> ( { {"11",19.9}, {"22", 29.9}, {"33", 39.9} } )); //right value
    
    //! add to map
    for (int i = 0; i < 100; ++i) {
        char buf[20];
        sprintf(buf, "key_%d", i);
        TEMP_VAR->addMemberToMap("map1", buf, i);  //already exist
        TEMP_VAR->addMemberToMap("map2", buf, 0.99+i); //already exist
    }
    for (int i = 0; i < 10; ++i) {
        char buf[20];
        sprintf(buf, "key_%d", i);
        TEMP_VAR->addMemberToMap("map3", buf, i); //not exist
    }
    
    //! remove from map
    for (int i = 0; i < 100; ++i) {
        char buf[20];
        sprintf(buf, "key_%d", i);
        TEMP_VAR->removeFromMap("map1", buf);
        TEMP_VAR->removeFromMap("map2", buf);
    }
    
    TEMP_VAR->removeFromMap("map3", "key_0");
    TEMP_VAR->removeFromMap("map4", "n"); // not exist
    
    //print all the map
    //! map1
    auto& map1 = TEMP_VAR->getObject("map1");
    std::for_each(map1.MemberonBegin(), map1.MemberonEnd(), [](ValueType::Member& member){std::cout<<"["<<member.name.GetString() << ","<<member.value.GetInt() << "] ";});
    
    std::cout<<std::endl;
    
    auto& map2 = TEMP_VAR->getObject("map2");
    std::for_each(map2.MemberonBegin(), map2.MemberonEnd(), [](ValueType::Member& member){std::cout<<"["<<member.name.GetString() << ","<<member.value.GetDouble() << "] ";});
    
    std::cout<<std::endl;
    
    auto& map3 = TEMP_VAR->getObject("map3");
    std::for_each(map3.MemberonBegin(), map3.MemberonEnd(), [](ValueType::Member& member){std::cout<<"["<<member.name.GetString() << ","<<member.value.GetInt() << "] ";});
    
    std::cout<<std::endl;
    
    CCASSERT(TEMP_VAR->getValueFromMap("map1", "key1").GetInt() == 0, "");
    CCASSERT(TEMP_VAR->getValueFromMap("map2", "11").GetDouble() == 19.9, "");
    CCASSERT(TEMP_VAR->getValueFromMap("map3", "key_1").GetInt() == 1, "");
    CCASSERT(TEMP_VAR->getValueFromMap("map3", "key_0").IsNull(), ""); //not exist
    CCASSERT(TEMP_VAR->getValueFromMap("map4", "oo").IsNull(), "");//not exist
    CCASSERT(TEMP_VAR->getValueFromMap("map5", "hh").IsNull(), "");//not exist
    
    
    //! test array
    std::vector<int> array = {10,20,30,40,50};
    TEMP_VAR->set("arr1", array);
    TEMP_VAR->set("arr2", std::vector<double>{1.0,2.0,3.0,4.0,5.0,6.0} ) ;
    
    TEMP_VAR->addValueToArray("arr1", 60);
    TEMP_VAR->addValueToArray("arr2", 7.0);
    TEMP_VAR->addValueToArray("arr3", 100); // not exist
    
    CCASSERT(TEMP_VAR->getSize("arr1") == 6, "");
    CCASSERT(TEMP_VAR->getSize("arr2") == 7, "");
    CCASSERT(TEMP_VAR->getSize("arr3") == 1, "");
    CCASSERT(TEMP_VAR->getSize("arr100") == 0, "");
    CCASSERT(TEMP_VAR->isArrayEmpty("arr100"), "");
    CCASSERT(TEMP_VAR->isArrayEmpty("arr101"), "");
    
    TEMP_VAR->popFromArray("arr1");
    TEMP_VAR->popFromArray("arr1");
    TEMP_VAR->popFromArray("arr2");
    TEMP_VAR->popFromArray("arr2");
    TEMP_VAR->popFromArray("arr3");
//    TEMP_VAR->popFromArray("arr3"); //not allowed
    
    CCASSERT(TEMP_VAR->isArrayEmpty("arr3"), "");
    
    auto& v1 = TEMP_VAR->getValueFromArray("arr1", 0);
    CCASSERT(v1.GetInt() == 10, "");
    auto& v2 = TEMP_VAR->getValueFromArray("arr2", 2);
    CCASSERT(v2.GetDouble() == 3.0, "");
    
    TEMP_VAR->addValueToArray("arr3", 200);
    CCASSERT(TEMP_VAR->getValueFromArray("arr3", 0).GetInt() == 200, "");
    
    //! test Serializable object
    {
        Dependent dep("Lua YIP", 3, new Education("Happy Kindergarten", 3.5));
        TEMP_VAR->setSerializable("p1", dep);
        Dependent dep1("Luo Zhouqiong", 3, nullptr);
        TEMP_VAR->setSerializable("p2", dep1);
        Dependent dep2 = dep;
        TEMP_VAR->setSerializable("p3", dep2);
        dep = dep1;
        TEMP_VAR->setSerializable("p1", dep);
    }
    {
        Dependent dep1, dep2, dep3;
        TEMP_VAR->getSerializable("p1", dep1);
        TEMP_VAR->getSerializable("p2", dep2);
        TEMP_VAR->getSerializable("p3", dep3);
        
        std::cout<< dep1 <<std::endl;
        std::cout<< dep2 <<std::endl;
        std::cout<< dep3 <<std::endl;
        
    }
    
    
    //dump the memory
    TEMP_VAR->dumpMemory(std::cout);
    
    // Test remove temp variables
    
    TEMP_VAR->remove("string1");
    TEMP_VAR->remove("arr3");
    TEMP_VAR->remove("map1");
    
    //dump the memory
    TEMP_VAR->dumpMemory(std::cout);
    
    // Then add temp variables
    TEMP_VAR->set("++++++", true);
    TEMP_VAR->set("+++++++", 999.999);
    
    //dump the memory
    TEMP_VAR->dumpMemory(std::cout);
    
    // Then add temp variables
    TEMP_VAR->set("++++++++", "I love you!");
    TEMP_VAR->set("+++++++++", "I love you too!");
    TEMP_VAR->dumpMemory(std::cout);

}
예제 #2
0
파일: order.c 프로젝트: AdvancedC/glibc
int
main (void)
{
  return dep1 () != 42;
}