158 lines
2.7 KiB
C++
Raw Normal View History

2023-08-09 17:14:54 +08:00
#include<hgl/type/Stack.h>
2023-08-01 15:42:45 +08:00
#include<iostream>
2023-08-10 12:02:03 +08:00
#include"UserInfo.h"
2023-08-01 15:42:45 +08:00
using namespace hgl;
using namespace std;
2023-08-09 17:14:54 +08:00
void TestStackOrdered()
2023-08-01 15:42:45 +08:00
{
2023-08-09 17:14:54 +08:00
cout<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"Stack Ordered Test"<<endl<<endl;
2023-08-01 15:42:45 +08:00
Stack<int> tab;
int i;
for(i=0;i<10;i++)
{
cout<<"push "<<i<<endl;
tab.Push(i);
}
cout<<"Stack Count: "<<tab.GetCount()<<endl;
for(i=0;i<10;i++)
{
int val;
tab.Pop(val);
cout<<"pop "<<val<<endl;
}
cout<<"Stack Count: "<<tab.GetCount()<<endl;
}
2023-08-09 17:14:54 +08:00
void TestStackUnordered()
{
cout<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"Stack Unordered Test"<<endl<<endl;
Stack<int> tab;
int i;
int val;
for(i=0;i<20;i++)
{
if(rand()&1)
{
if(tab.Pop(val))
cout<<"pop "<<val<<endl;
else
cout<<"pop error"<<endl;
}
else
{
cout<<"push "<<i<<endl;
tab.Push(i);
}
}
}
void TestStackStruct()
{
cout<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"Stack Struct Test"<<endl<<endl;
Stack<UserInfo> ui_queue;
2023-08-10 15:48:19 +08:00
for(uint i=0;i<sizeof(user_info_array)/sizeof(UserInfo);i++)
ui_queue.Push(user_info_array[i]);
2023-08-09 17:14:54 +08:00
cout<<"Stack Count: "<<ui_queue.GetCount()<<endl;
2023-08-10 15:48:19 +08:00
for(uint i=0;i<sizeof(user_info_array)/sizeof(UserInfo);i++)
2023-08-09 17:14:54 +08:00
{
UserInfo ui;
ui_queue.Pop(ui);
cout<<i<<": "<<ui.name<<(ui.sex?" male ":" female ")<<ui.age<<" age."<<endl;
}
}
2023-08-01 15:42:45 +08:00
class StackTestObject
{
int val;
public:
2023-08-09 17:14:54 +08:00
StackTestObject(){val=-1;}
void Set(int v)
2023-08-01 15:42:45 +08:00
{
val=v;
2023-08-09 17:14:54 +08:00
cout<<"StackTestObject::Set "<<val<<endl;
2023-08-01 15:42:45 +08:00
}
~StackTestObject()
{
cout<<"~StackTestObject "<<val<<endl;
}
};
void TestObjectStack()
{
2023-08-09 17:14:54 +08:00
cout<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"Stack Object Test"<<endl<<endl;
2023-08-01 15:42:45 +08:00
ObjectStack<StackTestObject> tab;
int i;
for(i=0;i<10;i++)
{
2023-08-09 17:14:54 +08:00
StackTestObject *obj=new StackTestObject;
obj->Set(i);
tab.Push(obj);
2023-08-01 15:42:45 +08:00
}
cout<<"Stack Count: "<<tab.GetCount()<<endl;
2023-08-09 17:14:54 +08:00
for(i=0;i<5;i++) //只取出5个,剩几个给自动清理处理
2023-08-01 15:42:45 +08:00
{
StackTestObject *obj=tab.Pop();
if(obj)
delete obj;
}
cout<<"Stack Count: "<<tab.GetCount()<<endl;
}
int os_main(int,os_char **)
{
2023-08-09 17:14:54 +08:00
srand(time(nullptr));
//原生单个数据测试
TestStackOrdered();
TestStackUnordered();
2023-08-01 15:42:45 +08:00
2023-08-09 17:14:54 +08:00
//原生结构体测试
TestStackStruct();
2023-08-01 15:42:45 +08:00
2023-08-09 17:14:54 +08:00
//对象测试
2023-08-01 15:42:45 +08:00
TestObjectStack();
return(0);
}