From noreply at r-forge.r-project.org Thu Oct 8 14:20:22 2015 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Thu, 8 Oct 2015 14:20:22 +0200 (CEST) Subject: [CHNOSZ-commits] r92 - in pkg/CHNOSZ: . inst inst/tests tests tests/testthat Message-ID: <20151008122022.8491F187C38@r-forge.r-project.org> Author: jedick Date: 2015-10-08 14:20:21 +0200 (Thu, 08 Oct 2015) New Revision: 92 Added: pkg/CHNOSZ/tests/testthat/ pkg/CHNOSZ/tests/testthat/test-EOSregress.R pkg/CHNOSZ/tests/testthat/test-IAPWS95.R pkg/CHNOSZ/tests/testthat/test-affinity.R pkg/CHNOSZ/tests/testthat/test-basis.R pkg/CHNOSZ/tests/testthat/test-diagram.R pkg/CHNOSZ/tests/testthat/test-eos.R pkg/CHNOSZ/tests/testthat/test-equilibrate.R pkg/CHNOSZ/tests/testthat/test-findit.R pkg/CHNOSZ/tests/testthat/test-info.R pkg/CHNOSZ/tests/testthat/test-ionize.aa.R pkg/CHNOSZ/tests/testthat/test-ionize.aa_pK.R pkg/CHNOSZ/tests/testthat/test-iprotein.R pkg/CHNOSZ/tests/testthat/test-makeup.R pkg/CHNOSZ/tests/testthat/test-more.aa.R pkg/CHNOSZ/tests/testthat/test-mosaic.R pkg/CHNOSZ/tests/testthat/test-protein.info.R pkg/CHNOSZ/tests/testthat/test-revisit.R pkg/CHNOSZ/tests/testthat/test-species.R pkg/CHNOSZ/tests/testthat/test-subcrt.R pkg/CHNOSZ/tests/testthat/test-swap.basis.R pkg/CHNOSZ/tests/testthat/test-thermo.R pkg/CHNOSZ/tests/testthat/test-util.R pkg/CHNOSZ/tests/testthat/test-util.affinity.R pkg/CHNOSZ/tests/testthat/test-util.data.R pkg/CHNOSZ/tests/testthat/test-util.list.R pkg/CHNOSZ/tests/testthat/test-util.program.R pkg/CHNOSZ/tests/testthat/test-util.seq.R pkg/CHNOSZ/tests/testthat/test-water.R pkg/CHNOSZ/tests/testthat/test-wjd.R pkg/CHNOSZ/tests/testthat/test-yeastgfp.R Removed: pkg/CHNOSZ/inst/tests/test-EOSregress.R pkg/CHNOSZ/inst/tests/test-IAPWS95.R pkg/CHNOSZ/inst/tests/test-affinity.R pkg/CHNOSZ/inst/tests/test-basis.R pkg/CHNOSZ/inst/tests/test-diagram.R pkg/CHNOSZ/inst/tests/test-eos.R pkg/CHNOSZ/inst/tests/test-equilibrate.R pkg/CHNOSZ/inst/tests/test-findit.R pkg/CHNOSZ/inst/tests/test-info.R pkg/CHNOSZ/inst/tests/test-ionize.aa.R pkg/CHNOSZ/inst/tests/test-ionize.aa_pK.R pkg/CHNOSZ/inst/tests/test-iprotein.R pkg/CHNOSZ/inst/tests/test-makeup.R pkg/CHNOSZ/inst/tests/test-more.aa.R pkg/CHNOSZ/inst/tests/test-mosaic.R pkg/CHNOSZ/inst/tests/test-protein.info.R pkg/CHNOSZ/inst/tests/test-revisit.R pkg/CHNOSZ/inst/tests/test-species.R pkg/CHNOSZ/inst/tests/test-subcrt.R pkg/CHNOSZ/inst/tests/test-swap.basis.R pkg/CHNOSZ/inst/tests/test-thermo.R pkg/CHNOSZ/inst/tests/test-util.R pkg/CHNOSZ/inst/tests/test-util.affinity.R pkg/CHNOSZ/inst/tests/test-util.data.R pkg/CHNOSZ/inst/tests/test-util.list.R pkg/CHNOSZ/inst/tests/test-util.program.R pkg/CHNOSZ/inst/tests/test-util.seq.R pkg/CHNOSZ/inst/tests/test-water.R pkg/CHNOSZ/inst/tests/test-wjd.R pkg/CHNOSZ/inst/tests/test-yeastgfp.R Modified: pkg/CHNOSZ/DESCRIPTION pkg/CHNOSZ/inst/NEWS pkg/CHNOSZ/tests/test-all.R Log: move tests from inst/tests to tests/testthat Modified: pkg/CHNOSZ/DESCRIPTION =================================================================== --- pkg/CHNOSZ/DESCRIPTION 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/DESCRIPTION 2015-10-08 12:20:21 UTC (rev 92) @@ -1,6 +1,6 @@ -Date: 2015-07-10 +Date: 2015-10-08 Package: CHNOSZ -Version: 1.0.5-4 +Version: 1.0.5-5 Title: Chemical Thermodynamics and Activity Diagrams Author: Jeffrey Dick Maintainer: Jeffrey Dick Modified: pkg/CHNOSZ/inst/NEWS =================================================================== --- pkg/CHNOSZ/inst/NEWS 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/NEWS 2015-10-08 12:20:21 UTC (rev 92) @@ -1,4 +1,4 @@ -CHANGES IN CHNOSZ 1.0.5-4 (2015-07-10) +CHANGES IN CHNOSZ 1.0.5-8 (2015-10-08) -------------------------------------- - Rewrite rho.IAPWS95() to be able to invert density from IAPWS-95 @@ -36,6 +36,12 @@ - Fix incorrect entry for entropy of aqueous methionine and [Met] in OBIGT.csv. Thanks to Apar Prasad for spotting this. +- Some fixes to tests for compatibility with new version of testthat + (increase tolerance for one test in test-eos.R because of swapping + actual/expected values in equals(); move inst/tests to + inst/test/testthat; use test_check instead of test_package in + test-all.R (for R CMD check)). + CHANGES IN CHNOSZ 1.0.5 (2015-05-19) ------------------------------------ Deleted: pkg/CHNOSZ/inst/tests/test-EOSregress.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-EOSregress.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-EOSregress.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,48 +0,0 @@ -context("EOSregress") - -# since this is the first test (alphabetically) -# we need to load the 'thermo' object (for R CMD check) -suppressMessages(data(thermo)) - -test_that("EOSvar stops with unknown variables", { - expect_error(EOSvar("TX", T=25, P=1), "can't find a variable named TX") - # why can't the test find these? - #TX <- 2 - #expect_error(EOSvar("TX", T=25, P=1), "an object named TX is not a function") - #TX <- function(T) 2 - #expect_error(EOSvar("TX", T=25, P=1), "the arguments of TX\\(\\) are not T, P") -}) - -test_that("regressions return known HKF parameters", { - # regress computed values of heat capacity and volume of CH4(aq) - # calculated from HKF parameters on a T-P grid - T <- convert(seq(0, 350, 25), "K") - P <- seq(200, 1000, 100) - # convert=FALSE means that temperature has units of K - CH4.prop <- subcrt("CH4", T=T, P=P, grid="T", convert=FALSE)$out[[1]] - # terms in the HKF equations for Cp - Cp.var <- c("invTTheta2", "TXBorn") - # get coefficients in Cp regression - Cp.lm <- EOSregress(CH4.prop[, c("T", "P", "Cp")], Cp.var) - Cp.coeff <- Cp.lm$coefficients - # terms in the HKF equations for V - V.var <- c("invPPsi", "invTTheta", "invPPsiTTheta", "QBorn") - # get coefficients in V regression - V.lm <- EOSregress(CH4.prop[, c("T", "P", "V")], V.var) - # use same units as HKF: convert from cm3.bar to calories (divide by 41.84) - V.coeff <- convert(V.lm$coefficients, "calories") - ## the tests: did we get the HKF parameters that are in the database? - CH4.par <- info(info("CH4")) - # c1 and c2 - expect_equal(Cp.coeff[1], CH4.par$c1, check.attributes=FALSE) - expect_equal(Cp.coeff[2], CH4.par$c2, check.attributes=FALSE) - # omega (from Cp) - expect_equal(Cp.coeff[3], CH4.par$omega, check.attributes=FALSE) - # a1, a2, a3 and a4 - expect_equal(V.coeff[1], CH4.par$a1, check.attributes=FALSE) - expect_equal(V.coeff[2], CH4.par$a2, check.attributes=FALSE) - expect_equal(V.coeff[3], CH4.par$a3, check.attributes=FALSE) - expect_equal(V.coeff[4], CH4.par$a4, check.attributes=FALSE) - # omega (from V) - note negative sign - expect_equal(-V.coeff[5], CH4.par$omega, check.attributes=FALSE) -}) Deleted: pkg/CHNOSZ/inst/tests/test-IAPWS95.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-IAPWS95.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-IAPWS95.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,90 +0,0 @@ -context("IAPWS95") - -test_that("calculations of Helmholtz free energy and its derivatives are consistent with reference cases", { - ## reference values of these terms are listed Table 6.6 of Wagner and Pruss, 2002 - p <- c("phi", "phi.delta", "phi.delta.delta", "phi.tau", "phi.tau.tau", "phi.delta.tau") - # reference values for case 1: T=500 K, rho=838.025 kg m-3 - idealgas.ref.1 <- c(0.204797734e1, 0.384236747, -0.147637878, 0.904611106e1, -0.193249185e1, 0) - residual.ref.1 <- c(-0.342693206e1, -0.364366650, 0.856063701, -0.581403435e1, -0.223440737e1, -0.112176915e1) - # reference values for case 1: T=647 K, rho=358 kg m-3 - idealgas.ref.2 <- c(-0.156319605e1, 0.899441341, -0.808994726, 0.980343918e1, -0.343316334e1, 0) - residual.ref.2 <- c(-0.121202657e1, -0.714012024, 0.475730696, -0.321722501e1, -0.996029507e1, -0.133214720e1) - ## set up the problem - # critical point constants - T.critical <- 647.096 # K - rho.critical <- 322 # kg m-3 - # T and rho for cases 1 and 2 - T <- c(500, 647) - rho <- c(838.025, 358) - # delta and tau for cases 1 and 2 - delta <- rho / rho.critical - tau <- T.critical / T - # calculated ideal gas and residual parts for case 1 - idealgas.calc.1 <- sapply(p, IAPWS95.idealgas, delta[1], tau[1]) - residual.calc.1 <- sapply(p, IAPWS95.residual, delta[1], tau[1]) - # calculated ideal gas and residual parts for case 2 - idealgas.calc.2 <- sapply(p, IAPWS95.idealgas, delta[2], tau[2]) - residual.calc.2 <- sapply(p, IAPWS95.residual, delta[2], tau[2]) - ## perform the tests - # we almost get away without increasing the tolerance in any test ... - expect_equal(idealgas.calc.1, idealgas.ref.1, check.attributes=FALSE) - expect_equal(residual.calc.1, residual.ref.1, check.attributes=FALSE) - expect_equal(idealgas.calc.2, idealgas.ref.2, check.attributes=FALSE) - # ... however an offset is apparent in the value of the residual phi.delta.delta for case 2 - expect_equal(residual.calc.2, residual.ref.2, check.attributes=FALSE, tolerance=1e-5) -}) - -test_that("calculations of thermodynamic properties are consistent with reference values", { - ## these are the properties we test - from Table 13.1 of Wagner and Pruss, 2002 - ## (speed of sound omitted as it's not currently implemented) - p <- c("P", "H", "S", "Cv", "Cp") - ## a selection of T and rho at vapor-liquid boundary - ## (NOTE: excluding triple and critical points; we have some unresolved issues there) - T <- c(274, 320, 368, 416, 464, 512, 560, 608, 647) - rho.liquid <- c(999.843, 989.387, 961.984, 923.577, 875.125, 814.982, 737.831, 626.74, 357.34) - rho.vapor <- c(0.00514, 0.07166, 0.50231, 2.1203, 6.5107, 16.409, 37.147, 84.173, 286.51) - ## reference values - P.ref <- c(0.000650, 0.010546, 0.084142, 0.39166, 1.2788, 3.2798, 7.1062, 13.681, 22.038) - H.liquid.ref <- c(3.544, 196.170, 397.457, 601.396, 811.225, 1032.06, 1273.11, 1558.42, 2029.44) - H.vapor.ref <- c(2502.46, 2585.71, 2667.37, 2737.09, 2785.91, 2803.05, 2771.24, 2646.01, 2148.56) - S.liquid.ref <- c(0.0130, 0.6629, 1.2487, 1.7687, 2.2436, 2.6914, 3.1319, 3.6034, 4.3224) - S.vapor.ref <- c(9.1331, 8.1302, 7.4169, 6.9025, 6.4994, 6.1504, 5.8071, 5.3922, 4.5065) - cv.liquid.ref <- c(4.2156, 4.0416, 3.7950, 3.5560, 3.3523, 3.1884, 3.0722, 3.0617, 6.2344) - cv.vapor.ref <- c(1.4191, 1.4627, 1.5428, 1.7138, 2.0015, 2.3697, 2.8225, 3.4538, 6.2740) - cp.liquid.ref <- c(4.2171, 4.1807, 4.2101, 4.2892, 4.4513, 4.7616, 5.4239, 7.6169, 3905.2) - cp.vapor.ref <- c(1.8852, 1.9417, 2.0601, 2.3334, 2.8561, 3.7263, 5.4099, 10.805, 5334.1) - ## calculated values - liquid.calc <- IAPWS95(p, T, rho.liquid) - vapor.calc <- IAPWS95(p, T, rho.vapor) - ## the tests - # take P to 5 significant digits but not more than 6 decimals - expect_equal(round(signif(liquid.calc$p, 5), 6), P.ref, tolerance=1e-3) - expect_equal(round(signif(vapor.calc$p, 5), 6), P.ref, tolerance=1e-4) - # take H to 6 significant digits but not more than 3 decimals - expect_equal(round(signif(liquid.calc$h, 6), 3), H.liquid.ref, tolerance=1e-5) - expect_that(round(signif(vapor.calc$h, 6), 3), equals(H.vapor.ref)) # spot on! - # round S to 4 decimals - expect_that(round(liquid.calc$s, 4), equals(S.liquid.ref)) # spot on! - expect_equal(round(vapor.calc$s, 4), S.vapor.ref, tolerance=1e-4) - # round cv to 4 decimals - expect_equal(round(liquid.calc$cv, 4), cv.liquid.ref, tolerance=1e-4) - expect_equal(round(vapor.calc$cv, 4), cv.vapor.ref, tolerance=1e-4) - # take cp to 5 significant digits but not more than 4 decimals - # note high tolerance setting: the highest temperature is the challenge - expect_equal(round(signif(liquid.calc$cp, 5), 4), cp.liquid.ref, tolerance=1e0) - expect_equal(round(signif(vapor.calc$cp, 5), 4), cp.vapor.ref, tolerance=1e-1) -}) - -test_that("calculations are possible at low temperatures", { - # the sequences start at the lowest whole-number temperature (K) - # where the function returns a value of density at the given pressure - expect_that(any(is.na(water.IAPWS95("rho", T=seq(234, 274, 3), P=rep(1, 14)))), is_false()) - expect_that(any(is.na(water.IAPWS95("rho", T=seq(227, 272, 3), P=rep(1000, 16)))), is_false()) -}) - -# reference - -# Wagner, W. and Pruss, A. (2002) -# The IAPWS formulation 1995 for the thermodynamic properties of -# ordinary water substance for general and scientific use -# J. Phys. Chem. Ref. Data 31, 387--535. http://dx.doi.org/10.1063/1.1461829 Deleted: pkg/CHNOSZ/inst/tests/test-affinity.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-affinity.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-affinity.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,161 +0,0 @@ -context("affinity") - -# clear out any previous basis definition or database alterations -suppressMessages(data(thermo)) - -test_that("errors come as expected, and output gives T and P in user's units", { - expect_error(affinity(iprotein=7), "basis species are not defined") - basis("CHNOS") - expect_error(affinity(), "species have not been defined") - species("5a(H),14b(H)-cholestane") - a.C_bar <- affinity(T=c(0, 100, 10), P=c(10, 1000, 10)) - expect_equal(range(a.C_bar$vals[[1]]), c(0, 100)) - expect_equal(range(a.C_bar$vals[[2]]), c(10, 1000)) - T.units("K") - P.units("MPa") - a.K_MPa <- affinity(T=c(273.15, 373.15, 10), P=c(1, 100, 10)) - expect_equal(range(a.K_MPa$vals[[1]]), c(273.15, 373.15)) - expect_equal(range(a.K_MPa$vals[[2]]), c(1, 100)) - # different units, same T,P ... same affinities - expect_equal(a.C_bar$values, a.K_MPa$values) - # go back to original units for the remaining tests - T.units("C") - P.units("bar") -}) - -test_that("pe, pH and Eh are correctly handled", { - basis("CHNOSe") - species(c("HS-", "H2S", "SO4-2")) - Eh <- c(-1, 1) - pe <- convert(Eh, "pe", T=convert(100, "K")) - a.Eh <- affinity(Eh=Eh, T=100) - a.pe <- affinity(pe=pe, T=100) - # they should give the same result - expect_equal(a.Eh$values, a.pe$values) - # the variables should have the right names - expect_equal(c(a.Eh$vars, a.pe$vars), c("Eh", "pe")) - # now for an Eh-pH example - pH <- c(0, 14) - a <- affinity(pH=pH, Eh=Eh) - expect_equal(a$vars, c("pH", "Eh")) - expect_equal(range(a$vals[[1]]), pH) - expect_equal(range(a$vals[[2]]), Eh) - expect_equal(length(a$vals[[2]]), 128) - # since Eh has to be reconstructed, check it's done correctly - a129 <- affinity(pH=pH, Eh=c(Eh, 129)) - expect_equal(length(a129$vals[[2]]), 129) - - ## a transect of hotter, more oxidizing and more acidic - ## has not been working since at least 0.9-7 - ##T <- c(25, 50, 100, 125, 150) - ##Eh <- c(-1, -0.5, 0, 0.5, 1) - ##pH <- c(10, 8, 6, 4, 2) - ##a <- affinity(T=T, Eh=Eh, pH=pH) -}) - -test_that("affinity() in 3D returns values consistent with manual calculation", { - # our "manual" calculation will be for H2(aq) + 0.5O2(aq) = H2O(l) - # the equilibrium constants at 25 and 100 degrees C - # (the logK are tested against literature values in test-subcrt.R) - logK.25 <- subcrt(c("H2", "O2", "H2O"), "aq", c(-1, -0.5, 1), T=25)$out$logK - logK.100 <- subcrt(c("H2", "O2", "H2O"), "aq", c(-1, -0.5, 1), T=100)$out$logK - # the value of A/2.303RT at 25 degrees and logaH2=-10, logaO2=-10 and logaH2O=0 - A.2303RT.25.10.10 <- logK.25 - ( (-1)*(-10) + (-0.5)*(-10) ) - # the value of A/2.303RT at 100 degrees and logaH2=-5, logaO2=-10 and logaH2O=0 - A.2303RT.100.5.10 <- logK.100 - ( (-1)*(-5) + (-0.5)*(-10) ) - # set up basis and species - basis(c("H2", "O2"), "aq") - species("H2O") - # we will run affinity() in 3D - # T = 0, 25, 50, 75, 100, 125 degrees - # log_a(H2) = -20, -15, -10, -5, 0 - # log_a(O2) = -20, -15, -10, -5, 0 - # first test: the dimensions are correct - a.logK <- affinity(T=c(0, 125, 6), H2=c(-20, 0, 5), O2=c(-20, 0, 5), property="logK") - expect_equal(dim(a.logK$values[[1]]), c(6, 5, 5)) - # second and third tests: the logK values used by affinity() are correct - expect_equal(a.logK$values[[1]][2, 3, 3], logK.25) - expect_equal(a.logK$values[[1]][5, 4, 3], logK.100) - # fourth and fifth tests: the A/2.303RT values returned by affinity() are correct - a.A <- affinity(T=c(0, 125, 6), H2=c(-20, 0, 5), O2=c(-20, 0, 5)) - expect_equal(a.A$values[[1]][2, 3, 3], A.2303RT.25.10.10) - expect_equal(a.A$values[[1]][5, 4, 3], A.2303RT.100.5.10) -}) - -test_that("'iprotein' gives consistent results on a transect", { - # from Dick and Shock, 2011, values of A/2.303RT for the per-residue - # formation reactions of overall model proteins at five sampling sites - # at Bison Pool, with different temperature, pH and log_a(H2) - # these are the maximum values for each site from Table 5 in the paper - A.2303RT_ref <- c(-18.720, -27.894, -35.276, -36.657, -41.888) - # the measured temperatures and pHs - T <- c(93.3, 79.4, 67.5, 65.3, 57.1) - pH <- c(7.350, 7.678, 7.933, 7.995, 8.257) - # Eq. 24 of the paper - H2 <- -11+T*3/40 - # remove "RESIDUE" entries in thermo$obigt (clutter from first test) - data(thermo) - basis(c("HCO3-", "H2O", "NH3", "HS-", "H2", "H+"), - "aq", c(-3, 0, -4, -7, 999, 999)) - sites <- c("N", "S", "R", "Q", "P") - aa <- read.aa(system.file("extdata/protein/DS11.csv", package="CHNOSZ")) - ip <- add.protein(aa[1:5, ]) - # to reproduce, we need use the "old" parameters for [Met] - add.obigt() - a <- affinity(T=T, pH=pH, H2=H2, iprotein=ip) - # divide A/2.303RT by protein length - pl <- protein.length(ip) - A.2303RT <- t(sapply(a$values, c)) / pl - # find the maximum for each site - A.2303RT_max <- apply(A.2303RT, 2, max) - # we're off a bit in the second decimal ... - # maybe becuase of rounding of the aa composition? - expect_equal(A.2303RT_max, A.2303RT_ref, tolerance=1e-3) - # todo: add comparison with results from loading proteins via species() -}) - -test_that("affinity() for proteins (with/without 'iprotein') returns same value as in previous package versions", { - # our test case is CSG_HALJP because it has no methionine - # (aqueous [Met] was updated in 0.9-9) - # these values were calculated using versions 0.6, 0.8 and 0.9-7 - # (25 degrees C, 1 bar, basis species "CHNOS" or "CHNOS+") - A.2303RT.nonionized <- -3795.297 - A.2303RT.ionized <- -3075.222 - # first for nonionized protein - basis("CHNOS") - # try it with iprotein - ip <- iprotein("CSG_HALJP") - expect_equal(affinity(iprotein=ip)$values[[1]][1], A.2303RT.nonionized, tolerance=1e-6) - # then with the protein loaded as a species - species("CSG_HALJP") - expect_equal(affinity()$values[[1]][1], A.2303RT.nonionized, tolerance=1e-6) - # now for ionized protein - basis("CHNOS+") - expect_equal(affinity(iprotein=ip)$values[[1]][1], A.2303RT.ionized, tolerance=1e-6) - species("CSG_HALJP") - expect_equal(affinity()$values[[1]][1], A.2303RT.ionized, tolerance=1e-6) -}) - -test_that("affinity() for proteins keeps track of pH on 2-D calculations", { - # (relates to the "thisperm" construction in A.ionization() ) - basis("CHNOS+") - species("LYSC_CHICK") - a1 <- affinity(pH=c(6, 8, 3)) - a2 <- affinity(pH=c(6, 8, 3), T=c(0, 75, 4)) - expect_equal(as.numeric(a1$values[[1]]), a2$values[[1]][, 2]) -}) - -test_that("IS can be constant or variable", { - # inspired by an error from demo("phosphate") - # > a25 <- affinity(IS=c(0, 0.14), T=T[1]) - # ... - # Error in subcrt(species = c(1017L, 20L, 19L), property = "logK", T = 298.15, : - # formal argument "IS" matched by multiple actual arguments - basis("CHNOPS+") - species(c("PO4-3", "HPO4-2", "H2PO4-")) - a0 <- affinity() - a1 <- affinity(IS=0.14) - a2 <- affinity(IS=c(0, 0.14)) - expect_equal(unlist(lapply(a2$values, head, 1)), unlist(a0$values)) - expect_equal(unlist(lapply(a2$values, tail, 1)), unlist(a1$values)) -}) Deleted: pkg/CHNOSZ/inst/tests/test-basis.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-basis.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-basis.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,41 +0,0 @@ -context("basis") - -# clear out any previous basis definition or database alterations -suppressMessages(data(thermo)) - -test_that("invalid basis definitions cause an error", { - expect_error(basis(character()), "argument is empty") - expect_error(basis(c("CO2", "CO2")), "names are not unique") - expect_error(basis(c("CO2", "H2O")), "underdetermined") - expect_error(basis(c("H2O", "O2", "H2")), "overdetermined") - expect_error(basis(c("HCN", "H2O", "O2", "H2")), "singular") - expect_error(basis(c("CN", "H2O", "O2", "H2")), "species not available") - expect_error(basis(c("CN")), "species not available") - expect_error(basis("Fe", "cr"), "species not available: Fe\\(cr\\)") - ina <- nrow(thermo$obigt) + 1 - expect_error(basis(ina), "species not available") - expect_error(preset.basis(c("CN")), "is not a keyword") - # after all that, the basis should still be undefined - expect_is(basis(), "NULL") -}) - -test_that("invalid basis modification requests cause an error", { - basis(delete=TRUE) - expect_error(mod.basis("CH4", "gas"), "basis is not defined") - b <- basis("CHNOS+") - expect_error(mod.basis("CH4", "gas"), "is not a formula of one of the basis species") - iCH4 <- info("CH4") - expect_error(mod.basis(iCH4, "gas"), "is not a species index of one of the basis species") - expect_error(mod.basis("CO2", "PPM"), "the elements .* in buffer .* are not in the basis") - expect_error(mod.basis("CO2", "liq"), "state .* not found") - # after all that, the basis should be unchanged - expect_equal(basis(), b) -}) - -test_that("changing state maintains species name", { - b1 <- basis(c("Al2O3", "quartz", "oxygen")) - b2 <- basis("SiO2", "cr2") - # we went from quartz cr1 to cr2, which is the next row in the database - expect_equal(sum(b2$ispecies - b1$ispecies), 1) - expect_error(basis("SiO2", "cr3"), "state or buffer 'cr3' not found for quartz") -}) Deleted: pkg/CHNOSZ/inst/tests/test-diagram.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-diagram.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-diagram.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,86 +0,0 @@ -context("diagram") - -test_that("expected errors are produced for inconsistent arguments", { - expect_error(diagram(list()), "'eout' does not look like output from equil\\(\\) or affinity\\(\\)") - basis("CHNOS") - species(c("glycine", "alanine")) - a <- affinity() - expect_message(diagram(a, plot.it=FALSE), "coefficients are moles of CO2 in formation reactions") - e <- equilibrate(a) - expect_error(diagram(e, "Z"), "Z is not a basis species") -}) - -test_that("expected messages, errors and results arise using output from affinity()", { - basis("CHNOS+") - # fugacity of O2 is buffered here - basis("O2", "CO2-AC") - species(c("formic acid", "formate", "acetic acid", "acetate")) - # 0-D - a <- affinity() - # equilibrium activities are not possible here - expect_error(diagram(a, "loga.equil"), "'eout' is not the output from equil\\(\\)") - # we can't calculate the equilibrium activity of a basis species if it's externally buffered - expect_error(diagram(a, "O2"), "is not numeric - was a buffer selected\\?") - # this one works - a barplot of A/2.303RT - expect_message(diagram(a, plot.it=FALSE), "coefficients are moles of CO2 in formation reactions") - # if we're plotting A/2.303RT the values can be divided by balancing coefficient or not - d.1 <- diagram(a, balance=1, plot.it=FALSE) - d.CO2 <- diagram(a, plot.it=FALSE) - expect_equal(as.numeric(d.CO2$plotvals), as.numeric(d.1$plotvals)/c(1, 1, 2, 2)) - # now run the calculation over a range of O2 - basis("O2", -90) - # 1-D - a <- affinity(O2=c(-80, -70)) - # ask for the equilibrium activity of CO2 - expect_error(diagram(a, "CO2", groups=list(1:2, 3:4)), "can't plot equilibrium activities of basis species for grouped species") - expect_error(diagram(a, "CO2", alpha=TRUE), "equilibrium activities of basis species not available with alpha=TRUE") - d <- diagram(a, "CO2", plot.it=FALSE) - # test that the result does in fact correspond to zero affinity of formation, how about for acetate? - a <- affinity(O2=d$vals[[1]], CO2=d$plotvals[[4]]) - expect_equal(a$values[[4]], array(numeric(128))) -}) - -test_that("'groups' and 'alpha' work as expected", { - basis("CHNOS+") - species(c("formic acid", "formate", "acetic acid", "acetate")) - # 1-D - a <- affinity(O2=c(-80, -60)) - e <- equilibrate(a) - # group the species together - d <- diagram(e, groups=list(1:2, 3:4), plot.it=FALSE) - # we should find that their activities have been summed - expect_equal(d$plotvals[[1]], log10(10^e$loga.equil[[1]] + 10^e$loga.equil[[2]])) - expect_equal(d$plotvals[[2]], log10(10^e$loga.equil[[3]] + 10^e$loga.equil[[4]])) - # ask for degrees of formation instead of logarithms of activities - d <- diagram(e, alpha=TRUE, plot.it=FALSE) - # we should find that the sum of alphas is one - expect_equal(Reduce("+", d$plotvals), array(rep(1, 128))) -}) - -test_that("'normalize' and 'as.residue' work as expected", { - basis("CHNOS") - species(c("LYSC_CHICK", "MYG_PHYCA", "RNAS1_BOVIN", "CYC_BOVIN")) - # 1-D - a <- affinity(O2=c(-80, -70)) - expect_error(diagram(a, normalize=TRUE), "can be TRUE only for a 2-D \\(predominance\\) diagram") - # 2-D - a <- affinity(H2O=c(-10, 0), O2=c(-80, -70)) - d1 <- diagram(a, normalize=TRUE, plot.it=FALSE) - e <- equilibrate(a, normalize=TRUE) - d2 <- diagram(e, plot.it=FALSE) - expect_equal(d1$predominant, d2$predominant) - expect_error(diagram(e, normalize=TRUE), "can be TRUE only if 'eout' is the output from affinity\\(\\)") - d3 <- diagram(a, as.residue=TRUE, plot.it=FALSE) - e <- equilibrate(a, as.residue=TRUE) - d4 <- diagram(e, plot.it=FALSE) - expect_equal(d3$predominant, d4$predominant) -}) - -test_that("diagram() handles 2D plots with different x and y resolution and warns for >1 species in contour plot", { - basis("CHNOS") - species(c("alanine", "glycine", "serine", "methionine")) - a <- affinity(T=c(0, 200, 6), O2=c(-90, -60, 5)) - # TODO: fix plot.line() function in diagram() so that the plot can be made - #expect_equal(diagram(a), diagram(a, plot.it=FALSE)) - expect_warning(diagram(a, what="CO2", plot.it=FALSE), "showing only first species in 2-D property diagram") -}) Deleted: pkg/CHNOSZ/inst/tests/test-eos.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-eos.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-eos.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,72 +0,0 @@ -context("eos") - -test_that("gfun() gives expected results", { - # calculate values of g and its derivatives - # up to 350 degrees C at Psat - Tc <- c(0, 25, 50, 100, 150, 200, 250, 300, 350) - # get the required properties of water - w <- water(c("rho", "alpha", "daldT", "beta", "Psat"), T=convert(Tc, "K"), P="Psat") - # calculate g and its derivatives - gfun.Psat <- gfun(w$rho/1000, Tc, w$Psat, w$alpha, w$daldT, w$beta) - # up to 450 degrees C at 500 bar - Tc <- c(Tc, 400, 450) - w <- water(c("rho", "alpha", "daldT", "beta"), T=convert(Tc, "K"), P=500) - gfun.500 <- gfun(w$rho/1000, Tc, rep(500, length(Tc)), w$alpha, w$daldT, w$beta) - # up to 600 degrees C at 1000 bar - Tc <- c(Tc, 500, 550, 600) - w <- water(c("rho", "alpha", "daldT", "beta"), T=convert(Tc, "K"), P=1000) - gfun.1000 <- gfun(w$rho/1000, Tc, rep(1000, length(Tc)), w$alpha, w$daldT, w$beta) - # up to 1000 degrees C at 4000 bar - Tc <- c(Tc, 700, 800, 900, 1000) - w <- water(c("rho", "alpha", "daldT", "beta"), T=convert(Tc, "K"), P=4000) - gfun.4000 <- gfun(w$rho/1000, Tc, rep(4000, length(Tc)), w$alpha, w$daldT, w$beta) - - # values from table 5 of Shock et al., 1992 - g.Psat.ref <- c(0, 0, 0, 0, -0.09, -1.40, -8.05, -35.23, -192.05) - g.500.ref <- c(0, 0, 0, 0, -0.02, -0.43, -3.55, -16.81, -56.78, -287.16, -1079.75) - g.1000.ref <- c(0, 0, 0, 0, 0, -0.12, -1.49, -8.44, -30.59, -85.09, -201.70, -427.17, -803.53, -1312.67) - g.4000.ref <- c(0, 0, 0, 0, 0, 0, 0, -0.01, -0.20, -1.14, -3.52, -7.84, -14.19, -22.21, -40.15, -54.28, -59.35, -55.17) - # compare the calculations with the reference values - # note: tolerance is set as low as possible (order of magnitude) for successful tests - expect_equal(gfun.Psat$g * 1e4, g.Psat.ref, tolerance=1e-4) - expect_equal(gfun.500$g * 1e4, g.500.ref, tolerance=1e-4) - expect_equal(gfun.1000$g * 1e4, g.1000.ref, tolerance=1e-5) - expect_equal(gfun.4000$g * 1e4, g.4000.ref, tolerance=1e-4) - - # values from table 6 of Shock et al., 1992 - dgdT.Psat.ref <- c(0, 0, 0, -0.01, -0.62, -6.13, -25.33, -123.20, -1230.59) - dgdT.500.ref <- c(0, 0, 0, 0, -0.13, -2.21, -12.54, -46.50, -110.45, -734.92, -2691.41) - dgdT.1000.ref <- c(0, 0, 0, 0, -0.02, -0.75, -6.12, -24.83, -69.29, -158.38, -324.13, -594.43, -904.41, -1107.84) - dgdT.4000.ref <- c(0, 0, 0, 0, 0, 0, 0, -0.08, -0.89, -3.09, -6.60, -10.72, -14.55, -17.29, -17.26, -10.06, -0.08, 7.82) - expect_equal(gfun.Psat$dgdT * 1e6, dgdT.Psat.ref, tolerance=1e-2) - expect_equal(gfun.500$dgdT * 1e6, dgdT.500.ref, tolerance=1e-2) - expect_equal(gfun.1000$dgdT * 1e6, dgdT.1000.ref, tolerance=1e-5) - expect_equal(gfun.4000$dgdT * 1e6, dgdT.4000.ref, tolerance=1e-3) - - # values from table 7 of Shock et al., 1992 - d2gdT2.Psat.ref <- c(0, 0, 0, -0.1, -3.7, -20.7, -74.3, -527.8, -15210.4) - d2gdT2.500.ref <- c(0, 0, 0, 0, -1.0, -9.3, -36.8, -109.4, -26.3, -2043.5, -4063.1) - d2gdT2.1000.ref <- c(0, 0, 0, 0, -0.2, -4.0, -20.5, -58.4, -125.4, -241.8, -433.9, -628.0, -550.0, -265.2) - d2gdT2.4000.ref <- c(0, 0, 0, 0, 0, 0, 0, -0.6, -2.9, -5.9, -7.9, -8.2, -6.8, -3.9, 4.0, 9.5, 9.6, 5.9) - expect_equal(gfun.Psat$d2gdT2 * 1e8, d2gdT2.Psat.ref, tolerance=1e-5) - expect_equal(gfun.500$d2gdT2 * 1e8, d2gdT2.500.ref, tolerance=1e-4) - expect_equal(gfun.1000$d2gdT2 * 1e8, d2gdT2.1000.ref, tolerance=1e-4) - expect_equal(gfun.4000$d2gdT2 * 1e8, d2gdT2.4000.ref, tolerance=1e-2) - - # values from table 8 of Shock et al., 1992 - dgdP.Psat.ref <- c(0, 0, 0, 0, 0.03, 0.36, 1.92, 12.27, 227.21) - dgdP.500.ref <- c(0, 0, 0, 0, 0.01, 0.53, 1.75, 5.69, 107.61, 704.88, 1110.20) - dgdP.1000.ref <- c(0, 0, 0, 0, 0, 0.03, 0.31, 1.50, 5.25, 15.53, 4.78, 101.39, 202.25, 313.90) - dgdP.4000.ref <- c(0, 0, 0, 0, 0, 0, 0, 0, 0.05, 0.18, 0.46, 0.91, 1.54, 2.34, 4.26, 6.12, 7.29, 7.47) - expect_equal(gfun.Psat$dgdP * 1e6, dgdP.Psat.ref, tolerance=1e-0) - expect_equal(gfun.500$dgdP * 1e6, dgdP.500.ref, tolerance=1e-0) - expect_equal(gfun.1000$dgdP * 1e6, dgdP.1000.ref, tolerance=1e-1) - expect_equal(gfun.4000$dgdP * 1e6, dgdP.4000.ref, tolerance=1e-3) -}) - -# reference - -# Shock, E. L., Oelkers, E. H., Johnson, J. W., Sverjensky, D. A. and Helgeson, H. C. (1992) -# Calculation of the thermodynamic properties of aqueous species at high pressures and temperatures: -# Effective electrostatic radii, dissociation constants and standard partial molal properties to 1000 degrees C and 5 kbar. -# J. Chem. Soc. Faraday Trans. 88, 803--826. http://dx.doi.org/10.1039/FT9928800803 Deleted: pkg/CHNOSZ/inst/tests/test-equilibrate.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-equilibrate.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-equilibrate.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,88 +0,0 @@ -context("equilibrate") - -# set up some simple systems -# one acid -basis("CHNOS+") -species("acetic acid") -aone <- suppressMessages(affinity()) -# acids -species(c("formic acid", "formate", "acetate")) -aacid <- suppressMessages(affinity()) -# acids plus a sulfur species -species("H2S") -aacidS <- suppressMessages(affinity()) -# proteins -species(delete=TRUE) -species(c("LYSC_CHICK", "MYG_PHYCA", "RNAS1_BOVIN", "CYC_BOVIN")) -aprot <- suppressMessages(affinity()) - -test_that("equilibrate() gives expected messages and errors for balance calculation", { - # the following error is triggered by equil.react, not equil.boltzmann - expect_error(equilibrate(aone), "at least two species needed") - expect_message(equilibrate(aacid), "coefficients are moles of CO2") - expect_message(equilibrate(aacid), "balancing coefficients are 2 1 1 2 ") - expect_message(equilibrate(aacid), "logarithm of total moles of CO2 is -2.221848") - expect_message(equilibrate(aacid, loga.balance=-3), "logarithm of total moles of CO2 \\(from loga.balance\\) is -3") - expect_error(equilibrate(aacid, balance="length"), "some species are not proteins") - expect_message(equilibrate(aacidS), "coefficients are unity") - expect_message(equilibrate(aacidS), "balancing coefficients are 1 1 1 1 1") - expect_message(equilibrate(aacidS), "logarithm of total moles of species is -2.301029") - expect_error(equilibrate(aacidS, balance="CO2"), "some species have no CO2 in the formation reaction") - expect_message(equilibrate(aprot), "coefficients are protein length") - expect_message(equilibrate(aprot), "balancing coefficients are 129 153 124 104") - expect_message(equilibrate(aprot), "logarithm of total protein length is -0.292429") - expect_message(equilibrate(aprot, normalize=TRUE), "using 'normalize' for molar formulas") -}) - -test_that("equilibrate() gives expected messages and errors for species selection", { - # an error if we select no species - expect_error(equilibrate(aacid, ispecies=numeric()), "the length of ispecies is zero") - # an error if all affinities are NA - aNA <- aacid - aNA$values[1:2] <- NA - expect_error(equilibrate(aNA, ispecies=1:2), "all species have NA affinities") - # a message if we select only certain of the species - expect_message(equilibrate(aacid, ispecies=1:2), "using 2 of 4 species") -}) - -test_that("equilibrate() keeps the same total loga.balance for normalize=TRUE or FALSE", { - # use the proteins - e.norm <- equilibrate(aprot, normalize=TRUE) - e <- equilibrate(aprot) - # the total activity of the balance in the two cases - sumact.balance.norm <- sum(10^unlist(e.norm$loga.equil)*e.norm$m.balance) - sumact.balance <- sum(10^unlist(e$loga.equil)*e$n.balance) - expect_equal(sumact.balance.norm, sumact.balance) -}) - -test_that("equilibrate() reproduces an example from the literature", { - # the reference values are the equilibrium logarithms of activities - # of sulfur species at logfO2=-30 from Seewald, 2001 - # we name them here because S5O6-2 isn't on the plot at logfO2=-30, - # and to get them in order - species.ref <- c("S3O6-2", "S2O6-2", "S2O4-2", "S3-2", "S2-2", "S2O3-2", "HSO3-", "SO2", "HSO4-", "H2S") - # these values were read from the plot using g3data (http://www.frantz.fi/software/g3data.php) - loga.ref <- c(-28.82, -24.70, -22.10, -14.19, -12.12, -11.86, -8.40, -7.40, -6.54, -1.95) - # set up the system - see ?diagram for an example showing the entire plot - basis("CHNOS+") - basis(c("pH", "O2"), c(5, -30)) - # we include here all the species shown by Seewald, 2001 - species(c("H2S", "S2-2", "S3-2", "S2O3-2", "S2O4-2", "S3O6-2", "S5O6-2", "S2O6-2", "HSO3-", "SO2", "HSO4-")) - a <- affinity(T=325, P=350) - # loga.balance=-2 signifies 10 mmolal total sulfur - e <- equilibrate(a, loga.balance=-2) - # get the calculated activities of the reference species - loga.equil <- unlist(e$loga.equil[match(species.ref, e$species$name)]) - # the test... the tolerance may seem high, but consider that the reference values - # were read from a plot with 30 logfO2 units spanning 4 inches - expect_true(all(abs(loga.equil-loga.ref) < 0.36)) -}) - -#} - -# references - -# Seewald, J. S. (2001) -# Aqueous geochemistry of low molecular weight hydrocarbons at elevated temperatures and -# pressures: Constraints from mineral buffered laboratory experiments -# Geochim. Cosmochim. Acta 65, 1641--1664. http://dx.doi.org/10.1016/S0016-7037(01)00544-0 Deleted: pkg/CHNOSZ/inst/tests/test-findit.R =================================================================== --- pkg/CHNOSZ/inst/tests/test-findit.R 2015-07-10 12:00:15 UTC (rev 91) +++ pkg/CHNOSZ/inst/tests/test-findit.R 2015-10-08 12:20:21 UTC (rev 92) @@ -1,42 +0,0 @@ [TRUNCATED] To get the complete diff run: svnlook diff /svnroot/chnosz -r 92 From noreply at r-forge.r-project.org Fri Oct 9 14:03:10 2015 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 9 Oct 2015 14:03:10 +0200 (CEST) Subject: [CHNOSZ-commits] r93 - in pkg/CHNOSZ: . R inst tests tests/testthat Message-ID: <20151009120310.BD4DC187008@r-forge.r-project.org> Author: jedick Date: 2015-10-09 14:03:09 +0200 (Fri, 09 Oct 2015) New Revision: 93 Added: pkg/CHNOSZ/tests/testthat.R Removed: pkg/CHNOSZ/tests/test-all.R Modified: pkg/CHNOSZ/DESCRIPTION pkg/CHNOSZ/R/mosaic.R pkg/CHNOSZ/inst/NEWS pkg/CHNOSZ/tests/testthat/test-mosaic.R Log: fix calculation of total activity of basis species in mosaic(, blend=TRUE) Modified: pkg/CHNOSZ/DESCRIPTION =================================================================== --- pkg/CHNOSZ/DESCRIPTION 2015-10-08 12:20:21 UTC (rev 92) +++ pkg/CHNOSZ/DESCRIPTION 2015-10-09 12:03:09 UTC (rev 93) @@ -1,6 +1,6 @@ -Date: 2015-10-08 +Date: 2015-10-09 Package: CHNOSZ -Version: 1.0.5-5 +Version: 1.0.5-6 Title: Chemical Thermodynamics and Activity Diagrams Author: Jeffrey Dick Maintainer: Jeffrey Dick Modified: pkg/CHNOSZ/R/mosaic.R =================================================================== --- pkg/CHNOSZ/R/mosaic.R 2015-10-08 12:20:21 UTC (rev 92) +++ pkg/CHNOSZ/R/mosaic.R 2015-10-09 12:03:09 UTC (rev 93) @@ -59,13 +59,13 @@ # calculate affinities using relative abundances of basis species e <- equilibrate(A.bases) # what is the total activity of the basis species? - loga.tot <- sum(10^unlist(e$loga.equil)) + a.tot <- Reduce("+", lapply(e$loga.equil, function(x) 10^x)) for(j in seq_along(affs)) { for(i in seq_along(A.species$values)) { # start with zero affinity if(j==1) A.species$values[[i]][] <- 0 # add affinity scaled by __relative__ abundance of this basis species - A.species$values[[i]] <- A.species$values[[i]] + affs[[j]]$values[[i]] * 10^e$loga.equil[[j]]/loga.tot + A.species$values[[i]] <- A.species$values[[i]] + affs[[j]]$values[[i]] * 10^e$loga.equil[[j]]/a.tot } } } else { Modified: pkg/CHNOSZ/inst/NEWS =================================================================== --- pkg/CHNOSZ/inst/NEWS 2015-10-08 12:20:21 UTC (rev 92) +++ pkg/CHNOSZ/inst/NEWS 2015-10-09 12:03:09 UTC (rev 93) @@ -1,4 +1,4 @@ -CHANGES IN CHNOSZ 1.0.5-8 (2015-10-08) +CHANGES IN CHNOSZ 1.0.5-6 (2015-10-09) -------------------------------------- - Rewrite rho.IAPWS95() to be able to invert density from IAPWS-95 @@ -26,9 +26,10 @@ - Fix bugs in which.pmax() that prevented proper assignment of attributes in output, and functionality for lists of length 1. -- mosaic() now correctly multiplies affinities by _relative_ abundances - of basis species when blend=TRUE. Thanks to Grayson Boyer for the bug - report that led to this fix. +- mosaic() now multiplies affinities by _relative_ abundances of basis + species when blend=TRUE. Also, fix bug where using blend=TRUE gave + wrong results due to incorrect calculation of total activity of basis + species. Thanks to Grayson Boyer for the bug reports. - Add grDevices, graphics, stats, utils to Imports: in DESCRIPTION, and add specific importsFrom lines in NAMESPACE. Deleted: pkg/CHNOSZ/tests/test-all.R =================================================================== --- pkg/CHNOSZ/tests/test-all.R 2015-10-08 12:20:21 UTC (rev 92) +++ pkg/CHNOSZ/tests/test-all.R 2015-10-09 12:03:09 UTC (rev 93) @@ -1,8 +0,0 @@ -library(testthat) -library(CHNOSZ) - -# as fix for https://github.com/hadley/testthat/issues/129, https://github.com/hadley/testthat/issues/144 -# (since we use makeCluster() etc via palply) -Sys.setenv("R_TESTS" = "") - -test_check("CHNOSZ") Modified: pkg/CHNOSZ/tests/testthat/test-mosaic.R =================================================================== --- pkg/CHNOSZ/tests/testthat/test-mosaic.R 2015-10-08 12:20:21 UTC (rev 92) +++ pkg/CHNOSZ/tests/testthat/test-mosaic.R 2015-10-09 12:03:09 UTC (rev 93) @@ -14,4 +14,32 @@ expect_equal(a$values, m2$A.species$values) }) +test_that("blend=TRUE produces reasonable values", { + # a more rigorous test than above. this was failing because loga.tot (actually, a.tot) + # was computed incorrectly, by sum'ing an unlist'ed list (the affinities of basis species) + # to produce a single value; corrected by using Reduce for addition of vectors/arrays in the list. + # example adapted from ?mosaic + basis(c("FeO", "SO4-2", "H2O", "H+", "e-")) + basis("SO4-2", -6) + basis("Eh", -0.15) + species(c("hematite", "magnetite")) + # the basis species we'll swap through + bases <- c("SO4-2", "HSO4-", "HS-", "H2S") + # calculate affinities using the predominant basis species + pH <- c(0, 14, 29) + m1 <- mosaic(bases, pH=pH) + m2 <- mosaic(bases, pH=pH, blend=TRUE) + # these species have no S so the results should be the same + expect_equal(m1$A.species$values, m2$A.species$values) + species(c("pyrrhotite", "pyrite")) + # now with S-bearing species ... + m3 <- mosaic(bases, pH=pH) + m4 <- mosaic(bases, pH=pH, blend=TRUE) + # the results are different ... + expect_equal(sapply(m3$A.species$values, "[", 13), sapply(m4$A.species$values, "[", 13), tol=1e-1) + # but more similar at extreme pH values + expect_equal(sapply(m3$A.species$values, "[", 1), sapply(m4$A.species$values, "[", 1), tol=1e-6) + expect_equal(sapply(m3$A.species$values, "[", 29), sapply(m4$A.species$values, "[", 29), tol=1e-10) +}) + # TODO: test that basis specifications can be exchanged between bases and bases2 without altering output Copied: pkg/CHNOSZ/tests/testthat.R (from rev 92, pkg/CHNOSZ/tests/test-all.R) =================================================================== --- pkg/CHNOSZ/tests/testthat.R (rev 0) +++ pkg/CHNOSZ/tests/testthat.R 2015-10-09 12:03:09 UTC (rev 93) @@ -0,0 +1,8 @@ +library(testthat) +library(CHNOSZ) + +# as fix for https://github.com/hadley/testthat/issues/129, https://github.com/hadley/testthat/issues/144 +# (since we use makeCluster() etc via palply) +Sys.setenv("R_TESTS" = "") + +test_check("CHNOSZ") From noreply at r-forge.r-project.org Mon Oct 19 20:37:21 2015 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Mon, 19 Oct 2015 20:37:21 +0200 (CEST) Subject: [CHNOSZ-commits] r94 - in pkg/CHNOSZ: . R inst man Message-ID: <20151019183721.47F21187BD5@r-forge.r-project.org> Author: jedick Date: 2015-10-19 20:37:20 +0200 (Mon, 19 Oct 2015) New Revision: 94 Modified: pkg/CHNOSZ/DESCRIPTION pkg/CHNOSZ/R/swap.basis.R pkg/CHNOSZ/R/util.list.R pkg/CHNOSZ/inst/NEWS pkg/CHNOSZ/man/swap.basis.Rd Log: prepare version 1.0.6 for submission to CRAN Modified: pkg/CHNOSZ/DESCRIPTION =================================================================== --- pkg/CHNOSZ/DESCRIPTION 2015-10-09 12:03:09 UTC (rev 93) +++ pkg/CHNOSZ/DESCRIPTION 2015-10-19 18:37:20 UTC (rev 94) @@ -1,6 +1,6 @@ -Date: 2015-10-09 +Date: 2015-10-19 Package: CHNOSZ -Version: 1.0.5-6 +Version: 1.0.6 Title: Chemical Thermodynamics and Activity Diagrams Author: Jeffrey Dick Maintainer: Jeffrey Dick Modified: pkg/CHNOSZ/R/swap.basis.R =================================================================== --- pkg/CHNOSZ/R/swap.basis.R 2015-10-09 12:03:09 UTC (rev 93) +++ pkg/CHNOSZ/R/swap.basis.R 2015-10-19 18:37:20 UTC (rev 94) @@ -16,7 +16,7 @@ if(T==25) G <- get("thermo")$obigt$G[basis$ispecies] else G <- unlist(subcrt(basis$ispecies, T=T, property="G")$out) # chemical potentials of the basis species - species.mu <- G - convert(basis$logact, "G") + species.mu <- G - convert(basis$logact, "G", T=convert(T, "K")) # chemical potentials of the elements element.mu <- solve(basis.mat, species.mu) # give them useful names @@ -41,14 +41,14 @@ # with the chemical potentials of the elements basis.mu <- colSums((t(basis.mat)*emu)) - G # convert chemical potentials to logarithms of activity - basis.logact <- -convert(basis.mu, "logK") + basis.logact <- -convert(basis.mu, "logK", T=convert(T, "K")) # give them useful names names(basis.logact) <- rownames(basis.mat) return(basis.logact) } # swap in one basis species for another -swap.basis <- function(species, species2) { +swap.basis <- function(species, species2, T = 25) { # before we do anything, remember the old basis definition oldbasis <- get("thermo")$basis # and the species definition @@ -77,9 +77,9 @@ newbasis <- put.basis(ispecies) # if put.basis didn't stop with an error, we're good to go! # what were the original chemical potentials of the elements? - emu <- element.mu(oldbasis) + emu <- element.mu(oldbasis, T=T) # the corresponding logarithms of activities of the new basis species - bl <- basis.logact(emu, newbasis) + bl <- basis.logact(emu, newbasis, T=T) # update the basis with these logacts mb <- mod.basis(ispecies, logact=bl) # restore species if they were defined Modified: pkg/CHNOSZ/R/util.list.R =================================================================== --- pkg/CHNOSZ/R/util.list.R 2015-10-09 12:03:09 UTC (rev 93) +++ pkg/CHNOSZ/R/util.list.R 2015-10-19 18:37:20 UTC (rev 94) @@ -4,6 +4,7 @@ which.pmax <- function (elts, na.rm = FALSE, pmin=FALSE) { # adapted from R's pmax. elts is a list of numeric vectors keepattr <- attributes(elts[[1]]) + keepdim <- dim(elts[[1]]) if(!is.numeric(elts[[1]])[1]) { if(is.data.frame(elts[[1]])) elts[[1]] <- as.matrix(elts[[1]]) if(is.list(elts[[1]])) elts[[1]] <- elts[[1]][[1]] @@ -36,6 +37,10 @@ mmm <- work[, 1] } } + if(identical(keepattr$class, "data.frame")) { + dim(which.mmm) <- keepdim + which.mmm <- as.data.frame(which.mmm) + } mostattributes(which.mmm) <- keepattr which.mmm } Modified: pkg/CHNOSZ/inst/NEWS =================================================================== --- pkg/CHNOSZ/inst/NEWS 2015-10-09 12:03:09 UTC (rev 93) +++ pkg/CHNOSZ/inst/NEWS 2015-10-19 18:37:20 UTC (rev 94) @@ -1,4 +1,4 @@ -CHANGES IN CHNOSZ 1.0.5-6 (2015-10-09) +CHANGES IN CHNOSZ 1.0.6 (2015-10-19) -------------------------------------- - Rewrite rho.IAPWS95() to be able to invert density from IAPWS-95 @@ -37,8 +37,8 @@ - Fix incorrect entry for entropy of aqueous methionine and [Met] in OBIGT.csv. Thanks to Apar Prasad for spotting this. -- Some fixes to tests for compatibility with new version of testthat - (increase tolerance for one test in test-eos.R because of swapping +- Some fixes for compatibility with new version of testthat (increase + tolerance for one test in test-eos.R because of corrected alignment actual/expected values in equals(); move inst/tests to inst/test/testthat; use test_check instead of test_package in test-all.R (for R CMD check)). Modified: pkg/CHNOSZ/man/swap.basis.Rd =================================================================== --- pkg/CHNOSZ/man/swap.basis.Rd 2015-10-09 12:03:09 UTC (rev 93) +++ pkg/CHNOSZ/man/swap.basis.Rd 2015-10-19 18:37:20 UTC (rev 94) @@ -13,7 +13,7 @@ basis.matrix(basis = get("thermo")$basis) element.mu(basis = get("thermo")$basis, T = 25) basis.logact(emu, basis = get("thermo")$basis, T = 25) - swap.basis(species, species2) + swap.basis(species, species2, T = 25) } \arguments{