#include "sr_sunrise.h"

//测试用例1
static void test1_tc(void)
{
    uint32_t startTick,endTick;
	float totalTime;
	SR_LOG(INFO,"[UTEST] test1_tc entry\r\n");
	uint32_t value =0;
	char *str1 = "it's a new pen";
	char *str2 = "it's a old pen";

	//步骤1：判断value值为真，则算通过
	value = 1;
	tp_assert_true(value);

	//步骤2：判断value值为假，则算通过
	value = 0;
	tp_assert_false(value);


	//步骤3：判断字符串相等，则算通过
	tp_assert_str_equal(str1, str2);


	//步骤4：测试函数执行耗时
	SR_GET_EXCT_TIME(SR_OsDelay(1000),startTick,endTick,totalTime);
	SR_LOG(INFO,"[UTEST] startTick:%u endTick:%u totalTime: %f us",startTick,endTick,totalTime);
    tp_assert_true(totalTime<=1000000);

    //打印动态内存信息
	SR_PrintDmemInfo();
	
}
static int test1_init(void)
{    
	//这里进行测试用例1的前期初始化

	//可以获取命令行传参最多10个
	int argc=0;
	char *argv[10]={0}; 
	
	UtestGetArgs(&argc,argv);
	if(argc>0)
	{
       //获取每一个传参
       SR_LOG(INFO,"\r\nGet args:");
       for(int i=0;i<argc;i++) SR_PRINTF("argv[%d]: %s\r\n", i,argv[i]);
	   
	}
	else
	{
       SR_LOG(INFO,"\r\nNo args");
	}
	
    return SR_OK;
}

static int test1_cleanup(void)
{    
	//这里进行测试用例1的清理工作
	
    return SR_OK;
}
//通过宏定义导出，此时在命令行输入utest_test1命令即可执行test1_tc
UTEST_TC_EXPORT(utest_test1, test1_tc, test1_init, test1_cleanup, TC_PRIORITY_MIDDLE);







//测试用例2
static void test2_tc(void)
{  
	SR_LOG(INFO,"[UTEST] test2_tc entry\r\n");

	uint32_t value;

	//步骤1：判断value在[3,6]之间，则算通过
	value =4;
	tp_assert_in_range(value, 3, 6);

}

static int test2_init(void)
{    	
	//这里进行测试用例2的前期初始化
	
    return SR_OK;
}

static int test2_cleanup(void)
{    
	//这里进行测试用例2的清理
	
    return SR_OK;
}
//通过宏定义导出，此时在命令行输入utest_test2命令即可执行test2_tc
UTEST_TC_EXPORT(utest_test2, test2_tc, test2_init, test2_cleanup, TC_PRIORITY_HIGH);





#include "sr_shell.h"
//动态内存测试
static int _DmemTest(int argc, char *argv[])
{
    int i;
	gShellThreadRun =1;

	void *pTab[5]={0};

    SR_PrintDmemInfo();
	while (gShellThreadRun)
	{

      //分配内存
      for(i=0;i<5;i++)
      	{
	      pTab[i] = SR_OsMalloc(100);
		  SR_PrintDmemInfo();
		  SR_OsDelay(1000);
      	}
      
      

      //释放内存
      for(i=0;i<5;i++)
      	{
	      SR_OsFree(pTab[i]);
		  SR_PrintDmemInfo();
		  SR_OsDelay(1000);
      	}  

      SR_OsDelay(3000);
	  
	   //分配内存
      for(i=0;i<5;i++)
      	{
	      pTab[i] = SR_OsCalloc(2,100);
		  SR_PrintDmemInfo();
		  SR_OsDelay(1000);
      	}
      
      

      //释放内存
      for(i=0;i<5;i++)
      	{
	      SR_OsFree(pTab[i]);
		  SR_PrintDmemInfo();
		  SR_OsDelay(1000);
      	}  
      
	}

}
SR_SHELL_CMD_EXPORT(memTest, _DmemTest);


