如何使用自己的代码轻松地在自己的文章中复制已发布的结果


15

我写了一个程序/库,用来在一篇文章中获得结果。(这里,但是我的问题很笼统。)我有定期使用的测试ctest(运行需要几分钟)。为了重现文章中的某些表格或图表,我必须构建一个脚本或一个简单的驱动程序,该程序可能运行10分钟,有时甚至更长,因此我不想将其包含在常规测试套件中。同时,我想确保本文的结果可以是:

  • 后来转载
  • 在我继续开发库之后,请确保它们仍然给出相同/正确的结果

目前,我尝试拥有一个作为常规测试套件一部分运行的小型驱动程序,如果要重现本文的结果,请取消注释其中的几行。当然,我永远不知道确切的行以及是否必须调整一些其他参数才能获得与文章中完全相同的结果。

我还尝试过使用Python脚本来计算文章中的确切数字/表格。此类脚本通常在库更新后停止工作,因为它不是定期运行(占用太多时间)。

我想到的最好的方法是有一个Fortran(或C / C ++)示例,该示例将定期编译(作为库的一部分),但不能在常规测试套件中运行。这样,至少我知道它可以很好地编译(因此希望也可以运行)。作为常规测试套件的一部分,我将测试一些简单(较小)的示例。

解决此问题的最佳方法是什么?


2
很好的问题,我的第一个反应是,您应该将测试划分为快速回归,可以快速运行该回归,并在每次提交之前执行该测试,而在长期集成工作中希望使用更长的回归。您是否专门针对仅对前一个品种进行测试而尚未对它们进行划分的情况?
阿隆·艾玛迪亚

我有很多可以快速运行的测试,请参见此处:github.com/certik/hfsolver/tree/master/src/tests,但是我不知道如何处理本文的实际计算(例如,每个表10分钟) /数字可轻松得出总计几个小时的信息)。
昂德里杰·塞蒂克

2
使用连续集成服务器,每晚(或每周,每月等)自动运行长测试。由于除了结果外您无需关注其他任何事情,因此您无需担心它们花费了多长时间。
David Ketcheson

Answers:


6

在deal.II中,我们有一个由常规Unix Makefile驱动的测试套件。它具有运行所有常规测试的默认目标,以及用于昂贵测试的单独目标。使用通用规则运行每个测试,但是默认目标仅对某些测试调用该通用规则,而昂贵的目标则针对昂贵的测试调用该通用规则。由于所有操作都是使用通用规则完成的,因此在任何给定时间都必须是最新的。可能过时的只能是测试名称列表。

更新:以上文字在2012年是正确的。自2014年以来,deal.II测试套件基于CTest,但总体思路仍然有效。


谢谢!这是指向文档的链接:Dealii.org/7.2.0/development/testsuite.html#regression_tests,这是“常规测试”的结果:Dealii.org/cgi-bin/regression_quick.pl和此处的“昂贵的测试”:Dealii.org/cgi-bin/regression.pl,我做对了吗?因此,您在每个修订版本上运行“常规测试”,而仅在每个修订版本上运行“昂贵测试”吗?
昂德里杰·塞蒂克

不完全的。昂贵的测试结果通常不会发布到网站上。
Wolfgang Bangerth,2012年

因此,您手动运行它们,比如说在每个版本之前?他们需要多长时间才能运行?我喜欢你的方法。
昂德里杰·塞蒂克

1
是的,手动操作。偶尔,肯定要发布之前。对于某些项目,它们需要一个小时或更长时间,但是由于它们仅测试库的一小部分(它们主要测试要处理的附加项目II),因此每次修订都不一定值得或无法运行它们。
Wolfgang Bangerth 2012年

您是否有只能在超级计算机上运行的并行测试,例如针对的任何大规模测试p4est
Aron Ahmadia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.