示例#1
0
int main() {
    PTree<string> pt;    

    // normal get
    string name("Alice");
    pt.put("person.name", name);
    string nameOut = pt.get("person.name"); // assignment syntax
    assert(name == nameOut);
    string nameEx(pt.get<string>("person.name")); // explicit syntax, need convert explicitly
    assert(name == nameEx);
    assert(pt.isValidPath("person.name"));

    // const get
    const PTree<string>& cpt = pt;
    string nameOutC = cpt.get("person.name");
    assert(name == nameOutC);
    string nameExC;
    nameExC = cpt.get<string>("person.name");
    assert(name == nameExC);
    const string& nameRefC = cpt.get("person.name");
    assert(name == nameRefC);

    // ref get
    string& nameRef = pt.get("person.name");
    nameRef = "Bob";
    nameOut = pt.get<string>("person.name");
    assert(nameRef == nameOut);

    // other types
    int age = 25;
    pt.put("person.age", age);
    int ageOut(pt.get("person.age"));
    assert(age == ageOut);

    float height = 1.65;
    pt.put("person.height", height);
    float heightOut(pt.get("person.height"));
    assert(height == heightOut);

    Car car;
    car.color = "black";
    car.price = 50000;
    pt.put("person.car", car);
    Car carOut(pt.get("person.car"));
    assert(car.color == carOut.color);
    assert(car.price == carOut.price);

    // push as vector
    int income = 100;
    pt.push("person.deposit", income++);
    pt.push("person.deposit", income++);
    pt.push("person.deposit", income++);
    const std::vector<int>& sum = pt.get("person.deposit");
    assert(sum.size() == 3);

    // del
    string error;
    pt.del("person.name");
    try {
        pt.get("person.name");
    } catch (const PTreeError& e) {
        error = e.what();
        cout << "catched PTreeError: " << error << endl;
    }
    assert(!error.empty());
    assert(!pt.isValidPath("person.name"));

    cout << "all test passed" << endl;
    return 0;
}