本地编译并运行文件,测试运行时间并判断运行结果

简介:

需求是这样的:在正式加ACM试题之前,首先要进行测试,比如代码运行时间测试,输出结果的正确性等,一切都正常才能添加到比赛中。

这个程序实现的功能也比较简单:

1.对源代码进行编译

2.运行编译生成的文件,计算程序的运行时间

3. 比较输出结果和标准输出是否相同

复制代码
/* ************************************************************************
    > File Name: 本地测试代码.c
    > Author: ma6174
    > Mail: ma6174@163.com 
    > Created Time: 2012年02月24日 星期五 16时39分46秒
 ***********************************************************************
*/
#include<stdio.h>
#include<stdlib.h>
#include< string.h>
#include<sys/time.h>
#include<time.h>
void compile()
{
     char solution[ 1000];
     char compiler[ 1000]= " g++ -o temp_sol  ";
    printf( " 请输入源码文件:\n ");
    gets(solution);
     int i,len_sol=strlen(solution);
     for(i= 0;i<len_sol- 1;i++)
    {
        compiler[ 16+i]=solution[i];
    }
    system(compiler);
}
void count_time()
{
     char run[ 1000]= " ./temp_sol <  ";
     char input_file[ 1000];
    printf( " 请输入input数据文件:\n ");
    gets(input_file);
     int i,len_input_file=strlen(input_file);
     for(i= 0;i<len_input_file;i++)
    {
        run[ 13+i]=input_file[i];
    }
    strcat(run, "  > /tmp/acm_test/output ");
     struct timeval tv_start,tv_end;
    gettimeofday(&tv_start,NULL);
    system(run);
    gettimeofday(&tv_end,NULL);
    printf( " 程序运行时间为:%lf秒\n ",tv_end.tv_sec-tv_start.tv_sec+(tv_end.tv_usec-tv_start.tv_usec)/ 1000000.0);
}
int compare()
{
    printf( " 请输入标准输出文件:\n ");
     char output[ 1000];
    gets(output);
     char diff[ 1000]= " cmp -s  ";
    strcat(diff, " /tmp/acm_test/output  ");
    strcat(diff,output);
     int status=system(diff);
     if(fopen( " /tmp/acm_test/output ", " rt ")==NULL)
    {
        printf( " 文件读取错误!\n ");
         return - 1;
    }
     if(status== 0)
    {
        printf( " 输出完全相同\n ");
    }
     else
    {
        printf( " 输出不相同\n ");
    }

}
int main()
{
    compile();
    count_time();
    compare();

}

复制代码

收获:

这个程序是在linux环境下写的,也是在linux下用的,所以有些功能实现起来和windows不太一样,比如测试时间函数。

我以前发表过一篇博客讨论关于统计程序运行时间的问题,那是在windows下的,在linux下是这样统计的:

struct timeval tv_start,tv_end;
gettimeofday(&tv_start,NULL);
system(run);
gettimeofday(&tv_end,NULL);
printf( " 程序运行时间为:%lf秒\n ",tv_end.tv_sec-tv_start.tv_sec+(tv_end.tv_usec-tv_start.tv_usec)/ 1000000.0);

其中timeval的结构体定义是这样的:

struct timeval {
    time_t      tv_sec;      /*  seconds  */
    suseconds_t tv_usec;     /*  microseconds 微秒=1/10^6秒  */

}; 

还有就是system()函数调用系统命令是有返回值的,有时候可以根据返回值判断执行结果!

博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2012/02/24/2367205.html ,如需转载请自行联系原作者
相关文章
|
5天前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
21 7
|
2月前
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
28 2
|
3月前
|
测试技术
软件测试/测试开发/全日制|Pytest如何灵活地运行用例
软件测试/测试开发/全日制|Pytest如何灵活地运行用例
33 0
|
3月前
|
算法 异构计算 索引
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
42 1
|
1月前
|
算法 异构计算
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
13 0
|
2天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
10天前
|
SQL 存储 分布式计算
Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
【4月更文挑战第7天】Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
16 0
|
1月前
|
存储 测试技术 C++
P2P网络下分布式文件共享场景的测试
P2P网络下分布式文件共享场景的测试
33 6

热门文章

最新文章