text:
@testset "minimal_sqr_rev_test" begin
    # sqrRev [empty] = [empty]
    # sqrRev [-10.0,-1.0] = [empty]
    # sqrRev [0.0,infinity] = [entire]
    # sqrRev [0.0,1.0] = [-1.0,1.0]
    # sqrRev [-0.5,1.0] = [-1.0,1.0]
    # sqrRev [-1000.0,1.0] = [-1.0,1.0]
    # sqrRev [0.0,25.0] = [-5.0,5.0]
    # sqrRev [-1.0,25.0] = [-5.0,5.0]
    # sqrRev [0X1.47AE147AE147BP-7,0X1.47AE147AE147CP-7] = [-0X1.999999999999BP-4,0X1.999999999999BP-4]
    # sqrRev [0.0,0X1.FFFFFFFFFFFE1P+1] = [-0x1.ffffffffffff1p+0,0x1.ffffffffffff1p+0]
end

@testset "minimal_sqr_rev_bin_test" begin
    # sqrRevBin [empty] [-5.0,1.0] = [empty]
    # sqrRevBin [-10.0,-1.0] [-5.0,1.0] = [empty]
    # sqrRevBin [0.0,infinity] [-5.0,1.0] = [-5.0,1.0]
    # sqrRevBin [0.0,1.0] [-0.1,1.0] = [-0.1,1.0]
    # sqrRevBin [-0.5,1.0] [-0.1,1.0] = [-0.1,1.0]
    # sqrRevBin [-1000.0,1.0] [-0.1,1.0] = [-0.1,1.0]
    # sqrRevBin [0.0,25.0] [-4.1,6.0] = [-4.1,5.0]
    # sqrRevBin [-1.0,25.0] [-4.1,7.0] = [-4.1,5.0]
    # sqrRevBin [1.0,25.0] [0.0,7.0] = [1.0,5.0]
    # sqrRevBin [0X1.47AE147AE147BP-7,0X1.47AE147AE147CP-7] [-0.1,infinity] = [-0.1,0X1.999999999999BP-4]
    # sqrRevBin [0.0,0X1.FFFFFFFFFFFE1P+1] [-0.1,infinity] = [-0.1,0x1.ffffffffffff1p+0]
end

@testset "minimal_abs_rev_test" begin
    # absRev [empty] = [empty]
    # absRev [-1.1,-0.4] = [empty]
    # absRev [0.0,infinity] = [entire]
    # absRev [1.1,2.1] = [-2.1,2.1]
    # absRev [-1.1,2.0] = [-2.0,2.0]
    # absRev [-1.1,0.0] = [0.0,0.0]
    # absRev [-1.9,0.2] = [-0.2,0.2]
    # absRev [0.0,0.2] = [-0.2,0.2]
    # absRev [-1.5,infinity] = [entire]
end

@testset "minimal_abs_rev_bin_test" begin
    # absRevBin [empty] [-1.1,5.0] = [empty]
    # absRevBin [-1.1,-0.4] [-1.1,5.0] = [empty]
    # absRevBin [0.0,infinity] [-1.1,5.0] = [-1.1,5.0]
    # absRevBin [1.1,2.1] [-1.0,5.0] = [1.1,2.1]
    # absRevBin [-1.1,2.0] [-1.1,5.0] = [-1.1,2.0]
    # absRevBin [-1.1,0.0] [-1.1,5.0] = [0.0,0.0]
    # absRevBin [-1.9,0.2] [-1.1,5.0] = [-0.2,0.2]
end

@testset "minimal_pown_rev_test" begin
    # pownRev [empty] 0 = [empty]
    # pownRev [1.0,1.0] 0 = [entire]
    # pownRev [-1.0,5.0] 0 = [entire]
    # pownRev [-1.0,0.0] 0 = [empty]
    # pownRev [-1.0,-0.0] 0 = [empty]
    # pownRev [1.1,10.0] 0 = [empty]
    # pownRev [empty] 1 = [empty]
    # pownRev [entire] 1 = [entire]
    # pownRev [0.0,0.0] 1 = [0.0,0.0]
    # pownRev [-0.0,-0.0] 1 = [0.0,0.0]
    # pownRev [13.1,13.1] 1 = [13.1,13.1]
    # pownRev [-7451.145,-7451.145] 1 = [-7451.145,-7451.145]
    # pownRev [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023] 1 = [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023]
    # pownRev [-0x1.FFFFFFFFFFFFFp1023,-0x1.FFFFFFFFFFFFFp1023] 1 = [-0x1.FFFFFFFFFFFFFp1023,-0x1.FFFFFFFFFFFFFp1023]
    # pownRev [0.0,infinity] 1 = [0.0,infinity]
    # pownRev [-0.0,infinity] 1 = [0.0,infinity]
    # pownRev [-infinity,0.0] 1 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] 1 = [-infinity,0.0]
    # pownRev [-324.3,2.5] 1 = [-324.3,2.5]
    # pownRev [0.01,2.33] 1 = [0.01,2.33]
    # pownRev [-1.9,-0.33] 1 = [-1.9,-0.33]
    # pownRev [empty] 2 = [empty]
    # pownRev [-5.0,-1.0] 2 = [empty]
    # pownRev [0.0,infinity] 2 = [entire]
    # pownRev [-0.0,infinity] 2 = [entire]
    # pownRev [0.0,0.0] 2 = [0.0,0.0]
    # pownRev [-0.0,-0.0] 2 = [0.0,0.0]
    # pownRev [0X1.573851EB851EBP+7,0X1.573851EB851ECP+7] 2 = [-0x1.a333333333334p+3,0x1.a333333333334p+3]
    # pownRev [0X1.A794A4E7CFAADP+25,0X1.A794A4E7CFAAEP+25] 2 = [-0x1.d1b251eb851edp+12,0x1.d1b251eb851edp+12]
    # pownRev [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023] 2 = [-0x1p+512,0x1p+512]
    # pownRev [0.0,0X1.9AD27D70A3D72P+16] 2 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [-0.0,0X1.9AD27D70A3D72P+16] 2 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [0X1.A36E2EB1C432CP-14,0X1.5B7318FC50482P+2] 2 = [-0x1.2a3d70a3d70a5p+1,0x1.2a3d70a3d70a5p+1]
    # pownRev [0X1.BE0DED288CE7P-4,0X1.CE147AE147AE1P+1] 2 = [-0x1.e666666666667p+0,0x1.e666666666667p+0]
    # pownRev [empty] 8 = [empty]
    # pownRev [entire] 8 = [entire]
    # pownRev [0.0,infinity] 8 = [entire]
    # pownRev [-0.0,infinity] 8 = [entire]
    # pownRev [0.0,0.0] 8 = [0.0,0.0]
    # pownRev [-0.0,-0.0] 8 = [0.0,0.0]
    # pownRev [0X1.9D8FD495853F5P+29,0X1.9D8FD495853F6P+29] 8 = [-0x1.a333333333334p+3,0x1.a333333333334p+3]
    # pownRev [0X1.DFB1BB622E70DP+102,0X1.DFB1BB622E70EP+102] 8 = [-0x1.d1b251eb851edp+12,0x1.d1b251eb851edp+12]
    # pownRev [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023] 8 = [-0x1p+128,0x1p+128]
    # pownRev [0.0,0X1.A87587109655P+66] 8 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [-0.0,0X1.A87587109655P+66] 8 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [0X1.CD2B297D889BDP-54,0X1.B253D9F33CE4DP+9] 8 = [-0x1.2a3d70a3d70a5p+1,0x1.2a3d70a3d70a5p+1]
    # pownRev [0X1.26F1FCDD502A3P-13,0X1.53ABD7BFC4FC6P+7] 8 = [-0x1.e666666666667p+0,0x1.e666666666667p+0]
    # pownRev [empty] 3 = [empty]
    # pownRev [entire] 3 = [entire]
    # pownRev [0.0,0.0] 3 = [0.0,0.0]
    # pownRev [-0.0,-0.0] 3 = [0.0,0.0]
    # pownRev [0X1.1902E978D4FDEP+11,0X1.1902E978D4FDFP+11] 3 = [0x1.a333333333332p+3,0x1.a333333333334p+3]
    # pownRev [-0X1.81460637B9A3DP+38,-0X1.81460637B9A3CP+38] 3 = [-0x1.d1b251eb851edp+12,-0x1.d1b251eb851ebp+12]
    # pownRev [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023] 3 = [0x1.428a2f98d728ap+341,0x1.428a2f98d728bp+341]
    # pownRev [-0x1.FFFFFFFFFFFFFp1023,-0x1.FFFFFFFFFFFFFp1023] 3 = [-0x1.428a2f98d728bp+341, -0x1.428a2f98d728ap+341]
    # pownRev [0.0,infinity] 3 = [0.0,infinity]
    # pownRev [-0.0,infinity] 3 = [0.0,infinity]
    # pownRev [-infinity,0.0] 3 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] 3 = [-infinity,0.0]
    # pownRev [-0X1.0436D2F418938P+25,0X1.F4P+3] 3 = [-0x1.444cccccccccep+8,0x1.4p+1]
    # pownRev [0X1.0C6F7A0B5ED8DP-20,0X1.94C75E6362A6P+3] 3 = [0x1.47ae147ae147ap-7,0x1.2a3d70a3d70a5p+1]
    # pownRev [-0X1.B6F9DB22D0E55P+2,-0X1.266559F6EC5B1P-5] 3 = [-0x1.e666666666667p+0,-0x1.51eb851eb851ep-2]
    # pownRev [empty] 7 = [empty]
    # pownRev [entire] 7 = [entire]
    # pownRev [0.0,0.0] 7 = [0.0,0.0]
    # pownRev [-0.0,-0.0] 7 = [0.0,0.0]
    # pownRev [0X1.F91D1B185493BP+25,0X1.F91D1B185493CP+25] 7 = [0x1.a333333333332p+3,0x1.a333333333334p+3]
    # pownRev [-0X1.07B1DA32F9B59P+90,-0X1.07B1DA32F9B58P+90] 7 = [-0x1.d1b251eb851edp+12,-0x1.d1b251eb851ebp+12]
    # pownRev [0x1.FFFFFFFFFFFFFp1023,0x1.FFFFFFFFFFFFFp1023] 7 = [0x1.381147622f886p+146,0x1.381147622f887p+146]
    # pownRev [-0x1.FFFFFFFFFFFFFp1023,-0x1.FFFFFFFFFFFFFp1023] 7 = [-0x1.381147622f887p+146,-0x1.381147622f886p+146]
    # pownRev [0.0,infinity] 7 = [0.0,infinity]
    # pownRev [-0.0,infinity] 7 = [0.0,infinity]
    # pownRev [-infinity,0.0] 7 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] 7 = [-infinity,0.0]
    # pownRev [-0X1.4F109959E6D7FP+58,0X1.312DP+9] 7 = [-0x1.444cccccccccep+8,0x1.4p+1]
    # pownRev [0X1.6849B86A12B9BP-47,0X1.74D0373C76313P+8] 7 = [0x1.47ae147ae147ap-7,0x1.2a3d70a3d70a5p+1]
    # pownRev [-0X1.658C775099757P+6,-0X1.BEE30301BF47AP-12] 7 = [-0x1.e666666666667p+0,-0x1.51eb851eb851ep-2]
    # pownRev [empty] -2 = [empty]
    # pownRev [0.0,infinity] -2 = [entire]
    # pownRev [-0.0,infinity] -2 = [entire]
    # pownRev [0.0,0.0] -2 = [empty]
    # pownRev [-0.0,-0.0] -2 = [empty]
    # pownRev [-10.0,0.0] -2 = [empty]
    # pownRev [-10.0,-0.0] -2 = [empty]
    # pownRev [0X1.7DE3A077D1568P-8,0X1.7DE3A077D1569P-8] -2 = [-0x1.a333333333334p+3,0x1.a333333333334p+3]
    # pownRev [0X1.3570290CD6E14P-26,0X1.3570290CD6E15P-26] -2 = [-0x1.d1b251eb851edp+12,0x1.d1b251eb851edp+12]
    # pownRev [0X0P+0,0X0.0000000000001P-1022] -2 = [entire]
    # pownRev [0X1.3F0C482C977C9P-17,infinity] -2 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [0X1.793D85EF38E47P-3,0X1.388P+13] -2 = [-0x1.2a3d70a3d70a5p+1,0x1.2a3d70a3d70a5p+1]
    # pownRev [0X1.1BA81104F6C8P-2,0X1.25D8FA1F801E1P+3] -2 = [-0x1.e666666666667p+0,0x1.e666666666667p+0]
    # pownRev [empty] -8 = [empty]
    # pownRev [0.0,infinity] -8 = [entire]
    # pownRev [-0.0,infinity] -8 = [entire]
    # pownRev [0.0,0.0] -8 = [empty]
    # pownRev [-0.0,-0.0] -8 = [empty]
    # pownRev [0X1.3CEF39247CA6DP-30,0X1.3CEF39247CA6EP-30] -8 = [-0x1.a333333333334p+3,0x1.a333333333334p+3]
    # pownRev [0X1.113D9EF0A99ACP-103,0X1.113D9EF0A99ADP-103] -8 = [-0x1.d1b251eb851edp+12,0x1.d1b251eb851edp+12]
    # pownRev [0X0P+0,0X0.0000000000001P-1022] -8 = [entire]
    # pownRev [0X1.34CC3764D1E0CP-67,infinity] -8 = [-0x1.444cccccccccep+8,0x1.444cccccccccep+8]
    # pownRev [0X1.2DC80DB11AB7CP-10,0X1.1C37937E08P+53] -8 = [-0x1.2a3d70a3d70a5p+1,0x1.2a3d70a3d70a5p+1]
    # pownRev [0X1.81E104E61630DP-8,0X1.BC64F21560E34P+12] -8 = [-0x1.e666666666667p+0,0x1.e666666666667p+0]
    # pownRev [empty] -1 = [empty]
    # pownRev [entire] -1 = [entire]
    # pownRev [0.0,0.0] -1 = [empty]
    # pownRev [-0.0,-0.0] -1 = [empty]
    # pownRev [0X1.38ABF82EE6986P-4,0X1.38ABF82EE6987P-4] -1 = [0x1.a333333333332p+3,0x1.a333333333335p+3]
    # pownRev [-0X1.197422C9048BFP-13,-0X1.197422C9048BEP-13] -1 = [-0x1.d1b251eb851eep+12,-0x1.d1b251eb851ebp+12]
    # pownRev [0X0.4P-1022,0X0.4000000000001P-1022] -1 = [0x1.ffffffffffff8p+1023,infinity]
    # pownRev [-0X0.4000000000001P-1022,-0X0.4P-1022] -1 = [-infinity,-0x1.ffffffffffff8p+1023]
    # pownRev [0.0,infinity] -1 = [0.0,infinity]
    # pownRev [-0.0,infinity] -1 = [0.0,infinity]
    # pownRev [-infinity,0.0] -1 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] -1 = [-infinity,0.0]
    # pownRev [0X1.B77C278DBBE13P-2,0X1.9P+6] -1 = [0x1.47ae147ae147ap-7,0x1.2a3d70a3d70a5p+1]
    # pownRev [-0X1.83E0F83E0F83EP+1,-0X1.0D79435E50D79P-1] -1 = [-0x1.e666666666667p+0,-0x1.51eb851eb851ep-2]
    # pownRev [empty] -3 = [empty]
    # pownRev [entire] -3 = [entire]
    # pownRev [0.0,0.0] -3 = [empty]
    # pownRev [-0.0,-0.0] -3 = [empty]
    # pownRev [0X1.D26DF4D8B1831P-12,0X1.D26DF4D8B1832P-12] -3 = [0x1.a333333333332p+3,0x1.a333333333334p+3]
    # pownRev [-0X1.54347DED91B19P-39,-0X1.54347DED91B18P-39] -3 = [-0x1.d1b251eb851edp+12,-0x1.d1b251eb851ebp+12]
    # pownRev [0X0P+0,0X0.0000000000001P-1022] -3 = [0x1p+358,infinity]
    # pownRev [-0X0.0000000000001P-1022,-0X0P+0] -3 = [-infinity,-0x1p+358]
    # pownRev [0.0,infinity] -3 = [0.0,infinity]
    # pownRev [-0.0,infinity] -3 = [0.0,infinity]
    # pownRev [-infinity,0.0] -3 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] -3 = [-infinity,0.0]
    # pownRev [0X1.43CFBA61AACABP-4,0X1.E848P+19] -3 = [0x1.47ae147ae147ap-7,0x1.2a3d70a3d70a5p+1]
    # pownRev [-0X1.BD393CE9E8E7CP+4,-0X1.2A95F6F7C066CP-3] -3 = [-0x1.e666666666667p+0,-0x1.51eb851eb851ep-2]
    # pownRev [empty] -7 = [empty]
    # pownRev [entire] -7 = [entire]
    # pownRev [0.0,0.0] -7 = [empty]
    # pownRev [-0.0,-0.0] -7 = [empty]
    # pownRev [0X1.037D76C912DBCP-26,0X1.037D76C912DBDP-26] -7 = [0x1.a333333333332p+3,0x1.a333333333334p+3]
    # pownRev [-0X1.F10F41FB8858FP-91,-0X1.F10F41FB8858EP-91] -7 = [-0x1.d1b251eb851edp+12,-0x1.d1b251eb851ebp+12]
    # pownRev [0X0P+0,0X0.0000000000001P-1022] -7 = [0x1.588cea3f093bcp+153,infinity]
    # pownRev [-0X0.0000000000001P-1022,-0X0P+0] -7 = [-infinity,-0x1.588cea3f093bcp+153]
    # pownRev [0.0,infinity] -7 = [0.0,infinity]
    # pownRev [-0.0,infinity] -7 = [0.0,infinity]
    # pownRev [-infinity,0.0] -7 = [-infinity,0.0]
    # pownRev [-infinity,-0.0] -7 = [-infinity,0.0]
    # pownRev [0X1.5F934D64162A9P-9,0X1.6BCC41E9P+46] -7 = [0x1.47ae147ae147ap-7,0x1.2a3d70a3d70a5p+1]
    # pownRev [-0X1.254CDD3711DDBP+11,-0X1.6E95C4A761E19P-7] -7 = [-0x1.e666666666667p+0,-0x1.51eb851eb851ep-2]
end

@testset "minimal_pown_rev_bin_test" begin
    # pownRevBin [empty] [1.0,1.0] 0 = [empty]
    # pownRevBin [1.0,1.0] [1.0,1.0] 0 = [1.0,1.0]
    # pownRevBin [-1.0,5.0] [-51.0,12.0] 0 = [-51.0,12.0]
    # pownRevBin [-1.0,0.0] [5.0,10.0] 0 = [empty]
    # pownRevBin [-1.0,-0.0] [-1.0,1.0] 0 = [empty]
    # pownRevBin [1.1,10.0] [1.0,41.0] 0 = [empty]
    # pownRevBin [empty] [0.0,100.1] 1 = [empty]
    # pownRevBin [entire] [-5.1,10.0] 1 = [-5.1,10.0]
    # pownRevBin [0.0,0.0] [-10.0,5.1] 1 = [0.0,0.0]
    # pownRevBin [-0.0,-0.0] [1.0,5.0] 1 = [empty]
    # pownRevBin [empty] [5.0,17.1] 2 = [empty]
    # pownRevBin [-5.0,-1.0] [5.0,17.1] 2 = [empty]
    # pownRevBin [0.0,infinity] [5.6,27.544] 2 = [5.6,27.544]
    # pownRevBin [0.0,0.0] [1.0,2.0] 2 = [empty]
    # pownRevBin [0X1.A36E2EB1C432CP-14,0X1.5B7318FC50482P+2] [1.0,infinity] 2 = [1.0,0x1.2a3d70a3d70a5p+1]
    # pownRevBin [0X1.BE0DED288CE7P-4,0X1.CE147AE147AE1P+1] [-infinity,-1.0] 2 = [-0x1.e666666666667p+0,-1.0]
    # pownRevBin [empty] [-23.0,-1.0] 3 = [empty]
    # pownRevBin [entire] [-23.0,-1.0] 3 = [-23.0,-1.0]
    # pownRevBin [0.0,0.0] [1.0,2.0] 3 = [empty]
    # pownRevBin [0X1.0C6F7A0B5ED8DP-20,0X1.94C75E6362A6P+3] [1.0,infinity] 3 = [1.0,0x1.2a3d70a3d70a5p+1]
    # pownRevBin [-0X1.B6F9DB22D0E55P+2,-0X1.266559F6EC5B1P-5] [-infinity,-1.0] 3 = [-0x1.e666666666667p+0,-1.0]
    # pownRevBin [empty] [-3.0,17.3] -2 = [empty]
    # pownRevBin [0.0,infinity] [-5.1,-0.1] -2 = [-5.1,-0.1]
    # pownRevBin [0.0,0.0] [27.2,55.1] -2 = [empty]
    # pownRevBin [0X1.3F0C482C977C9P-17,infinity] [-infinity,-0x1.FFFFFFFFFFFFFp1023] -2 = [empty]
    # pownRevBin [0X1.793D85EF38E47P-3,0X1.388P+13] [1.0,infinity] -2 = [1.0,0x1.2a3d70a3d70a5p+1]
    # pownRevBin [0X1.1BA81104F6C8P-2,0X1.25D8FA1F801E1P+3] [-infinity,-1.0] -2 = [-0x1.e666666666667p+0,-1.0]
    # pownRevBin [empty] [-5.1,55.5] -1 = [empty]
    # pownRevBin [entire] [-5.1,55.5] -1 = [-5.1,55.5]
    # pownRevBin [0.0,0.0] [-5.1,55.5] -1 = [empty]
    # pownRevBin [-infinity,-0.0] [-1.0,1.0] -1 = [-1.0,0.0]
    # pownRevBin [0X1.B77C278DBBE13P-2,0X1.9P+6] [-1.0,0.0] -1 = [empty]
    # pownRevBin [empty] [-5.1,55.5] -3 = [empty]
    # pownRevBin [entire] [-5.1,55.5] -3 = [-5.1,55.5]
    # pownRevBin [0.0,0.0] [-5.1,55.5] -3 = [empty]
    # pownRevBin [-infinity,0.0] [5.1,55.5] -3 = [empty]
    # pownRevBin [-infinity,-0.0] [-32.0,1.1] -3 = [-32.0,0.0]
end

@testset "minimal_sin_rev_test" begin
    # sinRev [empty] = [empty]
    # sinRev [-2.0,-1.1] = [empty]
    # sinRev [1.1, 2.0] = [empty]
    # sinRev [-1.0,1.0] = [entire]
    # sinRev [0.0,0.0] = [entire]
    # sinRev [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] = [entire]
end

@testset "minimal_sin_rev_bin_test" begin
    # sinRevBin [empty] [-1.2,12.1] = [empty]
    # sinRevBin [-2.0,-1.1] [-5.0, 5.0] = [empty]
    # sinRevBin [1.1, 2.0] [-5.0, 5.0] = [empty]
    # sinRevBin [-1.0,1.0] [-1.2,12.1] = [-1.2,12.1]
    # sinRevBin [0.0,0.0] [-1.0,1.0] = [0.0,0.0]
    # sinRevBin [-0.0,-0.0] [2.0,2.5] = [empty]
    # sinRevBin [-0.0,-0.0] [3.0,3.5] = [0x1.921fb54442d18p+1,0x1.921fb54442d19p+1]
    # sinRevBin [0X1.FFFFFFFFFFFFFP-1,0X1P+0] [1.57,1.58 ] = [0x1.921fb50442d18p+0,0x1.921fb58442d1ap+0]
    # sinRevBin [0.0,0X1P+0] [-0.1,1.58] = [0.0,1.58]
    # sinRevBin [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] [3.14,3.15] = [0X1.921FB54442D17P+1,0X1.921FB54442D19P+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,-0X1.72CECE675D1FCP-52] [3.14,3.15] = [0X1.921FB54442D18P+1,0X1.921FB54442D1aP+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,0X1.1A62633145C07P-53] [3.14,3.15] = [0X1.921FB54442D17P+1,0X1.921FB54442D1aP+1]
    # sinRevBin [0.0,1.0] [-0.1,3.15] = [0.0,0X1.921FB54442D19P+1]
    # sinRevBin [0.0,1.0] [-0.1,3.15] = [-0.0,0X1.921FB54442D19P+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,1.0] [-0.1,3.15] = [-0x1.72cece675d1fep-52,0X1.921FB54442D1aP+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,1.0] [0.0,3.15] = [0.0,0X1.921FB54442D1aP+1]
    # sinRevBin [0X1.1A62633145C06P-53,0X1P+0] [3.14,3.15] = [3.14,0X1.921FB54442D19P+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,0X1P+0] [1.57,3.15] = [1.57,0X1.921FB54442D1AP+1]
    # sinRevBin [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] [-infinity,3.15] = [-infinity,0X1.921FB54442D19P+1]
    # sinRevBin [-0X1.72CECE675D1FDP-52,-0X1.72CECE675D1FCP-52] [3.14,infinity] = [0X1.921FB54442D18P+1,infinity]
end

@testset "minimal_cos_rev_test" begin
    # cosRev [empty] = [empty]
    # cosRev [-2.0,-1.1] = [empty]
    # cosRev [1.1, 2.0] = [empty]
    # cosRev [-1.0,1.0] = [entire]
    # cosRev [0.0,0.0] = [entire]
    # cosRev [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] = [entire]
end

@testset "minimal_cos_rev_bin_test" begin
    # cosRevBin [empty] [-1.2,12.1] = [empty]
    # cosRevBin [-2.0,-1.1] [-5.0, 5.0] = [empty]
    # cosRevBin [1.1, 2.0] [-5.0, 5.0] = [empty]
    # cosRevBin [-1.0,1.0] [-1.2,12.1] = [-1.2,12.1]
    # cosRevBin [1.0,1.0] [-0.1,0.1] = [0.0,0.0]
    # cosRevBin [-1.0,-1.0] [3.14,3.15] = [0x1.921fb54442d18p+1,0x1.921fb54442d1ap+1]
    # cosRevBin [0X1.1A62633145C06P-54,0X1.1A62633145C07P-54] [1.57,1.58] = [0X1.921FB54442D17P+0,0X1.921FB54442D19P+0]
    # cosRevBin [-0X1.72CECE675D1FDP-53,-0X1.72CECE675D1FCP-53] [1.57,1.58] = [0X1.921FB54442D18P+0,0X1.921FB54442D1AP+0]
    # cosRevBin [-0X1.72CECE675D1FDP-53,0X1.1A62633145C07P-54] [1.57,1.58] = [0X1.921FB54442D17P+0,0X1.921FB54442D1aP+0]
    # cosRevBin [0X1.1A62633145C06P-54,1.0] [-2.0,2.0] = [-0X1.921FB54442D19P+0, 0X1.921FB54442D19P+0]
    # cosRevBin [0X1.1A62633145C06P-54,1.0] [0.0,2.0] = [0.0,0X1.921FB54442D19P+0]
    # cosRevBin [-0X1.72CECE675D1FDP-53,1.0] [-0.1,1.5708] = [-0.1,0X1.921FB54442D1aP+0]
    # cosRevBin [-0X1P+0,-0X1.FFFFFFFFFFFFFP-1] [3.14,3.15] = [0x1.921fb52442d18p+1,0x1.921fb56442d1ap+1]
    # cosRevBin [-0X1P+0,-0X1.FFFFFFFFFFFFFP-1] [-3.15,-3.14] = [-0x1.921fb56442d1ap+1,-0x1.921fb52442d18p+1]
    # cosRevBin [-0X1P+0,-0X1.FFFFFFFFFFFFFP-1] [9.42,9.45] = [0x1.2d97c7eb321d2p+3,0x1.2d97c7fb321d3p+3]
    # cosRevBin [0X1.87996529F9D92P-1,1.0] [-1.0,0.1] = [-0x1.6666666666667p-1,0.1]
    # cosRevBin [-0X1.AA22657537205P-2,0X1.14A280FB5068CP-1] [0.0,2.1] = [0x1.fffffffffffffp-1,0x1.0000000000001p+1]
    # cosRevBin [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] [-infinity,1.58] = [-infinity,0X1.921FB54442D18P+0]
    # cosRevBin [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] [-infinity,1.5] = [-infinity,-0X1.921FB54442D17P+0]
    # cosRevBin [-0X1.72CECE675D1FDP-52,-0X1.72CECE675D1FCP-52] [-1.58,infinity] = [-0x1.921fb54442d1ap+0,infinity]
    # cosRevBin [-0X1.72CECE675D1FDP-52,-0X1.72CECE675D1FCP-52] [-1.5,infinity] = [0x1.921fb54442d19p+0,infinity]
end

@testset "minimal_tan_rev_test" begin
    # tanRev [empty] = [empty]
    # tanRev [-1.0,1.0] = [entire]
    # tanRev [-156.0,-12.0] = [entire]
    # tanRev [0.0,0.0] = [entire]
    # tanRev [0X1.1A62633145C06P-53,0X1.1A62633145C07P-53] = [entire]
end

@testset "minimal_tan_rev_bin_test" begin
    # tanRevBin [empty] [-1.5708,1.5708] = [empty]
    # tanRevBin [entire] [-1.5708,1.5708] = [-1.5708,1.5708]
    # tanRevBin [0.0,0.0] [-1.5708,1.5708] = [0.0,0.0]
    # tanRevBin [0X1.D02967C31CDB4P+53,0X1.D02967C31CDB5P+53] [-1.5708,1.5708] = [-0x1.921fb54442d1bp+0,0x1.921fb54442d19p+0]
    # tanRevBin [-0X1.1A62633145C07P-53,-0X1.1A62633145C06P-53] [3.14,3.15] = [0X1.921FB54442D17P+1,0X1.921FB54442D19P+1]
    # tanRevBin [0X1.72CECE675D1FCP-52,0X1.72CECE675D1FDP-52] [-3.15,3.15] = [-0X1.921FB54442D19P+1,0X1.921FB54442D1aP+1]
    # tanRevBin [-0X1.D02967C31p+53,0X1.D02967C31p+53] [-infinity,1.5707965] = [-infinity, +0x1.921FB82C2BD7Fp0]
    # tanRevBin [-0X1.D02967C31p+53,0X1.D02967C31p+53] [-1.5707965,infinity] = [-0x1.921FB82C2BD7Fp0, +infinity]
    # tanRevBin [-0X1.D02967C31p+53,0X1.D02967C31p+53] [-1.5707965,1.5707965] = [-0x1.921FB82C2BD7Fp0, +0x1.921FB82C2BD7Fp0]
    # tanRevBin [-0X1.D02967C31CDB5P+53,0X1.D02967C31CDB5P+53] [-1.5707965,1.5707965] = [-1.5707965,1.5707965]
end

@testset "minimal_cosh_rev_test" begin
    # coshRev [empty] = [empty]
    # coshRev [1.0,infinity] = [entire]
    # coshRev [0.0,infinity] = [entire]
    # coshRev [1.0,1.0] = [0.0,0.0]
    # coshRev [0X1.8B07551D9F55P+0,0X1.89BCA168970C6P+432] = [-0X1.2C903022DD7ABP+8,0X1.2C903022DD7ABP+8]
end

@testset "minimal_cosh_rev_bin_test" begin
    # coshRevBin [empty] [0.0,infinity] = [empty]
    # coshRevBin [1.0,infinity] [0.0,infinity] = [0.0,infinity]
    # coshRevBin [0.0,infinity] [1.0,2.0] = [1.0,2.0]
    # coshRevBin [1.0,1.0] [1.0,infinity] = [empty]
    # coshRevBin [0X1.8B07551D9F55P+0,0X1.89BCA168970C6P+432] [-infinity,0.0] = [-0X1.2C903022DD7ABP+8,-0x1.fffffffffffffp-1]
end

@testset "minimal_mul_rev_test" begin
    # mulRev [empty] [1.0, 2.0] = [empty]
    # mulRev [1.0, 2.0] [empty] = [empty]
    # mulRev [empty] [empty] = [empty]
    # mulRev [-2.0, -0.1] [-2.1, -0.4]  = [0X1.999999999999AP-3, 0X1.5P+4]
    # mulRev [-2.0, 0.0] [-2.1, -0.4]  = [0X1.999999999999AP-3, infinity]
    # mulRev [-2.0, 1.1] [-2.1, -0.4]  = [entire]
    # mulRev [0.0, 1.1] [-2.1, -0.4]  = [-infinity, -0X1.745D1745D1745P-2]
    # mulRev [0.01, 1.1] [-2.1, -0.4]  = [-0X1.A400000000001P+7, -0X1.745D1745D1745P-2]
    # mulRev [0.0, 0.0] [-2.1, -0.4] = [empty]
    # mulRev [-infinity, -0.1] [-2.1, -0.4]  = [0.0, 0X1.5P+4]
    # mulRev [-infinity, 0.0] [-2.1, -0.4]  = [0.0, infinity]
    # mulRev [-infinity, 1.1] [-2.1, -0.4]  = [entire]
    # mulRev [-2.0, infinity] [-2.1, -0.4]  = [entire]
    # mulRev [0.0, infinity] [-2.1, -0.4]  = [-infinity, 0.0]
    # mulRev [0.01, infinity] [-2.1, -0.4]  = [-0X1.A400000000001P+7, 0.0]
    # mulRev [entire] [-2.1, -0.4]  = [entire]
    # mulRev [-2.0, -0.1] [-2.1, 0.0]  = [0.0, 0X1.5P+4]
    # mulRev [-2.0, 0.0] [-2.1, 0.0]  = [entire]
    # mulRev [-2.0, 1.1] [-2.1, 0.0]  = [entire]
    # mulRev [0.0, 1.1] [-2.1, 0.0]  = [entire]
    # mulRev [0.01, 1.1] [-2.1, 0.0]  = [-0X1.A400000000001P+7, 0.0]
    # mulRev [0.0, 0.0] [-2.1, 0.0]  = [entire]
    # mulRev [-infinity, -0.1] [-2.1, 0.0]  = [0.0, 0X1.5P+4]
    # mulRev [-infinity, 0.0] [-2.1, 0.0]  = [entire]
    # mulRev [-infinity, 1.1] [-2.1, 0.0]  = [entire]
    # mulRev [-2.0, infinity] [-2.1, 0.0]  = [entire]
    # mulRev [0.0, infinity] [-2.1, 0.0]  = [entire]
    # mulRev [0.01, infinity] [-2.1, 0.0]  = [-0X1.A400000000001P+7, 0.0]
    # mulRev [entire] [-2.1, 0.0]  = [entire]
    # mulRev [-2.0, -0.1] [-2.1, 0.12]  = [-0X1.3333333333333P+0, 0X1.5P+4]
    # mulRev [-2.0, 0.0] [-2.1, 0.12]  = [entire]
    # mulRev [-2.0, 1.1] [-2.1, 0.12]  = [entire]
    # mulRev [0.0, 1.1] [-2.1, 0.12]  = [entire]
    # mulRev [0.01, 1.1] [-2.1, 0.12]  = [-0X1.A400000000001P+7 , 0X1.8P+3]
    # mulRev [0.0, 0.0] [-2.1, 0.12]  = [entire]
    # mulRev [-infinity, -0.1] [-2.1, 0.12]  = [-0X1.3333333333333P+0, 0X1.5P+4]
    # mulRev [-infinity, 0.0] [-2.1, 0.12]  = [entire]
    # mulRev [-infinity, 1.1] [-2.1, 0.12]  = [entire]
    # mulRev [-2.0, infinity] [-2.1, 0.12]  = [entire]
    # mulRev [0.0, infinity] [-2.1, 0.12]  = [entire]
    # mulRev [0.01, infinity] [-2.1, 0.12]  = [-0X1.A400000000001P+7 , 0X1.8P+3]
    # mulRev [entire] [-2.1, 0.12]  = [entire]
    # mulRev [-2.0, -0.1] [0.0, 0.12]  = [-0X1.3333333333333P+0, 0.0]
    # mulRev [-2.0, 0.0] [0.0, 0.12]  = [entire]
    # mulRev [-2.0, 1.1] [0.0, 0.12]  = [entire]
    # mulRev [0.0, 1.1] [0.0, 0.12]  = [entire]
    # mulRev [0.01, 1.1] [0.0, 0.12]  = [0.0, 0X1.8P+3]
    # mulRev [0.0, 0.0] [0.0, 0.12]  = [entire]
    # mulRev [-infinity, -0.1] [0.0, 0.12]  = [-0X1.3333333333333P+0, 0.0]
    # mulRev [-infinity, 0.0] [0.0, 0.12]  = [entire]
    # mulRev [-infinity, 1.1] [0.0, 0.12]  = [entire]
    # mulRev [-2.0, infinity] [0.0, 0.12]  = [entire]
    # mulRev [0.0, infinity] [0.0, 0.12]  = [entire]
    # mulRev [0.01, infinity] [0.0, 0.12]  = [0.0, 0X1.8P+3]
    # mulRev [entire] [0.0, 0.12]  = [entire]
    # mulRev [-2.0, -0.1] [0.01, 0.12]  = [-0X1.3333333333333P+0, -0X1.47AE147AE147BP-8]
    # mulRev [-2.0, 0.0] [0.01, 0.12]  = [-infinity, -0X1.47AE147AE147BP-8]
    # mulRev [-2.0, 1.1] [0.01, 0.12]  = [entire]
    # mulRev [0.0, 1.1] [0.01, 0.12]  = [0X1.29E4129E4129DP-7, infinity]
    # mulRev [0.01, 1.1] [0.01, 0.12]  = [0X1.29E4129E4129DP-7, 0X1.8P+3]
    # mulRev [0.0, 0.0] [0.01, 0.12] = [empty]
    # mulRev [-infinity, -0.1] [0.01, 0.12]  = [-0X1.3333333333333P+0, 0.0]
    # mulRev [-infinity, 0.0] [0.01, 0.12]  = [-infinity, 0.0]
    # mulRev [-infinity, 1.1] [0.01, 0.12]  = [entire]
    # mulRev [-2.0, infinity] [0.01, 0.12]  = [entire]
    # mulRev [0.0, infinity] [0.01, 0.12]  = [0.0, infinity]
    # mulRev [0.01, infinity] [0.01, 0.12]  = [0.0, 0X1.8P+3]
    # mulRev [entire] [0.01, 0.12]  = [entire]
    # mulRev [-2.0, -0.1] [0.0, 0.0]  = [0.0, 0.0]
    # mulRev [-2.0, 0.0] [0.0, 0.0]  = [entire]
    # mulRev [-2.0, 1.1] [0.0, 0.0]  = [entire]
    # mulRev [0.0, 1.1] [0.0, 0.0]  = [entire]
    # mulRev [0.01, 1.1] [0.0, 0.0]  = [0.0, 0.0]
    # mulRev [0.0, 0.0] [0.0, 0.0]  = [entire]
    # mulRev [-infinity, -0.1] [0.0, 0.0]  = [0.0, 0.0]
    # mulRev [-infinity, 0.0] [0.0, 0.0]  = [entire]
    # mulRev [-infinity, 1.1] [0.0, 0.0]  = [entire]
    # mulRev [-2.0, infinity] [0.0, 0.0]  = [entire]
    # mulRev [0.0, infinity] [0.0, 0.0]  = [entire]
    # mulRev [0.01, infinity] [0.0, 0.0]  = [0.0, 0.0]
    # mulRev [entire] [0.0, 0.0]  = [entire]
    # mulRev [-2.0, -0.1] [-infinity, -0.1]  = [0X1.999999999999AP-5, infinity]
    # mulRev [-2.0, 0.0] [-infinity, -0.1]  = [0X1.999999999999AP-5 , infinity]
    # mulRev [-2.0, 1.1] [-infinity, -0.1]  = [entire]
    # mulRev [0.0, 1.1] [-infinity, -0.1]  = [-infinity, -0X1.745D1745D1745P-4]
    # mulRev [0.01, 1.1] [-infinity, -0.1]  = [-infinity, -0X1.745D1745D1745P-4]
    # mulRev [0.0, 0.0] [-infinity, -0.1] = [empty]
    # mulRev [-infinity, -0.1] [-infinity, -0.1]  = [0.0, infinity]
    # mulRev [-infinity, 0.0] [-infinity, -0.1]  = [0.0, infinity]
    # mulRev [-infinity, 1.1] [-infinity, -0.1]  = [entire]
    # mulRev [-2.0, infinity] [-infinity, -0.1]  = [entire]
    # mulRev [0.0, infinity] [-infinity, -0.1]  = [-infinity, 0.0]
    # mulRev [0.01, infinity] [-infinity, -0.1]  = [-infinity, 0.0]
    # mulRev [entire] [-infinity, -0.1]  = [entire]
    # mulRev [-2.0, -0.1] [-infinity, 0.0]  = [0.0, infinity]
    # mulRev [-2.0, 0.0] [-infinity, 0.0]  = [entire]
    # mulRev [-2.0, 1.1] [-infinity, 0.0]  = [entire]
    # mulRev [0.0, 1.1] [-infinity, 0.0]  = [entire]
    # mulRev [0.01, 1.1] [-infinity, 0.0]  = [-infinity, 0.0]
    # mulRev [0.0, 0.0] [-infinity, 0.0]  = [entire]
    # mulRev [-infinity, -0.1] [-infinity, 0.0]  = [0.0, infinity]
    # mulRev [-infinity, 0.0] [-infinity, 0.0]  = [entire]
    # mulRev [-infinity, 1.1] [-infinity, 0.0]  = [entire]
    # mulRev [-2.0, infinity] [-infinity, 0.0]  = [entire]
    # mulRev [0.0, infinity] [-infinity, 0.0]  = [entire]
    # mulRev [0.01, infinity] [-infinity, 0.0]  = [-infinity, 0.0]
    # mulRev [entire] [-infinity, 0.0]  = [entire]
    # mulRev [-2.0, -0.1] [-infinity, 0.3]  = [-0X1.8P+1, infinity]
    # mulRev [-2.0, 0.0] [-infinity, 0.3]  = [entire]
    # mulRev [-2.0, 1.1] [-infinity, 0.3]  = [entire]
    # mulRev [0.0, 1.1] [-infinity, 0.3]  = [entire]
    # mulRev [0.01, 1.1] [-infinity, 0.3]  = [-infinity, 0X1.EP+4]
    # mulRev [0.0, 0.0] [-infinity, 0.3]  = [entire]
    # mulRev [-infinity, -0.1] [-infinity, 0.3]  = [-0X1.8P+1, infinity]
    # mulRev [-infinity, 0.0] [-infinity, 0.3]  = [entire]
    # mulRev [-infinity, 1.1] [-infinity, 0.3]  = [entire]
    # mulRev [-2.0, infinity] [-infinity, 0.3]  = [entire]
    # mulRev [0.0, infinity] [-infinity, 0.3]  = [entire]
    # mulRev [0.01, infinity] [-infinity, 0.3]  = [-infinity, 0X1.EP+4]
    # mulRev [entire] [-infinity, 0.3]  = [entire]
    # mulRev [-2.0, -0.1] [-0.21, infinity]  = [-infinity , 0X1.0CCCCCCCCCCCDP+1]
    # mulRev [-2.0, 0.0] [-0.21, infinity]  = [entire]
    # mulRev [-2.0, 1.1] [-0.21, infinity]  = [entire]
    # mulRev [0.0, 1.1] [-0.21, infinity]  = [entire]
    # mulRev [0.01, 1.1] [-0.21, infinity]  = [-0X1.5P+4, infinity]
    # mulRev [0.0, 0.0] [-0.21, infinity]  = [entire]
    # mulRev [-infinity, -0.1] [-0.21, infinity]  = [-infinity, 0X1.0CCCCCCCCCCCDP+1]
    # mulRev [-infinity, 0.0] [-0.21, infinity]  = [entire]
    # mulRev [-infinity, 1.1] [-0.21, infinity]  = [entire]
    # mulRev [-2.0, infinity] [-0.21, infinity]  = [entire]
    # mulRev [0.0, infinity] [-0.21, infinity]  = [entire]
    # mulRev [0.01, infinity] [-0.21, infinity]  = [-0X1.5P+4, infinity]
    # mulRev [entire] [-0.21, infinity]  = [entire]
    # mulRev [-2.0, -0.1] [0.0, infinity]  = [-infinity, 0.0]
    # mulRev [-2.0, 0.0] [0.0, infinity]  = [entire]
    # mulRev [-2.0, 1.1] [0.0, infinity]  = [entire]
    # mulRev [0.0, 1.1] [0.0, infinity]  = [entire]
    # mulRev [0.01, 1.1] [0.0, infinity]  = [0.0, infinity]
    # mulRev [0.0, 0.0] [0.0, infinity]  = [entire]
    # mulRev [-infinity, -0.1] [0.0, infinity]  = [-infinity, 0.0]
    # mulRev [-infinity, 0.0] [0.0, infinity]  = [entire]
    # mulRev [-infinity, 1.1] [0.0, infinity]  = [entire]
    # mulRev [-2.0, infinity] [0.0, infinity]  = [entire]
    # mulRev [0.0, infinity] [0.0, infinity]  = [entire]
    # mulRev [0.01, infinity] [0.0, infinity]  = [0.0, infinity]
    # mulRev [entire] [0.0, infinity]  = [entire]
    # mulRev [-2.0, -0.1] [0.04, infinity]  = [-infinity, -0X1.47AE147AE147BP-6]
    # mulRev [-2.0, 0.0] [0.04, infinity]  = [-infinity, -0X1.47AE147AE147BP-6]
    # mulRev [-2.0, 1.1] [0.04, infinity]  = [entire]
    # mulRev [0.0, 1.1] [0.04, infinity]  = [0X1.29E4129E4129DP-5, infinity]
    # mulRev [0.01, 1.1] [0.04, infinity]  = [0X1.29E4129E4129DP-5, infinity]
    # mulRev [0.0, 0.0] [0.04, infinity] = [empty]
    # mulRev [-infinity, -0.1] [0.04, infinity]  = [-infinity, 0.0]
    # mulRev [-infinity, 0.0] [0.04, infinity]  = [-infinity, 0.0]
    # mulRev [-infinity, 1.1] [0.04, infinity]  = [entire]
    # mulRev [-2.0, infinity] [0.04, infinity]  = [entire]
    # mulRev [0.0, infinity] [0.04, infinity]  = [0.0, infinity]
    # mulRev [0.01, infinity] [0.04, infinity]  = [0.0, infinity]
    # mulRev [entire] [0.04, infinity]  = [entire]
    # mulRev [-2.0, -0.1] [entire]  = [entire]
    # mulRev [-2.0, 0.0] [entire]  = [entire]
    # mulRev [-2.0, 1.1] [entire]  = [entire]
    # mulRev [0.0, 1.1] [entire]  = [entire]
    # mulRev [0.01, 1.1] [entire]  = [entire]
    # mulRev [0.0, 0.0] [entire]  = [entire]
    # mulRev [-infinity, -0.1] [entire]  = [entire]
    # mulRev [-infinity, 0.0] [entire]  = [entire]
    # mulRev [-infinity, 1.1] [entire]  = [entire]
    # mulRev [-2.0, infinity] [entire]  = [entire]
    # mulRev [0.0, infinity] [entire]  = [entire]
    # mulRev [0.01, infinity] [entire]  = [entire]
    # mulRev [entire] [entire]  = [entire]
end

@testset "minimal_mul_rev_ten_test" begin
    # mulRevTen [-2.0, -0.1] [-2.1, -0.4] [-2.1, -0.4]  = [empty]
    # mulRevTen [-2.0, 1.1] [-2.1, -0.4] [-2.1, -0.4]  = [-2.1, -0.4]
    # mulRevTen [0.01, 1.1] [-2.1, 0.0] [-2.1, 0.0]  = [-2.1,0.0]
    # mulRevTen [-infinity, -0.1] [0.0, 0.12] [0.0, 0.12] = [0.0, 0.0]
    # mulRevTen [-2.0, 1.1] [0.04, infinity] [0.04, infinity]  = [0.04, infinity]
end


text:
# Part 1: run BOOST program in diagnostic mode
include("intcode.jl")
prog = open(f -> parse.(Int64, split(readline(f), ",")), "day09_input.txt")
println.(run_intcode!(copy(prog), [1]))

# Part 2: run BOOST program in boost mode
println.(run_intcode!(copy(prog), [2]))

ext: jl

max_stars_repo_name: ericgreveson/adventofcode

max_issues_repo_name: ericgreveson/adventofcode

max_forks_repo_name: ericgreveson/adventofcode


text:
# include -
include("Include.jl")

function compute_some_stats(data_array; dim_index=1)

    mean_val = mean(data_array,dims=dim_index)
    std_val = std(data_array,dims=dim_index)
    return (mean_val,std_val)
end

function main(path_to_ensemble_file::String)

    # load the default data_dictionary -
    time_start = 0.0
    time_stop = 16.0
    time_step_size = 0.01

    # what is the host_type?
    host_type = :cell_free

    # path to parameters -
    path_to_biophysical_constants_file = "./CellFree.json"

    # load the parameter ensemble file -
    PA = readdlm(path_to_ensemble_file)

    # build the *default* data dictionary -
    default_data_dictionary = build_data_dictionary((time_start,time_stop,time_step_size), path_to_biophysical_constants_file, host_type)

    # Set some values for the weights, gene lengths etc -
    custom_data_dictionary = customize_data_dictionary(default_data_dictionary,host_type)

    # get elongation rates et al -
    RNAP_elongation_rate = default_data_dictionary["biophysical_constants_dictionary"]["transcription_elongation_rate"]
    Ribsome_elongation_rate = default_data_dictionary["biophysical_constants_dictionary"]["translation_elongation_rate"]
    characteristic_initiation_time_transcription = default_data_dictionary["biophysical_constants_dictionary"]["characteristic_initiation_time_transcription"]
    characteristic_initiation_time_translation = default_data_dictionary["biophysical_constants_dictionary"]["characteristic_initiation_time_translation"]
    default_mRNA_half_life_in_hr = default_data_dictionary["biophysical_constants_dictionary"]["mRNA_half_life_in_hr"]
    default_prot_half_life_in_hr = default_data_dictionary["biophysical_constants_dictionary"]["protein_half_life_in_hr"]

    # get TX time constant mods -
    tc_mods_tx_ensemble = PA[19:21,:]
    (number_of_genes, number_of_samples) = size(tc_mods_tx_ensemble)

    # compute the time constants for TX -
    tau_tx_ensemble = zeros(number_of_genes, number_of_samples)
    gene_coding_length_array = custom_data_dictionary["gene_coding_length_array"]
    for gene_index = 1:number_of_genes  # we don't do sigma70

        # what is the length -
        gene_length = gene_coding_length_array[gene_index]

        # what is kE?
        kE = (1/gene_length)*RNAP_elongation_rate
        kI = (1/characteristic_initiation_time_transcription)

        for sample_index = 1:number_of_samples
            tau_factor = (kE/kI)*tc_mods_tx_ensemble[gene_index,sample_index]
            tau_tx_ensemble[gene_index,sample_index] = tau_factor
        end
    end

    # compute the time constants for TL -
    tc_mods_tl_ensemble = PA[22:24,:]
    (number_of_prots, number_of_samples) = size(tc_mods_tl_ensemble)
    tau_tl_ensemble = zeros(number_of_prots, number_of_samples)
    prot_coding_length_array = custom_data_dictionary["protein_coding_length_array"]
    for prot_index = 1:number_of_prots

        # what is the length -
        prot_length = prot_coding_length_array[prot_index]

        # what is kE?
        kE = (1/prot_length)*Ribsome_elongation_rate
        kI = (1/characteristic_initiation_time_translation)

        for sample_index = 1:number_of_samples
            tau_factor = (kE/kI)*tc_mods_tl_ensemble[prot_index,sample_index]
            tau_tl_ensemble[prot_index,sample_index] = tau_factor
        end
    end

    # KL -
    KL_array = Array{Float64,1}()
    for value in vec(PA[33,:])
        push!(KL_array,value)
    end

    # tau_L_1/2 -
    half_life_TL_array = Array{Float64,1}()
    for value in vec(PA[32,:])
        push!(half_life_TL_array, value)
    end

    # dGs -
    dG_array = PA[1:8,:]

    # compute half lifes for mRNA -
    deg_mod_mRNA = PA[25:27,:]
    (number_of_mRNA,number_of_samples) = size(deg_mod_mRNA)
    mRNA_half_life_array = zeros(number_of_mRNA, number_of_samples)
    for mRNA_index = 1:number_of_mRNA

        kD = log(2)/(default_mRNA_half_life_in_hr)

        for sample_index = 1:number_of_samples
            kA = kD*deg_mod_mRNA[mRNA_index, sample_index]
            half_life_value = (log(2)/kA)*60    # convert to min
            mRNA_half_life_array[mRNA_index, sample_index] = half_life_value
        end
    end

    # compute half lifes for protein -
    deg_mod_prot = PA[28:31,:]
    (number_of_prot,number_of_samples) = size(deg_mod_prot)
    prot_half_life_array = zeros(number_of_prot, number_of_samples)
    for prot_index = 1:number_of_prot

        kD = log(2)/(default_prot_half_life_in_hr)

        for sample_index = 1:number_of_samples
            kA = kD*deg_mod_prot[prot_index, sample_index]
            half_life_value = (log(2)/kA)*(1/24)    # convert to days
            prot_half_life_array[prot_index, sample_index] = half_life_value
        end
    end

    # return -
    return (tau_tx_ensemble, tau_tl_ensemble, KL_array, half_life_TL_array, dG_array, mRNA_half_life_array, prot_half_life_array)
end

# setup -
path_to_ensemble_file = "$(pwd())/Ensemble-c1-restriction-T20.dat"

# execute -
(tau_tx_ensemble, tau_tl_ensemble, KL_array, half_life_TL_array, dG_array, mRNA_half_life_array, prot_half_life_array) = main(path_to_ensemble_file)

# compute some stats -
(μ_tx,σ_tx) = compute_some_stats(tau_tx_ensemble; dim_index = 2)
(μ_tl,σ_tl) = compute_some_stats(tau_tl_ensemble; dim_index = 2)
(μ_KL,σ_KL) = compute_some_stats(KL_array; dim_index=1)
(μ_hl,σ_hl) = compute_some_stats(half_life_TL_array; dim_index=1)
(μ_dG,σ_dG) = compute_some_stats(dG_array; dim_index=2)
(μ_mRNA_half_life,σ_mRNA_half_life) = compute_some_stats(mRNA_half_life_array; dim_index=2)
(μ_prot_half_life,σ_prot_half_life) = compute_some_stats(prot_half_life_array; dim_index=2)

max_stars_repo_name: varnerlab/Biophysical-TXTL-Model-Code

max_issues_repo_name: varnerlab/Biophysical-TXTL-Model-Code

max_forks_repo_name: varnerlab/Biophysical-TXTL-Model-Code


text:
using LinearAlgebra

struct Simplex <: OptimizationMethod
  lambda::Float64
end

## SIMPLEX METHODS ##
function compute_simplex_size(vert::Vector{Vector{T}}) where {T}
  center = sum(vert)
  multiply_array_by_self!(center, 1 / length(vert))

  result = 0.0
  @inbounds @simd for i in vert
    tmp = i - center
    result += sqrt(dot(tmp, tmp))
  end
  return result / length(vert)
end

function minimize!(simplex::Simplex, p::Problem, end_criteria::EndCriteria)
  xtol = end_criteria.rootEpsilon
  max_stationary_state_iterations = end_criteria.maxStationaryStateIterations
  reset!(p)
  x = p.currentValue
  iter_num = 0

  # initialize the vertices of the simplex
  end_condition = false
  n = length(x)
  vertices = Vector{Vector{Float64}}(undef, n + 1)
  fill!(vertices, x)
  direction = zeros(n)
  @simd for i = 1:n
    @inbounds direction[i] = 1.0
    @inbounds vertices[i + 1] = update(p.constraint, vertices[i + 1], direction, simplex.lambda)
    # reset direction
    @inbounds direction[i] = 0.0
  end
  # initialize function values at the vertices of the simplex
  values = zeros(n + 1)
  # values = Vector{DD}(n + 1)
  @simd for i=1:n+1
    @inbounds values[i] = value!(p, vertices[i])
  end

  sum_array = zeros(n + 1)
  # sum_array = Vector{DD}(n + 1)
  # loop through looking for the minimum
  while !end_condition
    # sum_array = zeros(n)
    sum_array = sum(vertices)
    # determine the best (i_lowest) and worst (i_highest) and
    # 2nd worst (i_next_highest) vertices
    i_lowest = 1
    if values[1] < values[2]
      i_highest = 2
      i_next_highest = 1
    else
      i_highest = 1
      i_next_highest = 2
    end

    # we might be able to just do a sort here
    for i=2:n+1
      @inbounds if values[i] > values[i_highest]
        i_next_highest = i_highest
        i_highest = i
      else
        @inbounds if values[i] > values[i_next_highest] && i != i_highest
          i_next_highest = i
        end
      end

      @inbounds if values[i] < values[i_lowest]
        i_lowest = i
      end
    end

    simplex_size = compute_simplex_size(vertices)
    iter_num += 1
    if simplex_size < xtol || iter_num >= end_criteria.maxIterations
      ## TODO implement reason for exiting (EndResult:Type)
      @inbounds x = vertices[i_lowest]
      @inbounds low = values[i_lowest]
      p.functionValue = low
      p.currentValue = x

      return p
    end
    # if end criteria not met, continue
    factor = -1.0
    vTry = extrapolate!(p, i_highest, factor, values, sum_array, vertices)
    @inbounds if vTry <= values[i_lowest] && factor == -1.0
      factor = 2.0
      extrapolate!(p, i_highest, factor, values, sum_array, vertices)
    elseif abs(factor) > EPS_VAL
      @inbounds if vTry >= values[i_next_highest]
        @inbounds vSave = values[i_highest]
        factor = 0.5
        vTry = extrapolate!(p, i_highest, factor, values, sum_array, vertices)
        if vTry >= vSave && abs(factor) > EPS_VAL
          # println("vTry: $vTry")
          # println("vSave: $vSave")
          # println("i_highest: $i_highest")
          # println("i_next_highest: $i_next_highest")
          # println("ending: $iter_num")
          # error("FULL STOP")
          for i = 1:n + 1
            if i != i_lowest
              @inbounds vertices[i] = 0.5 * (vertices[i] + vertices[i_lowest])
              @inbounds values[i] = value!(p, vertices[i])
            end
          end
        end
      end
    end

    if abs(factor) <= EPS_VAL
      x = vertices[i_lowest]
      low = values[i_lowest]
      p.functionValue = low
      p.currentValue = x

      return p
    end
  end
end

centroid(p::Matrix) = reshape(mean(p, 2), size(p, 1))

function dominates(x::Vector, y::Vector)
  @simd for i in 1:length(x)
    @inbounds if x[i] <= y[i]
      return false
    end
  end
  return true
end

function dominates(x::Real, y::Vector)
  @simd for i in 1:length(y)
    @inbounds if x <= y[i]
      return false
    end
  end
  return true
end

nmobjective(y::Vector, m::Integer, n::Integer) = sqrt(var(y) * (m / n))

function minimize_2!(simplex::Simplex, prob::Problem, end_criteria::EndCriteria)
  xtol = ftol = end_criteria.rootEpsilon
  max_stationary_state_iterations = end_criteria.maxStationaryStateIterations
  reset!(prob)
  initial_x = prob.currentValue
  iter_num = 0
  m = length(initial_x)
  initial_step = ones(length(initial_x))
  a = 1.0
  g = 2.0
  b = 0.5

  n = m + 1
  p = repmat(initial_x, 1, n)
  for i = 1:m
    @inbounds p[i, i] += initial_step[i]
  end

  # Maintain a record of the value of f() at n points
  y = Array(Float64, n)
  for i = 1:n
    @inbounds y[i] = value!(prob, p[:, i])
  end

  f_x_previous, f_x = NaN, nmobjective(y, m, n)

  # Count iterations
  iteration = 0

  # Cache p_bar, y_bar, p_star, and p_star_star
  p_bar = Array(Float64, m)
  y_bar = Array(Float64, m)
  p_star = Array(Float64, m)
  p_star_star = Array(Float64, m)

  # Iterate until convergence or exhaustion
  f_converged = false

  while !f_converged && iteration < end_criteria.maxIterations
    # augment iter coutner
    iteration += 1

    # Find p_l and p_h, the min and max values of f() among p
    y_l, l = findmin(y)
    @inbounds p_l = p[:, l]
    y_h, h = findmax(y)
    @inbounds p_h = p[:, h]

    # Compute the centroid of the non-maximal points
    # also cache function values of all non-maximal points
    fill!(p_bar, 0.0)
    tmpindex = 0
    for i = 1:n
      if i != h
        tmpindex += 1
        @inbounds y_bar[tmpindex] = y[i]
        @inbounds p_bar[:] += p[:, i]
      end
    end

    # for j = 1:m
    #   @inbounds p_bar[j] /= m
    # end
    divide_array_by_self!(p_bar, m)

    # Compute a reflection
    for j = 1:m
      @inbounds p_star[j] = (1 + a) * p_bar[j] - a * p_h[j]
    end
    y_star = value!(prob, p_star)

    if y_star < y_l
      # Compute an expansion
      for j = 1:m
        @inbounds p_star_star[j] = g * p_star[j] + (1 - g) * p_bar[j]
      end
      y_star_star = value!(prob, p_star_star)

      if y_star_star < y_l
        @inbounds p_h[:] = p_star_star
        @inbounds p[:, h] = p_star_star
        @inbounds y[h] = y_star_star
      else
        p_h = p_star
        @inbounds p[:, h] = p_star
        @inbounds y[h] = y_star
      end
    else
      if dominates(y_star, y_bar)
        if y_star < y_h
          @inbounds p_h[:] = p_star
          @inbounds p[:, h] = p_h
          @inbounds y[h] = y_star
        end

        # Compute a contraction
        for j = 1:m
          @inbounds p_star_star[j] = b * p_h[j] + (1 - b) * p_bar[j]
        end
        y_star_star = value!(prob, p_star_star)

        if y_star_star > y_h
          for i = 1:n
            for j = 1:m
              @inbounds p[j, i] = (p[j, i] + p_l[j]) / 2.0
            end
            @inbounds y[i] = value!(prob, p[:, i])
          end
        else
          @inbounds p_h[:] = p_star_star
          @inbounds p[:, h] = p_h
          @inbounds y[h] = y_star_star
        end
      else
        @inbounds p_h[:] = p_star
        @inbounds p[:, h] = p_h
        @inbounds y[h] = y_star
      end
    end

    f_x_previous, f_x = f_x, nmobjective(y, m, n)

    if f_x <= ftol
      f_converged = true
    end
  end

  minimum = centroid(p)
  prob.functionValue = Float64(value!(prob, minimum))
  prob.currentValue = minimum

  return prob
end


text:
using PDELib

function fv_laplace_rect(;Plotter=nothing)
    nspecies=1
    ispec=1
    X=collect(0:0.2:1)
    function g!(f,u0,edge)
        u=unknowns(edge,u0)
        f[1]=u[1,1]-u[1,2]
    end
    grid=simplexgrid(X,X)
    physics=VoronoiFVM.Physics(num_species=nspecies,flux=g!)
    sys=VoronoiFVM.System(grid,physics)
    enable_species!(sys,ispec,[1])
    boundary_dirichlet!(sys,ispec,1,0.0)
    boundary_dirichlet!(sys,ispec,3,1.0)
    inival=unknowns(sys,inival=0)
    solution=unknowns(sys)
    VoronoiFVM.solve!(solution,inival,sys)
    scalarplot(grid,solution[1,:],Plotter=Plotter)
    true
end


text:
include("./BubbleScripts/namespace.jl")

# ANSI Colors ✨
const RED = "\x1b[31m"
const GREEN = "\x1b[32m"
const BOLD = "\x1b[1m"
const CODE = "\x1b[100m\x1b[30m"
const RESET = "\x1b[0m"

# Messages
const BUILD_FAILURE = "
Note -> If you or any other program didn't edit the source code which might've
caused this build failure, we would greatly appreciate if you made a bug report.
"

function build()
    if length(ARGS) != 1
        if ARGS[2] != "--release"
            println("\n$(RED)Unknown flag$RESET -> $(ARGS[2])\n")
            exit(1)
        else
            try
                run(`cargo run --release`)
            catch e
                println("$(RED)Build failed -> $(e).$RESET")
                println(BUILD_FAILURE)
                exit(1)
            end
        end
    end

    try
        run(`cargo run`)
    catch e
        println("$(RED)Build failed -> $(e).$RESET")
        println(BUILD_FAILURE)
        exit(1)
    end
end

function test()
    try
        run(`cargo test`)
    catch e
        println("$(RED)Build failed -> $(e).$RESET")
        println(BUILD_FAILURE)
        exit(1)
    end
end

function fmt()
    try
        run(`cargo fmt`)
    catch e
        println("$(RED)Build failed -> $(e).$RESET")
        println(BUILD_FAILURE)
        exit(1)
    end
end

function buildjdk()
    println("$GREEN We're not there... yet. $RESET😉")
    exit(0)
end

function advancedtest()
    println("$GREEN We're not there... yet. $RESET😉")
    exit(0)
end

function classbasket()
    print("\n$(GREEN)Building classbasket")

    try
        for (_, _, files) in walkdir("./class_basket/")
            for file in Iterators.filter((z) -> endswith(z, ".java"), files)
                run(`javac ./class_basket/$file`)
                print(".")
            end
            println(" Done! ✨\n")
        end
        println("Building invalid classfiles")
        intentionally_invalid()
    catch e
        println("$(RED)Build failed -> $e.$RESET")
        println(BUILD_FAILURE)
        exit(1)
    end

    println("$RESET")
end

if length(ARGS) == 0
    println("""

$GREEN Welcome to the TapVM Aftermath JVM build system. $RESET

$BOLD Commands $RESET
--------------------------------------------------------------------------------
⦁ build        ~ Builds the JVM.
⦁ build-jdk    ~ Builds an OpenJDK distribution using Aftermath.
⦁ test         ~ Tests the JVM.
⦁ advancedtest ~ Advanced testing for the JVM. (Requires an internet connection)
⦁ classbasket  ~ Builds small Java snippets for JVM development and testing.
⦁ fmt          ~ Formats the source code using Rustfmt.

$BOLD Flags $RESET
--------------------------------------------------------------------------------
The $CODE build $RESET and $CODE build-jdk $RESET commands can have an optional $CODE --release $RESET flag. This
will build an optimized and stripped build, however the build time will be more
than a normal build (i.e a$BOLD development$RESET build).
""")
    exit()
else
    command = ARGS[1]
    if command == "build"
        build()
    elseif command == "build-jdk"
        buildjdk()
    elseif command == "test"
        test()
    elseif command == "advancedtest"
        advancedtest()
    elseif command == "classbasket"
        classbasket()
    elseif command == "fmt"
        fmt()
    else
        println("$(RED)Unknown command$RESET -> $command. Please run bubble without any arguments
for help regarding its usage.
")
    end
end

max_stars_repo_name: TapVM/Tap

max_issues_repo_name: TapVM/Tap

max_forks_repo_name: TapVM/Tap