自動測試在CPython和Transcrypt下運行。將結果加載到瀏覽器時,結果會自動驗證爲相同。這就是所謂的「背靠背測試」,這是對check
函數的調用。因此,將Transcrypt的正確行爲簡單地(「操作上」)定義爲CPython行爲。與大多數腳本語言一樣,Python缺乏正式的語義規範。
Transcrypt支持95%的CPython。 Transcrypt的內部是Python到JavaScript的編譯器,完全不同。這尤其適用於CPython(以__開始和結尾的那些)的所謂「魔術方法」,儘管如此。對於運算符重載,它們中的很多還受到了Transcrypt的支持。自動測試中的所有功能都支持相同的行爲,所以他們一起在Transcrypt中規定了「你可以做什麼」。
您可以自行運行自動測試,如下所示。對於Transcrypt基本測試:
- 前往文件夾... /開發/ automated_tests /在你Transcrypt安裝transcrypt
- 在命令提示符下鍵入:transcrypt -r -c - 天autotest.py
- 在此之後,在命令提示符下鍵入:transcrypt -c -da autotest.py
- 打開在瀏覽器中生成的文件autotest.html
點擊藍色(或不希望,紅)看到代碼的結果進行比較。這應該是不足爲奇的:自動測試所做的一切確實證實了Transcrypt對它們的行爲只是CPython的行爲。
自動測試結果的 「Hello world」 與故意錯誤:
![Autotest results for "Hello world" with deliberate error](https://i.stack.imgur.com/lThWT.png)
Transcrypt的基本特性自動測試結果:
![Transcrypt's basic featurs autotest results](https://i.stack.imgur.com/BPuZE.png)
的自動測試的價值是雙重的:
- 每當功能被添加到Transcrypt,他們可以很容易地確保一切都沒有翻倒(迴歸測試)
- 閱讀throught的的自動測試的源將提供一個良好的印象,它的功能都支持。
當然像
autoTester.check (b.p, b.q, b.r, b.s)
b.p = 4
b.r = 5
autoTester.check (b.p, b.q, b.r, b.s)
測試,但需要完全覆蓋,是非常微不足道的。然而例如運營商超載代碼如
def __matmul__ (self, other):
result = Matrix (self.nRows, other.nCols)
for iTargetRow in range (result.nRows):
for iTargetCol in range (result.nCols):
for iTerm in range (self.nCols):
result._ [iTargetRow][iTargetCol] += self._ [iTargetRow][iTerm] * other._ [iTerm][iTargetCol]
return result
不是。
庫軟件包的代碼也可以進行自動測試,並使用複雜的數學算法,例如,二維FFT這是必要的,從斷裂保持代碼等
__pragma__ ('opov')
orig2 = num.zeros ((128, 128), 'complex128')
orig2 [32 : 96, 32 : 96] = num.ones ((64, 64), 'complex128')
autoTester.check ('Original samples', num.round (orig2 + delta, 3) [64 : 68, 16 : 112] .tolist(), '<br>')
if transpiled:
timeStartFft = getNow()
freqs2 = fft.fft2 (orig2)
if transpiled:
timeStopFft = getNow()
autoTester.check ('Frequencies', num.round (freqs2 + delta, 3) [64 : 68, 16 : 112] .tolist(), '<br>')
if transpiled:
timeStartIfft = getNow()
reconstr2 = fft.ifft2 (freqs2)
if transpiled:
timeStopIfft = getNow()
if transpiled:
print ('FFT2 for {} samples took {} ms'.format (orig2.size, timeStopFft - timeStartFft))
print ('IFFT2 for {} samples took {} ms'.format (orig2.size, timeStopIfft - timeStartIfft))
autoTester.check ('Reconstructed samples', num.round (reconstr2 + delta, 3) [64 : 68, 16 : 112] .tolist(), '<br>')
__pragma__ ('noopov')
(使用複數,的Numscrypt部分轉化圖像的頻率數組)。所以每當有人貢獻給Transcrypt,他/她都被鼓勵包含一個自動測試。正則表達式模塊就是一個很好的例子,它帶有相當數量的自動測試。
請注意,自動測試幾乎不會幫助您學習Python。有很多教程和書籍,例如Alex Martelli,Anna Ravenscroft和Steve Holden撰寫的「Python in a Nutshell」。
上Transcrypts自動測試設備的內部運作一些更多的信息在這裏找到:
http://www.transcrypt.org/docs/html/autotesting_transcrypt.html