Example #1
0
    def test_csv_file_interface_nonexisttent_file(self):

        with self.assertRaises(ExamException):
            time_series_file = CSVTimeSeriesFile(name='file_non_esistente.csv')
            time_series_file.get_data()
        global score
        score += 0.5  # Increase score
Example #2
0
    def test_csv_file_interface_wrong_type(self):
            
        with self.assertRaises(ExamException):
            time_series_file = CSVTimeSeriesFile(name=[])
            time_series_file.get_data()           

        with self.assertRaises(ExamException):
            time_series_file = CSVTimeSeriesFile(name=None)
            time_series_file.get_data()     

        global score; score += 0.5 # Increase score
Example #3
0
    def test_correctness_edge_cases_1(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = int(86400 + (86400 / 2))
            for i in range(3):
                file.write('{},{}\n'.format(epoch, (i + 1)))
                epoch += 86400
            file.seek(
                0)  # Torno all'inizio del file (necessario per i tmpfile)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = compute_daily_variance(time_series)

            self.assertEqual(results[0], None)
            self.assertEqual(results[1], None)

            global score
            score += 1  # Increase score

            # Controllo anche sull'ultimo giorno
            if len(results) == 3:
                if results[2] is None:
                    score += 1  # Increase score
Example #4
0
    def test_correctness_last_day(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 3600
            for i in range(3):
                for j in range(6):
                    if j < 3:
                        data = '{},{}\n'.format(epoch, 20 + j)
                    else:
                        data = '{},{}\n'.format(epoch, 26 - j)
                    file.write(data)
                    epoch += 600
            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = hourly_trend_changes(time_series)

            self.assertEqual(results[0], 1)
            self.assertEqual(results[1], 2)
            self.assertEqual(results[2], 2)

            global score
            score += 2  # Increase score
Example #5
0
    def test_correctness_edge_cases_1(self):
        with tempfile.NamedTemporaryFile('w+t') as file:

            file.write('epoch,temperature\n')

            # Prima ora
            file.write('3600,22\n')

            # Seconda ora
            file.write('7200,21\n')

            # Terza ora
            file.write('10800,20\n')

            # Quarta ora
            file.write('14400,21\n')

            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = hourly_trend_changes(time_series)
            self.assertEqual(results, [0, 0, 0, 1])

            global score
            score += 2  # Increase score
Example #6
0
    def test_csv_file_dirty_2(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i + 1)))
                file.write('\n')  # Righe vuote in mezzo
                file.write('Nel mezzo del cammin di nostra vita\n'
                           )  # Righe di testo senza senso in mezzo
                file.write('mi son imbattuto in un test un po\' fastisioso\n'
                           )  # Righe di testo senza senso in mezzo (2)
                epoch += 86400
            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()

            # Test su lunghezza e ultimo elemento
            self.assertEqual(len(time_series), 30)
            self.assertEqual(time_series[29], [2592000, 30.0])

            global score
            score += 0.5  # Increase score
Example #7
0
    def test_correctness_28_days_month(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 86400
            for i in range(28):
                for j in range(24):
                    file.write('{},{}\n'.format(epoch, (j + 1) / (i + 1)))
                    # Valori del primo giorno: 1,2,3,4...24
                    # Valori del secondo giorno: 0.5,1,1.5,2...12
                    # ..e cosi' via
                    epoch += 3600
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = daily_stats(time_series)

            self.assertEqual(len(results), 28)
            self.assertEqual(results[27][0], 1 / 28)
            self.assertEqual(results[27][1], 24 / 28)
            self.assertAlmostEqual(results[27][2], 0.446, 2)

            global score
            score += 1  # Increase score
Example #8
0
    def test_correctness_edge_cases_3(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i + 1)))
                epoch += 86400
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = daily_stats(time_series)

            self.assertEqual(results[0][0], 1)
            self.assertEqual(results[0][1], 1)
            self.assertEqual(results[0][2], 1)

            self.assertEqual(results[28][0], 29)
            self.assertEqual(results[28][1], 29)
            self.assertEqual(results[28][2], 29)

            global score
            score += 0.5  # Increase score
Example #9
0
    def test_csv_file_dirty_5(self):
 
        with tempfile.NamedTemporaryFile('w+t') as file:
             
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i+1)))
                epoch+=86400
            file.write('86400,{}\n'.format(epoch, 42)) # Epoch duplicato
            file.seek(0) # Torno all'inizio del file (necessario per i tmpfile) 
 
            time_series_file = CSVTimeSeriesFile(file.name)
             
            with self.assertRaises(ExamException):
                time_series_file.get_data()
 
            global score; score += 1 # Increase score
Example #10
0
    def test_correctness(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            file.write('epoch,temperature\n')

            # Prima ora
            file.write('3600,21\n')
            file.write('4200,22\n')
            file.write('4800,23\n')
            file.write('5400,22\n')
            file.write('6000,21\n')
            file.write('6600,20\n')

            # Seconda ora
            file.write('7200,19\n')
            file.write('7800,18\n')
            file.write('8400,17\n')
            file.write('9000,16\n')
            file.write('9600,17\n')
            file.write('10200,18\n')

            # Terza ora
            file.write('10800,20\n')
            file.write('11400,21\n')
            file.write('12000,22\n')
            file.write('12600,23\n')
            file.write('13200,22\n')
            file.write('13800,21\n')

            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = hourly_trend_changes(time_series)

            self.assertTrue(len(results) in [2, 3])
            self.assertEqual(results[0], 1)
            self.assertEqual(results[1], 1)

            global score
            score += 18  # Increase score

            # Controllo anche sull'ultima ora ed il suo cabio trend calcolato correttamente
            if len(results) == 3:
                if results[2] == 1:
                    score += 1  # Increase score
Example #11
0
    def test_csv_file_interface(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i+1)))
                epoch+=86400
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(name = file.name)
            time_series = time_series_file.get_data()
            self.assertTrue(len(time_series)>0)

            global score; score += 0.5 # Increase score
Example #12
0
    def test_csv_file_interface(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            file.write('epoch,temperature\n')
            file.write('600,21\n')
            file.write('1200,22\n')
            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(name=file.name)
            time_series = time_series_file.get_data()

            # Test su lunghezze
            self.assertTrue(len(time_series) in [1, 2])

            global score
            score += 0.5  # Increase score
Example #13
0
    def test_csv_file_interface(self):
 
        with tempfile.NamedTemporaryFile('w+t') as file:
             
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i+1))) # Campo che non c'entra
                epoch+=86400
            file.seek(0) # Torno all'inizio del file (necessario per i tmpfile) 
 
            time_series_file = CSVTimeSeriesFile(name = file.name)
            time_series = time_series_file.get_data()
             
            # Test su lunghezze
            self.assertTrue(len(time_series) in [29,30])
 
            global score; score += 1 # Increase score
Example #14
0
    def test_correctness(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            file.write('epoch,temperature\n')

            # Inizializzo epoch
            epoch = 3600 * 23

            # Prima giorno
            for i in range(24):
                epoch += 3600
                file.write('{},{}\n'.format(epoch, i))

            # Secondo giorno
            for i in range(24):
                epoch += 3600
                file.write('{},{}\n'.format(epoch, i / 2))

            # Terzo giorno
            for i in range(24):
                epoch += 3600
                file.write('{},{}\n'.format(epoch, i * 2))

            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = compute_daily_variance(time_series)

            self.assertTrue(len(results) in [2, 3])
            self.assertEqual(results[0], 50)
            self.assertEqual(results[1], 12.5)

            global score
            score += 18  # Increase score

            # Controllo anche sull'ultimo giorno
            if len(results) == 3:
                if results[2] == 200:
                    score += 1  # Increase score
Example #15
0
    def test_csv_file_empty(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            
            # File vuoto. Punto per chi ha pensato di gestirla in un modo o
            # nell'altro. Se invece non e' gestito e sale un' eccezione diversa
            # da ExamException o non torna lista vuota, non si prende il punto.
            
            time_series_file = CSVTimeSeriesFile(file.name)
            try:
                time_series = time_series_file.get_data()
            except ExamException:
                pass
            else:
                self.assertEqual(time_series, [])
            
            global score; score += 0.5 # Increase score
Example #16
0
    def test_csv_file_dirty_1(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{},HELLOOOOOOOWOOORLDDDDDDDDD\n'.format(epoch, (i+1))) # Campo che non c'entra
                epoch+=86400
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            
            # Test su lunghezza e ultimo elemento
            self.assertEqual(len(time_series), 30)
            self.assertEqual(time_series[29], [2592000, 30.0])

            global score; score += 0.5 # Increase score
Example #17
0
    def test_csv_file_epoch_floating_point(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{}.333333333333333,{}\n'.format(epoch, (i+1))) # Ogni epoch diventa magicamente floating point
                epoch+=86400
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            
            # Test su lunghezza e ultimo elemento
            self.assertTrue(len(time_series), 30)
            self.assertEqual(time_series[29], [2592000, 30.0])

            global score; score += 1 # Increase score
Example #18
0
    def test_csv_file_dirty_4(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i+1)))
                file.write('SonoUnaEpochNonValidaComeNumero,34\n') # Un timestamp epoch non valido
                epoch+=86400
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()

            # Test su lunghezza e ultimo elemento
            self.assertEqual(len(time_series), 30)
            self.assertEqual(time_series[29], [2592000, 30.0])
        
            global score; score += 0.5 # Increase score
Example #19
0
    def test_csv_file_epoch_floating_point(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            file.write('615.3333333333,21\n')  # Epoch floating point
            file.write('615.9999999999,22\n')  # Epoch floating point
            # Torno all'inizio del file (necessario per i tmpfile)
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()

            # Test su lunghezza ed elementi con epoch arrotondato correttamente
            self.assertTrue(len(time_series), 2)
            self.assertEqual(time_series[0], [615, 21])
            self.assertEqual(time_series[1], [616, 22])

            global score
            score += 1  # Increase score
Example #20
0
    def test_csv_file_epoch_duplicates(self):

        with tempfile.NamedTemporaryFile('w+t') as file:
            
            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch=86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i+1)))
                epoch+=86400
            file.write('86400,{}\n'.format(epoch, 42)) # Epoch duplicato
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            
            with self.assertRaises(ExamException):
                # Va bene alzare l'eccezione sia in get_data che il daily_stats, la specifica era debole
                time_series = time_series_file.get_data()
                daily_stats(time_series)

            global score; score += 1 # Increase score
Example #21
0
    def test_correctness(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 86400
            for i in range(30):
                for j in range(24):
                    file.write('{},{}\n'.format(epoch, (j + 1) / (i + 1)))
                    # Valori del primo giorno: 1,2,3,4...24
                    # Valori del secondo giorno: 0.5,1,1.5,2...12
                    # ..e cosi' via
                    epoch += 3600
            file.seek(0)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()
            results = daily_stats(time_series)

            # Primo giorno
            self.assertTrue(len(results) in [29, 30])
            self.assertEqual(results[0][0], 1)
            self.assertEqual(results[0][1], 24)
            self.assertAlmostEqual(results[0][2], 12.5, 3)

            # Secondo giorno
            self.assertEqual(results[1][0], 0.5)
            self.assertEqual(results[1][1], 12)
            self.assertAlmostEqual(results[1][2], 6.25, 3)

            # Ventinovesimo giorno
            self.assertEqual(results[28][0], 1 / 29)
            self.assertEqual(results[28][1], 24 / 29)
            self.assertAlmostEqual(results[28][2], 0.431, 2)

            global score
            score += 18  # Increase score
Example #22
0
    def test_csv_file_dirty_6(self):

        with tempfile.NamedTemporaryFile('w+t') as file:

            # Scrivo i contenuti nel file di test
            file.write('epoch,temperature\n')
            epoch = 86400
            for i in range(30):
                file.write('{},{}\n'.format(epoch, (i + 1)))
                file.write('{},SonoUnaTemperaturaNonValidaComeNumero\n'
                           )  # Una temperature non valida
                epoch += 86400
            file.seek(
                0)  # Torno all'inizio del file (necessario per i tmpfile)

            time_series_file = CSVTimeSeriesFile(file.name)
            time_series = time_series_file.get_data()

            # Test su lunghezza e ultimo elemento
            self.assertEqual(len(time_series), 30)
            self.assertEqual(time_series[29], [2592000, 30.0])

            global score
            score += 1  # Increase score