from libcpp.utility cimport pair
from util.generic.ptr cimport MakeAtomicShared, TAtomicSharedPtr, THolder
from util.generic.string cimport TString
from util.system.types cimport ui64

import pytest
import unittest


class TestHolder(unittest.TestCase):

    def test_basic(self):
        cdef THolder[TString] holder
        holder.Reset(new TString("aaa"))
        assert holder.Get()[0] == "aaa"
        holder.Destroy()
        assert holder.Get() == NULL
        holder.Reset(new TString("bbb"))
        assert holder.Get()[0] == "bbb"
        holder.Reset(new TString("ccc"))
        assert holder.Get()[0] == "ccc"

    def test_make_atomic_shared(self):
        cdef TAtomicSharedPtr[pair[ui64, TString]] atomic_shared_ptr = MakeAtomicShared[pair[ui64, TString]](15, "Some string")
        assert atomic_shared_ptr.Get().first == 15
        assert atomic_shared_ptr.Get().second == "Some string"