Fortran ट्रैक पर जाँच

Exercism पर अपने Fortran अभ्यासों को जाँचना सीखिए


यूनिट टेस्ट और CMake बिल्ड रेसिपी हर अभ्यास के साथ आते हैं। इम्प्लीमेंटेशन आप लिखते हैं। हर टेस्ट फाइल आपके इम्प्लीमेंटेशन से लिंक होकर ऐसा कंसोल एक्ज़ीक्यूटेबल बनाती है जो टेस्ट चलाता है। टेस्ट एक्ज़ीक्यूटेबल चलाने पर हर फेल होने वाले टेस्ट का संदेश छपता है। जब टेस्ट फेल होते हैं, तो यह शून्य से अलग एग्ज़िट स्टेटस बताता है।

टेस्ट फाइल का नाम <exercise>_test.f90 होता है, इसलिए "Bob" अभ्यास के लिए टेस्ट वाली फाइल bob_test.f90 है। हर टेस्ट में एक कमेंट होता है जो उस टेस्ट का वर्णन करता है, और उसके बाद असली टेस्ट call assert_equal से शुरू होता है। जैसे:

  ! Test 16: non-letters with question
  call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

किसी टेस्ट को बंद करने के लिए उसके आगे '!' लगाकर उसे कमेंट बना दीजिए। जैसे:

  ! Test 16: non-letters with question
  ! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

हर अभ्यास पर काम करने का तरीका यह है:

  • CMake से शुरुआती बिल्ड बनाना
  • हर यूनिट टेस्ट के लिए:
    • कंपाइल एरर ठीक कीजिए ताकि टेस्ट फेल हो सके।
    • टेस्ट पास हो जाए, बस उतना ही इम्प्लीमेंट कीजिए।
    • अपने इम्प्लीमेंटेशन को रीफैक्टर कीजिए ताकि वह पढ़ने में आसान हो, दोहराव कम हो, वगैरह।
    • अगले टेस्ट से कमेंट हटाइए

CMake से शुरुआती बिल्ड बनाना

हर अभ्यास के साथ यूनिट टेस्ट के अलावा एक CMakeLists.txt फाइल भी आती है। इसमें तैयार CMake रेसिपी होती है, जो आपके लिए बिल्ड संभालती है। आपको इस फाइल को बदलने की ज़रूरत नहीं पड़नी चाहिए। दी गई रेसिपी यह मान लेती है कि आपका इम्प्लीमेंटेशन अभ्यास के नाम वाली सोर्स फाइल में मौजूद है।

जैसे, "Bob" अभ्यास के लिए bob.f90 फाइल में इम्प्लीमेंटेशन होना चाहिए।

CMake चलाने से पहले अपनी शुरुआती इम्प्लीमेंटेशन फाइलें बना लीजिए। अगर आप "Bob" अभ्यास के लिए CMake चलाते समय bob.f90 फाइल नहीं रखते, तो CMake फाइलें न मिलने की एरर देगा। ये फाइलें खाली हो सकती हैं, लेकिन उनका होना ज़रूरी है।

इस रेसिपी की मदद से CMake आपके वातावरण के लिए उपयुक्त प्रोजेक्ट बना सकता है। इसके लिए उपयुक्त जेनरेटर और अभ्यास वाली डायरेक्टरी की जगह के साथ cmake -G चलाइए। CMake आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त बिल्ड स्क्रिप्ट बनाएगा। इन जेनरेट हुई फाइलों को अपने अभ्यास के सोर्स कोड से अलग रखने के लिए आम तौर पर build नाम की डायरेक्टरी बनाई जाती है, जिसमें ये बिल्ड फाइलें और कंपाइल किया गया कोड रखा जाता है।

इससे आपका अभ्यास फोल्डर साफ-सुथरा बना रहता है।

**ध्यान दें: जब cmake पहली बार चलाया जाता है, तो testlib अपने आप डाउनलोड हो जाता है। यूनिट टेस्ट के काम करने के लिए testlib ज़रूरी है।

चूँकि हर अभ्यास के लिए बिल्ड निर्देश बनाने के लिए आप CMake चलाएँगे, तो हो सकता है आप इस कमांड के लिए एक bash स्क्रिप्ट (Linux/MacOS) या बैच फाइल (Windows) बनाना चाहें।

CMake द्वारा बिल्ड वातावरण बन जाने के बाद, आप अपने वातावरण के लिए उपयुक्त कमांड से अपना कोड बिल्ड कर सकते हैं:

  • Linux में make के साथ: make
  • Windows में Visual Studio के साथ: मेन्यू से Build / Build Solution चुनिए।
  • Windows में MingW के साथ: mingw32-make.exe
  • Windows में nMake के साथ: nmake.exe
  • MacOS में Xcode के साथ: टूलबार से Build चुनिए

अलग-अलग वातावरणों के लिए CMake चलाने के उदाहरण नीचे दिए गए हैं।

Make के साथ Linux\MacOS

CMake के लिए जेनरेटर का नाम Unix Makefiles है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

यह उदाहरण दिखाता है कि CMake चलाने से पहले इम्प्लीमेंटेशन के लिए खाली फाइलें कैसे बनाई जाती हैं।

टेस्ट कंपाइल करने के लिए बस बिल्ड डायरेक्टरी में make टाइप कीजिए। इससे कंपाइल के समय एरर आनी चाहिए। एरर ठीक हो जाने पर make फिर से चलाइए। सारी बिल्ड एरर ठीक हो जाने पर टेस्ट चलाइए:

$ ctest -V

Visual Studio 2017 के साथ Windows

CMake के लिए जेनरेटर का नाम Visual Studio 15 है। यही जेनरेटर Visual Studio 2017 के सभी IDE संस्करणों का समर्थन करता है: Community, Professional और Enterprise। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..

यह उदाहरण दिखाता है कि CMake चलाने से पहले इम्प्लीमेंटेशन के लिए खाली फाइलें कैसे बनाई जाती हैं।

MingW के साथ Windows

CMake के लिए जेनरेटर का नाम MinGW Makefiles है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..

यह उदाहरण दिखाता है कि CMake चलाने से पहले इम्प्लीमेंटेशन के लिए खाली फाइलें कैसे बनाई जाती हैं।

टेस्ट कंपाइल करने के लिए बस बिल्ड डायरेक्टरी में make टाइप कीजिए। इससे कंपाइल के समय एरर आनी चाहिए। एरर ठीक हो जाने पर make फिर से चलाइए। सारी बिल्ड एरर ठीक हो जाने पर टेस्ट चलाइए:

Xcode के साथ MacOS

CMake के लिए जेनरेटर का नाम Xcode है। मान लीजिए कि मौजूदा अभ्यास bob है और हम अभ्यास फोल्डर में हैं:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..

यह उदाहरण दिखाता है कि CMake चलाने से पहले इम्प्लीमेंटेशन के लिए खाली फाइलें कैसे बनाई जाती हैं।

टेस्ट कंपाइल करने के लिए बस बिल्ड डायरेक्टरी में make टाइप कीजिए। इससे कंपाइल के समय एरर आनी चाहिए। एरर ठीक हो जाने पर make फिर से चलाइए। सारी बिल्ड एरर ठीक हो जाने पर टेस्ट चलाइए:

$ ctest -V

Testlib

टेस्ट एक छोटी लाइब्रेरी testlib पर निर्भर करते हैं, जो बिल्ड को cmake से पहली बार कॉन्फ़िगर करते समय github से डाउनलोड की जाती है।

अगर डाउनलोड फेल हो जाए, तो इसे हाथ से भी किया जा सकता है। जैसे:

mkdir testlib
cd testlib
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/CMakeLists.txt
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/TesterMain.f90