在一些科学环境中,你经常离不开FORTRAN,因为大多数开发人员只知道这个习语,并且有很多遗留代码和相关经验.坦率地说,高性能编程没有很多其他跨平台选项(C++可以完成任务,但语法,零启动数组和指针与某些人不兼容).
所以,让我们假设一个新项目,必须使用Fortran 90的,但我想建立最先进的软件架构出来的,同时与最新的编译器兼容(英特尔ifort,而且还包括Sun/HP/IBM编译)
所以我想要强加一些众所周知的常识,但在我的环境中还不是标准:
implicit none等#ifdef DEBUG),带有更多检查和所有可能的英特尔编译器检查(数组边界,子程序接口等)所有这一切的目标是拥有值得信赖,可维护和模块化的代码.然而,在许多遗留代码中,可重用性不是一个重要的目标.
我四处搜寻有关面向对象的Fortran编程契约式引用(断言/前提条件的/ etc.),发现只有丑陋的和过时的文件,通过人与没有大规模参与项目进行语法和文章,和死了的项目.
有关此主题的任何好的URL,建议,参考文件/书籍?
如何assert在Eclipse中启用关键字?
public class A
{
public static void main(String ... args)
{
System.out.println(1);
assert false;
System.out.println(2);
}
}
Run Code Online (Sandbox Code Playgroud) 我需要检查变量是否是User类型的对象.用户是我的班级$user我的对象
$this->assertInstanceOf($user,User);
Run Code Online (Sandbox Code Playgroud)
这不起作用,我使用未定义的常量用户 - 假设'用户'
在此先感谢您的帮助
有时局部变量的唯一目的是在assert()中检查它,就像这样 -
int Result = Func();
assert( Result == 1 );
Run Code Online (Sandbox Code Playgroud)
在Release版本中编译代码时,通常会禁用assert(),因此此代码可能会生成有关Result已设置但从未读取的警告.
可能的解决方法是 -
int Result = Func();
if ( Result == 1 )
{
assert( 0 );
}
Run Code Online (Sandbox Code Playgroud)
但它需要太多的打字,在眼睛上并不容易,并且导致总是检查条件(是的,编译器可以优化检查,但仍然).
我正在寻找一种替代方法来表达这个assert()的方式不会导致警告,但仍然易于使用并避免更改assert()的语义.
(在此区域代码中使用#pragma禁用警告不是一种选择,并且降低警告级别以使其消失也不是一种选择......).
在向服务提交查询后,我得到一个字典/列表,我想确保它不是空的.我在Python 2.7上.
我很惊讶我没有看到类实例的任何assertEmpty方法unittest.TestCase.
现有的替代品如:
self.assertTrue(bool(d))
Run Code Online (Sandbox Code Playgroud)
和
self.assertNotEqual(d,{})
Run Code Online (Sandbox Code Playgroud)
和
self.assertGreater(len(d),0)
Run Code Online (Sandbox Code Playgroud)
只是看起来不对劲.
Python unittest框架中是否缺少这种方法?如果是,那么断言迭代不为空的最pythonic方法是什么?
我从来没有得到断言的想法 - 你为什么要使用它们?
我的意思是,让我说我是一个公式驱动程序,所有断言都是安全带,头盔等.
测试(在调试中)都没关系,但现在我们想做赛车(发布)!我们是否应该放弃所有安全性,因为测试时没有问题?
我永远不会删除它们.我认为大多数声称删除类似于断言的东西的人从不描述他们的代码或断言是绝对流离失所.我从未见过任何真正的性能优势,特别是关于80/20规则.
所以,我是否以某种方式忽略了这一点,或者任何人都可以告诉我,为什么我应该使用断言?顺便说一句,我正在使用单元测试.
我是Java的新手,并且正在关注Eclipse Total Beginner的教程.它们都非常有用,但是在第12课中,他使用assertTrue了一个测试用例和assertFalse另一个测试用例.这是代码:
// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());
assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));
Run Code Online (Sandbox Code Playgroud)
我搜索了这些方法的好文档,但没有找到任何东西.如果我的理解是正确的,assertTrue那么assertFalse当第二个参数求值为false时显示字符串.如果是这样的话,拥有它们的重点是什么?
编辑:我想我看到令我困惑的是什么.作者可能只是为了展示他们的功能而放置它们(毕竟它是一个教程).然后他设置了一个会失败的信息,这样就会打印出来并告诉我为什么失败了.开始变得更有意义......我认为这是解释,但我不确定.
我正在编写以下内容,在比较Unicode文本的两个多行块时,我尝试生成一个不错的错误消息.进行比较的内部方法引发了断言,但默认解释对我来说毫无用处
我需要在代码中添加一些内容,如下所示:
def assert_long_strings_equal(one, other):
lines_one = one.splitlines()
lines_other = other.splitlines()
for line1, line2 in zip(lines_one, lines_other):
try:
my_assert_equal(line1, line2)
except AssertionError, error:
# Add some information to the printed result of error??!
raise
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何更改我捕获的断言错误中的打印错误消息.我总是得到AssertionError: u'something' != 'something else',它只显示输出的第一行.
如何更改断言消息以打印出我想要的内容?
如果它是相关的,我nose用来运行测试.
我在下面编写了一个断言方法Ensure.CurrentlyOnUiThread(),用于检查当前线程是否为UI线程.
Ensure.cs
using System.Diagnostics;
using System.Windows.Forms;
public static class Ensure
{
[Conditional("DEBUG")]
public static void CurrentlyOnUiThread()
{
if (!Application.MessageLoop)
{
throw new ThreadStateException("Assertion failed: not on the UI thread");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在错误的情况下实现一个"断言"来阻止编译,而不是在运行时失败.
我目前有一个这样的定义,它工作得很好,但它增加了二进制文件的大小.
#define MY_COMPILER_ASSERT(EXPRESSION) switch (0) {case 0: case (EXPRESSION):;}
Run Code Online (Sandbox Code Playgroud)
示例代码(无法编译).
#define DEFINE_A 1
#define DEFINE_B 1
MY_COMPILER_ASSERT(DEFINE_A == DEFINE_B);
Run Code Online (Sandbox Code Playgroud)
我如何实现它,以便它不生成任何代码(为了最小化生成的二进制文件的大小)?