;+
;
; Unit tests for MMS curlometer routines
;
; Requires both the SPEDAS QA folder (not distributed with SPEDAS) and mgunit
; in the local path
;
; $LastChangedBy: egrimes $
; $LastChangedDate: 2017-03-21 09:57:16 -0700 (Tue, 21 Mar 2017) $
; $LastChangedRevision: 23011 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_2_00/projects/mms/common/tests/mms_curlometer_ut__define.pro $
;-

function mms_curlometer_ut::test_both_methods
    trange = ['2015-10-30/05:15:45', '2015-10-30/05:15:48']
    mms_load_fgm, trange=trange, /get_fgm_ephemeris, probes=[1, 2, 3, 4], data_rate='brst', /time_clip
    mms_lingradest, fields='mms'+['1', '2', '3', '4']+'_fgm_b_gse_brst_l2', positions='mms'+['1', '2', '3', '4']+'_fgm_r_gse_brst_l2', suffix='_lingradest'
    mms_curl, trange=trange, fields='mms'+['1', '2', '3', '4']+'_fgm_b_gse_brst_l2', positions='mms'+['1', '2', '3', '4']+'_fgm_r_gse_brst_l2', suffix='_mms_curl'
    get_data, 'jx_lingradest', data=lx
    get_data, 'jy_lingradest', data=ly
    get_data, 'jz_lingradest', data=lz
    get_data, 'jtotal_mms_curl', data=d
    assert, total(d.Y[0, *]*1e9-[lx.Y[0], ly.Y[0], lz.Y[0]] lt 1) eq 3, 'Problem comparing curlometer methods on the same event'
    return, 1
end

function mms_curlometer_ut::test_lingradest
    trange = ['2015-10-30/05:15:45', '2015-10-30/05:15:48']
    mms_load_fgm, trange=trange, /get_fgm_ephemeris, probes=[1, 2, 3, 4], data_rate='brst'
    mms_lingradest, fields='mms'+['1', '2', '3', '4']+'_fgm_b_gse_brst_l2', positions='mms'+['1', '2', '3', '4']+'_fgm_r_gse_brst_l2'
    assert, spd_data_exists('jx jy jz CxB CyB CzB', trange[0], trange[1]), 'Problem with mms_lingradest'
    return, 1
end

function mms_curlometer_ut::test_basic
    trange = ['2015-10-30/05:15:45', '2015-10-30/05:15:48']
    mms_load_fgm, trange=trange, /get_fgm_ephemeris, probes=[1, 2, 3, 4], data_rate='brst'
    mms_curl, trange=trange, fields='mms'+['1', '2', '3', '4']+'_fgm_b_gse_brst_l2', positions='mms'+['1', '2', '3', '4']+'_fgm_r_gse_brst_l2'
    assert, spd_data_exists('jtotal curlB jperp jpar', trange[0], trange[1]), 'Problem with mms_curl'
    return, 1
end

pro mms_curlometer_ut::setup
    del_data, '*'
end

function mms_curlometer_ut::init, _extra=e
    if (~self->MGutTestCase::init(_extra=e)) then return, 0
    ; the following adds code coverage % to the output
    self->addTestingRoutine, ['mms_curl', 'mms_lingradest', 'lingradest']
    return, 1
end

pro mms_curlometer_ut__define
    define = { mms_curlometer_ut, inherits MGutTestCase }
end