void test_dup_ignores_singleton_class() { Tuple* tup = Tuple::create(state, 1); tup->put(state, 0, Qtrue); // Force it to exist. tup->singleton_class(state); Tuple* tup2 = as<Tuple>(tup->duplicate(state)); TS_ASSERT(!try_as<SingletonClass>(tup2->klass_)); TS_ASSERT_DIFFERS(tup->singleton_class(state), tup2->singleton_class(state)); }
void test_duplicate() { Tuple* tup = Tuple::create(state, 1); tup->put(state, 0, Qtrue); tup->set_ivar(state, state->symbol("@name"), state->symbol("foo")); Tuple* tup2 = as<Tuple>(tup->duplicate(state)); TS_ASSERT_EQUALS(tup2->at(state, 0), Qtrue); TS_ASSERT_DIFFERS(tup->id(state), tup2->id(state)); TS_ASSERT(tup->ivars_ != tup2->ivars_); TS_ASSERT_EQUALS(tup2->get_ivar(state, state->symbol("@name")), state->symbol("foo")); tup->ivars_ = as<CompactLookupTable>(tup->ivars_)->to_lookuptable(state); Tuple* tup3 = as<Tuple>(tup->duplicate(state)); TS_ASSERT(tup->ivars_ != tup2->ivars_); TS_ASSERT_EQUALS(tup3->get_ivar(state, state->symbol("@name")), state->symbol("foo")); }