;+
;
; Unit tests for mms_cdf2tplot
;
; To run:
;     IDL> mgunit, 'mms_cdf2tplot_ut'
;
; NOTES: 
;     valid times for unit tests involving /center keyword 
;     taken from v2.1.0 of the FPI CDFs, 3/10/2016
;
; $LastChangedBy: egrimes $
; $LastChangedDate: 2019-04-24 10:26:16 -0700 (Wed, 24 Apr 2019) $
; $LastChangedRevision: 27079 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_6_1/projects/mms/common/tests/mms_cdf2tplot_ut__define.pro $
;-

; Test number_records
function mms_cdf2tplot_ut::test_num_records
  mms_load_mec, trange=['2016-01-21', '2016-01-22'], level='l2', cdf_records=1
  get_data, 'mms1_mec_r_gsm', data=d
  assert, n_elements(d.X) eq 1, 'Problem with number_records keyword'
  return, 1
end

;  Test varformat
function mms_cdf2tplot_ut::test_varformat
  del_data, '*'
  mms_load_edi, trange=['2016-01-21', '2016-01-22'], level='l2', varformat='*_edi_e_gsm_srvy_l2'
  assert, ~is_array(tnames()) && n_elements(tnames()) eq 1, 'Problem with varformat!'
  return, 1
end

; CDF with single data point
; regression test for bug reported by Naritoshi Kitamura, 2/22/16
function mms_cdf2tplot_ut::test_single_data_point
  mms_load_fpi,trange=['2015-09-11/10:00:00','2015-09-11/11:00:00'],probes='1',level='l2',data_rate='brst',datatype=['dis-moms'],suffix='_singlepoint'
  assert, is_array(tnames('*_singlepoint')), 'Problem with CDF containing single data point'
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 FPI Burst (shifted)
function mms_cdf2tplot_ut::test_fpi_burst_shifted
  mms_load_fpi, trange=['2016-01-21', '2016-01-22'], datatype='des-moms', probe=3, data_rate='brst', /center, suffix='_shifted'
  get_data, 'mms3_des_numberdensity_brst_shifted', data=d
  valid_times_shifted = ['20160121/01:06:24.024', '20160121/01:06:24.054', '20160121/01:06:24.084', '20160121/01:06:24.114']
  for vi = 0, n_elements(valid_times_shifted)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_shifted[vi], 'Problem with the FPI L2 burst shifted data'
  endfor
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 FPI Burst (unshifted)
function mms_cdf2tplot_ut::test_fpi_burst_unshifted
  mms_load_fpi, trange=['2016-01-21', '2016-01-22'], datatype='des-moms', probe=3, data_rate='brst'
  get_data, 'mms3_des_numberdensity_brst', data=d
  valid_times_noshift = ['20160121/01:06:24.009', '20160121/01:06:24.039', '20160121/01:06:24.069', '20160121/01:06:24.099']
  for vi = 0, n_elements(valid_times_noshift)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_noshift[vi], 'Problem with the FPI L2 burst unshifted data'
  endfor
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 FPI FS (shifted)
function mms_cdf2tplot_ut::test_fpi_fs_shifted
  mms_load_fpi, trange=['2016-01-21', '2016-01-22'], datatype='des-moms', probe=3, data_rate='fast', /center, suffix='_shifted'
  get_data, 'mms3_des_energyspectr_my_fast_shifted', data=d
  valid_times_shifted = ['20160121/00:00:03.068', '20160121/00:00:07.568', '20160121/00:00:12.068', '20160121/00:00:16.568']
  for vi = 0, n_elements(valid_times_noshift)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_shifted[vi], 'Problem with FPI L2 FS shifted data'
  endfor
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 FPI FS (unshifted)
function mms_cdf2tplot_ut::test_fpi_fs_unshifted
  mms_load_fpi, trange=['2016-01-21', '2016-01-22'], datatype='des-moms', probe=3, data_rate='fast'
  get_data, 'mms3_des_energyspectr_my_fast', data=d
  valid_times_noshift = ['20160121/00:00:00.818', '20160121/00:00:05.318', '20160121/00:00:09.818', '20160121/00:00:14.318']
  for vi = 0, n_elements(valid_times_noshift)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_noshift[vi], 'Problem with FPI L2 FS unshifted data' 
  endfor
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 HPCA 'srvy' (unshifted)
function mms_cdf2tplot_ut::test_hpca_srvy_unshifted
  mms_load_hpca, level='l2', trange=['2017-09-15', '2017-09-16'], probe=1
  get_data, 'mms1_hpca_hplus_number_density', data=d
  valid_times_noshift = ['20170915/00:00:05.823', '20170915/00:00:15.823', '20170915/00:00:25.823', '20170915/00:00:35.823']
  for vi = 0, n_elements(valid_times_noshift)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_noshift[vi], 'Problem with HPCA L2 srvy unshifted data' 
  endfor
  return, 1
end

; DELTA_PLUS_VAR/DELTA_MINUS_VAR for L2 HPCA 'srvy' (shifted)
function mms_cdf2tplot_ut::test_hpca_srvy_shifted
  mms_load_hpca, level='l2', trange=['2017-09-15', '2017-09-16'], probe=1, /center, suffix='_shifted'
  get_data, 'mms1_hpca_hplus_number_density_shifted', data=d
  valid_times_shifted = ['20170915/00:00:10.823', '20170915/00:00:20.823', '20170915/00:00:30.823', '20170915/00:00:40.822']
  for vi = 0, n_elements(valid_times_shifted)-1 do begin
    assert, time_string(d.X[vi], tformat='YYYYMMDD/hh:mm:ss.fff') eq valid_times_shifted[vi], 'Problem with HPCA L2 srvy shifted data'
  endfor
  return, 1
end

pro mms_cdf2tplot_ut::setup
  ; do some setup for the tests
end

function mms_cdf2tplot_ut::init, _extra=e
  if (~self->MGutTestCase::init(_extra=e)) then return, 0
  ; the following adds code coverage % to the output
  self->addTestingRoutine, ['spd_cdf2tplot', 'spd_cdf_info_to_tplot']
  self->addTestingRoutine, 'mms_cdf_load_vars', /is_function
  return, 1
end

pro mms_cdf2tplot_ut__define
  compile_opt strictarr

  define = { mms_cdf2tplot_ut, inherits MGutTestCase }
end